"""
|
卖出规则管理
|
"""
|
import json
|
from db import mysql_data_delegate as mysql_data
|
from utils import tool
|
|
|
class SellRule:
|
def __init__(self, id_=None, code=None, buy1_volume=None, sell_volume=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.code = code
|
self.id_ = id_
|
self.excuted = 0
|
self.end_time = end_time
|
|
def to_json_str(self):
|
return json.dumps(vars(self))
|
|
def to_dict(self):
|
return vars(self)
|
|
@classmethod
|
def to_object(cls, json_str: str):
|
d = json.loads(json_str)
|
return SellRule(**d)
|
|
@property
|
def id(self):
|
return self.id_
|
|
|
class SellRuleManager:
|
__instance = None
|
__sell_rules_dict_cache = {}
|
|
def __new__(cls, *args, **kwargs):
|
if not cls.__instance:
|
cls.__instance = super(SellRuleManager, cls).__new__(cls, *args, **kwargs)
|
cls.__instance.__load_datas()
|
return cls.__instance
|
|
def __load_datas(self):
|
rules = self.list_rules()
|
self.__sell_rules_dict_cache.clear()
|
for rule in rules:
|
self.__sell_rules_dict_cache[rule.id_] = rule
|
|
def list_rules(self, day=tool.get_now_date_str()):
|
results = mysql_data.Mysqldb().select_all(f"select * from sell_rules r where r.day='{day}'")
|
fresults = []
|
if results:
|
for r in results:
|
rule = SellRule()
|
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]
|
fresults.append(rule)
|
return fresults
|
|
# 添加规则
|
def add_rule(self, rule: SellRule):
|
_id = tool.get_now_date_str('%Y%m%d') + tool.get_now_time_str().replace(":", "") + "_" + rule.code
|
if not rule.id:
|
rule.id_ = _id
|
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))
|
self.__sell_rules_dict_cache[_id] = rule
|
|
# 删除规则
|
def del_rule(self, _id):
|
mysql_data.Mysqldb().execute(f"delete from sell_rules where _id='{_id}'")
|
if _id in self.__sell_rules_dict_cache:
|
self.__sell_rules_dict_cache.pop(_id)
|
|
def list_rules_cache(self):
|
return [self.__sell_rules_dict_cache[k] for k in self.__sell_rules_dict_cache]
|
|
# 获取可以执行的规则
|
def list_can_excut_rules_cache(self, code=None):
|
rules = []
|
for k in self.__sell_rules_dict_cache:
|
rule = self.__sell_rules_dict_cache[k]
|
if code and code != rule.code:
|
continue
|
if rule.excuted == 0 and rule.day == tool.get_now_date_str() and tool.trade_time_sub(rule.end_time,
|
tool.get_now_time_str()) > 0:
|
rules.append(rule)
|
return rules
|
|
# 执行卖
|
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}'")
|
|
|
if __name__ == "__main__":
|
SellRuleManager().del_rule("20231123142639_000333")
|
SellRuleManager().excute_sell("20231123142919_000333")
|