초기 자금 GT_INITIAL_CASH_KRW=400000과 원화 한도 비율(알림·LIVE_ORDER·일한도·손실한도)을 맞추고, dry-run/live 체결을 sim_causal_hybrid(replay)와 동일 경로로 통합한다. 시뮬 리포트 갱신, Phase C 슈퍼바이저·매수매도 리허설 스크립트를 추가한다. Co-authored-by: Cursor <cursoragent@cursor.com>
1527 lines
35 KiB
JSON
1527 lines
35 KiB
JSON
{
|
||
"label_mode": "leg_gt",
|
||
"train_ratio": 0.7,
|
||
"holdout_ratio": 0.15,
|
||
"outcomes_rows": 86924,
|
||
"walk_forward": [
|
||
{
|
||
"month": "2025-06",
|
||
"pnl_pct": 10.02,
|
||
"start_asset_krw": 400000.0,
|
||
"end_asset_krw": 440064.0
|
||
},
|
||
{
|
||
"month": "2025-07",
|
||
"pnl_pct": 60.89,
|
||
"start_asset_krw": 440064.0,
|
||
"end_asset_krw": 708031.0
|
||
},
|
||
{
|
||
"month": "2025-08",
|
||
"pnl_pct": 22.9,
|
||
"start_asset_krw": 708031.0,
|
||
"end_asset_krw": 870154.0
|
||
},
|
||
{
|
||
"month": "2025-09",
|
||
"pnl_pct": 58.24,
|
||
"start_asset_krw": 870154.0,
|
||
"end_asset_krw": 1376957.0
|
||
},
|
||
{
|
||
"month": "2025-10",
|
||
"pnl_pct": 1.41,
|
||
"start_asset_krw": 1376957.0,
|
||
"end_asset_krw": 1396376.0
|
||
},
|
||
{
|
||
"month": "2025-11",
|
||
"pnl_pct": 19.55,
|
||
"start_asset_krw": 1396376.0,
|
||
"end_asset_krw": 1669367.0
|
||
},
|
||
{
|
||
"month": "2025-12",
|
||
"pnl_pct": -1.53,
|
||
"start_asset_krw": 1669367.0,
|
||
"end_asset_krw": 1643749.0
|
||
},
|
||
{
|
||
"month": "2026-01",
|
||
"pnl_pct": 28.68,
|
||
"start_asset_krw": 1643749.0,
|
||
"end_asset_krw": 2115197.0
|
||
},
|
||
{
|
||
"month": "2026-02",
|
||
"pnl_pct": 20.21,
|
||
"start_asset_krw": 2115197.0,
|
||
"end_asset_krw": 2542690.0
|
||
},
|
||
{
|
||
"month": "2026-03",
|
||
"pnl_pct": 9.7,
|
||
"start_asset_krw": 2542690.0,
|
||
"end_asset_krw": 2789334.0
|
||
},
|
||
{
|
||
"month": "2026-04",
|
||
"pnl_pct": 22.86,
|
||
"start_asset_krw": 2789334.0,
|
||
"end_asset_krw": 3426893.0
|
||
},
|
||
{
|
||
"month": "2026-05",
|
||
"pnl_pct": 44.66,
|
||
"start_asset_krw": 3426893.0,
|
||
"end_asset_krw": 4957419.0
|
||
}
|
||
],
|
||
"walk_forward_summary": {
|
||
"buy_compound_tight": {
|
||
"months": 12,
|
||
"positive_months": 9,
|
||
"positive_ratio": 0.75,
|
||
"mean_ev_pct": 5.7974
|
||
},
|
||
"buy_compound_top3": {
|
||
"months": 12,
|
||
"positive_months": 9,
|
||
"positive_ratio": 0.75,
|
||
"mean_ev_pct": 5.5076
|
||
},
|
||
"buy_contrast_m10_bb_pos": {
|
||
"months": 12,
|
||
"positive_months": 9,
|
||
"positive_ratio": 0.75,
|
||
"mean_ev_pct": 5.4605
|
||
},
|
||
"buy_mtf_cross_all_tf": {
|
||
"months": 12,
|
||
"positive_months": 11,
|
||
"positive_ratio": 0.9167,
|
||
"mean_ev_pct": 6.007
|
||
},
|
||
"gt_model_buy_trough_local": {
|
||
"months": 12,
|
||
"positive_months": 10,
|
||
"positive_ratio": 0.8333,
|
||
"mean_ev_pct": 6.2957
|
||
},
|
||
"gt_model_buy_zigzag_bb": {
|
||
"months": 8,
|
||
"positive_months": 8,
|
||
"positive_ratio": 1.0,
|
||
"mean_ev_pct": 10.2649
|
||
},
|
||
"gt_model_sell_peak_local": {
|
||
"months": 12,
|
||
"positive_months": 12,
|
||
"positive_ratio": 1.0,
|
||
"mean_ev_pct": 2.6379
|
||
},
|
||
"gt_model_sell_zigzag_peak": {
|
||
"months": 2,
|
||
"positive_months": 2,
|
||
"positive_ratio": 1.0,
|
||
"mean_ev_pct": 11.6154
|
||
},
|
||
"sell_compound_tight": {
|
||
"months": 12,
|
||
"positive_months": 12,
|
||
"positive_ratio": 1.0,
|
||
"mean_ev_pct": 4.7678
|
||
},
|
||
"sell_compound_top3": {
|
||
"months": 12,
|
||
"positive_months": 12,
|
||
"positive_ratio": 1.0,
|
||
"mean_ev_pct": 4.6836
|
||
},
|
||
"sell_contrast_m10_bb_pos": {
|
||
"months": 12,
|
||
"positive_months": 12,
|
||
"positive_ratio": 1.0,
|
||
"mean_ev_pct": 4.5331
|
||
},
|
||
"sell_mtf_cross_all_tf": {
|
||
"months": 12,
|
||
"positive_months": 12,
|
||
"positive_ratio": 1.0,
|
||
"mean_ev_pct": 6.9987
|
||
}
|
||
},
|
||
"fee_stress_mult": 2.0,
|
||
"fee_stress_by_rule": {
|
||
"buy_compound_top3": {
|
||
"count": 17631,
|
||
"ev_pct": 5.2063,
|
||
"win_rate": 0.7138,
|
||
"profit_factor": 3.4418
|
||
},
|
||
"buy_compound_tight": {
|
||
"count": 2287,
|
||
"ev_pct": 4.9966,
|
||
"win_rate": 0.6874,
|
||
"profit_factor": 3.0632
|
||
},
|
||
"buy_contrast_m10_bb_pos": {
|
||
"count": 17993,
|
||
"ev_pct": 5.2294,
|
||
"win_rate": 0.7098,
|
||
"profit_factor": 3.4977
|
||
},
|
||
"buy_mtf_cross_all_tf": {
|
||
"count": 3533,
|
||
"ev_pct": 5.3986,
|
||
"win_rate": 0.7085,
|
||
"profit_factor": 3.899
|
||
},
|
||
"sell_compound_top3": {
|
||
"count": 15799,
|
||
"ev_pct": 4.5906,
|
||
"win_rate": 0.9455,
|
||
"profit_factor": 29.2716
|
||
},
|
||
"sell_compound_tight": {
|
||
"count": 2547,
|
||
"ev_pct": 4.7878,
|
||
"win_rate": 0.9458,
|
||
"profit_factor": 38.8127
|
||
},
|
||
"sell_contrast_m10_bb_pos": {
|
||
"count": 16104,
|
||
"ev_pct": 4.4385,
|
||
"win_rate": 0.9343,
|
||
"profit_factor": 25.8628
|
||
},
|
||
"sell_mtf_cross_all_tf": {
|
||
"count": 2938,
|
||
"ev_pct": 7.1232,
|
||
"win_rate": 1.0,
|
||
"profit_factor": 20927.8254
|
||
},
|
||
"gt_model_buy_zigzag_bb": {
|
||
"count": 25,
|
||
"ev_pct": 8.5824,
|
||
"win_rate": 0.84,
|
||
"profit_factor": 41.1466
|
||
},
|
||
"gt_model_buy_trough_local": {
|
||
"count": 1505,
|
||
"ev_pct": 5.9624,
|
||
"win_rate": 0.7302,
|
||
"profit_factor": 4.588
|
||
},
|
||
"gt_model_sell_zigzag_peak": {
|
||
"count": 8,
|
||
"ev_pct": 11.7981,
|
||
"win_rate": 1.0,
|
||
"profit_factor": 94.3851
|
||
},
|
||
"gt_model_sell_peak_local": {
|
||
"count": 6554,
|
||
"ev_pct": 2.3084,
|
||
"win_rate": 0.8184,
|
||
"profit_factor": 4.8039
|
||
}
|
||
},
|
||
"live_order_cap_sim": {
|
||
"assumptions": {
|
||
"slippage_pct": 0.05,
|
||
"sizing": "hybrid_dd_tier_compound"
|
||
},
|
||
"taken_count": 787,
|
||
"total_count": 845,
|
||
"rules": {
|
||
"buy_compound_tight": {
|
||
"taken_count": 163,
|
||
"total_count": 221,
|
||
"metrics": {
|
||
"count": 163,
|
||
"ev_pct": 3.5096,
|
||
"win_rate": 0.5828,
|
||
"profit_factor": 2.0105
|
||
}
|
||
},
|
||
"sell_mtf_cross_all_tf": {
|
||
"taken_count": 624,
|
||
"total_count": 624,
|
||
"metrics": {
|
||
"count": 624,
|
||
"ev_pct": 7.0822,
|
||
"win_rate": 1.0,
|
||
"profit_factor": 4419.2872
|
||
}
|
||
}
|
||
},
|
||
"portfolio_adj_ev_pct": 6.3423
|
||
},
|
||
"go_no_go": {
|
||
"go": true,
|
||
"checks": [
|
||
{
|
||
"rule_id": "buy_compound_tight",
|
||
"side": "buy",
|
||
"pass": true,
|
||
"holdout_ev": 5.6633,
|
||
"holdout_pf": 3.1592,
|
||
"wf_positive_ratio": 0.75,
|
||
"fee_stress_ev": 4.9966
|
||
},
|
||
{
|
||
"rule_id": "sell_mtf_cross_all_tf",
|
||
"side": "sell",
|
||
"pass": true,
|
||
"holdout_ev": 7.1322,
|
||
"holdout_pf": 4450.4872,
|
||
"wf_positive_ratio": 1.0,
|
||
"fee_stress_ev": 7.1232
|
||
}
|
||
],
|
||
"live_cap_taken_ratio": 1.0
|
||
},
|
||
"go_no_go_hybrid": {
|
||
"go": true,
|
||
"primary_sizing": "hybrid",
|
||
"checks": [
|
||
{
|
||
"name": "monitor_rules_go",
|
||
"pass": true
|
||
},
|
||
{
|
||
"name": "hybrid_holdout_pnl",
|
||
"pass": true,
|
||
"value": 59.15
|
||
},
|
||
{
|
||
"name": "hybrid_max_mdd",
|
||
"pass": true,
|
||
"value": 19.89
|
||
},
|
||
{
|
||
"name": "hybrid_fee_stress_pnl",
|
||
"pass": true,
|
||
"value": 947.42
|
||
},
|
||
{
|
||
"name": "option_c_target_300pct",
|
||
"pass": true,
|
||
"value": 1116.87,
|
||
"optional": true
|
||
}
|
||
]
|
||
},
|
||
"go_no_go_option_c_phase2": {
|
||
"go": false,
|
||
"gt_capture_ratio": 0.1587,
|
||
"targets": {
|
||
"phase2_pnl_pct": 1000.0,
|
||
"min_gt_capture": 0.23,
|
||
"portfolio_wf_min_ratio": 0.5
|
||
},
|
||
"checks": [
|
||
{
|
||
"name": "phase1_hybrid_go",
|
||
"pass": true
|
||
},
|
||
{
|
||
"name": "full_pnl_1000pct",
|
||
"pass": true,
|
||
"value": 1116.87
|
||
},
|
||
{
|
||
"name": "gt_capture_23pct",
|
||
"pass": false,
|
||
"value": 0.1587
|
||
},
|
||
{
|
||
"name": "holdout_pnl_positive",
|
||
"pass": true,
|
||
"value": 59.15
|
||
},
|
||
{
|
||
"name": "max_mdd",
|
||
"pass": true,
|
||
"value": 19.89
|
||
},
|
||
{
|
||
"name": "fee_stress_ratio",
|
||
"pass": true,
|
||
"value": 947.42,
|
||
"threshold": 850.0
|
||
},
|
||
{
|
||
"name": "slippage_stress_positive",
|
||
"pass": true,
|
||
"value": 28.14,
|
||
"note": "체결가 슬리피지 반영 후에도 흑자"
|
||
},
|
||
{
|
||
"name": "portfolio_wf_positive_ratio",
|
||
"pass": true,
|
||
"value": 0.9167
|
||
}
|
||
]
|
||
},
|
||
"portfolio_compare": {
|
||
"ground_truth_chrono": {
|
||
"initial_cash_krw": 400000,
|
||
"final_asset_krw": 28554960.0,
|
||
"pnl_krw": 28154960.0,
|
||
"pnl_pct": 7038.74,
|
||
"total_fees_krw": 240578.0,
|
||
"cash_krw": 28554960.0,
|
||
"holding_qty": 0.0,
|
||
"holding_value_krw": 0.0,
|
||
"mark_price": 487.0,
|
||
"fee_rate": 0.0005,
|
||
"trade_count": 456,
|
||
"max_drawdown_pct": 8.34,
|
||
"peak_asset_krw": 9032973.0,
|
||
"trough_asset_krw": 8279398.0
|
||
},
|
||
"sim_sized": {
|
||
"initial_cash_krw": 400000,
|
||
"final_asset_krw": 546248.0,
|
||
"pnl_krw": 146248.0,
|
||
"pnl_pct": 36.56,
|
||
"total_fees_krw": 15161.0,
|
||
"cash_krw": 467164.0,
|
||
"holding_qty": 162.389581,
|
||
"holding_value_krw": 79084.0,
|
||
"mark_price": 487.0,
|
||
"fee_rate": 0.0005,
|
||
"trade_count": 5225,
|
||
"max_drawdown_pct": 20.54,
|
||
"peak_asset_krw": 412326.0,
|
||
"trough_asset_krw": 327644.0,
|
||
"sizing_mode": "gt_model_compound_causal",
|
||
"sizing_note": "전기간 복리·GT tier·총자산×비중, 보유현금 한도; 인과적 신호·tier(미래 미사용)"
|
||
},
|
||
"sim_fixed_order": {
|
||
"initial_cash_krw": 400000,
|
||
"final_asset_krw": 23356.0,
|
||
"pnl_krw": -376644.0,
|
||
"pnl_pct": -94.16,
|
||
"total_fees_krw": 17548.0,
|
||
"cash_krw": 0.0,
|
||
"holding_qty": 47.958506,
|
||
"holding_value_krw": 23356.0,
|
||
"mark_price": 487.0,
|
||
"fee_rate": 0.0005,
|
||
"order_krw": 40000.0,
|
||
"sizing_mode": "fixed",
|
||
"trade_count": 5225
|
||
},
|
||
"sim_gt_model": {
|
||
"initial_cash_krw": 400000,
|
||
"final_asset_krw": 418244.0,
|
||
"pnl_krw": 18244.0,
|
||
"pnl_pct": 4.56,
|
||
"total_fees_krw": 120.0,
|
||
"cash_krw": 309487.0,
|
||
"holding_qty": 223.320164,
|
||
"holding_value_krw": 108757.0,
|
||
"mark_price": 487.0,
|
||
"fee_rate": 0.0005,
|
||
"trade_count": 33,
|
||
"max_drawdown_pct": 9.79,
|
||
"peak_asset_krw": 429734.0,
|
||
"trough_asset_krw": 387649.0,
|
||
"sizing_mode": "gt_model_compound_causal",
|
||
"sizing_note": "전기간 복리·GT tier·총자산×비중, 보유현금 한도; 인과적 신호·tier(미래 미사용)"
|
||
},
|
||
"sim_causal_gt": {
|
||
"initial_cash_krw": 400000,
|
||
"final_asset_krw": 459948.0,
|
||
"pnl_krw": 59948.0,
|
||
"pnl_pct": 14.99,
|
||
"total_fees_krw": 900.0,
|
||
"cash_krw": 459948.0,
|
||
"holding_qty": 0.0,
|
||
"holding_value_krw": 0.0,
|
||
"mark_price": 487.0,
|
||
"fee_rate": 0.0005,
|
||
"trade_count": 129,
|
||
"max_drawdown_pct": 1.51,
|
||
"peak_asset_krw": 448991.0,
|
||
"trough_asset_krw": 442216.0,
|
||
"leg_count": 17,
|
||
"sizing_mode": "causal_gt_leg_engine",
|
||
"sizing_note": "인과 GT leg: split_buy + peak_sell, causal tier 복리 (미래 미사용)",
|
||
"causal_gt_params": {
|
||
"peak_mode": "local",
|
||
"pivot_order": 8,
|
||
"buy_swing_pct": 2.0,
|
||
"sell_swing_pct": 3.0,
|
||
"bb_max": 0.55,
|
||
"min_leg_pct": 8.0,
|
||
"min_bars_between_legs": 60,
|
||
"use_local_trough": false
|
||
},
|
||
"alloc_stats": {
|
||
"buy_executed": 96,
|
||
"buy_skipped": 0,
|
||
"sell_executed": 33,
|
||
"sell_skipped": 0,
|
||
"buy_total_krw": 870005.0,
|
||
"large_leg_count": 0,
|
||
"large_tier_buy_count": 0,
|
||
"buy_amount_avg_krw": 9063.0,
|
||
"buy_amount_min_krw": 5000,
|
||
"buy_amount_max_krw": 22925.0
|
||
}
|
||
},
|
||
"sim_causal_hybrid": {
|
||
"initial_cash_krw": 400000,
|
||
"final_asset_krw": 4867465.0,
|
||
"pnl_krw": 4467465.0,
|
||
"pnl_pct": 1116.87,
|
||
"total_fees_krw": 277183.0,
|
||
"cash_krw": 3.0,
|
||
"holding_qty": 9994.789459,
|
||
"holding_value_krw": 4867462.0,
|
||
"mark_price": 487.0,
|
||
"fee_rate": 0.0005,
|
||
"trade_count": 5225,
|
||
"max_drawdown_pct": 19.89,
|
||
"peak_asset_krw": 3104956.0,
|
||
"trough_asset_krw": 2487267.0,
|
||
"sizing_mode": "monitor_dd_tier",
|
||
"sizing_note": "monitor buy+sell + drawdown·past-leg tier (미래 미사용)",
|
||
"alloc_stats": {
|
||
"buy_executed": 1628,
|
||
"buy_skipped": 659,
|
||
"sell_executed": 2938,
|
||
"sell_skipped": 0,
|
||
"buy_total_krw": 277244801.0,
|
||
"large_leg_count": 1532,
|
||
"large_tier_buy_count": 1532,
|
||
"buy_amount_avg_krw": 170298.0,
|
||
"buy_amount_min_krw": 323.0,
|
||
"buy_amount_max_krw": 3363487.0
|
||
},
|
||
"input_fires": 5225
|
||
},
|
||
"hybrid_dd_params": {
|
||
"dd_large_pct": 5.0,
|
||
"dd_medium_pct": 2.0
|
||
},
|
||
"sim_tier_enhanced": {
|
||
"initial_cash_krw": 400000,
|
||
"final_asset_krw": 232667.0,
|
||
"pnl_krw": -167333.0,
|
||
"pnl_pct": -41.83,
|
||
"total_fees_krw": 51034.0,
|
||
"cash_krw": -0.0,
|
||
"holding_qty": 477.75476,
|
||
"holding_value_krw": 232667.0,
|
||
"mark_price": 487.0,
|
||
"fee_rate": 0.0005,
|
||
"trade_count": 5225,
|
||
"max_drawdown_pct": 73.4,
|
||
"peak_asset_krw": 735586.0,
|
||
"trough_asset_krw": 195638.0,
|
||
"sizing_mode": "monitor_tier_enhanced",
|
||
"sizing_note": "monitor buy+sell + past-leg·drawdown tier + conviction (미래 미사용)",
|
||
"alloc_stats": {
|
||
"buy_executed": 241,
|
||
"buy_skipped": 2046,
|
||
"sell_executed": 2938,
|
||
"sell_skipped": 0,
|
||
"buy_total_krw": 51208940.0,
|
||
"large_leg_count": 143,
|
||
"large_tier_buy_count": 143,
|
||
"buy_amount_avg_krw": 212485.0,
|
||
"buy_amount_min_krw": 5000,
|
||
"buy_amount_max_krw": 735224.0
|
||
},
|
||
"input_fires": 5225
|
||
},
|
||
"sim_sized_holdout": {
|
||
"initial_asset_krw": 515736.0,
|
||
"final_asset_krw": 547709.0,
|
||
"pnl_krw": 31973.0,
|
||
"pnl_pct": 6.2,
|
||
"trade_count": 845,
|
||
"note": "전기간 복리(causal tier) 후 holdout 구간 자산 증감"
|
||
},
|
||
"sim_hybrid_holdout": {
|
||
"initial_asset_krw": 3114931.0,
|
||
"final_asset_krw": 4957419.0,
|
||
"pnl_krw": 1842488.0,
|
||
"pnl_pct": 59.15,
|
||
"trade_count": 845,
|
||
"note": "전기간 복리(hybrid DD tier) 후 holdout 구간 자산 증감"
|
||
},
|
||
"sim_hybrid_fee_stress": {
|
||
"initial_cash_krw": 400000,
|
||
"final_asset_krw": 4189669.0,
|
||
"pnl_krw": 3789669.0,
|
||
"pnl_pct": 947.42,
|
||
"total_fees_krw": 502923.0,
|
||
"cash_krw": -0.0,
|
||
"holding_qty": 8603.015894,
|
||
"holding_value_krw": 4189669.0,
|
||
"mark_price": 487.0,
|
||
"fee_rate": 0.001,
|
||
"trade_count": 5225,
|
||
"max_drawdown_pct": 20.18,
|
||
"peak_asset_krw": 460724.0,
|
||
"trough_asset_krw": 367741.0
|
||
},
|
||
"sim_hybrid_slippage_stress": {
|
||
"initial_cash_krw": 400000,
|
||
"final_asset_krw": 512580.0,
|
||
"pnl_krw": 112580.0,
|
||
"pnl_pct": 28.14,
|
||
"total_fees_krw": 277183.0,
|
||
"cash_krw": -0.0,
|
||
"holding_qty": 1052.52527,
|
||
"holding_value_krw": 512580.0,
|
||
"mark_price": 487.0,
|
||
"fee_rate": 0.0005,
|
||
"trade_count": 5225,
|
||
"max_drawdown_pct": 59.13,
|
||
"peak_asset_krw": 1358898.0,
|
||
"trough_asset_krw": 555385.0,
|
||
"slippage_pct": 0.05,
|
||
"sizing_mode": "hybrid_slippage_stress"
|
||
},
|
||
"hybrid_portfolio_walk_forward": [
|
||
{
|
||
"month": "2025-06",
|
||
"pnl_pct": 10.02,
|
||
"start_asset_krw": 400000.0,
|
||
"end_asset_krw": 440064.0
|
||
},
|
||
{
|
||
"month": "2025-07",
|
||
"pnl_pct": 60.89,
|
||
"start_asset_krw": 440064.0,
|
||
"end_asset_krw": 708031.0
|
||
},
|
||
{
|
||
"month": "2025-08",
|
||
"pnl_pct": 22.9,
|
||
"start_asset_krw": 708031.0,
|
||
"end_asset_krw": 870154.0
|
||
},
|
||
{
|
||
"month": "2025-09",
|
||
"pnl_pct": 58.24,
|
||
"start_asset_krw": 870154.0,
|
||
"end_asset_krw": 1376957.0
|
||
},
|
||
{
|
||
"month": "2025-10",
|
||
"pnl_pct": 1.41,
|
||
"start_asset_krw": 1376957.0,
|
||
"end_asset_krw": 1396376.0
|
||
},
|
||
{
|
||
"month": "2025-11",
|
||
"pnl_pct": 19.55,
|
||
"start_asset_krw": 1396376.0,
|
||
"end_asset_krw": 1669367.0
|
||
},
|
||
{
|
||
"month": "2025-12",
|
||
"pnl_pct": -1.53,
|
||
"start_asset_krw": 1669367.0,
|
||
"end_asset_krw": 1643749.0
|
||
},
|
||
{
|
||
"month": "2026-01",
|
||
"pnl_pct": 28.68,
|
||
"start_asset_krw": 1643749.0,
|
||
"end_asset_krw": 2115197.0
|
||
},
|
||
{
|
||
"month": "2026-02",
|
||
"pnl_pct": 20.21,
|
||
"start_asset_krw": 2115197.0,
|
||
"end_asset_krw": 2542690.0
|
||
},
|
||
{
|
||
"month": "2026-03",
|
||
"pnl_pct": 9.7,
|
||
"start_asset_krw": 2542690.0,
|
||
"end_asset_krw": 2789334.0
|
||
},
|
||
{
|
||
"month": "2026-04",
|
||
"pnl_pct": 22.86,
|
||
"start_asset_krw": 2789334.0,
|
||
"end_asset_krw": 3426893.0
|
||
},
|
||
{
|
||
"month": "2026-05",
|
||
"pnl_pct": 44.66,
|
||
"start_asset_krw": 3426893.0,
|
||
"end_asset_krw": 4957419.0
|
||
}
|
||
],
|
||
"hybrid_portfolio_wf_summary": {
|
||
"months": 12,
|
||
"positive_months": 11,
|
||
"positive_ratio": 0.9167,
|
||
"mean_pnl_pct": 24.8
|
||
},
|
||
"primary_sizing": "hybrid",
|
||
"sim_primary": {
|
||
"initial_cash_krw": 400000,
|
||
"final_asset_krw": 4867465.0,
|
||
"pnl_krw": 4467465.0,
|
||
"pnl_pct": 1116.87,
|
||
"total_fees_krw": 277183.0,
|
||
"cash_krw": 3.0,
|
||
"holding_qty": 9994.789459,
|
||
"holding_value_krw": 4867462.0,
|
||
"mark_price": 487.0,
|
||
"fee_rate": 0.0005,
|
||
"trade_count": 5225,
|
||
"max_drawdown_pct": 19.89,
|
||
"peak_asset_krw": 3104956.0,
|
||
"trough_asset_krw": 2487267.0,
|
||
"sizing_mode": "primary_hybrid_dd_tier",
|
||
"sizing_note": "권장: monitor + past-leg·drawdown tier (검증 통과, 미래 미사용)",
|
||
"alloc_stats": {
|
||
"buy_executed": 1628,
|
||
"buy_skipped": 659,
|
||
"sell_executed": 2938,
|
||
"sell_skipped": 0,
|
||
"buy_total_krw": 277244801.0,
|
||
"large_leg_count": 1532,
|
||
"large_tier_buy_count": 1532,
|
||
"buy_amount_avg_krw": 170298.0,
|
||
"buy_amount_min_krw": 323.0,
|
||
"buy_amount_max_krw": 3363487.0
|
||
},
|
||
"input_fires": 5225
|
||
},
|
||
"gt_capture_ratio": 0.0052,
|
||
"gt_pnl_pct": 7038.74,
|
||
"sim_sized_pnl_pct": 36.56,
|
||
"gt_model_capture_ratio": 0.0006,
|
||
"causal_gt_capture_ratio": 0.0021,
|
||
"sim_causal_gt_pnl_pct": 14.99,
|
||
"causal_hybrid_capture_ratio": 0.1587,
|
||
"sim_causal_hybrid_pnl_pct": 1116.87,
|
||
"tier_enhanced_capture_ratio": -0.0059,
|
||
"sim_tier_enhanced_pnl_pct": -41.83,
|
||
"causal_gt_params": {
|
||
"peak_mode": "local",
|
||
"pivot_order": 8,
|
||
"buy_swing_pct": 2.0,
|
||
"sell_swing_pct": 3.0,
|
||
"bb_max": 0.55,
|
||
"min_leg_pct": 8.0,
|
||
"min_bars_between_legs": 60,
|
||
"use_local_trough": false
|
||
},
|
||
"gt_allocation_analysis": {
|
||
"large_leg_ids": [
|
||
3,
|
||
5,
|
||
14,
|
||
18,
|
||
19,
|
||
20,
|
||
21,
|
||
22,
|
||
33,
|
||
40,
|
||
46,
|
||
49,
|
||
52,
|
||
53,
|
||
72,
|
||
74
|
||
],
|
||
"large_leg_count": 16,
|
||
"config_pct_large": 1.0,
|
||
"config_pct_small": 0.05,
|
||
"observed_implied_scale": {
|
||
"all": {
|
||
"count": 18,
|
||
"mean": 0.3111,
|
||
"median": 0.1346,
|
||
"p25": 0.1309,
|
||
"p75": 0.1509
|
||
},
|
||
"large_leg": {
|
||
"count": 1,
|
||
"mean": 3.2206,
|
||
"median": 3.2206,
|
||
"p25": 3.2206,
|
||
"p75": 3.2206
|
||
},
|
||
"small_leg": {
|
||
"count": 17,
|
||
"mean": 0.14,
|
||
"median": 0.1323,
|
||
"p25": 0.1309,
|
||
"p75": 0.1502
|
||
}
|
||
},
|
||
"recommended_pct_large_leg": 3.2206,
|
||
"recommended_pct_small_leg": 0.1323,
|
||
"note": "implied_scale = amount / (pre_buy_total_asset × weight_share); 시뮬 tier는 GT 분석 median 사용"
|
||
},
|
||
"causal_mode": {
|
||
"gt_signal_causal": true,
|
||
"sim_causal_tier": true,
|
||
"note": "인과적: t 시점까지 데이터만 사용 (운영 정합)"
|
||
}
|
||
},
|
||
"gt_model": {
|
||
"selection_mode": "split_buy_peak_sell",
|
||
"leg_definition": "이전 고점 매도 ~ 다음 고점 매도 구간 = leg_id; 기간말 잔여 구간은 마지막 leg",
|
||
"entry": {
|
||
"pivot": "trough",
|
||
"price": "Low",
|
||
"weight_rule": "inverse_price_normalized",
|
||
"weight_formula": "w_i = (1/price_i) / sum(1/price_j)",
|
||
"max_buys_per_leg": 12,
|
||
"min_bars_between_buys": 24,
|
||
"bb_filter": "bb_pos <= 0.45"
|
||
},
|
||
"exit": {
|
||
"pivot": "peak",
|
||
"price": "High",
|
||
"weight_rule": "fixed_split_or_full",
|
||
"weights_split": [
|
||
0.65,
|
||
0.35
|
||
],
|
||
"split_gap_pct": 2.5,
|
||
"max_sells_per_leg": 2
|
||
},
|
||
"capital": {
|
||
"buy": "target = total_asset * (weight/remaining_weights) * tier_scale; amount = min(target, available_cash/(1+fee))",
|
||
"optimal_buy_rate": "weight / sum(remaining_buy_weights_in_leg)",
|
||
"large_leg_top_pct": 0.2,
|
||
"pct_large_leg": 1.0,
|
||
"pct_small_leg": 0.05,
|
||
"min_order_krw": 5000.0,
|
||
"sell": "sell_base_qty * sell_weight * price (last sell = full leg_qty)"
|
||
},
|
||
"execution": {
|
||
"chrono": "amount_krw 배분·summary.pnl_pct = 시각순 체결(매도 후 현금 → 다음 매수 반영)",
|
||
"leg_block_json": "JSON 저장 순서 = leg별 매수 전량 → 매도 전량 (차트·테이블 leg 정합)"
|
||
}
|
||
},
|
||
"gt_weight_policy": {
|
||
"entry_weight_rule": "inverse_price_normalized",
|
||
"exit_split_weights": [
|
||
0.65,
|
||
0.35
|
||
],
|
||
"capital_large_pct": 1.0,
|
||
"capital_small_pct": 0.05,
|
||
"large_leg_top_pct": 0.2
|
||
},
|
||
"gt_leg_weight_validation": {
|
||
"legs": {
|
||
"0": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 1,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"1": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 12,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"2": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 4,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"3": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 1,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"4": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 3,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"5": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 5,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"6": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 3,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"7": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 5,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"8": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 2,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"9": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 4,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"10": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 5,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"11": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 3,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"12": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 2,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"13": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 7,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"14": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 2,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"15": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 3,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"16": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 7,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"17": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 4,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"18": {
|
||
"buy_sum": 0.999,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 6,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"19": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 2,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"20": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 2,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"21": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 1,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"22": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 3,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"23": {
|
||
"buy_sum": 1.001,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 3,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"24": {
|
||
"buy_sum": 1.001,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 4,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"25": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 1,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"26": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 2,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"27": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 2,
|
||
"n_sell": 1,
|
||
"valid": true
|
||
},
|
||
"28": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 2,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"29": {
|
||
"buy_sum": 0.999,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 5,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"30": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 5,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"31": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 3,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"32": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 2,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"33": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 2,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"34": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 2,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"35": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 7,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"36": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 4,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"37": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 3,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"38": {
|
||
"buy_sum": 0.999,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 7,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"39": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 1,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"40": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 1,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"41": {
|
||
"buy_sum": 1.001,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 12,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"42": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 11,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"43": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 5,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"44": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 1,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"45": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 7,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"46": {
|
||
"buy_sum": 1.001,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 5,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"47": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 3,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"48": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 8,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"49": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 10,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"50": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 4,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"51": {
|
||
"buy_sum": 0.999,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 5,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"52": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 6,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"53": {
|
||
"buy_sum": 1.001,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 6,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"54": {
|
||
"buy_sum": 1.001,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 6,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"55": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 2,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"56": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 1,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"57": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 1,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"58": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 6,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"59": {
|
||
"buy_sum": 0.999,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 9,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"60": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 5,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"61": {
|
||
"buy_sum": 1.001,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 4,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"62": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 4,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"63": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 2,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"64": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 7,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"65": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 2,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"66": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 1,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"67": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 3,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"68": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 3,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"69": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 1,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"70": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 4,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"71": {
|
||
"buy_sum": 0.999,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 3,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"72": {
|
||
"buy_sum": 1.001,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 3,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"73": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 6,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"74": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 4,
|
||
"n_sell": 2,
|
||
"valid": true
|
||
},
|
||
"75": {
|
||
"buy_sum": 1.0,
|
||
"sell_sum": 1.0,
|
||
"n_buy": 3,
|
||
"n_sell": 1,
|
||
"valid": true
|
||
}
|
||
},
|
||
"invalid_leg_ids": [],
|
||
"all_valid": true
|
||
},
|
||
"monitor_rules": [
|
||
{
|
||
"rule_id": "buy_compound_tight",
|
||
"side": "buy",
|
||
"kind": "compound_tight",
|
||
"conditions": [
|
||
{
|
||
"col": "m10_bb_pos",
|
||
"op": "between",
|
||
"lo": 0.020269805294580265,
|
||
"hi": 0.1573047482613718
|
||
},
|
||
{
|
||
"col": "m10_ga_cci_20",
|
||
"op": "between",
|
||
"lo": -176.0610418573743,
|
||
"hi": -134.25322440673844
|
||
},
|
||
{
|
||
"col": "m5_bb_pos",
|
||
"op": "between",
|
||
"lo": 0.04935035261803711,
|
||
"hi": 0.1678449416858898
|
||
}
|
||
],
|
||
"valid_fire_rate": 0.0143,
|
||
"metrics": {
|
||
"all": {
|
||
"count": 2287,
|
||
"ev_pct": 5.0966,
|
||
"win_rate": 0.6891,
|
||
"profit_factor": 3.1319
|
||
},
|
||
"train": {
|
||
"count": 1446,
|
||
"ev_pct": 4.3319,
|
||
"win_rate": 0.6812,
|
||
"profit_factor": 3.0046
|
||
},
|
||
"valid": {
|
||
"count": 620,
|
||
"ev_pct": 6.6782,
|
||
"win_rate": 0.7226,
|
||
"profit_factor": 3.3483
|
||
},
|
||
"holdout": {
|
||
"count": 221,
|
||
"ev_pct": 5.6633,
|
||
"win_rate": 0.6471,
|
||
"profit_factor": 3.1592
|
||
}
|
||
},
|
||
"pass_valid": true,
|
||
"pass_holdout": true
|
||
},
|
||
{
|
||
"rule_id": "sell_mtf_cross_all_tf",
|
||
"side": "sell",
|
||
"kind": "mtf_cross",
|
||
"conditions": [
|
||
{
|
||
"col": "m3_ga_cci_20",
|
||
"op": "between",
|
||
"lo": 71.08020816708225,
|
||
"hi": 152.0239279574577
|
||
},
|
||
{
|
||
"col": "m5_bb_pos",
|
||
"op": "between",
|
||
"lo": 0.7812942210429725,
|
||
"hi": 0.979827466617936
|
||
},
|
||
{
|
||
"col": "m10_bb_pos",
|
||
"op": "between",
|
||
"lo": 0.8052954063070535,
|
||
"hi": 1.0
|
||
},
|
||
{
|
||
"col": "m15_bb_pos",
|
||
"op": "between",
|
||
"lo": 0.8266597207479214,
|
||
"hi": 1.0
|
||
},
|
||
{
|
||
"col": "m30_ga_ha_bull",
|
||
"op": "eq_int",
|
||
"value": 1
|
||
},
|
||
{
|
||
"col": "m60_ga_ha_bull",
|
||
"op": "eq_int",
|
||
"value": 1
|
||
},
|
||
{
|
||
"col": "m240_ga_ha_bull",
|
||
"op": "eq_int",
|
||
"value": 1
|
||
},
|
||
{
|
||
"col": "d1_ga_ha_bull",
|
||
"op": "eq_int",
|
||
"value": 1
|
||
}
|
||
],
|
||
"valid_fire_rate": 0.013,
|
||
"metrics": {
|
||
"all": {
|
||
"count": 2938,
|
||
"ev_pct": 7.2232,
|
||
"win_rate": 1.0,
|
||
"profit_factor": 21221.6254
|
||
},
|
||
"train": {
|
||
"count": 1749,
|
||
"ev_pct": 7.1667,
|
||
"win_rate": 1.0,
|
||
"profit_factor": 12534.5465
|
||
},
|
||
"valid": {
|
||
"count": 565,
|
||
"ev_pct": 7.4984,
|
||
"win_rate": 1.0,
|
||
"profit_factor": 4236.5917
|
||
},
|
||
"holdout": {
|
||
"count": 624,
|
||
"ev_pct": 7.1322,
|
||
"win_rate": 1.0,
|
||
"profit_factor": 4450.4872
|
||
}
|
||
},
|
||
"pass_valid": true,
|
||
"pass_holdout": true
|
||
}
|
||
],
|
||
"gt_portfolio_calibration": {
|
||
"portfolio": {
|
||
"gt_final_asset_krw": 28785435.0,
|
||
"subset_final_asset_krw": 400000.0,
|
||
"asset_ratio": 0.0139,
|
||
"asset_accuracy_pct": 1.39,
|
||
"target_met_90": false,
|
||
"legs_total": 76,
|
||
"legs_covered": 0,
|
||
"leg_coverage_ratio": 0.0,
|
||
"full_pnl_pct": 7096.36,
|
||
"subset_pnl_pct": 0.0
|
||
},
|
||
"note": "캘리브레이션 미실행 — scripts/04_calibrate_gt_assets.py"
|
||
},
|
||
"criteria": {
|
||
"min_holdout_ev": 0.0,
|
||
"min_holdout_pf": 1.0,
|
||
"wf_positive_ratio": 0.5,
|
||
"wf_min_months": 3,
|
||
"hybrid_min_holdout_pnl_pct": 0.0,
|
||
"hybrid_max_mdd_pct": 30.0,
|
||
"option_c_target_pnl_pct": 300.0,
|
||
"option_c_phase2_target_pnl_pct": 1000.0,
|
||
"option_c_phase2_fee_stress_ratio": 0.85,
|
||
"option_c_min_gt_capture": 0.23
|
||
}
|
||
} |