feat: 새로운 안전 규칙 및 최적화 적용을 통한 트레이딩 시스템 개선
변경 사항 (Changes): 구문 오류(Syntax error) 및 토큰 낭비를 방지하기 위해 에이전트 쉘(Agent shell)과 파이썬 코드 스니펫에 다수의 신규 안전 규칙(Safety rules)을 추가함. 스키마 검증 및 적절한 SQL 포맷팅을 보장하기 위해 임시(Ad-hoc) 데이터베이스 쿼리 작성 가이드라인을 도입함. 코드 수정 후 UI 기능이 정상 작동하는지 확인하기 위해, 백테스트 웹 서비스 재시작 및 브라우저 검증에 대한 새로운 규칙을 구현함. 시스템 전반의 무결성(Integrity)을 유지하기 위해 실전 매매(Live trading), 웹 백테스팅, 파라미터 탐색(Parameter searches) 간의 일관성 검사(Consistency checks) 체계를 확립함. 기대 효과 (Impact): 이러한 개선 사항들은 트레이딩 시스템의 견고성(Robustness)과 신뢰성을 향상시키며, 에러 발생을 최소화하고 다양한 시스템 컴포넌트 간의 원활한 상호작용을 보장함.
This commit is contained in:
@@ -67,6 +67,10 @@ TAIL_CONFIG_KEYS = frozenset({
|
||||
"TAIL_RSI_PERIOD",
|
||||
"TAIL_COOLDOWN_SEC",
|
||||
"TAIL_MAX_DAILY",
|
||||
"TAIL_SYMBOL_DAILY_LOSS_LIMIT_KRW",
|
||||
"TAIL_SYMBOL_DAILY_LOSS_LIMIT_PCT",
|
||||
"TAIL_REENTRY_MIN_EDGE_KRW",
|
||||
"TAIL_REENTRY_REQUIRE_NONNEG",
|
||||
"TAIL_HIGH_CHASE_THR",
|
||||
"TAIL_TIME_START",
|
||||
"TAIL_TIME_END",
|
||||
@@ -199,6 +203,7 @@ def params_to_tail_env_patch(p: Dict[str, Any]) -> Dict[str, str]:
|
||||
_set("TAIL_MAX_HOLD_BARS", int(float(p["max_hold_bars"])))
|
||||
for js_k, env_k in (
|
||||
("backtest_use_tick_db", "TAIL_BACKTEST_USE_TICK_DB"),
|
||||
("backtest_use_tick_exit", "TAIL_BACKTEST_USE_TICK_EXIT"),
|
||||
("backtest_tick_fallback_ohlc", "TAIL_BACKTEST_TICK_FALLBACK_OHLC"),
|
||||
):
|
||||
if js_k in p:
|
||||
@@ -238,6 +243,14 @@ def params_to_tail_env_patch(p: Dict[str, Any]) -> Dict[str, str]:
|
||||
_set("TAIL_TIME_END", int(float(p["time_end_hm"])))
|
||||
if "max_daily" in p and p["max_daily"] is not None:
|
||||
_set("TAIL_MAX_DAILY", int(float(p["max_daily"])))
|
||||
if "symbol_daily_loss_limit_krw" in p and p["symbol_daily_loss_limit_krw"] is not None:
|
||||
_set("TAIL_SYMBOL_DAILY_LOSS_LIMIT_KRW", abs(float(p["symbol_daily_loss_limit_krw"])))
|
||||
if "symbol_daily_loss_limit_pct" in p and p["symbol_daily_loss_limit_pct"] is not None:
|
||||
_set("TAIL_SYMBOL_DAILY_LOSS_LIMIT_PCT", abs(float(p["symbol_daily_loss_limit_pct"])))
|
||||
if "reentry_min_edge_krw" in p and p["reentry_min_edge_krw"] is not None:
|
||||
_set("TAIL_REENTRY_MIN_EDGE_KRW", abs(float(p["reentry_min_edge_krw"])))
|
||||
if "reentry_require_nonneg" in p:
|
||||
_set("TAIL_REENTRY_REQUIRE_NONNEG", str(p["reentry_require_nonneg"]).lower())
|
||||
if "eod_enabled" in p:
|
||||
v = p.get("eod_enabled")
|
||||
patch["TAIL_EOD_ENABLED"] = (
|
||||
@@ -362,7 +375,9 @@ def web_body_to_tail_env_patch(body: Dict[str, Any]) -> Dict[str, str]:
|
||||
p["high_chase_thr"] = x if 0 < x <= 1 else x / 100.0
|
||||
for k in (
|
||||
"cooldown_min", "rsi_threshold", "rsi_period", "time_start", "time_end",
|
||||
"max_daily", "min_price", "max_daily_change", "ma20_max_above",
|
||||
"max_daily", "symbol_daily_loss_limit_krw", "symbol_daily_loss_limit_pct",
|
||||
"reentry_min_edge_krw", "reentry_require_nonneg",
|
||||
"min_price", "max_daily_change", "ma20_max_above",
|
||||
"max_loss_krw", "stop_atr_mult", "target_atr_mult",
|
||||
"atr_sl_min_pct", "atr_sl_max_pct", "atr_tp_min_pct", "atr_tp_max_pct",
|
||||
"slot_money", "max_stocks", "total_budget_krw", "entry_mode",
|
||||
@@ -371,7 +386,7 @@ def web_body_to_tail_env_patch(body: Dict[str, Any]) -> Dict[str, str]:
|
||||
"use_rsi_filter", "use_daily_range_filter", "use_high_chase_filter",
|
||||
"bar_chg_min_pct", "bar_chg_max_pct", "max_hold_bars",
|
||||
"tail_vol_mult", "tail_vol_win",
|
||||
"backtest_use_tick_db", "backtest_tick_fallback_ohlc",
|
||||
"backtest_use_tick_db", "backtest_use_tick_exit", "backtest_tick_fallback_ohlc",
|
||||
"pattern_hammer", "pattern_pin", "pattern_engulfing", "pattern_piercing",
|
||||
"pattern_harami", "pattern_doji", "pattern_morning_star",
|
||||
"pin_close_upper_ratio", "pin_max_upper_tail_ratio",
|
||||
|
||||
Reference in New Issue
Block a user