| | |
| | | # 传入:时间,现价,成交总量,买1,买2,买3,买4,买5,卖1,卖2,卖3,卖4,卖5 |
| | | try: |
| | | d = {"dataTimeStamp": pDepthMarketData['DataTimeStamp'], "securityID": pDepthMarketData['SecurityID'], |
| | | "preClosePrice": pDepthMarketData['PreClosePrice'], |
| | | "lastPrice": pDepthMarketData['LastPrice'], |
| | | "totalVolumeTrade": pDepthMarketData['TotalVolumeTrade'], |
| | | "totalValueTrade": pDepthMarketData['TotalValueTrade'], |
| | | "totalBidVolume": pDepthMarketData['TotalBidVolume'], |
| | | "avgBidPrice": pDepthMarketData['AvgBidPrice'], |
| | | "totalAskVolume": pDepthMarketData['TotalAskVolume'], |
| | | "avgAskPrice": pDepthMarketData["AvgAskPrice"], |
| | | "buy": [(pDepthMarketData['BidPrice1'], pDepthMarketData['BidVolume1']), |
| | | (pDepthMarketData['BidPrice2'], pDepthMarketData['BidVolume2']), |
| | | (pDepthMarketData['BidPrice3'], pDepthMarketData['BidVolume3']), |
| | | (pDepthMarketData['BidPrice4'], pDepthMarketData['BidVolume4']), |
| | | (pDepthMarketData['BidPrice5'], pDepthMarketData['BidVolume5'])], |
| | | "sell": [ |
| | | (pDepthMarketData['AskPrice1'], pDepthMarketData['AskVolume1']), |
| | | (pDepthMarketData['AskPrice2'], pDepthMarketData['AskVolume2']), |
| | | (pDepthMarketData['AskPrice3'], pDepthMarketData['AskVolume3']), |
| | | (pDepthMarketData['AskPrice4'], pDepthMarketData['AskVolume4']), |
| | | (pDepthMarketData['AskPrice5'], pDepthMarketData['AskVolume5']) |
| | | ]} |
| | | "avgAskPrice": pDepthMarketData["AvgAskPrice"] |
| | | # "buy": [(pDepthMarketData['BidPrice1'], pDepthMarketData['BidVolume1']), |
| | | # (pDepthMarketData['BidPrice2'], pDepthMarketData['BidVolume2']), |
| | | # (pDepthMarketData['BidPrice3'], pDepthMarketData['BidVolume3']), |
| | | # (pDepthMarketData['BidPrice4'], pDepthMarketData['BidVolume4']), |
| | | # (pDepthMarketData['BidPrice5'], pDepthMarketData['BidVolume5'])], |
| | | # "sell": [ |
| | | # (pDepthMarketData['AskPrice1'], pDepthMarketData['AskVolume1']), |
| | | # (pDepthMarketData['AskPrice2'], pDepthMarketData['AskVolume2']), |
| | | # (pDepthMarketData['AskPrice3'], pDepthMarketData['AskVolume3']), |
| | | # (pDepthMarketData['AskPrice4'], pDepthMarketData['AskVolume4']), |
| | | # (pDepthMarketData['AskPrice5'], pDepthMarketData['AskVolume5']) |
| | | # ] |
| | | } |
| | | huaxin_l2_log.info(logger_local_huaxin_l2_market, f"{d}") |
| | | except: |
| | | pass |
| | |
| | | except Exception as e: |
| | | logger_system.exception(e) |
| | | while True: |
| | | if tool.trade_time_sub(tool.get_now_time_str(), "09:30:01") <= 0: |
| | | # 只读竞价数据 |
| | | break |
| | | time.sleep(2) |
| | | |
| | | |
| | |
| | | codes = L1DataProcessor.get_latest_update_codes() |
| | | result = {"code": 0, "data": list(codes)} |
| | | self.send_response(result, client_id, request_id) |
| | | elif ctype == "get_l2_deal_price": |
| | | # 根据L2数据获取成交价 |
| | | code = data["code"] |
| | | price_info = L2DataProcessor.get_deal_price(code) |
| | | if price_info: |
| | | fdata = {"price": price_info[0], "time": price_info[1]} |
| | | pre_price = gpcode_manager.get_price_pre_cache(code) |
| | | if pre_price: |
| | | fdata["rate"] = round((price_info[0] - pre_price) / pre_price, 4) |
| | | result = {"code": 0, "data": fdata} |
| | | else: |
| | | result = {"code": 1, "msg": "尚未获取到价格"} |
| | | self.send_response(result, client_id, request_id) |
| | | elif ctype == "get_l2_datas": |
| | | # 获取L2数据 |
| | | code = data["code"] |
| | |
| | | logging.exception(e) |
| | | |
| | | |
| | | class L2DataProcessor: |
| | | __latest_deal_price_info = {} |
| | | |
| | | @classmethod |
| | | def set_deal_price(cls, code, price, time_str): |
| | | """ |
| | | 设置成交价格 |
| | | :param code: 代码 |
| | | :param price: 价格 |
| | | :param time_str: 时间 |
| | | :return: |
| | | """ |
| | | cls.__latest_deal_price_info[code] = (price, time_str) |
| | | |
| | | @classmethod |
| | | def get_deal_price(cls, code): |
| | | """ |
| | | 获取成交价格 |
| | | :param code: |
| | | :return: |
| | | """ |
| | | return cls.__latest_deal_price_info.get(code) |
| | | |
| | | |
| | | class MyL2DataCallback(L2DataCallBack): |
| | | |
| | | def OnL2Order(self, code, origin_datas, timestamp): |
| | | # 保存L2数据 |
| | | datas = None |
| | |
| | | |
| | | def OnL2Transaction(self, code, datas): |
| | | async_log_util.info(hx_logger_l2_transaction, f"{code}#{datas}") |
| | | if datas: |
| | | # 获取最近的成交价 |
| | | price, time_str = datas[-1][1], l2_huaxin_util.convert_time(datas[-1][3]) |
| | | L2DataProcessor.set_deal_price(code, price, time_str) |
| | | |
| | | |
| | | # 做一些初始化的操作 |
| | |
| | | |
| | | threading.Thread(target=lambda: async_log_util.run_sync(), daemon=True).start() |
| | | |
| | | threading.Thread(target=lambda: async_log_util.l2_data_log.run_sync(), daemon=True).start() |
| | | threading.Thread(target=lambda: async_log_util.l2_data_log.run_sync(), daemon=True).start() |
| | | |
| | | huaxin_trade_data_update.run(queue_l1_trade_r_strategy_w, queue_strategy_w_l2_r) |
| | | |