Last active
July 19, 2019 10:00
-
-
Save qzm/2939534d228d2115a567ca5c660f1403 to your computer and use it in GitHub Desktop.
vnpy backtesting for VSCode
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#%% | |
%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) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#%% | |
%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