示例#1
0
    def start(self, full_codes, shareDict, CTP):
        self.shareDict = shareDict
        self.Record = future_orderForm()
        if not self.isWorking:
            self.Record.tablename = self.orderFormTest

        self.Rice = interface_Rice()
        # 基础配置信息类
        self.baseInfo = BaseInfo(full_codes, self.Rice)
        # ctp 接口类
        self.CTP = CTP if CTP is not None else interface_pyctp(use=self.isCTPUse,userkey=self.ctpuser)
        self.CTP.baseInfo = self.baseInfo
        # 进程控制类
        self.procMap = ProcessMap()

        # 设置交易对的收盘时间
        self.Rice.setTimeArea(self.baseInfo.nightEnd)
        # 按k线类型分拆组,进行K线数据调用
        self.groupByKline(full_codes)

        # 初始化节点
        try:
            self.iniNode(full_codes)
        except Exception as e:
            print('iniNode error', e)

        #return
        # 子进程启动
        full_mCodes = self.baseInfo.mainCodes #主力合约
        logger.info(("model_future_detect start: %s " % ",".join(full_mCodes), self.Rice.TimeArea))
        self.Rice.startTick(full_mCodes, callback=self.onTick)
示例#2
0
    def getMaps(self):
        orderMap, codes, mCodes = {}, [], []
        b = BaseInfo([])
        obj = interface_pyctp(baseInfo=b, userkey='zhao')
        res = obj.qryPositionDetail()
        methodName = 'mZhao'
        codes55 = ['J1905', 'Y1905', 'P1905', 'NI1905', 'HC1905']
        for r in res:
            if r['Volume'] > 0:
                s = r['InstrumentID'].decode('gbk')
                if s not in orderMap:
                    m = b.parseMCode(s)
                    c = b.parseCode(m)
                    order = {
                        "symbol":
                        s,
                        "code":
                        m,
                        "mode":
                        1 if r['Direction'].decode('gbk') == '0' else -1,
                        "isopen":
                        1,
                        "hands":
                        r['Volume'],
                        "price":
                        r['OpenPrice'],
                        "method":
                        methodName,
                        "createdate":
                        public.parseTime(r['OpenDate'].decode('utf-8'),
                                         format='%Y%m%d',
                                         style='%Y-%m-%d %H:%M:%S')
                    }
                    orderMap[s] = order
                else:
                    orderMap[s]["hands"] += r['Volume']

        orders = []
        for key in orderMap.keys():
            doc = orderMap[key]
            if doc['code'] in codes55:
                v = doc['hands']
                v0 = int(v / 2)
                doc['hands'] = v0
                orders.append(doc)

                # method55
                v1 = v - v0
                doc1 = copy.deepcopy(doc)
                doc1['hands'] = v1
                doc1['method'] = 'mZhao55'
                orders.append(doc1)
            else:
                orders.append(doc)
        return orders
示例#3
0
    def start(self, full_codes, Rice=None, CTP=None):
        # print(full_codes)
        self.Record = future_orderForm()
        self.PStatus = future_status()

        if not self.isWorking: self.Record.tablename = self.orderFormTest

        if self.isTickSave:
            self.Tick = mon_tick()

        self.Rice = interface_Rice() if Rice is None else Rice

        # 基础配置信息类
        self.baseInfo = BaseInfo(full_codes, self.Rice)

        # ctp 接口类
        self.CTP = interface_pyctp(
            use=self.isCTPUse, userkey=self.ctpuser) if CTP is None else CTP
        self.CTP.baseInfo = self.baseInfo

        # 进程控制类
        self.procMap = ProcessMap()

        # 趋势预测
        self.trendMap = self.Record.trendMap(self.relativeMethods)

        # 指数期货
        self.indexList = [c[0] for c in self.indexCodeList]

        # 设置交易对的收盘时间
        self.Rice.setTimeArea(self.baseInfo.nightEnd)

        if len(self.indexCodeList) > 0:
            self.Rice.setIndexList(self.indexCodeList)

        # 按k线类型分拆组,进行K线数据调用
        self.groupByKline(full_codes)

        # 初始化节点
        self.iniNode(full_codes)

        # 子进程启动
        full_mCodes = self.baseInfo.mainCodes  # 主力合约

        logger.info(("model_future_detect start: %s " % ",".join(full_codes),
                     self.Rice.TimeArea))

        self.Rice.startTick(full_mCodes,
                            kmap=self.kTypeMap,
                            timesleep=self.timeInterval,
                            source=self.sourceType,
                            callback=self.onTick)
示例#4
0
    def filterCodes(self):
        # 查询每周统计表
        Top = train_total()
        Top.tablename = self.topTableName
        self.future_Map = Top.last_top(num=self.topNumbers, filter=self.topFilter, maxsames=self.sameLimit,
                                       minRate=self.minRate)
        num0 = len(self.future_Map)
        Record = future_orderForm()
        if not self.isWorking:  Record.tablename = self.orderFormTest

        # 添加top10
        codesList = [[c[0], c[1]] for c in self.future_Map]
        for map in Record.topCodes(method=self.methodName, toptable=self.topTableName,batchNum=self.batchNum):
            if not map[0:2] in codesList:
                self.future_Map.append(map)

        num1 = len(self.future_Map) - num0

        # 添加未平仓,并不再开仓
        codesList = [[c[0], c[1]] for c in self.future_Map]
        for map in Record.currentOpenCodes(method=self.methodName, batchNum=self.batchNum):
            if not map[0:2] in codesList and map[0]:
                self.future_Map.append(map[:-1])
                self.noneUsed.append(map[0:2])

        # 开盘时调仓处理
        if self.isCTPUse and self.isAutoAlterPosition:
            codes = self.combinCode()
            try:
                CTP = interface_pyctp(use=True, userkey=self.ctpuser)
                state, orders = CTP.alterPosi(codes)
                if len(orders)- state >0:
                    logger.info(('自动调仓完成', len(orders)- state))
                    Record.insertAll(orders)
            except:
                pass

        logger.info(('总监控币对:', len(self.future_Map), ' 新列表:', num0, ' top10:', num1, ' 未平仓:', len(self.noneUsed)))
        logger.info(([n for n in self.future_Map]))
        logger.info(('暂停币对:', len(self.noneUsed), [n for n in self.noneUsed]))
示例#5
0
    def compare(self, type=''):

        if type == 'm':
            user = '******'
            methods = ['mZhao', 'mZhao55']
        else:
            user = '******'
            methods = ['zhao', 'zhao55']

        b = BaseInfo([])
        Ctp = interface_pyctp(baseInfo=b, userkey=user)
        map = Ctp.posMap

        Rice = interface_Rice()
        Orders = future_orderForm()
        posMap = {}

        for pos in Orders.posByCode(methods):
            posMap[pos[0]] = pos[1]

            if pos[0] in map and pos[1] == map[pos[0]][0]:
                print('match ', pos, map[pos[0]])
            else:
                if pos[0] in map:
                    print('unmatch ', pos, map[pos[0]])
                else:
                    print('no purchase', pos)

            # 检查是否调仓
            pCode, name = pos[2], pos[0].split("_")[0]
            mCode = Rice.getMain([name])[0]
            if pCode != mCode:
                print(' --------- Need alter position:', pCode, mCode)

        for key in map:
            if len(key) < 6 and key not in posMap:
                print('no record', key, map[key])

        print(len(posMap.keys()))
示例#6
0
def test():
    obj = model_future_zhao()
    obj.isCTPUse = True

    obj.procMap = ProcessMap()
    obj.Rice = interface_Rice()
    Rec = future_orderForm()
    openMap = Rec.getOpenMap('zhao', codes=['RB'], batchNum=1)
    obj.CTP = interface_pyctp(use=obj.isCTPUse, userkey=obj.ctpuser)
    obj.CTP.baseInfo = BaseInfo(['RB'], obj.Rice)

    print('------------', openMap)
    key, obj.uid = 'RB', 'RB_40_2.0_1_0_zhao'
    obj.procMap.setIni(obj.uid, openMap[key], status=0)

    doc = {
        'createdate': '2019-06-25 09:40:27',
        'code': 'RB1910',
        'name': 'RB',
        'symbol': 'rb1910',
        'price': 3962.0,
        'vol': 30.0,
        'hands': 1.0,
        'ini_hands': 1.0,
        'ini_price': 3962.0,
        'mode': -2,
        'isopen': 0,
        'isstop': 1,
        'fee': 1.1885999699734384,
        'income': 0,
        'rel_price': 3962.0,
        'stop_price': 3650.0,
        'batchid': '359b8070-96ea-11e9-ab77-382c4a6d1b55',
        'status': 0,
        'method': 'zhao',
        'uid': 'RB_40_2.0_1_0_zhao',
        'istoday': 1
    }

    doc1 = {
        'createdate': '2019-06-25 10:02:27',
        'code': 'EG1909',
        'name': 'EG',
        'symbol': 'eg1909',
        'price': 4552.0,
        'vol': 10.0,
        'hands': 1,
        'ini_hands': 1,
        'ini_price': 4552.0,
        'mode': 0,
        'isopen': 0,
        'isstop': 0,
        'fee': 9.0,
        'income': 0,
        'rel_price': 4552.0,
        'stop_price': 0,
        'batchid': '',
        'status': 0,
        'method': 'zhao',
        'uid': 'EG_40_2.0_1_0_zhao'
    }

    obj.setIncome([doc], 0)
    obj.record([doc], -2)
示例#7
0
    def alterPosition(self, Record, openCodes):
        # 开盘时CTP调仓处理
        Rice = interface_Rice()
        if self.isCTPUse and self.isAutoAlterPosition:
            openDocs = Record.getOpenMap(self.methodName,
                                         codes=[],
                                         batchNum=self.batchNum)
            try:
                CTP = interface_pyctp(use=True, userkey=self.ctpuser)
                state, orders = CTP.alterPosi(openDocs)

                if len(orders) - state > 0:
                    logger.info(('自动调仓完成', len(orders) - state))
                    orders = self.setAlterIncome(orders, openCodes)
                    Record.insertAll(orders)

            except:
                logger.info(('alterPosition error:', self.methodName))

        elif self.isAutoAlterPosition:
            # 非CTP调仓
            if openCodes is not None:
                openDocs = Record.getOpenMap(self.methodName,
                                             codes=[],
                                             batchNum=self.batchNum)
                orders, d0, d1 = [], {}, {}

                for key in openDocs:
                    # 查询最新主力代码
                    doc, pCode = openDocs[key][0], openDocs[key][0]['code']
                    mCode = Rice.getMain([key])[0]

                    if mCode != pCode:
                        print('start:', pCode, mCode)

                        # 查询最新价格,调仓前和调仓后
                        s = Rice.snap([pCode, mCode])
                        if s is None: continue
                        price0 = s[pCode]['bids'][0] if doc['mode'] > 0 else s[
                            pCode]['asks'][0]
                        price1 = s[mCode]['bids'][0] if doc['mode'] < 0 else s[
                            mCode]['asks'][0]

                        d0 = copy.deepcopy(doc)
                        d0['mode'] = -doc['mode']
                        d0['isopen'] = 0
                        d0['price'] = d0['rel_price'] = price0
                        sign = np.sign(-d0["mode"])
                        d0["income"] = round(
                            sign * (price0 - doc["price"]) * d0["vol"] -
                            doc["fee"], 2)
                        del d0['id']

                        # 按原状态买入
                        d1 = copy.deepcopy(doc)
                        d1['code'] = mCode
                        d1['status'] = d0['status'] = 4

                        d0['method'] = d1['method'] = self.methodName
                        d1['rel_price'] = d1['price'] = price1
                        d0['createdate'] = d1[
                            'createdate'] = public.getDatetime()
                        d1['batchid'] = uuid.uuid1()
                        del d1['id']

                        orders.append(d0)
                        orders.append(d1)
                        logger.info(('自动调仓完成:', doc['code'], mCode, 4))

                if len(orders) > 0:
                    Record.insertAll(orders)
                    pass