예제 #1
0
    def __init__(self, ctaEngine, setting):

        # 首先找到策略的父类(就是类CtaTemplate),然后把DoubleMaStrategy的对象转换为类CtaTemplate的对象
        super(MultiFrameMaStrategy, self).__init__(ctaEngine, setting)

        # 生成仓位记录的字典
        symbol = self.symbolList[0]
        self.Longpos = symbol.replace('.','_')+"_LONG"
        self.Shortpos = symbol.replace('.','_')+"_SHORT"


        self.bg60 = BarGenerator(self.onBar, 60, self.on60MinBar)
        self.bg60Dict = {
            sym: self.bg60
            for sym in self.symbolList
        }


        self.bg15 = BarGenerator(self.onBar, 15, self.on15MinBar)
        self.bg15Dict = {
            sym: self.bg15
            for sym in self.symbolList
        }

        # 生成Bar数组
        self.am60Dict = {
            sym: ArrayManager(size=self.slowWindow+10)
            for sym in self.symbolList
        }

        self.am15Dict = {
            sym: ArrayManager(size=self.slowWindow+10)
            for sym in self.symbolList
        }
예제 #2
0
    def __init__(self, ctaEngine, setting):
        """Constructor"""
        super(BollChannelStrategy, self).__init__(ctaEngine, setting)

        self.bg = BarGenerator(self.onBar, 15, self.onXminBar)  # 创建K线合成器对象
        self.bg30 = BarGenerator(self.onBar, 30, self.on30minBar)
        self.am = ArrayManager()
예제 #3
0
    def __init__(self, ctaEngine, setting):
        """Constructor"""
        super(DoubleMaStrategy, self).__init__(ctaEngine, setting)

        self.bg = BarGenerator(self.onBar)
        self.am = ArrayManager()
        self.bg15 = BarGenerator(self.onBar, 15, self.on15MinBar)
        self.am15 = ArrayManager()
예제 #4
0
    def __init__(self, ctaEngine, setting):
        """Constructor"""
        super(SARKELStrategy, self).__init__(ctaEngine, setting)

        self.bg = BarGenerator(self.onBar, self.barMins,
                               self.onXminBar)  # 创建K线合成器对象
        self.am = ArrayManager()

        self.bgclose = BarGenerator(self.onBar, self.barMinsClose,
                                    self.onminBarClose)
        self.amClose = ArrayManager()
예제 #5
0
    def __init__(self, ctaEngine, setting):
        """Constructor"""
        super(MultiTimeframeStrategy, self).__init__(ctaEngine, setting)

        self.rsiLong = 50 + self.rsiSignal
        self.rsiShort = 50 - self.rsiSignal

        # 创建K线合成器对象
        self.bg5 = BarGenerator(self.onBar, 5, self.on5MinBar)
        self.am5 = ArrayManager()

        self.bg15 = BarGenerator(self.onBar, 15, self.on15MinBar)
        self.am15 = ArrayManager()
예제 #6
0
 def __init__(self, ctaEngine, setting):
     """Constructor"""
     super(M60M5MacdStrategy, self).__init__(ctaEngine, setting)
     
     self.rsiLong = 50 + self.rsiSignal
     self.rsiShort = 50 - self.rsiSignal
     
     # 创建K线合成器对象
     self.bg5 = BarGenerator(self.onBar, 5, self.on5MinBar)
     self.am5 = ArrayManager()
     
     
     self.bg60 = BarGenerator(self.onBar, 60, self.on60MinBar)
     self.am60 = ArrayManager()        
예제 #7
0
    def __init__(self, ctaEngine, setting):
        """Constructor"""
        super(DualThrustMultiContractStrategy,
              self).__init__(ctaEngine, setting)

        self.bg = BarGenerator(self.onBar)
        self.barList = []
        #self.syncList =
        if 'strParams' in setting:
            params = setting['strParams']
            if len(params) >= 3:
                for p in params:
                    if p[0] == 'unit':
                        self.unitno = p[1]
                    if p[0] == 'p1':
                        self.p1 = p[1]
                    if p[0] == 'p2':
                        self.p2 = p[1]
                print(self.unitno, self.p1, self.p2)

        self.pos = 0
        self.dayOpen = EMPTY_FLOAT
        self.dayHigh = EMPTY_FLOAT
        self.dayLow = EMPTY_FLOAT
        self.range = EMPTY_FLOAT
        self.longEntry = EMPTY_FLOAT
        self.shortEntry = EMPTY_FLOAT
        self.exitTime = time(hour=14, minute=55)
        self.longEntered = False
        self.shortEntered = False
예제 #8
0
    def __init__(self, ctaEngine, setting):
        """Constructor"""
        super(strategy_Volatility_RB, self).__init__(ctaEngine, setting)

        self.initDays = max(self.BK_BEFORE_DAY,
                            self.SK_BEFORE_DAY)  # 初始化数据所用的天数
        self.bg = BarGenerator(self.onBar)
        self.am = ArrayManager(self.initDays)

        self.strategyStartpos = 1890
        self.strategyEndpos = 2358
        self.all_bar = []
        self.SP_style = 0000
        self.BP_style = 0000
        self.BKPRICE = EMPTY_FLOAT_WH
        self.BKDATE = EMPTY_FLOAT_WH
        self.SKPRICE = EMPTY_FLOAT_WH
        self.SKDATE = EMPTY_FLOAT_WH
        self.tradeday = 0
        # 注意策略类中的可变对象属性(通常是list和dict等),在策略初始化时需要重新创建,
        # 否则会出现多个策略实例之间数据共享的情况,有可能导致潜在的策略逻辑错误风险,
        # 策略类中的这些可变对象属性可以选择不写,全都放在__init__下面,写主要是为了阅读
        # 策略时方便(更多是个编程习惯的选择)
        self.BKWeekProfit = [0, 0, 0, 0, 0, 0, 0]
        self.SKWeekProfit = [0, 0, 0, 0, 0, 0, 0]
        self.LongBestday = [0, 1, 2, 3]  #[0,1,2] 20190627
        self.ShortBestday = [1, 2, 3]
예제 #9
0
    def __init__(self, ctaEngine, setting):
        """Constructor"""
        super(TripleMAStrategy02, self).__init__(ctaEngine, setting)

        self.bm = BarGenerator(self.onBar, 5, self.onFiveBar)
        # 由于maWindow3的长度是120,所以ArrayManager的size要增加至150
        self.am = ArrayManager(size=150)
예제 #10
0
    def onInit(self):
        """初始化策略(必须由用户继承实现)"""
        self.activeSymbol = self.symbolList[0]  # 主动品种
        self.passiveSymbol = self.symbolList[1]  # 被动品种

        # 构造K线合成器对象
        self.bgDict = {
            sym: BarGenerator(self.onBar)
            for sym in self.symbolList
        }

        self.amDict = {sym: ArrayManager() for sym in self.symbolList}

        # 载入1分钟历史数据,并采用回放计算的方式初始化策略参数
        # 可选参数:["1min","5min","15min","30min","60min","4hour","1day","1week","1month"]
        pastbar1 = self.loadHistoryBar(self.activeSymbol,
                                       type_="1min",
                                       size=self.initbars)

        pastbar2 = self.loadHistoryBar(self.passiveSymbol,
                                       type_="1min",
                                       size=self.initbars)

        for bar1, bar2 in zip(pastbar1, pastbar2):
            self.amDict[self.activeSymbol].updateBar(bar1)  # 更新数据矩阵(optional)
            self.amDict[self.passiveSymbol].updateBar(bar2)

        # self.onBar(bar)  # 是否直接推送到onBar
        self.putEvent()  # putEvent 能刷新UI界面的信息
        '''
예제 #11
0
 def __init__(self, ctaEngine, setting):
     """Constructor"""
     super(Turtle01Strategy, self).__init__(ctaEngine, setting) 
     
     self.bg = BarGenerator(self.onBar,onDayBar = self.ondayBar)
     self.am = ArrayManager(max(self.longDays,self.shortDays,self.atrDays)+1)
     self.barList = []
예제 #12
0
    def __init__(self, ctaEngine, setting):
        """Constructor"""
        super(AtrRsiStrategy, self).__init__(ctaEngine, setting)

        # 创建K线合成器对象
        self.bg = BarGenerator(self.onBar)
        self.am = ArrayManager()
예제 #13
0
    def __init__(self, ctaEngine, setting):
        """Constructor"""
        super(DualThrust_IntraDayStrategy, self).__init__(ctaEngine, setting)

        self.bg = BarGenerator(self.onBar, onDayBar=self.ondayBar)
        self.am = ArrayManager()
        self.barList = []
예제 #14
0
    def __init__(self, ctaEngine, setting):
        """Constructor"""
        super(DoubleMaStrategyWh, self).__init__(ctaEngine, setting)

        self.initDays = self.SK_E_LONG + self.SK_E_DAYS_LONG

        self.bg = BarGenerator(self.onBar)
        self.am = ArrayManager(self.initDays)

        self.strategyStartpos = 1891
        self.strategyEndpos = 2357
        self.all_bar = []
        # 注意策略类中的可变对象属性(通常是list和dict等),在策略初始化时需要重新创建,
        # 否则会出现多个策略实例之间数据共享的情况,有可能导致潜在的策略逻辑错误风险,
        # 策略类中的这些可变对象属性可以选择不写,全都放在__init__下面,写主要是为了阅读
        # 策略时方便(更多是个编程习惯的选择)

        self.SK_A_ma0 = EMPTY_FLOAT
        self.SK_A_ma1 = EMPTY_FLOAT
        self.SK_A_close1 = EMPTY_FLOAT
        self.BARSLAST_CR_UP_SK_A_LONG = EMPTY_INT_WH
        self.BARSLAST_CR_DOWN_SK_A_LONG = EMPTY_INT_WH
        self.BARSLAST_CR_UP_SK_E_LONG = EMPTY_INT_WH
        self.BARSLAST_CR_DOWN_SK_E_LONG = EMPTY_INT_WH
        self.BKPRICE = EMPTY_FLOAT_WH
        self.SKPRICE = EMPTY_FLOAT_WH
        self.SK_E_ma0 = EMPTY_FLOAT
        self.SK_E_ma1 = EMPTY_FLOAT
        self.BP_style = 0000
예제 #15
0
 def __init__(self, ctaEngine, setting):
     """Constructor"""
     super(Turtle01Strategy1M, self).__init__(ctaEngine, setting)
     self.bg = BarGenerator(self.onBar,
                            xmin=3,
                            onXminBar=self.on3MBar,
                            onDayBar=self.ondayBar)
     self.am = ArrayManager(
         max(self.longDays, self.shortDays, self.atrDays) + 1)
     self.barList = []
     if len(Turtle01Strategy1M.cust_Setting) > 0:
         for cust in Turtle01Strategy1M.cust_Setting:
             if cust["StrategyGroup"] == "Turtle":
                 capAmtTurtle = float(cust["CaptialAmt"])
                 minBarTypeTurtle = cust["MinuteBarGen"]
                 break
             elif cust["StrategyGroup"] == "Default":
                 capAmtDefault = float(cust["CaptialAmt"])
                 minBarTypeDefault = cust["MinuteBarGen"]
         if capAmtTurtle > 0:
             self.capAmount = capAmtTurtle
             self.minBarType = minBarTypeTurtle
             self.unitCalcMethod = "custsetting"
         elif capAmtDefault > 0:
             self.capAmount = capAmtDefault
             self.minBarType = minBarTypeDefault
             self.unitCalcMethod = "custsetting"
         else:
             self.unitCalcMethod = "ctasetting"
예제 #16
0
    def __init__(self, ctaEngine, setting):
        """Constructor"""
        super(tempStrategy, self).__init__(ctaEngine, setting)
        self.bg = BarGenerator(self.onBar)
        self.am = ArrayManager()
        self.lastzhibiao = zhibiao(0, 0, 0)
        self.celve0 = zerocelve()
        # self.celve1 = ceshi()
        self.tickCelvezu = [self.celve0]
        self.barCelvezu = [self.celve0]

        self.tickadd = 1

        #断网恢复变量
        self.stopcount = None

        #交易时间和监控联网状态变量
        self.yepan = False
        self.yepanhour = None
        self.yepanminute = None
        self.lastbardatetime = None

        self.tradetime = None

        #控制开仓和平仓稳定变量
        self.tradecount = 0

        self.tradingcelve = [self.celve0]
예제 #17
0
    def __init__(self, ctaEngine, setting):
        """Constructor"""
        super(strategyDemo, self).__init__(ctaEngine, setting)

        self.contractMode = 'Double'  #主力合约与次主力合约模式
        # self.contractMode='Dominant'  #主力合约模式

        self.lastOrder = None
        self.lastTrade = None
        self.tickList = []  #初始一个tick列表
        self.tickListAdd = []  #初始第二个tick列表
        self.bType = 0  #买的状态,1表示买开委托状态,0表示非买开委托状态.目的是判断当前委托的状态,不要发生重复发单的事情
        self.sType = 0  #买的状态,1表示卖开委托状态,0表示非卖开委托状态
        self.orderType = ''
        self.contractname = ''
        self.contractnameAdd = ''
        self.initialFlag = True
        self.PositionCodeList = []
        self.signalGroupList = []
        self.rollingDays = 0
        #开单条件:远-近 价差大于10,开仓
        self.isBuySign = False
        self.isShortSign = False
        self.isBuyCoverSign = False
        self.isShortCoverSign = False

        #记录价格序列
        self.tickListPrice = []
        self.tickListAddPrice = []

        self.bg = BarGenerator(self.onBar, 5, self.onXminBar)
        self.am = ArrayManager()
예제 #18
0
    def __init__(self, ctaEngine, setting):
        """Constructor"""
        super(DoubleMaStrategy, self).__init__(ctaEngine, setting)

        # self.bg = BarGenerator(self.onBar)
        self.bg = BarGenerator(self.onBar, 5, self.onFiveBar)  # 创建K线合成器对象
        self.am = ArrayManager(10)
예제 #19
0
    def __init__(self, ctaEngine, setting):
        """Constructor"""
        super(ShortTermStrategy, self).__init__(ctaEngine, setting)

        # 注意策略类中的可变对象属性(通常是list和dict等),在策略初始化时需要重新创建,
        # 否则会出现多个策略实例之间数据共享的情况,有可能导致潜在的策略逻辑错误风险,
        # 策略类中的这些可变对象属性可以选择不写,全都放在__init__下面,写主要是为了阅读
        # 策略时方便(更多是个编程习惯的选择)
        self.short_term_list_first = []
        self.short_term_list_all = []
        self.short_term_last_three_first_index = []
        self.short_term_last_two_low_all_index = []
        self.short_term_last_two_high_all_index = []
        self.short_term_open_last_three_first_index = []
        self.short_term_open_last_two_all_index = []
        self.all_bar = []
        self.BK_style = EMPTY_INT_WH  # 2-->所有的低点 21利用低点 22利用高点
        self.SK_style = EMPTY_INT_WH  # 2-->所有的高点 21利用高点 22利用低点
        self.BKPRICE = EMPTY_FLOAT_WH
        self.SKPRICE = EMPTY_FLOAT_WH
        self.initDays = self.E_LONG_ALL if self.LongOrShort == True else self.SK_E_LONG_ALL
        self.MAXCLOSE_AFTER_OPEN = EMPTY_FLOAT_WH  #建仓后close的最大值
        self.strategyStartpos = 1343
        self.strategyEndpos = 1826
        self.SP_style = 0000
        self.tradeday = 0
        self.bg = BarGenerator(self.onBar)
        self.am = ArrayManager(self.initDays)
예제 #20
0
    def __init__(self, ctaEngine, setting):
        """Constructor"""
        super(TestStrategy, self).__init__(ctaEngine, setting)
        vtSymbolset=setting['vtSymbol']        # 读取交易品种
        vtSymbolList=vtSymbolset.split(',')    
        self.activeSymbol = vtSymbolList[0]    # 主动品种
        self.passiveSymbol = vtSymbolList[1]   # 被动品种
        self.symbolList = [self.activeSymbol, self.passiveSymbol]
        
        # 给持仓字典设置名称,为了方便调用
        # MONGO数据库不支持字段名含有 "." ,需特别处理)
        self.asLongpos = self.activeSymbol.replace(".","_")+"_LONG"
        self.asShortpos = self.activeSymbol.replace(".","_")+"_SHORT"
        self.psLongpos = self.passiveSymbol.replace(".","_")+"_LONG"
        self.psShortpos = self.passiveSymbol.replace(".","_")+"_SHORT"
        
        # 构造K线合成器对象
        self.bgDict = {
            sym: BarGenerator(self.onBar)
            for sym in self.symbolList
        }
        
        self.amDict = {
            sym: ArrayManager()
            for sym in self.symbolList
        }

        # 价差缓存列表
        self.spreadBuffer = []        
예제 #21
0
 def __init__(self):
     """Constructor"""
     super(AtrSignal, self).__init__()
     self.atrWindow = 30
     self.bg = BarGenerator(self.onBar, 15, self.on15Bar)
     self.am = ArrayManager()
     self.atrValue = 0.0
예제 #22
0
    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)
예제 #23
0
    def __init__(self, ctaEngine, setting):
        """Constructor"""
        super(DoubleMaStrategyWh, self).__init__(ctaEngine, setting)

        #self.initDays=

        self.bg = BarGenerator(self.onBar)
        self.am = ArrayManager(self.initDays)
예제 #24
0
    def __init__(self, ctaEngine, setting):
        """Constructor"""
        super(strategy_AttackDay_RB, self).__init__(ctaEngine, setting)

        #self.initDays=

        self.bg = BarGenerator(self.onBar)
        self.am = ArrayManager(self.initDays)
    def __init__(self, ctaEngine, setting):
        """Constructor"""
        super(BollingerBotStrategy01, self).__init__(ctaEngine, setting)

        self.bm = BarGenerator(self.onBar, 5, self.onFiveBar)
        self.am = ArrayManager(30)
        self.orderList = []
        self.entryPriceList = []
예제 #26
0
    def __init__(self, ctaEngine, setting):
        """Constructor"""
        super(BollChannelStrategy01, self).__init__(ctaEngine, setting)

        self.bm = BarGenerator(self.onBar, 15, self.on5minBar)  # 创建K线合成器对象
        self.am = ArrayManager()
        self.entryPriceList = []
        self.orderList = []
예제 #27
0
    def __init__(self, ctaEngine, setting):
        """Constructor"""
        super(WHMikeStrategy, self).__init__(ctaEngine, setting)

        self.bg = BarGenerator(self.onBar, 15, self.onXminBar)  # 创建K线合成器对象
        self.bg30 = BarGenerator(self.onBar, 30, self.on30minBar)
        self.am = ArrayManager()

        gg = os.path.exists(self.future_code + self.csvfile)
        gg = False
        if gg:
            with open(self.future_code + self.csvfile) as cf:
                lines = csv.reader(cf)
                for line in lines:
                    vv = (float(line[4]) + float(line[1])) / 2
                    self.coarray.insert(0, vv)
                    self.line143.insert(0, line[4])
                self.writeCtaLog(u'%s装载历史数据成功' % self.name)
                print(self.coarray)
        else:
            # os.remove(self.future_code + self.csvfile)
            #self.future_code = 'M0'
            url_str = (
                'http://stock2.finance.sina.com.cn/futures/api/json.php/IndexService.getInnerFuturesMiniKLine15m?symbol='
                + self.future_code)
            r = requests.get(url_str)
            # http://stock2.finance.sina.com.cn/futures/api/json.php/IndexService.getInnerFuturesMiniKLine15m?symbol=M0
            r_json = r.json()
            r_lists = list(r_json)
            f = open(self.future_code + self.csvfile, 'a+')
            wf = csv.writer(f)
            wf.writerows(r_lists)
            f.close()
            self.writeCtaLog(u'%s装载历史数据失败重新拉取数据' % self.name)

        #get history data
        with open(self.future_code + self.csvfile) as cf:
            lines = csv.reader(cf)
            for line in lines:
                vv = (float(line[4]) + float(line[1])) / 2
                #self.coarray.insert(0, vv)
                #self.line143.insert(0, line[4])
                #self.hisbar.insert(0, line)
            self.writeCtaLog(u'%s装载历史数据成功' % self.name)
            print(self.coarray.__len__())
예제 #28
0
    def __init__(self, ctaEngine, setting):
        """Constructor"""
        super(DualThrustStrategy, self).__init__(ctaEngine, setting)

        self.bg = BarGenerator(self.onBar)
        self.barList = []
        self.am = ArrayManager()

        self.baselinetime = None
예제 #29
0
    def __init__(self):
        """Constructor"""
        super(MaSignal, self).__init__()

        self.fastWindow = 5
        self.slowWindow = 20

        self.bg = BarGenerator(self.onBar, 5, self.onFiveBar)
        self.am = ArrayManager()
예제 #30
0
    def __init__(self):
        """Constructor"""
        super(BollSignal, self).__init__()

        self.bollWindow = 18
        self.bollDev = 5
        # self.bollUp, self.bollDown = 0.0,0.0
        self.bg = BarGenerator(self.onBar, 15, self.on15Bar)
        self.am = ArrayManager()