Skip to content

Instantly share code, notes, and snippets.

@qzm
Last active July 19, 2019 10:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save qzm/2939534d228d2115a567ca5c660f1403 to your computer and use it in GitHub Desktop.
Save qzm/2939534d228d2115a567ca5c660f1403 to your computer and use it in GitHub Desktop.
vnpy backtesting for VSCode
#%%
%load_ext autoreload
%autoreload 2
#%%
import matplotlib.pyplot as plt
plt.style.use("dark_background")
#%%
from vnpy.app.cta_strategy.backtesting import BacktestingEngine, OptimizationSetting
#%%Own Strategy
from super_multi_portfolio_strategy import SuperMultiPortfolioStrategy
from datetime import datetime
#%%
engine = BacktestingEngine()
engine.set_parameters(
vt_symbol="RB88.SHFE",
interval="1m",
start=datetime(2019, 1, 1),
end=datetime(2019, 7, 1),
rate=3 / 10000,
slippage=1,
size=10,
pricetick=1,
capital=1_000_000,
)
#%%
engine.add_strategy(SuperMultiPortfolioStrategy, {})
# #%%
# engine.load_data()
# engine.run_backtesting()
# df = engine.calculate_result()
# engine.calculate_statistics()
# engine.show_chart()
setting = OptimizationSetting()
setting.set_target("sharpe_ratio")
setting.add_parameter("rsi_window", 5, 50, 2) # 14
setting.add_parameter("rsi_level", 5, 50, 2) # 20
setting.add_parameter("cci_window", 5, 50, 2) # 30
setting.add_parameter("cci_level", 5, 50, 2) # 10
engine.run_ga_optimization(setting)
#%%
%load_ext autoreload
%autoreload 2
#%%
from datetime import datetime
from vnpy.app.cta_strategy.backtesting import BacktestingEngine, OptimizationSetting
from vnpy.app.cta_strategy.strategies.atr_rsi_strategy import AtrRsiStrategy
from vnpy.app.cta_strategy.strategies.king_keltner_strategy import KingKeltnerStrategy
from vnpy.app.cta_strategy.strategies.dual_thrust_strategy import DualThrustStrategy
from vnpy.app.cta_strategy.strategies.multi_timeframe_strategy import (
MultiTimeframeStrategy,
)
#%%
def run_backtesting(
strategy_class,
setting,
vt_symbol,
interval,
start,
end,
rate,
slippage,
size,
pricetick,
capital,
):
engine = BacktestingEngine()
engine.set_parameters(
vt_symbol=vt_symbol,
interval=interval,
start=start,
end=end,
rate=rate,
slippage=slippage,
size=size,
pricetick=pricetick,
capital=capital,
)
engine.add_strategy(strategy_class, setting)
engine.load_data()
engine.run_backtesting()
df = engine.calculate_result()
return df
def show_portafolio(df):
engine = BacktestingEngine()
engine.set_parameters(
vt_symbol="IF88.CFFEX",
interval="1m",
start=datetime(2017, 1, 1),
end=datetime(2019, 7, 1),
rate=3 / 100000,
slippage=0.2,
size=300,
pricetick=0.2,
capital=4_000_000,
)
engine.calculate_statistics(df)
engine.show_chart(df)
#%%
df1 = run_backtesting(
strategy_class=AtrRsiStrategy,
setting={},
vt_symbol="IF88.CFFEX",
interval="1m",
start=datetime(2017, 1, 1),
end=datetime(2019, 7, 1),
rate=3 / 100000,
slippage=0.2,
size=300,
pricetick=0.2,
capital=1_000_000,
)
#%%
df2 = run_backtesting(
strategy_class=KingKeltnerStrategy,
setting={},
vt_symbol="IF88.CFFEX",
interval="1m",
start=datetime(2017, 1, 1),
end=datetime(2019, 7, 1),
rate=3 / 100000,
slippage=0.2,
size=300,
pricetick=0.2,
capital=1_000_000,
)
# #%%
df3 = run_backtesting(
strategy_class=MultiTimeframeStrategy,
setting={},
vt_symbol="IF88.CFFEX",
interval="1m",
start=datetime(2017, 1, 1),
end=datetime(2019, 7, 1),
rate=3 / 100000,
slippage=0.2,
size=300,
pricetick=0.2,
capital=1_000_000,
)
#%%
df4 = run_backtesting(
strategy_class=DualThrustStrategy,
setting={},
vt_symbol="IF88.CFFEX",
interval="1m",
start=datetime(2017, 1, 1),
end=datetime(2019, 7, 1),
rate=3 / 100000,
slippage=0.2,
size=300,
pricetick=0.2,
capital=1_000_000,
)
#%%
dfp = df1 + df2 + df3 + df4
dfp = dfp.dropna()
show_portafolio(dfp)
#%%
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment