Administrator
2022-10-27 6e71fbcb119e7068ba35380edaa5cc66e7c71f1b
trade_manager.py
@@ -3,16 +3,16 @@
对一系列的代码交易变量,下单,撤单进行管理
"""
# 交易管理器
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
@@ -34,6 +34,8 @@
TRADE_STATE_BUY_CANCEL_SUCCESS = 14
# 买成功
TRADE_STATE_BUY_SUCCESS = 12
guiTrade = THSGuiTrade()
@@ -102,8 +104,10 @@
                    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"]))
# 保存交易委托数据
@@ -118,10 +122,10 @@
        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()
@@ -155,50 +159,11 @@
        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:
@@ -220,7 +185,7 @@
# 购买
@async_call
@tool.async_call
def __buy(code, price, trade_state, capture_timestamp, last_data, last_data_index):
    try:
        guiTrade.buy(code, price)
@@ -290,7 +255,7 @@
        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)
@@ -298,6 +263,8 @@
                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)
# 处理委托成功数据