feat: Add new files and enhance backtesting functionality
Changes: - Introduced new files for strategy definitions and study names. - Enhanced `backtest_web.py` with functions to handle integer display prices and trade data formatting. - Updated backtesting logic to incorporate end-of-day (EOD) parameters for breakout and momentum strategies. - Added EOD configuration options in the database and parameter search files. Impact: - These changes improve the modularity and usability of the backtesting framework, allowing for better integration of EOD strategies and clearer trade data presentation.
This commit is contained in:
@@ -98,9 +98,19 @@ def build_live_config_groups() -> List[GroupDef]:
|
||||
{
|
||||
"id": "daily_profit_global",
|
||||
"title": "일일 익절 — 총합 (마스터)",
|
||||
"hint": "env_config · 달성 시 전 전략 신규 매수 중단 (매도·손절은 유지)",
|
||||
"hint": (
|
||||
"① 손익 감시 켜기 = 당일 실현손익을 목표와 비교 "
|
||||
"(ON이면 목표 달성 시 신규매수 자동 차단) "
|
||||
"② 신규매수 수동 중단 = 목표·손익과 무관하게 매수만 잠금 "
|
||||
"(긴급 일시정지용, 기본 OFF). 매도·손절은 항상 유지"
|
||||
),
|
||||
"fields": [
|
||||
_f("DAILY_PROFIT_TARGET_ENABLED", "활성화", "bool"),
|
||||
_f(
|
||||
"DAILY_PROFIT_TARGET_ENABLED",
|
||||
"손익 감시 켜기 (일일익절)",
|
||||
"bool",
|
||||
hint="ON = 목표 달성 시 신규매수 자동 차단 · OFF = 목표와 무관하게 매수 계속",
|
||||
),
|
||||
_f("DAILY_PROFIT_TARGET_KRW", "목표 금액(원)", "int", default=0),
|
||||
_f("DAILY_PROFIT_TARGET_PCT", "목표 수익률(%)", "float", default=0,
|
||||
hint="퍼센트 그대로 (예: 2.5 = 2.5%) · 0=미사용"),
|
||||
@@ -111,7 +121,16 @@ def build_live_config_groups() -> List[GroupDef]:
|
||||
default=0,
|
||||
hint="0 = ON 전략 TOTAL_BUDGET 합 자동",
|
||||
),
|
||||
_f("DAILY_PROFIT_HALT_NEW_BUYS", "신규 매수 중단", "bool", default=True),
|
||||
_f(
|
||||
"DAILY_PROFIT_HALT_NEW_BUYS",
|
||||
"신규매수 수동 중단",
|
||||
"bool",
|
||||
default=False,
|
||||
hint=(
|
||||
"목표·손익과 무관한 수동 매수 잠금. "
|
||||
"ON=즉시 신규매수 전면 차단 / OFF=정상 (기본)"
|
||||
),
|
||||
),
|
||||
_f("DAILY_PROFIT_NOTIFY_MM", "달성 시 MM 알림", "bool", default=True),
|
||||
_f("DAILY_PROFIT_MODE", "익절 방식", "text", default="fixed",
|
||||
hint="fixed=고정목표 / trailing=고점대비 되돌림 / both=둘 중 먼저"),
|
||||
@@ -184,8 +203,9 @@ def build_live_config_groups() -> List[GroupDef]:
|
||||
dp_fields.extend([
|
||||
_f(
|
||||
_sid_key(sid, "DAILY_PROFIT_TARGET_ENABLED"),
|
||||
f"{lbl} 익절 활성",
|
||||
f"{lbl} 손익 감시 켜기",
|
||||
"bool",
|
||||
hint="OFF = 해당 전략 일일익절 비활성 (매수 차단 없음)",
|
||||
),
|
||||
_f(
|
||||
_sid_key(sid, "DAILY_PROFIT_TARGET_KRW"),
|
||||
@@ -222,11 +242,21 @@ def build_live_config_groups() -> List[GroupDef]:
|
||||
"int",
|
||||
hint="이 이상 벌어야 트레일 감시 · 비우면 마스터 상속",
|
||||
),
|
||||
_f(
|
||||
_sid_key(sid, "DAILY_PROFIT_HALT_NEW_BUYS"),
|
||||
f"{lbl} 신규매수 수동 중단",
|
||||
"bool",
|
||||
default=False,
|
||||
hint="목표 무관 수동 잠금 · 비우면 마스터 상속 · OFF=정상",
|
||||
),
|
||||
])
|
||||
groups.append({
|
||||
"id": "daily_profit_strategy",
|
||||
"title": "일일 익절 — 전략별 (서브)",
|
||||
"hint": "비어 있으면 마스터 값 상속 · 달성 시 해당 전략만 매수 중단",
|
||||
"hint": (
|
||||
"전략별 손익만 따로 감시. 비어 있으면 마스터 값 상속. "
|
||||
"손익 감시 ON이면 목표 달성 시 해당 전략 신규매수 자동 차단"
|
||||
),
|
||||
"fields": dp_fields,
|
||||
})
|
||||
|
||||
@@ -391,6 +421,47 @@ def build_live_config_groups() -> List[GroupDef]:
|
||||
],
|
||||
})
|
||||
|
||||
groups.append({
|
||||
"id": "breakout_exit",
|
||||
"title": "돌파(BREAKOUT) — EOD·시간컷",
|
||||
"hint": (
|
||||
"env_config · 저장 후 다음 매도 루프부터 반영(재시작 불필요). "
|
||||
"EOD OFF 시 당일 15:15 강제청산 없음 — 손절·익절·어깨·시간컷만."
|
||||
),
|
||||
"fields": [
|
||||
_f("BREAKOUT_EOD_ENABLED", "EOD 당일청산 사용", "bool", default=True,
|
||||
hint="ON=설정 시각 이후 보유 전량 eod 청산 · OFF=익절·손절·시간컷만"),
|
||||
_f("BREAKOUT_EOD_HM", "EOD 시각 (HH:MM)", "text", default="15:15",
|
||||
hint="이 시각 이후 보유 전량 청산 · 예: 15:15"),
|
||||
_f("BREAKOUT_MAX_HOLD_BARS", "최대보유(분)", "int", default=0,
|
||||
hint="0=OFF · 진입 후 N분 경과 시 max_hold 청산"),
|
||||
],
|
||||
})
|
||||
|
||||
groups.append({
|
||||
"id": "momentum_exit",
|
||||
"title": "모멘텀(MOMENTUM) — EOD",
|
||||
"hint": "env_config · 저장 후 다음 매도 루프부터 반영(재시작 불필요).",
|
||||
"fields": [
|
||||
_f("MOMENTUM_EOD_ENABLED", "EOD 당일청산 사용", "bool", default=True,
|
||||
hint="ON=설정 시각 이후 보유 전량 장마감청산 · OFF=익절·손절·시간컷만"),
|
||||
_f("MOMENTUM_EOD_HM", "EOD 시각 (HH:MM)", "text", default="15:25",
|
||||
hint="이 시각 이후 보유 전량 청산 · 예: 15:25"),
|
||||
],
|
||||
})
|
||||
|
||||
groups.append({
|
||||
"id": "tail_exit",
|
||||
"title": "꼬리(SHORT/TAIL) — EOD",
|
||||
"hint": "env_config · 저장 후 다음 매도 루프부터 반영(재시작 불필요).",
|
||||
"fields": [
|
||||
_f("TAIL_EOD_ENABLED", "EOD 당일청산 사용", "bool", default=True,
|
||||
hint="ON=설정 시각 이후 보유 전량 장마감 청산 · OFF=익절·손절·시간컷만"),
|
||||
_f("TAIL_EOD_HM", "EOD 시각 (HH:MM)", "text", default="15:25",
|
||||
hint="이 시각 이후 보유 전량 청산 · 예: 15:25"),
|
||||
],
|
||||
})
|
||||
|
||||
groups.append({
|
||||
"id": "portfolio_hold",
|
||||
"title": "보유·매도 / 고아복구",
|
||||
|
||||
Reference in New Issue
Block a user