"""
|
策略参数设置
|
"""
|
import json
|
|
from db.mysql_data_delegate import Mysqldb
|
from utils import tool
|
|
|
class StrategyParamsSettings:
|
# 禁止买入
|
STATE_FORBIDDEN_BUY = 0
|
# 正常买入
|
STATE_NORMAL_BUY = 1
|
|
def __init__(self):
|
# 交易状态
|
self.trade_state = 1
|
# 买入金额
|
self.buy_money = 2000
|
# 最大买入票的数量
|
self.max_buy_codes_count = 10
|
# 价格区间
|
self.price_range = (3, 60)
|
# 老题材涨停数
|
self.limit_up_count_of_old_plate = 3
|
# 新题材涨停数
|
self.limit_up_count_of_new_plate = 3
|
# 昨日不能涨停
|
self.cant_yesterday_limit_up = True
|
# 昨日不能跌停
|
self.cant_yesterday_limit_down = True
|
# 昨日不能炸板
|
self.cant_yesterday_open_limit_up = False
|
# 有涨停的交易日数量
|
self.has_limit_up_days = 10
|
# xx个交易日内不能有xx次涨停
|
self.trade_days_count_of_limit_up = 5
|
# 涨停次数
|
self.count_of_limit_up = 3
|
|
# xx个交易日内不能有xx次涨停
|
self.trade_days_count_of_limit_down = 5
|
# 跌停次数
|
self.count_of_limit_down = 3
|
|
# xx个交易日内不能有xx次炸板
|
self.trade_days_count_of_open_limit_up = 5
|
# 炸板次数
|
self.count_of_open_limit_up = 3
|
# 是否可买创业板
|
self.can_buy_ge_code = True
|
# 自由市值范围
|
self.zyltgb_range = (10e8, 300e8)
|
# 是否可买今日涨停过的票
|
self.can_buy_limited_up = False
|
# 最低开盘涨幅
|
self.min_open_rate = 0.00001
|
# 可买的涨幅比例
|
self.avaiable_rates = (-0.03, 0.07)
|
# 今日涨停价需突破XX日最高价,None表示此条数据不生效
|
self.trade_days_count_of_limit_up_price_over_high = None
|
# 今日买价与最高价的差值在XX比例以内
|
self.min_rate_of_highest_and_price = 0.04
|
# 最多高于均价xx比例
|
self.max_rate_than_average_price = 0.03
|
|
def to_json_str(self):
|
d = self.__dict__
|
return json.dumps(d)
|
|
@classmethod
|
def to_obj(cls, json_str):
|
result = json.loads(json_str)
|
obj = StrategyParamsSettings()
|
for k in result:
|
setattr(obj, k, result[k])
|
return obj
|
|
|
@tool.singleton
|
class StrategyParamsSettingsManager:
|
def __init__(self):
|
self.musql = Mysqldb()
|
self.__settings = StrategyParamsSettings()
|
self.__load_data()
|
|
def __load_data(self):
|
sql = f"select `value` from config where `key` = 'low_suction_settings'"
|
setting_str_list = self.musql.select_one(sql)
|
if setting_str_list and setting_str_list[0]:
|
self.__settings = StrategyParamsSettings.to_obj(setting_str_list[0])
|
|
def set_settings(self, settings: StrategyParamsSettings):
|
sql = f"update config set `value` = '{settings.to_json_str()}' where `key` = 'low_suction_settings'"
|
self.musql.execute(sql)
|
self.__settings = settings
|
|
def get_settings(self):
|
return self.__settings
|
|
|
if __name__ == "__main__":
|
settings = StrategyParamsSettingsManager().get_settings()
|
StrategyParamsSettingsManager().set_settings(settings)
|