Administrator
2023-12-01 95e52fd8db1d2801110cc84f1e4bd42a546a4a5c
trade/sell/sell_rule_manager.py
File was renamed from trade/sell_rule_manager.py
@@ -2,17 +2,23 @@
卖出规则管理
"""
import json
import threading
from db import mysql_data_delegate as mysql_data
from utils import tool
import concurrent.futures
class SellRule:
    def __init__(self, id_=None, code=None, buy1_volume=None, sell_volume=None, day=None, create_time=None, excuted=0,
    def __init__(self, id_=None, code=None, buy1_volume=None, buy1_price=None, sell_volume=None, sell_price_type=None,
                 day=None, create_time=None, excuted=0,
                 end_time=None):
        self.day = day
        self.create_time = create_time
        self.sell_volume = sell_volume
        self.buy1_volume = buy1_volume
        self.buy1_price = buy1_price
        self.sell_price_type = sell_price_type
        self.code = code
        self.id_ = id_
        self.excuted = 0
@@ -37,6 +43,11 @@
class SellRuleManager:
    __instance = None
    __sell_rules_dict_cache = {}
    # 卖出锁
    __sell_lock_dict = {}
    __mysql_excute_thread_pool = concurrent.futures.ThreadPoolExecutor(max_workers=10)
    def __new__(cls, *args, **kwargs):
        if not cls.__instance:
@@ -59,11 +70,13 @@
                rule.id_ = r[0]
                rule.code = r[1]
                rule.buy1_volume = r[2]
                rule.sell_volume = r[3]
                rule.day = r[4]
                rule.create_time = r[5]
                rule.excuted = r[6]
                rule.end_time = r[7]
                rule.buy1_price = r[3]
                rule.sell_volume = r[4]
                rule.sell_price_type = r[5]
                rule.day = r[6]
                rule.create_time = r[7]
                rule.excuted = r[8]
                rule.end_time = r[9]
                fresults.append(rule)
        return fresults
@@ -75,8 +88,9 @@
        if not rule.day:
            rule.day = tool.get_now_date_str()
        mysql_data.Mysqldb().execute(
            "insert into sell_rules(_id,code,buy1_volume,sell_volume,day,create_time,excuted,end_time) values ('%s','%s','%s','%s','%s',now() ,'%s','%s') " % (
                rule.id_, rule.code, rule.buy1_volume, rule.sell_volume, rule.day, rule.excuted, rule.end_time))
            "insert into sell_rules(_id,code,buy1_volume,buy1_price,sell_volume,sell_price_type,day,create_time,excuted,end_time) values ('%s','%s','%s','%s','%s','%s','%s',now() ,'%s','%s') " % (
                rule.id_, rule.code, rule.buy1_volume, rule.buy1_price, rule.sell_volume, rule.sell_price_type,
                rule.day, rule.excuted, rule.end_time))
        self.__sell_rules_dict_cache[_id] = rule
    # 删除规则
@@ -104,9 +118,23 @@
    def excute_sell(self, _id):
        if _id in self.__sell_rules_dict_cache:
            self.__sell_rules_dict_cache[_id].excuted = 1
        mysql_data.Mysqldb().execute(f"update sell_rules r set r.excuted=1 where r._id='{_id}'")
        self.__mysql_excute_thread_pool.submit(mysql_data.Mysqldb().execute, f"update sell_rules r set r.excuted=1 where r._id='{_id}'")
    # 请求卖出锁
    def require_sell_lock(self, _id):
        if _id not in self.__sell_lock_dict:
            self.__sell_lock_dict[_id] = threading.RLock()
        self.__sell_lock_dict[_id].acquire()
    # 释放卖出锁
    def release_sell_lock(self, _id):
        if _id in self.__sell_lock_dict:
            self.__sell_lock_dict[_id].release()
    # 根据ID获取内容
    def get_by_id(self, _id):
        return self.__sell_rules_dict_cache.get(_id)
if __name__ == "__main__":
    SellRuleManager().del_rule("20231123142639_000333")
    SellRuleManager().excute_sell("20231123142919_000333")
    SellRuleManager().list_rules("2023-12-01")