Files
chan.py/BuySellPoint/BSPointConfig.py
T
2025-06-10 01:16:09 +08:00

79 lines
2.6 KiB
Python

from typing import Dict, List, Optional
from Common.CEnum import BSP_TYPE, MACD_ALGO
from Common.func_util import _parse_inf
class CBSPointConfig:
def __init__(self, **args):
self.b_conf = CPointConfig(**args)
self.s_conf = CPointConfig(**args)
def GetBSConfig(self, is_buy):
return self.b_conf if is_buy else self.s_conf
class CPointConfig:
def __init__(self,
divergence_rate,
min_zs_cnt,
bsp1_only_multibi_zs,
max_bs2_rate,
macd_algo,
bs1_peak,
bs_type,
bsp2_follow_1,
bsp3_follow_1,
bsp3_peak,
bsp2s_follow_2,
max_bsp2s_lv,
strict_bsp3,
):
self.divergence_rate = divergence_rate
self.min_zs_cnt = min_zs_cnt
self.bsp1_only_multibi_zs = bsp1_only_multibi_zs
self.max_bs2_rate = max_bs2_rate
assert self.max_bs2_rate <= 1
self.SetMacdAlgo(macd_algo)
self.bs1_peak = bs1_peak
self.tmp_target_types = bs_type
self.target_types: List[BSP_TYPE] = []
self.bsp2_follow_1 = bsp2_follow_1
self.bsp3_follow_1 = bsp3_follow_1
self.bsp3_peak = bsp3_peak
self.bsp2s_follow_2 = bsp2s_follow_2
self.max_bsp2s_lv: Optional[int] = max_bsp2s_lv
self.strict_bsp3 = strict_bsp3
def parse_target_type(self):
_d: Dict[str, BSP_TYPE] = {x.value: x for x in BSP_TYPE}
if isinstance(self.tmp_target_types, str):
self.tmp_target_types = [t.strip() for t in self.tmp_target_types.split(",")]
for target_t in self.tmp_target_types:
assert target_t in ['1', '2', '3a', '2s', '1p', '3b']
self.target_types = [_d[_type] for _type in self.tmp_target_types]
def SetMacdAlgo(self, macd_algo):
_d = {
"area": MACD_ALGO.AREA,
"peak": MACD_ALGO.PEAK,
"full_area": MACD_ALGO.FULL_AREA,
"diff": MACD_ALGO.DIFF,
"slope": MACD_ALGO.SLOPE,
"amp": MACD_ALGO.AMP,
"amount": MACD_ALGO.AMOUNT,
"volumn": MACD_ALGO.VOLUMN,
"amount_avg": MACD_ALGO.AMOUNT_AVG,
"volumn_avg": MACD_ALGO.VOLUMN_AVG,
"turnrate_avg": MACD_ALGO.AMOUNT_AVG,
"rsi": MACD_ALGO.RSI,
}
self.macd_algo = _d[macd_algo]
def set(self, k, v):
v = _parse_inf(v)
if k == "macd_algo":
self.SetMacdAlgo(v)
else:
exec(f"self.{k} = {v}")