This tutorial is for users new to QuantEval, focusing on how to install, run, extend, and verify the project.
git clone https://github.com/KarhouTam/quanteval.git
cd quanteval
python -m pip install -e ".[dev]"from quanteval import DataLoader
loader = DataLoader(cache_dir='./data_cache', use_cache=True)
data = loader.load_stock('600519', '20200101', '20231231')from quanteval import Backtester
from quanteval.strategies import DualMAStrategy
strategy = DualMAStrategy(fast_window=10, slow_window=60)
results = Backtester(strategy=strategy, data=data, transaction_costs=True).run()
print(results.summary())from quanteval import Backtester
from quanteval.strategies import BollingerMeanReversionStrategy, DualMAStrategy
comparison = Backtester(
strategy={
'DualMA(5,20)': DualMAStrategy(5, 20),
'BollingerMR': BollingerMeanReversionStrategy(window=20, num_std=2.0),
},
data=data,
transaction_costs=False,
).run()
print(comparison.metrics_df)from quanteval.optimization import GridSearch
from quanteval.strategies import DualMAStrategy
search = GridSearch(
DualMAStrategy,
{
'fast_window': [5, 10],
'slow_window': [20, 30],
'ma_type': ['sma'],
},
verbose=False,
)
result = search.fit(data)
print(result.best_params)from quanteval.optimization import WalkForwardAnalysis
from quanteval.strategies import DualMAStrategy
wfa = WalkForwardAnalysis(
DualMAStrategy,
{
'fast_window': [5, 10],
'slow_window': [20, 30],
'ma_type': ['sma'],
},
train_period=120,
test_period=40,
verbose=False,
)
wfa_result = wfa.run(data)
print(wfa_result.summary())README.md: Quickly understand the project positioning.examples/01_quickstart.ipynb: First successful backtest execution.examples/02_parameter_optimization.ipynb: Learn parameter search and out-of-sample testing.examples/03_strategy_comparison.ipynb: Learn horizontal strategy comparison.examples/04_hk_market_support.ipynb: Using HK market data and transaction rules.
- When customizing strategies, only generate signals for the current day; do not manually
shift(1). - If the input data lacks a
Retcolumn,Backtesterwill automatically calculate it usingClose.pct_change(). - If publishing as an open-source project, prioritize moving general logic into
src/quantevalrather than leaving it only in Notebooks.
ruff check .
pytest
python -m build
twine check dist/*