예제 #1
0
    def closeFuture(self, id='278231', price=5059, isstop=2, date=None):
        self.Record = future_orderForm()
        self.BI = BaseInfo([])

        doc = self.Record.getById(id)
        docnew = copy.deepcopy(doc)
        base = self.BI.doc(doc['name'])
        amount = price * doc['hands'] * base['contract_multiplier']
        r = base['ratio']
        fee = doc['hands'] * r if r >= 0.5 else amount * r
        docnew.update({
            "isopen":
            0,
            "isstop":
            isstop,
            "price":
            price,
            "mode":
            -doc["mode"],
            "vol":
            doc['hands'] * base['contract_multiplier'],
            "status":
            6,
            "fee":
            fee,
            "createdate":
            public.getDatetime() if date is None else date,
            "income":
            np.sign(doc["mode"]) * (price - doc['price']) * doc['hands'] *
            base['contract_multiplier'] - fee,
            "memo":
            ''
        })
        print(docnew)
        self.Record.insert(docnew)
예제 #2
0
    def getStatus(self, methods, code):
        if self.Record is None:
            self.Record = future_orderForm()

        posMode = self.Record.openMode(methods, code)
        lastStop = self.Record.lastStop(methods, code)
        trend = self.getTrend(code)

        status = -1
        if posMode[1] == 0:
            if lastStop[0] == 6 or (lastStop[0] == 0 and trend == 0):
                status = 0

            elif lastStop[0] in [3, 5] or (lastStop[0] == 0 and trend != 0):
                status = 1

            elif lastStop[0] == 2:
                status = 2

        elif posMode[1] == 1:
            if posMode[0].find('55') > -1:
                status = 5

            elif lastStop[0] == 3:
                status = 3.5

            else:
                status = 3

        elif posMode[1] == 2:
            status = 4

        return status
예제 #3
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)
예제 #4
0
    def filterCodes(self):
        # 查询每周统计表
        Top = train_total()
        Top.tablename = self.topTableName
        self.future_Map = Top.last_top(num=self.topNumbers,
                                       maxsames=self.sameLimit,
                                       minRate=self.minRate)
        num0 = len(self.future_Map)

        Result = future_orderForm()

        # 添加top10
        codesList = [[c[0], c[1]] for c in self.future_Map]
        for map in Result.topCodes():
            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 Result.currentOpenCodes(method=self.methodName):
            print(map)
            if not map[0:2] in codesList:
                self.future_Map.append(map)
                self.noneUsed.append(map[0:2])

        logger.info(
            ('总监控币对:', len(self.future_Map), ' 新列表:', num0, ' top10:', num1))
        logger.info(([n for n in self.future_Map]))
        logger.info(('暂停币对:', len(self.noneUsed), [n for n in self.noneUsed]))
예제 #5
0
    def getList(self, type=0):
        """
            查询获取可交易的合约模式
        """
        lists = []
        if type == 0:
            # 主力合约模式
            Base = future_baseInfo()
            res = Base.getUsedMap(hasIndex=False, isquick=False) + ['PB', 'SN', 'CY']
            lists = [
                {'code': d[0] + '88',
                 'name': d[0],
                 'startdate': self.startDate,
                 'enddate': self.endDate,
                 } for d in res]

        elif type == 1:
            # 与SG完全对应合约模式
            Order = future_orderForm()
            Order.tablename = 'future_orderForm_sg'
            lists = Order.sg_codes()

        elif type == 2:
            # 非主力合约模式
            Order = future_code()
            lists = Order.getMap(start=self.startDate, end=self.endDate)

        return lists
예제 #6
0
 def __init__(self):
     self.period = '1m'
     self.startDate = '2019-02-11'
     self.endDate = '2019-06-12'
     self.timeperiod = 14
     self.T0 = future_orderForm()
     self.T0.tablename = 'future_orderForm_sg'
     self.indexList = ['IH', 'IF', 'IC']
예제 #7
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)
예제 #8
0
    def orderStart(self):
        self.BI = BaseInfo([])
        self.Rice = interface_Rice()
        self.Record = future_orderForm()
        self.Record.tablename = 'future_orderForm_1'
        self.Rice.setIndexList([('IH', '000016.XSHG'), ('IF', '399300.XSHE'),
                                ('IC', '399905.XSHE')])

        map = [
            ['AP', 1, 1, 5, 'mZhao', 11087],
            #['IH', 1, 1, 1, 'mZhao55']
        ]
        orderMap = self.getMaps2(map)
        self.addOrder(orderMap)
예제 #9
0
    def start(self, full_codes, shareDict):
        # 每个进程单独初始化对象
        self.Record = future_orderForm()
        self.Rice = interface_Rice()
        self.Base = future_baseInfo()
        #self.CTP = interface_pyctp()

        self.shareDict = shareDict
        self.full_codes = full_codes

        # 子进程中共享变量
        self.isOpen, self.batchId, self.preNode, self.isStop = {}, {}, {}, {}

        # 配置文件
        for doc in self.Base.getInfo(full_codes):
            self.config[doc["code"]] = doc

        # 设置交易对的收盘时间
        self.Rice.setTimeArea(doc["nightEnd"])

        # 查询主力代码,并存入字典
        full_mCodes = self.Rice.getMain(full_codes)
        self.mCodeMap = {}
        for i in range(len(full_codes)):
            self.mCodeMap[full_codes[i]] = full_mCodes[i]

        # 初始化订单状态和batchID
        self.kTypeMap = {}
        openMap = self.Record.getOpenMap(self.methodName, full_codes)

        for map in self.future_Map:
            if map[0] not in full_codes or map[1] not in full_codes: continue
            self.iniNode(map, openMap)

            # 按k线时间框类型初始化 kTypeMap dict,
            ktype = int(map[4])

            if not ktype in self.kTypeMap.keys():
                self.kTypeMap[ktype] = []

            for i in [0, 1]:
                if not self.mCodeMap[map[i]] in self.kTypeMap[ktype]:
                    self.kTypeMap[ktype].append(self.mCodeMap[map[i]])

        # 子进程启动
        logger.info(("model_future_detect start: %s " % ",".join(full_mCodes),
                     self.Rice.TimeArea))
        self.Rice.startTick(full_mCodes, callback=self.onTick)
예제 #10
0
    def start(self, full_codes):
        # print(full_codes)
        self.Record = future_orderForm()
        if not self.isCTPUse:
            self.Record.tablename = 'future_orderForm_1'

        self.time0 = time.time()

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

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

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

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

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

        self.indexList = []
        if len(self.indexCodeList) > 0:
            self.Rice.setIndexList(self.indexCodeList)
            self.indexList = [c[0] for c in self.indexCodeList]

        # 按k线类型分拆组,进行K线数据调用
        self.groupByKline(full_codes)
        # 初始化节点
        self.iniNode(full_codes)
        # return
        # 子进程启动
        full_mCodes = self.baseInfo.mainCodes  # 主力合约
        logger.info(
            ("%s start: %s" % (self.__class__.__name__, ",".join(full_mCodes)),
             self.Rice.TimeArea))

        self.Rice.startTick(full_mCodes,
                            kmap=self.kTypeMap,
                            source='combin',
                            callback=self.onTick)
예제 #11
0
    def filterCodes(self):
        # 查询每周统计表
        if self.topUse:
            Top = train_total()
            Top.tablename = self.topTableName
            self.future_Map = Top.last_top1(num=self.topNumbers,
                                            method=self.methodName,
                                            minVol=self.minVol,
                                            ban=self.banCodeList)
        else:
            Base = future_baseInfo()

            codes = Base.getUsedMap(hasIndex=len(self.indexCodeList) > 0)
            for code in codes:
                if not code in self.banCodeList:
                    uid = self.uidStyle % (code, self.methodName)
                    #  if code in ['IC']: print(uid)
                    self.future_Map.append(uid.split("_"))

        num0 = len(self.future_Map)
        Record = future_orderForm()
        if not self.isWorking: Record.tablename = self.orderFormTest

        # 添加未平仓,并不再开仓
        codesList = [c[0] for c in self.future_Map]
        # 当前开仓清单
        openCodes = Record.currentOpenCodes(method=self.methodName,
                                            batchNum=self.batchNum)
        if openCodes is not None:
            for map in openCodes:
                if not map[0] in codesList and not map[0] in self.banCodeList:
                    self.future_Map.append(map[:-3])
                    self.noneUsed.append(map[0])

        # 调仓处理
        dd = str(public.getTime(style='%H:%M:%S'))
        if "10:15:00" < dd < "11:00:00":
            self.alterPosition(Record, openCodes)

        logger.info(('总监控币对:', len(self.future_Map), ' 新列表:', num0, ' 未平仓:',
                     len(self.noneUsed)))
        logger.info(([n[0] for n in self.future_Map]))
        logger.info(('暂停币对:', len(self.noneUsed), [n for n in self.noneUsed]))
예제 #12
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]))
예제 #13
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()))
예제 #14
0
def test():
    obj = model_future_zhao_v1()
    obj.procMap = ProcessMap()
    obj.Rice = interface_Rice()
    Rec = future_orderForm()
    openMap = Rec.getOpenMap('zhao55', codes=['NI'], batchNum=1)
    # print(openMap)
    key, uid = 'NI', 'NI_40_2.0_1_0_zhao55'
    obj.procMap.setIni(uid, openMap[key], status=0)

    doc = {
        'createdate': '2019-05-24 14:39:27',
        'code': 'NI1907',
        'name': 'NI',
        'symbol': 'ni1907',
        'price': 99250.0,
        'vol': 8.0,
        'hands': 8,
        'ini_hands': 8.0,
        'ini_price': 99010.0,
        'mode': 5,
        'isopen': 0,
        'isstop': 3,
        'fee': 48.0,
        'income': 0,
        'rel_price': 99010.0,
        'stop_price': 0,
        'batchid': '54093cf8-7139-11e9-82c1-1c1b0d16fcc2',
        'status': 6,
        'method': 'zhao55',
        'uid': 'NI_40_2.0_1_0_zhao55',
        'session': 1466737504,
        'front': 11,
        'direction': b'0',
        'orderID': '2137451'
    }
    obj.setIncome([doc], 0)
    Rec.insert(doc)
예제 #15
0
    def autoCreateAtr(self, type=0):
        Rice = interface_Rice()
        Rice.setIndexList(self.indexCodeList)
        Base = future_baseInfo()
        Record = self.Record = future_orderForm()
        Model = model_future_zhao_v1()

        methods = ['mZhao', 'mZhao55']
        self.iniAmount, self.stopLine = 15400000, 0.0025
        if type == 1:
            methods = ['zhao', 'zhao55']
            self.iniAmount, self.stopLine = 20000000, 0.0025

        codes = Base.getUsedMap(hasIndex=True)
        BI = BaseInfo(codes)
        mCodes = Rice.getMain(codes)
        #print(codes)

        end = None
        dd = str(public.getTime(style='%H:%M:%S'))
        valids = Rice.getValidDate(start=-15, end=0)

        if ('18:15:00' < dd < '23:59:59'):
            end = public.getDate(diff=0)
        else:
            end = str(valids[-2])

        dfs = Rice.kline(mCodes,
                         period='1d',
                         start=public.getDate(diff=-150),
                         end=end,
                         pre=20)
        docs = []

        Tmap = Record.trendMap(methods)

        Pos = []
        j = 0
        for m in methods:
            Pos.append(Record.getOpenMap(method=m, batchNum=1))

        for mcode in mCodes:
            code = BI.parseCode(mcode)
            if code in self.banCodeList: continue

            df = dfs[mcode]

            close = df['close']
            df["datetime"] = df.index

            df["ma10"] = ma10 = ta.MA(close, timeperiod=10)
            df["ma20"] = ma20 = ta.MA(close, timeperiod=20)
            df["ma55"] = ta.MA(close, timeperiod=55)

            atr21 = ta.ATR(df['high'], df['low'], close, timeperiod=21)
            df['3atr'] = atr21 * 3

            # 计算ma10-ma20 穿越线间距
            df['mac'] = mac = ma10 - ma20
            df['mac2'] = mac.shift(2)
            df['mac3'] = mac.shift(3)

            # isPoint
            df['mad'] = mac * mac.shift(1)
            df['mam'] = mam = df.apply(lambda row: self.isMam(row), axis=1)
            minidx, maxidx = ta.MINMAXINDEX(mam, timeperiod=75)
            df['interval'] = abs(minidx - maxidx)

            # 修正不正常K线
            df['high'] = df.apply(lambda row: self.k_fix(row, 1), axis=1)
            df['low'] = df.apply(lambda row: self.k_fix(row, -1), axis=1)

            # 唐奇安线18日
            df['tu_s'] = ta.MAX(df['high'], timeperiod=18 - 1)
            df['td_s'] = ta.MIN(df['low'], timeperiod=18 - 1)

            # 唐奇安线27日
            df['tu_s1'] = ta.MAX(df['high'], timeperiod=27 - 1)
            df['td_s1'] = ta.MIN(df['low'], timeperiod=27 - 1)

            # 唐奇安线34日
            df['tu_34'] = ta.MAX(df['high'], timeperiod=33)
            df['td_34'] = ta.MIN(df['low'], timeperiod=33)

            # 40日低点
            ld = close[close.notnull()]
            p = 40 if len(ld) > 40 else len(ld) - 1
            df['tu_d'] = ta.MAX(df['high'], timeperiod=p - 1)
            df['td_d'] = ta.MIN(df['low'], timeperiod=p - 1)

            fp, fd = 27, 5

            # 计算穿越值
            out = df.apply(lambda row: self.isout0(row), axis=1)
            df['out_s'] = ta.SUM(out, timeperiod=fp)
            df['trend'] = df['out_s'].apply(lambda x: -1 if x > fd else 1
                                            if x < -fd else 0)

            #posTrend = 0 if code not in trendMap else trendMap[code]['trend']
            df['isout'] = isout = df.apply(lambda row: self.isout(row, 0),
                                           axis=1)
            df['isout3'] = ta.SUM(isout, timeperiod=3)
            df['isout5'] = ta.SUM(isout, timeperiod=5)

            param = copy.deepcopy(df.iloc[-1]).to_dict()
            isLong, type = 1, 0
            if code in Tmap:
                isLong = Tmap[code]['trend']
                type = 1
            elif param['trend'] != 0:
                isLong = param['trend']
                type = 2
            else:
                isLong = -1 if param['ma20'] > param['ma55'] else 1
                type = 3

            j += 1
            isL = -1 if code in self.shortCodeList else 1 if code in self.longCodeList else 0

            if code in []:
                print(code, isLong, isL, param['trend'])
                file = Rice.basePath + '%s_%s_%s.csv' % (
                    code, public.getDatetime(style='%Y%m%d_%H%M%S'),
                    methods[0])
                df.to_csv(file, index=0)

            # 计算交易手数
            mul = BI.att(code, "contract_multiplier")
            dp = param['td_d'] if isLong > 0 else param['tu_d']
            p18 = param['tu_s'] if isLong > 0 else param['td_s']
            p27 = param['tu_s1'] if isLong > 0 else param['td_s1']

            if np.isnan(param['ma55']) or np.isnan(p18):
                print('period no long:', code)
                continue

            ma20v_18 = (self.iniAmount * self.stopLine / abs(p18 - dp) / mul)
            ma20v_18 = int(ma20v_18 + 0.2)

            ma20v_27 = (self.iniAmount * self.stopLine / abs(p27 - dp) / mul)

            ma20v_27 = int(ma20v_27 + 0.2)
            #
            ma55v = (self.iniAmount * self.stopLine / param['3atr'] / mul)
            ma55v = int(ma55v + 0.2)

            # 固定一手交易
            if code in self.oneCodeList:
                ma55v = ma20v_18 = ma20v_27 = 1

            # 计算持仓和止损
            p = np.zeros((2, 3))
            i = 0
            mp = 0

            for pos in Pos:
                if code in pos:
                    d = pos[code][0]

                    # 最近高点
                    sign = np.sign(int(d['mode']))
                    p[i][0] = sign * d['hands']
                    p[i][2] = mul * d['hands'] * (param['close'] -
                                                  d['price']) * sign

                    if i == 0:
                        p[i][1] = param['td_d'] if sign > 0 else param['tu_d']
                    else:
                        mp = self.getMax(df, d['createdate'],
                                         public.getDate(diff=1), d['mode'])
                        if np.isnan(mp):
                            print('no max Price:', code, mp)

                        p[i][1] = round(mp, 1) - sign * round(param['3atr'], 1)
                i += 1

            param.update({
                'code': mcode,
                '方向': '多' if isLong == 1 else '空',
                'price_18': p18,
                'vol_18': ma20v_18,
                'price_27': p27,
                'vol_27': ma20v_27,
                'vol_55': ma55v,
                '乘数': mul,
                '3ATR': round(param['3atr'], 1),
                '系统1持仓': p[0][0],
                'price_40': dp,
                '40日止损价': p[0][1],
                '浮盈1': p[0][2],
                '系统2持仓': p[1][0],
                '最高点': mp,
                '3ATR止损价': p[1][1],
                '浮盈2': p[1][2],
                '状态': Model.getStatus(methods, code),
                '指定方向': Model.getTrend(code),
            })
            docs.append(param)

        res = pd.DataFrame(docs,
                           columns=[
                               'code', 'close', '方向', 'price_40', 'price_18',
                               'vol_18', 'price_27', 'vol_27', '3ATR',
                               'vol_55', '乘数', '系统1持仓', '40日止损价', '浮盈1',
                               '系统2持仓', '最高点', '3ATR止损价', '浮盈2', '状态', '指定方向'
                           ])

        res = res.sort_values('code', ascending=True)
        file = Rice.basePath + 'future_%s_%s.csv' % (public.getDate(),
                                                     methods[0])
        res.to_csv(file, index=0)
        logger.info(('autoCreateAtr finished:', len(docs)))
        return res
예제 #16
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)
예제 #17
0
    def newFuture(self,
                  id='278231',
                  price=5059,
                  mode=2,
                  hands=5,
                  date=None,
                  test=False,
                  new_method=None,
                  mcode=None,
                  memo=''):

        self.Record = future_orderForm()
        self.BI = BaseInfo([])

        doc = self.Record.getById(id)
        docnew = copy.deepcopy(doc)

        base = self.BI.doc(doc['name'])

        amount = price * hands * base['contract_multiplier']
        r = base['ratio'] * 1.1

        fee = hands * r if r >= 0.5 else amount * r

        del docnew['id']
        name = doc['name']

        # 替换method
        if new_method is None:
            mode_old = doc['mode']
            uid, method = doc['uid'], doc['method']
            m0 = method[:-2] if method.find('55') != -1 else method + '55'
            print(mode_old, uid, m0)
            if (abs(mode_old) < 5 and abs(mode) > 4) or (abs(mode_old) > 4
                                                         and abs(mode) < 5):
                uid = uid.replace(method, m0)
                method = method.replace(method, m0)

        else:
            uid, method = doc['uid'], doc['method']
            uid = uid.replace(method, new_method)
            method = new_method

        docnew.update({
            "code": self.BI.mCode(name) if mcode is None else mcode,
            "symbol": self.BI.ctpCode(name),
            "isopen": 1,
            "isstop": 0,
            "price": price,
            "mode": mode,
            "hands": hands,
            "ini_hands": hands,
            "ini_price": price,
            "vol": hands * base['contract_multiplier'],
            "status": 6,
            "fee": round(fee, 2),
            "batchid": str(uuid.uuid1()),
            "createdate": public.getDatetime() if date is None else date,
            "income": round(-fee, 2),
            "method": method,
            "uid": uid,
            "memo": memo
        })
        print(docnew)
        if not test:
            self.Record.insert(docnew)