File was renamed from trade/sell_rule_manager.py |
| | |
| | | 卖出规则管理 |
| | | """ |
| | | 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 |
| | |
| | | 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: |
| | |
| | | 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 |
| | | |
| | |
| | | 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 |
| | | |
| | | # 删除规则 |
| | |
| | | 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") |