各位大神好,研究vnpy有一段时间了自己尝试这写了一个策略想跑一跑试试,结果自己写的策略跑回测无成交记录查看良久后无果,希望大家帮忙看看。
强行把template.py中的self.trading改成True后有成交了,但是策略中的self.pos成交之后没有成交回报。版本是2.07.谢谢各位了
一下为策略源码,执行过程中无报错。
from vnpy.app.cta_strategy import (
CtaTemplate,
StopOrder,
TickData,
BarData,
TradeData,
OrderData,
BarGenerator,
ArrayManager,
)
class HoushuliStrategy(CtaTemplate):
author = "投机的男孩"
fast_window = 10
slow_window = 20
shanggui = 0.0
shangzhong = 0.0
zhonggui = 0.0
xiazhong = 0.0
xiagui = 0.0
shanggui_cj=[0,0]
shangzhong_cj=[0,0]
zhonggui_cj=[0,0]
xiazhong_cj=[0,0]
xiagui_cj=[0,0]
parameters = ["fast_window", "slow_window"]
variables = ["shanggui", "shangzhong", "zhonggui", "xiazhong","zhonggui","shanggui_cj","shangzhong_cj","zhonggui_cj","xiazhong_cj","xiagui_cj"]
#print(cta_engine, strategy_name, vt_symbol, setting,self.trading)
def __init__(self, cta_engine, strategy_name, vt_symbol, setting):
""""""
super(HoushuliStrategy, self).__init__(
cta_engine, strategy_name, vt_symbol, setting
)
#print(cta_engine, strategy_name, vt_symbol, setting,self.trading)
self.bg = BarGenerator(self.on_bar)
self.am = ArrayManager()
def on_init(self):
"""
Callback when strategy is inited.
"""
self.write_log("策略初始化")
self.load_bar(1)
def on_start(self):
"""
Callback when strategy is started.
"""
self.write_log("策略启动")
self.put_event()
def on_stop(self):
"""
Callback when strategy is stopped.
"""
self.write_log("策略停止")
self.put_event()
def on_tick(self, tick: TickData):
"""
Callback of new tick data update.
"""
self.bg.update_tick(tick)
def on_bar(self, bar: BarData):
"""
Callback of new bar data update.
"""
if self.pos==0:
self.zhonggui=bar.close_price
self.shangzhong=self.zhonggui+100
self.shanggui=self.shangzhong+100
self.xiazhong=self.zhonggui-100
self.xiagui=self.xiazhong-100
if bar.close_price>=self.zhonggui and bar.close_price<self.shangzhong and self.zhonggui_cj[0]==0:
chengjiao=self.buy(bar.close_price,1)
self.zhonggui_cj[0]=1
if self.zhonggui_cj[1]==1:
self.sell(bar.close_price,1)
self.zhonggui_cj[1]=0
#print(bar.close_price,self.zhonggui,self.shangzhong,self.zhonggui_cj,self.pos)
if bar.close_price<self.zhonggui and bar.close_price>self.xiazhong and self.zhonggui_cj[1]==0:
self.short(bar.close_price,1)
self.zhonggui_cj[1]=1
if self.zhonggui_cj[0]==1:
self.cover(bar.close_price,1)
self.zhonggui_cj[0]==0
if bar.close_price>=self.shangzhong and bar.close_price<self.shanggui and self.sahngzhong_cj[0]==0:
self.buy(bar.close_price,1)
self.shangzhong_cj[0]=1
if self.shangzhong_cj[1]==1:
self.sell(bar.close_price,1)
self.shangzhong_cj[1]=0
if bar.close_price<self.shangzhong and bar.close_price>self.zhonggui and self.shangzhong_cj[1]==0:
self.short(bar.close_price,1)
self.shangzhong_cj[1]=1
if self.shangzhong_cj[0]==1:
self.cover(bar.close_price,1)
self.zhonggui_cj[0]==0
if bar.close_price>=self.shanggui and self.shanggui_cj[0]==0:
self.buy(bar.close_price,1)
self.shanggui_cj[0]=1
if self.shanggui_cj[1]==1:
self.sell(bar.close_price,1)
self.shanggui_cj[1]=0
if bar.close_price<=self.shanggui and bar.close_price>self.shangzhong and self.sahnggui_cj[1]==0:
self.short(bar.close_price,1)
self.shanggui_cj[1]=1
if self.shanggui_cj[0]==1:
self.cover(bar.close_price,1)
self.shanggui_cj[0]==0
if bar.close_price>=self.xiazhong and bar.close_price<self.zhonggui and self.xiazhong_cj[0]==0:
self.buy(bar.close_price,1)
self.xiazhong_cj[0]=1
if self.zhonggui_cj[1]==1:
self.sell(bar.close_price,1)
self.xiazhong_cj[1]=0
if bar.close_price<=self.xiazhong and bar.close_price>self.xiagui and self.xiazhong_cj[1]==0:
self.short(bar.close_price,1)
self.xiazhong_cj[1]=1
if self.xiazhong_cj[0]==1:
self.cover(bar.close_price,1)
self.xiazhong_cj[0]==0
if bar.close_price>=self.xiagui and bar.close_price<self.xiazhong and self.xiazhong_cj[0]==0:
self.buy(bar.close_price,1)
self.xiagui_cj[0]=1
if self.xiagui_cj[1]==1:
self.sell(bar.close_price,1)
self.xiagui_cj[1]=0
if bar.close_price<self.xiagui and self.xiagui_cj[1]==0:
self.short(bar.close_price,1)
self.xiagui_cj[1]=1
if self.xiagui_cj[0]==1:
self.cover(bar.close_price,1)
self.xiagui_cj[0]==0
if self.pos==3 and bar.close_price>self.zhonggui+500:
self.cover(bar.close_price,self.pos)
self.shanggui_cj=[0,0]
self.shangzhong_cj=[0,0]
self.zhonggui_cj=[0,0]
self.xiazhong_cj=[0,0]
self.xiagui_cj=[0,0]
if self.pos==-3 and bar.close_price<self.zhonggui-500:
self.sell(bar.close_price,self.pos)
self.shanggui_cj=[0,0]
self.shangzhong_cj=[0,0]
self.zhonggui_cj=[0,0]
self.xiazhong_cj=[0,0]
self.xiagui_cj=[0,0]
self.put_event()
def on_order(self, order: OrderData):
"""
Callback of new order data update.
"""
pass
def on_trade(self, trade: TradeData):
"""
Callback of new trade data update.
"""
self.put_event()
def on_stop_order(self, stop_order: StopOrder):
"""
Callback of stop order update.
"""
pass