class JasonTrendStrategy(CtaTemplate):
""" """
author = "Smart Trader"
#定义参数
maTrend_fast_window = 5
maTrend_slow_window = 20
fast_window = 10
slow_window = 20
def __init__(
self,
cta_engine: Any,
strategy_name: str,
vt_symbol: str,
setting: dict,
):
super().__init__(cta_engine,strategy_name,vt_symbol,setting)
#定义2个周期的bg函数
self.bg15min = BarGenerator(self.on_bar,
window=15,
on_window_bar=self.on_15min_bar,
interval=Interval.MINUTE)
self.bg5min = BarGenerator(self.on_bar,
window=5,
on_window_bar=self.on_5min_bar,
interval=Interval.MINUTE)
self.bg = BarGenerator(self.on_bar)
#定义2个周期的am
self.am15min = ArrayManager()
self.am5min = ArrayManager()
self.am = ArrayManager()
def on_init(self):
"""策略初始化"""
#注册
self.write_log('策略初始化')
self.load_bar(10)
def on_start(self):
"""启动"""
self.write_log('策略启动')
def on_stop(self):
"""停止"""
self.write_log('策略停止')
def on_tick(self,tick:TickData):
"""Tick更新"""
self.bg15min.update_tick(tick)
self.bg5min.update_tick(tick)#bg会自动判断当前分钟是否已经走完,合成1分钟线
self.bg.update_tick(tick)
#定义2个周期的 on_bar 函数
def on_bar(self,bar:BarData):
"""k线更新,切记先更新长周期,再更新短周期"""
self.bg15min.update_bar(bar)#将1小时K线合成1小时K线
self.bg5min.update_bar(bar)#将1分钟K线合成15分钟K线
am = self.am
am.update_bar(bar)
if not am.inited:
return
trend_lt = am.sma(20, array= True)
last_trend = trend_lt[-1]
pre_trend = trend_lt[-2]
str_t = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime())
print('1m',str_t,last_trend)
#定义2个周期的on_hour或者min_bar函数
def on_15min_bar(self,bar:BarData):#执行2H的K线,只做判断,不做买卖
am = self.am15min
am.update_bar(bar)
if not am.inited:
return
trend_lt = am.sma(20, array= True)
last_15_trend = trend_lt[-1]
pre_15_trend = trend_lt[-2]
str_t = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime())
print('**15m',str_t,last_15_trend)
def on_5min_bar(self,bar:BarData):#执行15分钟的K线 做出判断并且发出买卖信号
self.cancel_all
am = self.am5min
am.update_bar(bar)
if not am.inited:
return
trend_lt = am.sma(20, array= True)
last_5_trend = trend_lt[-1]
pre_5_trend = trend_lt[-2]
str_t = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime())
print('5m**',str_t,last_5_trend)
打印出来的日志是:
15m 2021-03-10 20:00:26 1821.5195000000003
5m 2021-03-10 20:00:26 1819.6295000000005
1m 2021-03-10 20:00:26 1817.7245000000007
1m 2021-03-10 20:01:27 1817.9080000000006
1m 2021-03-10 20:01:27 1817.9950000000003
1m 2021-03-10 20:01:27 1818.0655000000002
1m 2021-03-10 20:02:27 1818.4440000000002
1m 2021-03-10 20:02:27 1819.0145
1m 2021-03-10 20:02:27 1819.5835
1m 2021-03-10 20:03:26 1820.1965
1m 2021-03-10 20:03:26 1820.7814999999996
1m 2021-03-10 20:03:26 1821.2854999999995
1m 2021-03-10 20:04:26 1821.6954999999994
1m 2021-03-10 20:04:26 1822.0555000000004
1m 2021-03-10 20:04:26 1822.5295000000006
5m 2021-03-10 20:05:26 1819.760500000001
1m 2021-03-10 20:05:26 1822.9360000000001
5m 2021-03-10 20:05:26 1819.895000000001
1m 2021-03-10 20:05:26 1823.3905
5m** 2021-03-10 20:05:26 1819.671000000001
1m 2021-03-10 20:05:26 1823.953
每根一分钟线,都会打印三次,且值不一样
是怎么触发的?