def __init__(self, ctaEngine, setting): super(MutilEMaStrategy, self).__init__(ctaEngine, setting) self.bg = BarGenerator(self.onBar) self.am = ArrayManager() self.frequency = mtm.frequency self.pricePosi_top = 0 self.pricePosi_bot = 4 self.status = Status() self.tick = None self.locking = False self.lockActionToken = False self.unlockActionToken = False self.controlRisk = ControlRisk(security=mtm.jqdata_security, ctaEngine=self) self.strategyBase = MutilEMaStrategyBase(security=mtm.jqdata_security, status=self.status, frequency=mtm.frequency, ctaTemplate=self, enableTrade=mtm.enableTrade, enableBuy=mtm.enableBuy, enableShort=mtm.enableShort, controlRisk=self.controlRisk)
def start(startTime=None, jqSecurity=None, frequency=None, enableBuy=None, enableShort=None): security = jqSecurity #'FG9999.XZCE' 'RB9999.XSGE' 'JM9999.XDCE' status = Status() frequency = frequency strategyBase = MutilEMaStrategyBase(security=security, status=status, ctaTemplate=None, frequency=frequency, jqDataAccount='13268108673', jqDataPassword='******', enableTrade=False, enableBuy=enableBuy, enableShort=enableShort) times = util.getTimeSerial(startTime, count=1000 * 800, periodSec=12) for t in times: if strategyBase.startJudgeAndRefreshStatus(t): strategyBase.trade(None)
# 大商所 # # 代码 名称 代码 名称 # A9999.XDCE 豆一主力合约 JD9999.XDCE 鸡蛋主力合约 # B9999.XDCE 豆二主力合约 JM9999.XDCE 焦煤主力合约 # BB9999.XDCE 胶板主力合约 L9999.XDCE 聚乙烯主力合约 # C9999.XDCE 玉米主力合约 M9999.XDCE 豆粕主力合约 # CS9999.XDCE 淀粉主力合约 P9999.XDCE 棕榈油主力合约 # FB9999.XDCE 纤板主力合约 PP9999.XDCE 聚丙烯主力合约 # I9999.XDCE 铁矿主力合约 V9999.XDCE 聚氯乙烯主力合约 # J9999.XDCE 焦炭主力合约 Y9999.XDCE 豆油主力合约 status = Status() strategyBase = MutilEMaStrategyBase(security='RB9999.XSGE', status=status, ctaTemplate=None, frequency='5m', jqDataAccount='13268108673', jqDataPassword='******', enableTrade=False, enableBuy=True, enableShort=True, enableNotify=True, isJustListening=True) while True: currentTime = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())) if strategyBase.startJudgeAndRefreshStatus(currentTime): time.sleep(1) time.sleep(3)
# status=status, # ctaTemplate=None, # frequency=frequency, # jqDataAccount='13268108673', # jqDataPassword='******', # enableTrade=False, # enableBuy=enableBuy, # enableShort=enableShort # ) # times = util.getTimeSerial(startTime, count=1000*800, periodSec=12) # for t in times: # if strategyBase.startJudgeAndRefreshStatus(t): # strategyBase.trade(None) # jqSecurity='TA8888.XZCE' # dao.updateAllPosition(3, jqSecurity) # start(jqSecurity=jqSecurity, startTime='2018-10-10 14:00:00', frequency='5m', enableBuy=True, enableShort=True) status = Status() strategyBase = MutilEMaStrategyBase(security='JM9999.XDCE', status=status, ctaTemplate=None, frequency='10m', jqDataAccount='13268108673', jqDataPassword='******', enableTrade=False, enableBuy=True, enableShort=True) while True: if strategyBase.startJudgeAndRefreshStatus(): print('tick') time.sleep(5)
class MutilEMaStrategy(CtaTemplate): """双指数均线策略Demo""" className = 'MutilEMaStrategy' author = u'*****@*****.**' # 策略参数 fastWindow = 5 # 快速均线参数 slowWindow = 10 # 慢速均线参数 initDays = 30 # 初始化数据所用的天数 # 策略变量 fastMa0 = None # 当前最新的快速EMA fastMa1 = None # 上一根的快速EMA slowMa0 = None slowMa1 = None # 参数列表,保存了参数的名称 paramList = ['name','className','author','vtSymbol','fastWindow','slowWindow'] # 变量列表,保存了变量的名称 varList = ['inited','trading','pos','fastMa0','fastMa1','slowMa0','slowMa1'] # 同步列表,保存了需要保存到数据库的变量名称 syncList = ['pos'] # ---------------------------------------------------------------------- def __init__(self, ctaEngine, setting): super(MutilEMaStrategy, self).__init__(ctaEngine, setting) self.bg = BarGenerator(self.onBar) self.am = ArrayManager() self.frequency = mtm.frequency self.pricePosi_top = 0 self.pricePosi_bot = 4 self.status = Status() self.tick = None self.strategyBase = MutilEMaStrategyBase(security=mtm.jqdata_security, status=self.status, frequency=mtm.frequency, ctaTemplate=self, enableTrade=mtm.enableTrade, enableBuy=mtm.enableBuy, enableShort=mtm.enableShort ) # ---------------------------------------------------------------------- def onInit(self): """初始化策略(必须由用户继承实现)""" self.writeCtaLog(u'多重EMA策略初始化') self.putEvent() # ---------------------------------------------------------------------- def onStart(self): """启动策略(必须由用户继承实现)""" self.writeCtaLog(u'多重EMA策略启动') self.putEvent() # ---------------------------------------------------------------------- def onStop(self): """停止策略(必须由用户继承实现)""" self.writeCtaLog(u'多重EMA策略停止') self.putEvent() # ---------------------------------------------------------------------- def onTick(self, tick): """收到行情TICK推送(必须由用户继承实现)""" self.bg.updateTick(tick) self.tick = tick if self.strategyBase.startJudgeAndRefreshStatus(): self.strategyBase.trade(tick) self.putEvent() # ---------------------------------------------------------------------- def onBar(self, bar): """收到Bar推送(必须由用户继承实现)""" # 发出状态更新事件 self.putEvent() # ---------------------------------------------------------------------- def onOrder(self, order): """收到委托变化推送(必须由用户继承实现)""" # 对于无需做细粒度委托控制的策略,可以忽略onOrder pass # ---------------------------------------------------------------------- def onTrade(self, trade): """收到成交推送(必须由用户继承实现)""" # 对于无需做细粒度委托控制的策略,可以忽略onOrder pass # ---------------------------------------------------------------------- def onStopOrder(self, so): """停止单推送""" pass