def DingDangNo6(): logfilename = BROKER_ID + '_' + INVESTOR_ID + '_交易日志' + str(today) + '.log' log = Logger(logfilename=logfilename) config = incept_config() load_data_from_file() init_k_line_pump() workdays = TradingPeriod.get_workdays(begin=config['begin'], end=config['end']) workdays_exchange_trading_period_by_ts = \ TradingPeriod.get_workdays_exchange_trading_period( _workdays=workdays, exchange_trading_period=EXCHANGE_TRADING_PERIOD) inst = 'rb1905' granularity = 780 serverport = 'http://192.168.1.19:8008' bars = dict() barss = load_data_from_server(server_base=serverport, instruments_id=inst, granularity=granularity) barinterval = inst + '_' + str(granularity) bars[barinterval] = barss if today in workdays_exchange_trading_period_by_ts: trading_period_by_ts = workdays_exchange_trading_period_by_ts[today] else: print('Not trading day, return to system.') return 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=inst, broker_id=BROKER_ID, investor_id=INVESTOR_ID, password=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(1) td.SubscribePrivateTopic(1) td.Init() last_time = None up_trader_flag = False down_trader_flag = False while True: if not q_depth_market_data.empty(): tick = q_depth_market_data.get() sewing_data_to_file_and_depositary(depth_market_data=tick) last_k_line = get_last_k_line(instrument_id=inst[0], interval=period) DayOpen = tick.OpenPrice DayHigh = tick.HighestPrice DayLow = tick.LowestPrice H = get_k_line_column(strategy_inst, strategy_period, ohlc='high') L = get_k_line_column(strategy_inst, strategy_period, ohlc='low') C = get_k_line_column(strategy_inst, strategy_period, ohlc='close') 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 DingDang = MID(HV, LV) allsig = cross(C, DingDang)[0] * 2 if last_k_line 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) 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 not last_k_line['low'] == last_k_line['high']) and tick.LastPrice > \ last_k_line['high'] and tick.LastPrice - last_k_line['high'] < 30 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, tick.LastPrice + pc_grid) # 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) print() 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 not last_k_line['low'] == last_k_line['high']) and tick.LastPrice < \ last_k_line['low'] and (last_k_line['low'] - tick.LastPrice < 30) 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) print() 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_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 td.PrepareOrder(rtn_td.InstrumentID, s, pj, rtn_td.Volume, order_price) print('多单建仓成交,平仓单挂单。。。') elif rtn_td.OffsetFlag in [ P, PJ, PZ ] and rtn_td.InstrumentID == strategy_inst: # 平仓, bp_total += rtn_td.Volume elif rtn_td.Direction == S: # 方向:空 if rtn_td.OffsetFlag == K and rtn_td.InstrumentID == strategy_inst: # 开仓 # 空单建仓成交 sell_order += rtn_td.Volume order_price = rtn_td.Price - grid td.PrepareOrder(rtn_td.InstrumentID, b, pj, rtn_td.Volume, order_price) print('空单建仓成交,平仓单挂单。。。') elif rtn_td.OffsetFlag in [ P, PJ, PZ ] and rtn_td.InstrumentID == strategy_inst: sp_total += rtn_td.Volume print(rtn_td.TradeTime, rtn_td.InstrumentID)
def macs_process(): while True: try: payload = q_macs.get(timeout=1) # print payload except Queue.Empty as e: pass if __name__ == "__main__": t = threading.Thread(target=macs_process) t.setDaemon(False) t.start() config = incept_config() # load_data_from_file() load_data_from_file(instruments_id='rb1805,AP810', granularities='1,2,5') init_k_line_pump() workdays = TradingPeriod.get_workdays(begin=config['begin'], end=config['end']) workdays_exchange_trading_period_by_ts = \ TradingPeriod.get_workdays_exchange_trading_period( _workdays=workdays, exchange_trading_period=EXCHANGE_TRADING_PERIOD) run()
def dingdang_three(): config = incept_config() load_data_from_file() init_k_line_pump() workdays = TradingPeriod.get_workdays(begin=config['begin'], end=config['end']) workdays_exchange_trading_period_by_ts = \ TradingPeriod.get_workdays_exchange_trading_period( _workdays=workdays, exchange_trading_period=EXCHANGE_TRADING_PERIOD) 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=inst, broker_id=BROKER_ID, investor_id=INVESTOR_ID, password=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(1) td.SubscribePrivateTopic(1) td.Init() last_time = None buy_order = 0 sell_order = 0 bp_total = 0 sp_total = 0 bk_limit = 0 sk_limit = 2 up_trader_flag = False down_trader_flag = False while True: if not q_depth_market_data.empty(): tick = q_depth_market_data.get() sewing_data_to_file_and_depositary(depth_market_data=tick) last_k_line = get_last_k_line(instrument_id=inst[0], interval=strategy_period) D_open = tick.OpenPrice H = get_k_line_column(strategy_inst, strategy_period, ohlc='high') L = get_k_line_column(strategy_inst, strategy_period, ohlc='low') C = get_k_line_column(strategy_inst, strategy_period, ohlc='close') if last_k_line is not None and tick.InstrumentID == strategy_inst: 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) ups = crossup(C, Mid) dns = crossup(Mid, C) avp = len(ups) / (ups.count(True) + dns.count(True)) uptotal = ups.count(True) dntotal = dns.count(True) print(ups.count(True), dns.count(True), avp) print('Mid:', Mid[-23:]) print('C:', C[-23:]) print('ups:', ups[-23:]) print('dns:', dns[-23:]) print() 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) print('当前时间: ', tick.UpdateTime, 'HIGH:', last_k_line['high'], ' ', 'LOW:', last_k_line['low'], '当前价: ', tick.LastPrice, '叮当值:', Mid[-1], dingdang) 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 ups[-1] and not up_trader_flag: # 下多单 print(bkvol, bk_limit) up_trader_flag = True # if sell_order > 0: # td.PrepareOrder(tick.InstrumentID, B, PJ, sell_order, tick.LastPrice + pc_grid) td.PrepareOrder(tick.InstrumentID, b, k, single_volume, tick.LastPrice) print() print('下多单', tick.InstrumentID, INVESTOR_ID) print('lastHigh:', last_k_line['high'], 'lastLow: ', last_k_line['low'], 'lastPrice: ', tick.LastPrice) if dns[-1] and not down_trader_flag: # 下空单 down_trader_flag = True # if buy_order > 0: # td.PrepareOrder(tick.InstrumentID, S, PJ, buy_order, tick.LastPrice) td.PrepareOrder(tick.InstrumentID, s, k, single_volume, tick.LastPrice) print() print('做空信号发出,下空单', tick.InstrumentID, INVESTOR_ID) print('lastHigh:', last_k_line['high'], 'lastLow: ', last_k_line['low'], 'lastPrice: ', tick.LastPrice) 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 # td.PrepareOrder(rtn_td.InstrumentID, s, pj, rtn_td.Volume, order_price) print('多单建仓成交,平仓单挂单。。。') elif rtn_td.OffsetFlag in [ P, PJ, PZ ] and rtn_td.InstrumentID == strategy_inst: #平仓, bp_total += rtn_td.Volume elif rtn_td.Direction == S: #方向:空 if rtn_td.OffsetFlag == K and rtn_td.InstrumentID == strategy_inst: # 开仓 #空单建仓成交 sell_order += rtn_td.Volume order_price = rtn_td.Price - grid # td.PrepareOrder(rtn_td.InstrumentID, b, pj, rtn_td.Volume, order_price) print('空单建仓成交,平仓单挂单。。。') elif rtn_td.OffsetFlag in [ P, PJ, PZ ] and rtn_td.InstrumentID == strategy_inst: sp_total += rtn_td.Volume print(rtn_td.TradeTime, rtn_td.InstrumentID)