feat(spot): 2단계 인과 기법 분석 파이프라인 마무리

common/spot/futures 경로 정비, 캔들 데이터 모듈 복원, MTF 규칙 자동 저장 및 2단계 설계·최종 정리 문서를 반영해 3단계 착수 기반을 확정한다.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
xavis
2026-06-12 16:09:32 +09:00
parent 741c949470
commit 2d515dd669
18 changed files with 2073 additions and 335 deletions

View File

@@ -0,0 +1,285 @@
{
"version": "v1",
"min_rules_pass": 2,
"min_cohens_d": 1.2,
"max_rules_per_type": 4,
"source_report": "2026-06-12 13:47:36",
"rules_by_type": {
"swing_low": [
{
"signal_type": "swing_low",
"timeframe_label": "3분",
"interval_min": 3,
"feature": "close_vs_ema60_pct",
"operator": "<=",
"threshold": -0.8141,
"cohens_d": -3.4583,
"positive_mean": -1.6348,
"negative_mean": 0.0067
},
{
"signal_type": "swing_low",
"timeframe_label": "5분",
"interval_min": 5,
"feature": "close_vs_ema60_pct",
"operator": "<=",
"threshold": -1.074,
"cohens_d": -3.4018,
"positive_mean": -2.1584,
"negative_mean": 0.0103
},
{
"signal_type": "swing_low",
"timeframe_label": "3분",
"interval_min": 3,
"feature": "ema60_slope_5_pct",
"operator": "<=",
"threshold": -0.1281,
"cohens_d": -3.2318,
"positive_mean": -0.2577,
"negative_mean": 0.0015
},
{
"signal_type": "swing_low",
"timeframe_label": "1분",
"interval_min": 1,
"feature": "ema60_slope_5_pct",
"operator": "<=",
"threshold": -0.094,
"cohens_d": -3.2067,
"positive_mean": -0.1875,
"negative_mean": -0.0004
}
],
"pullback": [
{
"signal_type": "pullback",
"timeframe_label": "1분",
"interval_min": 1,
"feature": "close_vs_ema60_pct",
"operator": "<=",
"threshold": -0.21,
"cohens_d": -1.9881,
"positive_mean": -0.4191,
"negative_mean": -0.0009
},
{
"signal_type": "pullback",
"timeframe_label": "1분",
"interval_min": 1,
"feature": "ema60_slope_5_pct",
"operator": "<=",
"threshold": -0.0361,
"cohens_d": -1.9745,
"positive_mean": -0.0718,
"negative_mean": -0.0004
},
{
"signal_type": "pullback",
"timeframe_label": "3분",
"interval_min": 3,
"feature": "close_vs_ema60_pct",
"operator": "<=",
"threshold": -0.2996,
"cohens_d": -1.7009,
"positive_mean": -0.606,
"negative_mean": 0.0067
},
{
"signal_type": "pullback",
"timeframe_label": "5분",
"interval_min": 5,
"feature": "rsi14",
"operator": "<=",
"threshold": 40.0938,
"cohens_d": -1.679,
"positive_mean": 30.2127,
"negative_mean": 49.9748
}
],
"breakout": [
{
"signal_type": "breakout",
"timeframe_label": "3분",
"interval_min": 3,
"feature": "bb_position",
"operator": ">=",
"threshold": 0.8018,
"cohens_d": 1.9334,
"positive_mean": 1.108,
"negative_mean": 0.4955
},
{
"signal_type": "breakout",
"timeframe_label": "3분",
"interval_min": 3,
"feature": "rsi14",
"operator": ">=",
"threshold": 61.5584,
"cohens_d": 1.9135,
"positive_mean": 73.1124,
"negative_mean": 50.0044
},
{
"signal_type": "breakout",
"timeframe_label": "1분",
"interval_min": 1,
"feature": "rsi14",
"operator": ">=",
"threshold": 61.5836,
"cohens_d": 1.8031,
"positive_mean": 73.3036,
"negative_mean": 49.8635
},
{
"signal_type": "breakout",
"timeframe_label": "5분",
"interval_min": 5,
"feature": "bb_position",
"operator": ">=",
"threshold": 0.7618,
"cohens_d": 1.6638,
"positive_mean": 1.0303,
"negative_mean": 0.4933
}
],
"div_bull": [
{
"signal_type": "div_bull",
"timeframe_label": "1분",
"interval_min": 1,
"feature": "ema60_slope_5_pct",
"operator": "<=",
"threshold": -0.0302,
"cohens_d": -1.6499,
"positive_mean": -0.0601,
"negative_mean": -0.0004
},
{
"signal_type": "div_bull",
"timeframe_label": "3분",
"interval_min": 3,
"feature": "close_vs_ema60_pct",
"operator": "<=",
"threshold": -0.2916,
"cohens_d": -1.638,
"positive_mean": -0.59,
"negative_mean": 0.0067
},
{
"signal_type": "div_bull",
"timeframe_label": "5분",
"interval_min": 5,
"feature": "close_vs_ema60_pct",
"operator": "<=",
"threshold": -0.3808,
"cohens_d": -1.6297,
"positive_mean": -0.7718,
"negative_mean": 0.0103
},
{
"signal_type": "div_bull",
"timeframe_label": "15분",
"interval_min": 15,
"feature": "rsi14",
"operator": "<=",
"threshold": 41.5274,
"cohens_d": -1.5867,
"positive_mean": 32.6455,
"negative_mean": 50.4093
}
],
"swing_high": [
{
"signal_type": "swing_high",
"timeframe_label": "1분",
"interval_min": 1,
"feature": "ema60_slope_5_pct",
"operator": ">=",
"threshold": 0.0687,
"cohens_d": 3.007,
"positive_mean": 0.1378,
"negative_mean": -0.0004
},
{
"signal_type": "swing_high",
"timeframe_label": "3분",
"interval_min": 3,
"feature": "close_vs_ema60_pct",
"operator": ">=",
"threshold": 0.5761,
"cohens_d": 2.7548,
"positive_mean": 1.1456,
"negative_mean": 0.0067
},
{
"signal_type": "swing_high",
"timeframe_label": "1분",
"interval_min": 1,
"feature": "close_vs_ema60_pct",
"operator": ">=",
"threshold": 0.3562,
"cohens_d": 2.7521,
"positive_mean": 0.7133,
"negative_mean": -0.0009
},
{
"signal_type": "swing_high",
"timeframe_label": "5분",
"interval_min": 5,
"feature": "close_vs_ema60_pct",
"operator": ">=",
"threshold": 0.7193,
"cohens_d": 2.5029,
"positive_mean": 1.4283,
"negative_mean": 0.0103
}
],
"div_bear": [
{
"signal_type": "div_bear",
"timeframe_label": "5분",
"interval_min": 5,
"feature": "rsi14",
"operator": ">=",
"threshold": 59.09,
"cohens_d": 1.5517,
"positive_mean": 68.2053,
"negative_mean": 49.9748
},
{
"signal_type": "div_bear",
"timeframe_label": "3분",
"interval_min": 3,
"feature": "close_vs_ema60_pct",
"operator": ">=",
"threshold": 0.2787,
"cohens_d": 1.4984,
"positive_mean": 0.5507,
"negative_mean": 0.0067
},
{
"signal_type": "div_bear",
"timeframe_label": "5분",
"interval_min": 5,
"feature": "close_vs_ema60_pct",
"operator": ">=",
"threshold": 0.3639,
"cohens_d": 1.4787,
"positive_mean": 0.7174,
"negative_mean": 0.0103
},
{
"signal_type": "div_bear",
"timeframe_label": "10분",
"interval_min": 10,
"feature": "rsi14",
"operator": ">=",
"threshold": 58.5968,
"cohens_d": 1.4392,
"positive_mean": 66.8792,
"negative_mean": 50.3143
}
]
}
}