| | |
| | | if not volume: |
| | | raise Exception("请上传volume") |
| | | |
| | | if round(float(price), 2) <= 0: |
| | | prices = HistoryKDatasUtils.get_now_price([code]) |
| | | if not prices: |
| | | raise Exception("现价获取失败") |
| | | price = prices[0][1] |
| | | # if round(float(price), 2) <= 0: |
| | | # prices = HistoryKDatasUtils.get_now_price([code]) |
| | | # if not prices: |
| | | # raise Exception("现价获取失败") |
| | | # price = prices[0][1] |
| | | # 下单 |
| | | result = hosting_api_util.trade_order(hosting_api_util.TRADE_DIRECTION_BUY, code, |
| | | volume, |
| | | round(float(price), 2)) |
| | | volume, price) |
| | | if result: |
| | | resultJSON = result |
| | | print("下单结果:", resultJSON) |
| | |
| | | sk.sendall(socket_util.load_header(return_str.encode(encoding='utf-8'))) |
| | | while True: |
| | | try: |
| | | sk.recv(1024) |
| | | buf = sk.recv(1024) |
| | | print(f"收到数据:{buf.decode(encoding='utf-8')}") |
| | | time.sleep(1) |
| | | except: |
| | | print("数据断开") |
| | | break |
| | | |
| | | |
| | | |
| | | elif type_ == "get_latest_cancel_orders": |
| | | # 获取最近的撤单 |
| | | results = huaxin_trade_record_manager.DelegateRecordManager.list_latest_cancel_records(10) |
| | | fresults = [] |
| | | for result in results: |
| | | temp = {} |
| | | for key in result: |
| | | if key in ["securityID", "securityName", "direction", "orderSysID", "acceptTime", |
| | | "cancelTime", "limitPrice", "volume"]: |
| | | temp[key] = result[key] |
| | | # 过滤虚拟单与卖单 |
| | | if int(temp["volume"] <= 100): |
| | | continue |
| | | if int(temp["direction"] != 0): |
| | | continue |
| | | fresults.append(temp) |
| | | return_str = json.dumps(json.dumps({"code": 0, "data": fresults})) |
| | | finally: |
| | | log.request_info("middle_api_server", f"请求结束:{type_}") |
| | | break |
| | |
| | | |
| | | |
| | | class DelegateRecordManager: |
| | | key_list = ["id", "orderLocalID", "securityID", "securityName", "direction", "orderSysID", "insertTime", |
| | | "insertDate", "acceptTime", "cancelTime", "limitPrice", "turnover", "volume", "volumeTraded", |
| | | "orderStatus", "orderSubmitStatus", "statusMsg", "createTime", "updateTime", "accountID"] |
| | | |
| | | @classmethod |
| | | def add(cls, datas): |
| | | mysqldb = mysql_data.Mysqldb() |
| | |
| | | results = mysqldb.select_all( |
| | | f"select * from hx_trade_delegate_record r where {' and '.join(where_list)} order by createTime") |
| | | # 转dict |
| | | key_list = ["id", "orderLocalID", "securityID", "securityName", "direction", "orderSysID", "insertTime", |
| | | "insertDate", "acceptTime", "cancelTime", "limitPrice", "turnover", "volume", "volumeTraded", |
| | | "orderStatus", "orderSubmitStatus", "statusMsg", "createTime", "updateTime", "accountID"] |
| | | fresults = [] |
| | | max_update_time = None |
| | | if results: |
| | |
| | | temp = {} |
| | | for i in range(len(r)): |
| | | if type(r[i]) == datetime.datetime: |
| | | temp[key_list[i]] = r[i].strftime("%Y-%m-%d %H:%M:%S") |
| | | temp[cls.key_list[i]] = r[i].strftime("%Y-%m-%d %H:%M:%S") |
| | | else: |
| | | temp[key_list[i]] = r[i] |
| | | temp[cls.key_list[i]] = r[i] |
| | | fresults.append(temp) |
| | | return fresults, max_update_time.strftime("%Y-%m-%d %H:%M:%S") if max_update_time else None |
| | | finally: |
| | | pass |
| | | |
| | | # 获取最近的撤单记录 |
| | | @classmethod |
| | | def list_latest_cancel_records(cls, count, day=tool.get_now_date_str("%Y%m%d")): |
| | | mysqldb = mysql_data.Mysqldb() |
| | | where_list = [f"r.insertDate='{day}'", "r.cancelTime!=''"] |
| | | results = mysqldb.select_many( |
| | | f"select * from hx_trade_delegate_record r where {' and '.join(where_list)} order by r.cancelTime desc", |
| | | count) |
| | | fresults = [] |
| | | if results: |
| | | for r in results: |
| | | temp = {} |
| | | for i in range(len(r)): |
| | | if type(r[i]) == datetime.datetime: |
| | | temp[cls.key_list[i]] = r[i].strftime("%Y-%m-%d %H:%M:%S") |
| | | else: |
| | | temp[cls.key_list[i]] = r[i] |
| | | fresults.append(temp) |
| | | return fresults |
| | | |
| | | |
| | | # 持仓记录 |
| | |
| | | |
| | | |
| | | if __name__ == "__main__": |
| | | results = DelegateRecordManager.list_by_day('20230704', '1970-01-01') |
| | | results = DelegateRecordManager.list_latest_cancel_records(10) |
| | | print(results) |