def login(): # 登录行情服务器 user = MyMdApi(instruments=inst, broker_id=BROKER_ID, investor_id=INVESTOR_ID, password=PASSWORD) user.Create("data") user.RegisterFront(ADDRESS_MD) user.Init() print('行情服务器登录成功') bars = load_data_from_server(server_base='http://106.14.119.122', instruments_id=inst[0], granularity=granularity) while True: if Utils.exit_flag: msg = 'Thread CTPDataCollectEngine say bye-bye' print(msg) logger.info(msg=msg) return try: payload = q_depth_market_data.get(timeout=1) q_depth_market_data.task_done() instrument_id = payload.InstrumentID action_day = payload.ActionDay update_time = payload.UpdateTime.replace(':', '') last_price = payload.LastPrice volume = payload.Volume if volume == 0: continue tickToBar(payload, 13) if not q_bar.empty(): bar = q_bar.get() bars.append(bar) high = get_k_line_column(data=bars, depth=20) low = get_k_line_column(data=bars, ohlc='low') ma_5 = ma(elements=high, step=5) ma_10 = ma(elements=high, step=10) print(high) print(ma_5) print(ma_10) cu = cross(ma_5, ma_10) print(cu) far = be_apart_from(cu) print(far) except queue.Empty as e: pass
buysigdetail = CROSS(C, dingdangline) sellsigdetail = CROSS(dingdangline, C) knum = len(H) signalall = buysigdetail.count(True) avsigp = knum / signalall # print(buysigdetail.count(True)) # print(sellsigdetail.count(True)) print('叮 当: ', dingdangline[(knum - avsigp):]) print('收盘价: ', C[(knum - avsigp):]) # print('buy signal:', avsigp, buysigdetail[(knum - avsigp):]) # print('sell signal:', avsigp, sellsigdetail[(knum - avsigp):]) if not q_bar.empty(): bar = q_bar.get() bars[barinterval].append(bar) with open(bardatafile, 'a') as f: f.writelines(json.dumps(bar, ensure_ascii=False) + '\n') print(len(bars[barinterval])) lastk = get_last_k_line(bars, 'rb1905', 780) print(lastk) # O30 = get_k_line_column(bars, inst, 300, ohlc='open') O = get_k_line_column(bars, inst, granularity, ohlc='open') H = get_k_line_column(bars, inst, granularity, ohlc='high')
def dingdangno6bksp(md, td, instid, instrumentid): while True: time.sleep(0.3) if not md.q_depth_market_data.empty(): tick = q_depth_market_data.get() tickToBar(tick, granularity) dayopen = tick.OpenPrice dayhigh = tick.HighestPrice daylow = tick.LowestPrice dayavp = int(tick.AveragePrice / 10) BB = (tick.LastPrice - daylow) / (dayhigh - daylow) if dayhigh != daylow else 0.5 siglast = min(be_apart_from(buysigdetail), be_apart_from(sellsigdetail)) quote_info = "合约:{0},当前价格:{price},时间:{ttime},日内振幅:{1},价格位置:{2} 做多信号:{3},做空信号:{4}" print( quote_info.format(tick.InstrumentID, dayhigh - daylow, BB, buysigdetail.count(True), sellsigdetail.count(True), price=tick.LastPrice, ttime=tick.UpdateTime)) quote_info1 = "合约:{instid},日内振幅:{zhenfu},价格位置:{BB:.3f} 做多信号:{buynum},做空信号:{sellnum},信号距离:{siglast}" info = { 'instid': tick.InstrumentID, 'zhenfu': dayhigh - daylow, 'buynum': buysigdetail.count(True), 'sellnum': sellsigdetail.count(True), 'BB': BB, 'siglast': siglast } print(quote_info1.format(**info)) knum = len(H) signalall = buysigdetail.count(True) avsigp = knum / signalall # sigsum2 = buysigdetail[(knum - avsigp):-2].count(True) + sellsigdetail[(knum - avsigp):-2].count(True) # sigsum4 = sigsum2 * 2 # sigsum5 = sigsum4 if sellsigdetail[-1] or buysigdetail[-1] else 0 # # pp = min((sigsum5 + 1), 8) buysigprice = C[len(C) - be_apart_from(buysigdetail)] sellsigprice = C[len(C) - be_apart_from(sellsigdetail)] sellsigprice1 = C[-1] if sellsigdetail[-1] else 0 # 另外一种方法。 lastsig = 'SK' if be_apart_from(buysigdetail) > be_apart_from( sellsigdetail) else 'BK' # if buysigdetail[-1] or sellsigdetail[-1]: # knum = len(H) # signalall = buysigdetail.count(True) # avsigp = knum / signalall # sigsum2 = buysigdetail[(knum - avsigp):-2].count(True) + sellsigdetail[(knum - avsigp):-2].count(True) # sigsum3 = sigsum2 * 2 # # pp = min((sigsum3 + 1), 8) # posratio.append(pp) if lastsig == 'BK': bkprofit = tick.LastPrice - buysigprice bkprofits.append(bkprofit) bkpmax = max(bkprofits) if bkprofits else 0 bkpmin = min(bkprofits) if bkprofits else 0 print(INVESTOR_ID, '当前信号:', lastsig, '信号价:', buysigprice, tick.LastPrice, '盈利价差:', bkprofit, '最大:', bkpmax, '最小', bkpmin, '持续周期:', be_apart_from(buysigdetail), '理论持仓', pp) sigprofit_info.append([lastsig, bkpmax, bkpmin]) print(('buy signal:', avsigp, buysigdetail[(knum - avsigp):], pp)) elif lastsig == 'SK': skprofit = sellsigprice - tick.LastPrice skprofits.append(skprofit) skpmax = max(skprofits) if skprofits else 0 skpmin = min(skprofits) if skprofits else 0 print('当前信号:', lastsig, '信号价:', sellsigprice, sellsigprice1, tick.LastPrice, '盈利价差:', skprofit, '最大:', skpmax, '最小', skpmin, '持续周期:', be_apart_from(sellsigdetail)) sigprofit_info.append( [lastsig, max(skprofits), min(skprofits)]) print(('sell signal:', avsigp, sellsigdetail[(knum - avsigp):], pp)) # print tick.InstrumentID, dayhigh - daylow, BB, buysigdetail.count(True), sellsigdetail.count(True), min( # be_apart_from(buysigdetail), be_apart_from(sellsigdetail)) if not q_signals.empty(): lastsig = q_signals.get() print(lastsig) O = get_k_line_column(bars, inst, granularity, ohlc='open') H = get_k_line_column(bars, inst, granularity, ohlc='high') L = get_k_line_column(bars, inst, granularity, ohlc='low') C = get_k_line_column(bars, inst, granularity, ohlc='close') lastk = get_last_k_line(bars, 'rb1905', 780) print(lastk) uperband = HHV(H, 23) lowerband = LLV(L, 23) dingdangline = MID(uperband, lowerband) signalList = cross(C, dingdangline) buysigdetail = CROSS(C, dingdangline) sellsigdetail = CROSS(dingdangline, C) knum = len(H) signalall = buysigdetail.count(True) avsigp = knum / signalall # print(buysigdetail.count(True)) # print(sellsigdetail.count(True)) print('叮 当: ', dingdangline[(knum - avsigp):]) print('收盘价: ', C[(knum - avsigp):]) print(('buy signal:', avsigp, buysigdetail[(knum - avsigp):])) print(('sell signal:', avsigp, sellsigdetail[(knum - avsigp):])) if not q_bar.empty(): bar = q_bar.get() bars[barinterval].append(bar) with open(bardatafile, 'a') as f: f.writelines(json.dumps(bar, ensure_ascii=False) + '\n') print(len(bars[barinterval])) # bar_s = dict() # barss = load_data_from_server(server_base=serverport, instruments_id=inst, granularity=granularity) # barinterval = inst + '_' + str(granularity) # bar_s[barinterval] = barss # print len(bar_s[barinterval]) lastk = get_last_k_line(bars, 'rb1905', 780) print(lastk) # O30 = get_k_line_column(bars, inst, 300, ohlc='open') O = get_k_line_column(bars, inst, granularity, ohlc='open') H = get_k_line_column(bars, inst, granularity, ohlc='high') L = get_k_line_column(bars, inst, granularity, ohlc='low') C = get_k_line_column(bars, inst, granularity, ohlc='close') uperband = HHV(H, 23) lowerband = LLV(L, 23) dingdangline = MID(uperband, lowerband) signalList = cross(C, dingdangline) buysigdetail = CROSS(C, dingdangline) sellsigdetail = CROSS(dingdangline, C) knum = len(H) signalall = buysigdetail.count(True) avsigp = knum / signalall # print(buysigdetail.count(True)) # print(sellsigdetail.count(True)) print(('buy signal:', avsigp, buysigdetail[(knum - avsigp):])) print(('sell signal:', avsigp, sellsigdetail[(knum - avsigp):])) print( min(be_apart_from(buysigdetail), be_apart_from(sellsigdetail))) # print be_apart_from(sellsigdetail) # if buysigdetail[-1] or sellsigdetail[-1]: # 发出交易信号并确认,计算下单仓位 # knum = len(H) # signalall = buysigdetail.count(True) # avsigp = knum / signalall # sigsum2 = buysigdetail[(knum - avsigp):-2].count(True) + sellsigdetail[(knum - avsigp):-2].count(True) # sigsum3 = sigsum2 * 2 # # pp = min((sigsum3 + 1), 8) # posratio.append(pp) if buysigdetail[-1]: bkprofits = [] signal = { 'date_time': time.time(), 'signaltype': 'BK', 'signalprice': tick.LastPrice } q_signals.put(signal) knum = len(H) signalall = buysigdetail.count(True) avsigp = knum / signalall sigsum2 = buysigdetail[(knum - avsigp):-2].count( True) + sellsigdetail[(knum - avsigp):-2].count(True) sigsum3 = sigsum2 * 2 pp = min((sigsum3 + 1), 8) order_price = tick.LastPrice td.PrepareOrder(tick.InstrumentID, b, k, pp, order_price) if sellsigdetail[-1]: skprofits = [] signal = { 'date_time': time.time(), 'signaltype': 'SK', 'signalprice': tick.LastPrice } q_signals.put(signal) order_price = tick.LastPrice # TODO 暂时没有处理平昨仓和今仓,待处理... 应该有个完整的策略持仓管理模块 if bkprofit > 0: td.PrepareOrder(tick.InstrumentID, s, p, pp, order_price) # spk sellcount = 0 down_trading_flag = False
def MovingBreak(): lastErrorID = 0 logfilename = BROKER_ID + '_' + INVESTOR_ID + '_交易日志' + str(today) + '.log' log = Logger(logfilename=logfilename) pc_grid = grid s = S = ApiStruct.D_Sell b = B = ApiStruct.D_Buy k = K = ApiStruct.OF_Open p = P = ApiStruct.OF_Close pj = PJ = ApiStruct.OF_CloseToday pz = PZ = ApiStruct.OF_CloseYesterday # T['TE_RESUME'] = 'int' # 流重传方式 # TERT_RESTART = 0 # 从本交易日开始重传 # TERT_RESUME = 1 # 从上次收到的续传 # TERT_QUICK = 2 # 只传送登录后的流内容 # 登录行情服务器 md = MyMdApi(instruments=['rb1905'], broker_id=BROKER_ID, investor_id='*', password='******') md.Create(INVESTOR_ID + "data") md.RegisterFront(ADDR_MD) md.Init() td = MyTradeApi(broker_id=BROKER_ID, investor_id=INVESTOR_ID, passwd=PASSWORD) td.Create(LOGS_DIR + INVESTOR_ID + "_trader") td.RegisterFront(ADDR_TD) td.SubscribePublicTopic(2) td.SubscribePrivateTopic(2) td.Init() last_time = None buy_order = 0 sell_order = 0 bp_total = 0 sp_total = 0 bk_limit = 1 sk_limit = 1 up_trader_flag = False down_trader_flag = False buy_rec = list() sell_rec = list() while True: if not q_server_info.empty(): info = q_server_info.get() # print info.ErrorID lastErrorID = info.ErrorID print('the last ErrorID is: ', lastErrorID) if lastErrorID != 0: # print 'release the api...' # td.Release() print(datetime.now(), 'reconnect the trading server.') del td sleep(60) td = MyTradeApi(broker_id=BROKER_ID, investor_id=INVESTOR_ID, passwd=PASSWORD) td.Create(LOGS_DIR + INVESTOR_ID + "_trader") td.RegisterFront(ADDR_TD) td.SubscribePublicTopic(2) td.SubscribePrivateTopic(2) # td.ReqUserLogout() td.Init() sleep(60) if not q_depth_market_data.empty(): tick = q_depth_market_data.get() tickToBar(tick,granularity=180) D_open = tick.OpenPrice lastk = get_last_k_line(bars, inst, granularity) last_k_line = get_last_k_line(bars, inst, granularity) print((lastk, datetime.now())) O = get_k_line_column(bars, inst, granularity, ohlc='open') H = get_k_line_column(bars, inst, granularity, ohlc='high') L = get_k_line_column(bars, inst, granularity, ohlc='low') C = get_k_line_column(bars, inst, granularity, ohlc='close') # print(H[-3:],L[-3:], type(H[-1])) HL = HLV(H, L) MHL = max(HL) MminHL = min(HL) AVHL = sum(HL) / len(HL) vgrid = int(AVHL * 0.8) # calculate the uppper and lower band HV = HHV(H, 23) LV = LLV(L, 23) # #middle line Mid = MID(HV, LV) # 根据叮当值调整仓位控制参数 # bk_limit = 2 if C[-1] > Mid[-1] else 0 # bk_limit = 2 # sk_limit = 2 if C[-1] < Mid[-1] else 0 # sk_limit = 2 # print tick.InstrumentID, strategy_inst if lastk is not None and tick.InstrumentID == strategy_inst: if last_time != last_k_line['date_time']: last_time = last_k_line['date_time'] up_trader_flag = False down_trader_flag = False dingdang = 'Buy!' if tick.LastPrice > Mid[-1] else 'Sell' bkvol = buy_order - sp_total if buy_order - sp_total > 0 else 0 skvol = sell_order - bp_total if sell_order - bp_total > 0 else 0 # bkvol = get_day_bkvol(td, strategy_inst) # skvol = get_day_skvol(td, strategy_inst) # outformat = "当前时间:{tick.UpdateTime}, High:{last_k_line['high']}" # print(outformat) print('当前时间: ', tick.UpdateTime, 'HIGH:', last_k_line['high'], ' ', 'LOW:', last_k_line[ 'low'], '当前价: ', tick.LastPrice, '叮当值:', Mid[ -1], dingdang, 'buy_limit:', bk_limit, 'sell_limit:', sk_limit) print('buy_order: ', buy_order, 'sell_order: ', sell_order, BROKER_ID, INVESTOR_ID, tick.InstrumentID, 'sp_total: ', sp_total, 'bp_total: ', bp_total, '日多:', bkvol, '日空:', skvol) if not up_trader_flag and tick.LastPrice > last_k_line['high'] and bkvol < bk_limit: # 下多单 print(bkvol, bk_limit) up_trader_flag = True order_price = tick.LastPrice buy_rec.append([datetime.now(), order_price]) # if sell_order > 0: # td.PrepareOrder(tick.InstrumentID, B, P, sell_order, order_price) # sell_order -= sell_order td.PrepareOrder(tick.InstrumentID, b, k, single_volume, order_price) log.info(log.printfNow() + '下空单:' + str(single_volume) + ',orderprice:' + str( order_price) + 'skvol:' + str(skvol) + 'sk_limit:' + str(sk_limit)) # td.PrepareOrder(tick.InstrumentID, s, pz, single_volume, tick.LastPrice) info = 'buy: ' + tick.InstrumentID +' '+ str(order_price) mailsender(info, receivers) print('下多单', tick.InstrumentID, INVESTOR_ID, str(single_volume) + ',orderprice:' + str( order_price) + 'skvol:' + str(skvol) + 'sk_limit:' + str(sk_limit)) print('lastHigh:', last_k_line['high'], 'lastLow: ', last_k_line[ 'low'], 'lastPrice: ', tick.LastPrice) if not down_trader_flag and tick.LastPrice < last_k_line['low'] and skvol < sk_limit: # 下空单 down_trader_flag = True order_price = tick.LastPrice # if buy_order > 0: # td.PrepareOrder(tick.InstrumentID, S, P, buy_order, tick.LastPrice - pc_grid) # buy_order -= buy_order td.PrepareOrder(tick.InstrumentID, s, k, single_volume, order_price) log.info(log.printfNow() + '下空单:' + str(single_volume) + ',orderprice:' + str( order_price) + 'skvol:' + str(skvol) + 'sk_limit:' + str(sk_limit)) # td.PrepareOrder(tick.InstrumentID, b, pz, single_volume, tick.LastPrice) info = 'sell: ' + tick.InstrumentID + ' ' + str(order_price) mailsender(info, receivers) print('下空单', tick.InstrumentID, INVESTOR_ID, ', orderprice:' + str(order_price) + ', skvol:' + str( skvol) + ', sk_limit:' + str(sk_limit)) print('lastHigh:', last_k_line['high'], 'lastLow: ', last_k_line[ 'low'], 'lastPrice: ', tick.LastPrice) if not q_bar.empty(): bartmp = q_bar.get() bars[barinterval].append(bartmp) if not q_rtn_order.empty(): rtn_order = q_rtn_order.get() print(rtn_order) print('下单成功,请注意。。。') if not q_rtn_trade.empty(): rtn_td = q_rtn_trade.get() print('下单成交', rtn_td) ''' Trade(BrokerID='0127', InvestorID='200277', InstrumentID='ni1811', OrderRef='69169', UserID='200277', ExchangeID='SHFE', TradeID=' 652868', Direction='0', OrderSysID=' 2413585', ParticipantID='0011', ClientID='01789993', TradingRole='\x00', ExchangeInstID='ni1811', OffsetFlag='0', HedgeFlag='1', Price=112560.0, Volume=1, TradeDate='20180727', TradeTime='23:52:48', TradeType='\x00', PriceSource='\x00', TraderID='0011c6c', OrderLocalID=' 684', ClearingPartID='0011', BusinessUnit='', SequenceNo=1536, TradingDay='20180730', SettlementID=1, BrokerOrderSeq=2310, TradeSource='0') ''' # k if rtn_td.Direction == B: # 方向 多 if rtn_td.OffsetFlag == K and rtn_td.InstrumentID == strategy_inst: # 多单开仓成交,下平仓指令, 开盘价+30 buy_order += rtn_td.Volume order_price = rtn_td.Price + grid bkvol += rtn_td.Volume td.PrepareOrder(rtn_td.InstrumentID, s, pj, rtn_td.Volume, order_price) info = tick.InstrumentID + '多单建仓成交,平仓单挂单。。。' + str(order_price) print(info) # mailsender(info, receivers) elif rtn_td.OffsetFlag in [P, PJ, PZ] and rtn_td.InstrumentID == strategy_inst: # 平仓, print(rtn_td) bp_total += rtn_td.Volume sell_order -= rtn_td.Volume skvol -= rtn_td.Volume info = '平仓单成交。。。' print(info) # mailsender(info,receivers) elif rtn_td.Direction == S: # 方向:空 if rtn_td.OffsetFlag == K and rtn_td.InstrumentID == strategy_inst: # 开仓 # 空单建仓成交 sell_order += rtn_td.Volume skvol += rtn_td.Volume order_price = rtn_td.Price - grid td.PrepareOrder(rtn_td.InstrumentID, b, pj, rtn_td.Volume, order_price) info = '空单建仓成交,平仓单挂单。。。' print(info) # mailsender(info, receivers) elif rtn_td.OffsetFlag in [P, PJ, PZ] and rtn_td.InstrumentID == strategy_inst: sp_total += rtn_td.Volume buy_order -= rtn_td.Volume bkvol -= rtn_td.Volume info = '平仓单成交' + str(rtn_td.TradeTime)+ rtn_td.InstrumentID print(info) # mailsender(info, receivers) print(rtn_td.TradeTime, rtn_td.InstrumentID)
def dingdangNo6(): while True: if not q_depth_market_data.empty(): tick = q_depth_market_data.get() q_depth_market_data.task_done() tickToBar(tick, granularity) # dayopen = tick.OpenPrice # dayhigh = tick.HighestPrice # daylow = tick.LowestPrice # dayavp = int(tick.AveragePrice / 10) # BB = (tick.LastPrice - daylow) / (dayhigh - daylow) if dayhigh != daylow else 0.5 # siglast = min(be_apart_from(buysigdetail), be_apart_from(sellsigdetail)) # quote_info = "合约:{0},当前价格:{price},时间:{ttime},日内振幅:{1},价格位置:{2} 做多信号:{3},做空信号:{4}" # print quote_info.format(tick.InstrumentID,dayhigh - daylow,BB, buysigdetail.count(True),sellsigdetail.count(True), price=tick.LastPrice, ttime = tick.UpdateTime) # quote_info1 = "合约:{instid},日内振幅:{zhenfu},价格位置:{BB:.3f} 做多信号:{buynum},做空信号:{sellnum},信号距离:{siglast}" # # info= {'instid': tick.InstrumentID, # 'zhenfu' : dayhigh - daylow, # 'buynum' : buysigdetail.count(True), # 'sellnum' : sellsigdetail.count(True), # 'BB':BB, # 'siglast': siglast} # print quote_info1.format(**info) # knum = len(H) # signalall = buysigdetail.count(True) # # avsigp = knum / signalall # # sigsum2 = buysigdetail[(knum - avsigp):-2].count(True) + sellsigdetail[(knum - avsigp):-2].count(True) # sigsum4 = sigsum2 * 2 # sigsum5 = sigsum4 if sellsigdetail[-1] or buysigdetail[-1] else 0 # # pp = min((sigsum5 + 1), 8) # buysigprice = C[len(C) - be_apart_from(buysigdetail)] # sellsigprice = C[len(C) - be_apart_from(sellsigdetail)] # # sellsigprice1 = C[-1] if sellsigdetail[-1] else 0 # 另外一种方法。 # # lastsig = 'SK' if be_apart_from(buysigdetail) > be_apart_from(sellsigdetail) else 'BK' # # if lastsig == 'BK': # # bkprofit = tick.LastPrice - buysigprice # bkprofits.append(bkprofit) # # bkpmax = max(bkprofits) if bkprofits else 0 # bkpmin = min(bkprofits) if bkprofits else 0 # # print u'当前信号:', lastsig, u'信号价:', buysigprice, tick.LastPrice, u'盈利价差:', bkprofit, u'最大:', bkpmax, u'最小', bkpmin, u'持续周期:', be_apart_from(buysigdetail) # sigprofit_info.append([lastsig, bkpmax, bkpmin]) # print('buy signal:', avsigp, buysigdetail[(knum - avsigp):], pp) # elif lastsig == 'SK': # skprofit = sellsigprice - tick.LastPrice # skprofits.append(skprofit) # # skpmax = max(skprofits) if skprofits else 0 # skpmin = min(skprofits) if skprofits else 0 # print u'当前信号:', lastsig, u'信号价:', sellsigprice, sellsigprice1, tick.LastPrice, u'盈利价差:', skprofit, u'最大:', skpmax, u'最小', skpmin, u'持续周期:',be_apart_from(sellsigdetail) # sigprofit_info.append([lastsig, max(skprofits), min(skprofits)]) # print('sell signal:', avsigp, sellsigdetail[(knum - avsigp):], pp) # print tick.InstrumentID, dayhigh - daylow, BB, buysigdetail.count(True), sellsigdetail.count(True), min( # be_apart_from(buysigdetail), be_apart_from(sellsigdetail)) if not q_signals.empty(): lastsig = q_signals.get() print(lastsig) # O = get_k_line_column(bars, inst, granularity, ohlc='open') # H = get_k_line_column(bars, inst, granularity, ohlc='high') # L = get_k_line_column(bars, inst, granularity, ohlc='low') # C = get_k_line_column(bars, inst, granularity, ohlc='close') # # lastk = get_last_k_line(bars, 'rb1905', 780) # print lastk # # uperband = HHV(H, 23) # lowerband = LLV(L, 23) # dingdangline = MID(uperband, lowerband) # signalList = cross(C, dingdangline) # buysigdetail = CROSS(C, dingdangline) # sellsigdetail = CROSS(dingdangline, C) # # knum = len(H) # signalall = buysigdetail.count(True) # # avsigp = knum / signalall # # # print(buysigdetail.count(True)) # # print(sellsigdetail.count(True)) # print dingdangline[(knum - avsigp):] # print C[(knum - avsigp):] # print('buy signal:', avsigp, buysigdetail[(knum - avsigp):]) # print('sell signal:', avsigp, sellsigdetail[(knum - avsigp):]) if not q_bar.empty(): bar = q_bar.get() bars[barinterval].append(bar) # with open(bardatafile, 'a') as f: # f.writelines(json.dumps(bar, ensure_ascii=False) + '\n') # print len(bars[barinterval]) # bar_s = dict() # barss = load_data_from_server(server_base=serverport, instruments_id=inst, granularity=granularity) # barinterval = inst + '_' + str(granularity) # bar_s[barinterval] = barss # print len(bar_s[barinterval]) # lastk = get_last_k_line(bars, 'rb1905', 780) # print lastk # O30 = get_k_line_column(bars, inst, 300, ohlc='open') O = get_k_line_column(bars, inst, granularity, ohlc='open') H = get_k_line_column(bars, inst, granularity, ohlc='high') L = get_k_line_column(bars, inst, granularity, ohlc='low') C = get_k_line_column(bars, inst, granularity, ohlc='close') uperband = HHV(H, 23) lowerband = LLV(L, 23) dingdangline = MID(uperband, lowerband) signalList = cross(C, dingdangline) buysigdetail = CROSS(C, dingdangline) sellsigdetail = CROSS(dingdangline, C) # knum = len(H) # signalall = buysigdetail.count(True) # if signalall >0: # avsigp = knum / signalall # # print(buysigdetail.count(True)) # print(sellsigdetail.count(True)) # print('buy signal:', avsigp, buysigdetail[(knum - avsigp):]) # print('sell signal:', avsigp, sellsigdetail[(knum - avsigp):]) # print min(be_apart_from(buysigdetail), be_apart_from(sellsigdetail)) # print be_apart_from(sellsigdetail) # sigsum2 = buysigdetail[(knum - avsigp):-2].count(True) + sellsigdetail[(knum - avsigp):-2].count(True) # sigsum4 = sigsum2 * 2 # sigsum5 = sigsum4 if sellsigdetail[-1] or buysigdetail[-1] else 0 # pp = min((sigsum5 + 1), 8) # # print 'pp:', pp if sellsigdetail[-1]: skprofits = [] pp = getPositionRatio(sellsigdetail) sigdt = ' '.join([str(tick.ActionDay), str(tick.UpdateTime)]) signal = { 'date_time': sigdt, 'signaltype': 'SK', 'signalprice': tick.LastPrice, 'pos': pp } q_signals.put(signal) order_price = tick.LastPrice # td.PrepareOrder(tick.InstrumentID, s, k, pp, order_price) # spk sellcount = 0 down_trading_flag = False # if not down_trading_flag and tick.LastPrice < get_last_k_line(bars,'rb1905',780)['low']: # down_trading_flag = True # sellcount +=1 # sk(pp) # # # pass elif buysigdetail[-1]: bkprofits = [] pp = getPositionRatio(buysigdetail) sigdt = ' '.join([str(tick.ActionDay), str(tick.UpdateTime)]) signal = { 'date_time': sigdt, 'signaltype': 'BK', 'signalprice': tick.LastPrice, 'pos': pp } q_signals.put(signal) order_price = tick.LastPrice # td.PrepareOrder(tick.InstrumentID, b, k, pp, order_price) # bpk pass