| | |
| | | 对一系列的代码交易变量,下单,撤单进行管理 |
| | | """ |
| | | # 交易管理器 |
| | | import datetime |
| | | import json |
| | | import time |
| | | |
| | | import gpcode_manager |
| | | import l2_code_operate |
| | | import l2_trade_util |
| | | import mysql_data |
| | | import tool |
| | | from trade_data_manager import TradeBuyDataManager |
| | | from trade_gui import THSGuiTrade, async_call |
| | | from trade_gui import THSGuiTrade, THSBuyWinManagerNew |
| | | |
| | | import time as t |
| | | import l2_data_manager |
| | | |
| | |
| | | TRADE_STATE_BUY_CANCEL_SUCCESS = 14 |
| | | # 买成功 |
| | | TRADE_STATE_BUY_SUCCESS = 12 |
| | | |
| | | |
| | | |
| | | guiTrade = THSGuiTrade() |
| | | |
| | |
| | | data["trade_num"], data["type"], data["day"], round(t.time() * 1000))) |
| | | else: |
| | | mysqldb.execute( |
| | | "update ths_trade_success_record set money=%s, num=%s, price=%s,time=%s,trade_num=%s,type=%s where _id=%s",( |
| | | data["money"], data["num"], data["price"], data["time"], data["trade_num"], data["type"],data["_id"])) |
| | | "update ths_trade_success_record set money=%s, num=%s, price=%s,time=%s,trade_num=%s,type=%s where _id=%s", |
| | | ( |
| | | data["money"], data["num"], data["price"], data["time"], data["trade_num"], data["type"], |
| | | data["_id"])) |
| | | |
| | | |
| | | # 保存交易委托数据 |
| | |
| | | counts = mysqldb.select_one("select count(*) from ths_trade_delegate_record where _id='{}'".format(data["_id"])) |
| | | if counts[0] < 1: |
| | | mysqldb.execute( |
| | | "insert into ths_trade_delegate_record(_id,code,num,price,time,trade_num,trade_price,type,day,create_time) values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%d)", |
| | | "insert into ths_trade_delegate_record(_id,code,num,price,time,trade_num,trade_price,type,day,create_time) values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)", |
| | | ( |
| | | data["_id"], data["code"], data["num"], data["price"], data["time"], |
| | | data["trade_num"],data["trade_price"], data["type"], data["day"], round(t.time() * 1000))) |
| | | data["_id"], data["code"], data["num"], data["price"], data["time"], |
| | | data["trade_num"], data["trade_price"], data["type"], data["day"], round(t.time() * 1000))) |
| | | |
| | | # 保存最新的委托数据 |
| | | redis = __redis_manager.getRedis() |
| | |
| | | return json.loads(result), time_str |
| | | |
| | | |
| | | # 初始化禁止交易代码库 |
| | | def init_forbidden_trade_codes(): |
| | | key = "forbidden-trade-codes" |
| | | redis = __redis_manager.getRedis() |
| | | count = redis.scard(key) |
| | | if count > 0: |
| | | redis.delete(key) |
| | | redis.sadd(key, "000000") |
| | | redis.expire(key, tool.get_expire()) |
| | | |
| | | |
| | | # 移除禁止交易代码 |
| | | def remove_from_forbidden_trade_codes(code): |
| | | key = "forbidden-trade-codes" |
| | | redis = __redis_manager.getRedis() |
| | | redis.srem(key, code) |
| | | |
| | | |
| | | # 添加代码到禁止交易 |
| | | def add_to_forbidden_trade_codes(code): |
| | | key = "forbidden-trade-codes" |
| | | redis = __redis_manager.getRedis() |
| | | redis.sadd(key, code) |
| | | redis.expire(key, tool.get_expire()) |
| | | |
| | | |
| | | # 禁止代码交易 |
| | | def forbidden_trade(code): |
| | | add_to_forbidden_trade_codes(code) |
| | | l2_data_manager.remove_from_l2_fixed_codes(code) |
| | | l2_code_operate.L2CodeOperate.get_instance().remove_l2_listen(code, "禁止代码交易") |
| | | |
| | | |
| | | # 是否在禁止交易代码中 |
| | | def is_in_forbidden_trade_codes(code): |
| | | key = "forbidden-trade-codes" |
| | | redis = __redis_manager.getRedis() |
| | | return redis.sismember(key, code) |
| | | |
| | | |
| | | # 开始交易 |
| | | def start_buy(code, capture_timestamp, last_data, last_data_index): |
| | | # 是否禁止交易 |
| | | if is_in_forbidden_trade_codes(code): |
| | | if l2_trade_util.is_in_forbidden_trade_codes(code): |
| | | raise Exception("禁止交易") |
| | | trade_state = get_trade_state(code) |
| | | if trade_state != TRADE_STATE_NOT_TRADE and trade_state != TRADE_STATE_BUY_CANCEL_SUCCESS and trade_state != TRADE_STATE_BUY_CANCEL_ING: |
| | |
| | | |
| | | |
| | | # 购买 |
| | | @async_call |
| | | @tool.async_call |
| | | def __buy(code, price, trade_state, capture_timestamp, last_data, last_data_index): |
| | | try: |
| | | guiTrade.buy(code, price) |
| | |
| | | if _time == "00:00:00": |
| | | continue |
| | | if code is not None and int(data["type"]) == 0: |
| | | forbidden_trade(code) |
| | | l2_trade_util.forbidden_trade(code) |
| | | state = get_trade_state(code) |
| | | if state != TRADE_STATE_BUY_SUCCESS: |
| | | set_trade_state(code, TRADE_STATE_BUY_SUCCESS) |
| | |
| | | l2_data_manager.TradePointManager.delete_compute_info_for_cancel_buy(code) |
| | | l2_data_manager.TradePointManager.delete_buy_cancel_point(code) |
| | | l2_data_manager.TradePointManager.delete_buy_point(code) |
| | | # 移除交易窗口分配 |
| | | THSBuyWinManagerNew.cancel_distribute_win_for_code(code) |
| | | |
| | | |
| | | # 处理委托成功数据 |