{
  "generated_at": "2026-06-12 13:44:29",
  "symbol": "BTC",
  "chart_tier": "v3",
  "gt": {
    "interval_label": "3분",
    "lookback_days": 3650,
    "signal_type_counts": {
      "swing_low": 944,
      "pullback": 406,
      "breakout": 122,
      "swing_high": 944,
      "div_bear": 144,
      "div_bull": 115
    },
    "buy_count": 1587,
    "sell_count": 1088,
    "leg_count": 944
  },
  "signal_type_labels": {
    "swing_low": "스윙 매수 (B)",
    "pullback": "눌림목 (B*)",
    "breakout": "돌파 (B^)",
    "div_bull": "상승 다이버전스 (Bd)",
    "swing_high": "스윙 매도 (S)",
    "div_bear": "하락 다이버전스 (Sd)"
  },
  "primary_technique_map": {
    "swing_low": [
      "zigzag_causal",
      "minor_swing",
      "pivot_swing",
      "fractal_swing",
      "composite_swing"
    ],
    "pullback": [
      "ema_pullback",
      "fib_pullback",
      "support_bounce",
      "local_extrema",
      "bb_reversal",
      "composite_pullback"
    ],
    "breakout": [
      "donchian",
      "range_breakout",
      "keltner_breakout",
      "bb_squeeze_breakout",
      "volume_breakout",
      "composite_breakout"
    ],
    "div_bull": [
      "rsi_divergence",
      "macd_divergence",
      "obv_divergence",
      "rsi_swing",
      "composite_divergence"
    ],
    "swing_high": [
      "zigzag_causal",
      "minor_swing",
      "pivot_swing",
      "fractal_swing",
      "composite_swing"
    ],
    "div_bear": [
      "rsi_divergence",
      "macd_divergence",
      "obv_divergence",
      "rsi_swing",
      "composite_divergence"
    ]
  },
  "best_by_signal_type": [
    {
      "signal_type": "swing_low",
      "signal_label": "스윙 매수 (B)",
      "side": "buy",
      "gt_count": 944,
      "primary_techniques": [
        "zigzag_causal",
        "minor_swing",
        "pivot_swing",
        "fractal_swing",
        "composite_swing"
      ],
      "best_technique_id": "adx_trend",
      "best_technique_name": "ADX 추세",
      "best_recall": 1.0,
      "best_avg_offset": 15.0,
      "ranking": [
        {
          "technique_id": "adx_trend",
          "technique_name": "ADX 추세",
          "recall": 1.0,
          "hit_count": 944,
          "gt_count": 944,
          "avg_bar_offset": 15.0,
          "is_primary": false
        },
        {
          "technique_id": "atr_channel",
          "technique_name": "ATR 채널",
          "recall": 1.0,
          "hit_count": 944,
          "gt_count": 944,
          "avg_bar_offset": 7.4,
          "is_primary": false
        },
        {
          "technique_id": "bb_reversal",
          "technique_name": "볼린저 역추세",
          "recall": 1.0,
          "hit_count": 944,
          "gt_count": 944,
          "avg_bar_offset": 9.8,
          "is_primary": false
        },
        {
          "technique_id": "cci_extreme",
          "technique_name": "CCI 극값",
          "recall": 1.0,
          "hit_count": 944,
          "gt_count": 944,
          "avg_bar_offset": 12.8,
          "is_primary": false
        },
        {
          "technique_id": "donchian",
          "technique_name": "돈치안 채널",
          "recall": 1.0,
          "hit_count": 944,
          "gt_count": 944,
          "avg_bar_offset": 10.1,
          "is_primary": false
        },
        {
          "technique_id": "ema_pullback",
          "technique_name": "EMA 눌림목",
          "recall": 1.0,
          "hit_count": 944,
          "gt_count": 944,
          "avg_bar_offset": 40.6,
          "is_primary": false
        },
        {
          "technique_id": "fractal_swing",
          "technique_name": "프랙탈 스윙",
          "recall": 1.0,
          "hit_count": 944,
          "gt_count": 944,
          "avg_bar_offset": 0.9,
          "is_primary": true
        },
        {
          "technique_id": "ichimoku_trend",
          "technique_name": "일목 추세",
          "recall": 1.0,
          "hit_count": 944,
          "gt_count": 944,
          "avg_bar_offset": 22.3,
          "is_primary": false
        },
        {
          "technique_id": "keltner_reversal",
          "technique_name": "Keltner 역추세",
          "recall": 1.0,
          "hit_count": 944,
          "gt_count": 944,
          "avg_bar_offset": 7.3,
          "is_primary": false
        },
        {
          "technique_id": "macd_cross",
          "technique_name": "MACD 크로스",
          "recall": 1.0,
          "hit_count": 944,
          "gt_count": 944,
          "avg_bar_offset": 10.6,
          "is_primary": false
        },
        {
          "technique_id": "minor_swing",
          "technique_name": "소형 스윙 하이브리드",
          "recall": 1.0,
          "hit_count": 944,
          "gt_count": 944,
          "avg_bar_offset": 0.3,
          "is_primary": true
        },
        {
          "technique_id": "parabolic_sar",
          "technique_name": "Parabolic SAR",
          "recall": 1.0,
          "hit_count": 944,
          "gt_count": 944,
          "avg_bar_offset": 8.7,
          "is_primary": false
        },
        {
          "technique_id": "pivot_swing",
          "technique_name": "피벗 스윙",
          "recall": 1.0,
          "hit_count": 944,
          "gt_count": 944,
          "avg_bar_offset": 15.3,
          "is_primary": true
        },
        {
          "technique_id": "stochastic_cross",
          "technique_name": "Stochastic 크로스",
          "recall": 1.0,
          "hit_count": 944,
          "gt_count": 944,
          "avg_bar_offset": 3.9,
          "is_primary": false
        },
        {
          "technique_id": "support_resistance",
          "technique_name": "구조적 지지·저항",
          "recall": 1.0,
          "hit_count": 944,
          "gt_count": 944,
          "avg_bar_offset": 15.1,
          "is_primary": false
        },
        {
          "technique_id": "zigzag_causal",
          "technique_name": "인과 ZigZag",
          "recall": 1.0,
          "hit_count": 944,
          "gt_count": 944,
          "avg_bar_offset": 0.0,
          "is_primary": true
        },
        {
          "technique_id": "composite_pullback",
          "technique_name": "눌림목 복합",
          "recall": 0.9979,
          "hit_count": 942,
          "gt_count": 944,
          "avg_bar_offset": 78.0,
          "is_primary": false
        },
        {
          "technique_id": "range_breakout",
          "technique_name": "레인지 돌파",
          "recall": 0.9979,
          "hit_count": 942,
          "gt_count": 944,
          "avg_bar_offset": 62.2,
          "is_primary": false
        },
        {
          "technique_id": "composite_breakout",
          "technique_name": "돌파 복합",
          "recall": 0.9926,
          "hit_count": 937,
          "gt_count": 944,
          "avg_bar_offset": 42.1,
          "is_primary": false
        },
        {
          "technique_id": "keltner_breakout",
          "technique_name": "Keltner 돌파",
          "recall": 0.9852,
          "hit_count": 930,
          "gt_count": 944,
          "avg_bar_offset": 51.6,
          "is_primary": false
        },
        {
          "technique_id": "rsi_swing",
          "technique_name": "RSI 스윙",
          "recall": 0.9841,
          "hit_count": 929,
          "gt_count": 944,
          "avg_bar_offset": 43.5,
          "is_primary": false
        },
        {
          "technique_id": "composite_divergence",
          "technique_name": "다이버전스 복합",
          "recall": 0.982,
          "hit_count": 927,
          "gt_count": 944,
          "avg_bar_offset": 45.7,
          "is_primary": false
        },
        {
          "technique_id": "volume_breakout",
          "technique_name": "거래량 돌파",
          "recall": 0.9778,
          "hit_count": 923,
          "gt_count": 944,
          "avg_bar_offset": 98.5,
          "is_primary": false
        },
        {
          "technique_id": "bb_squeeze_breakout",
          "technique_name": "BB 스퀴즈 돌파",
          "recall": 0.9767,
          "hit_count": 922,
          "gt_count": 944,
          "avg_bar_offset": 91.2,
          "is_primary": false
        },
        {
          "technique_id": "local_extrema",
          "technique_name": "국소 극값",
          "recall": 0.9693,
          "hit_count": 915,
          "gt_count": 944,
          "avg_bar_offset": 46.8,
          "is_primary": false
        },
        {
          "technique_id": "composite_swing",
          "technique_name": "스윙 복합",
          "recall": 0.9672,
          "hit_count": 913,
          "gt_count": 944,
          "avg_bar_offset": 81.1,
          "is_primary": true
        },
        {
          "technique_id": "composite_v3",
          "technique_name": "v3 통합 스코어링",
          "recall": 0.9608,
          "hit_count": 907,
          "gt_count": 944,
          "avg_bar_offset": 94.0,
          "is_primary": false
        },
        {
          "technique_id": "ma_cross",
          "technique_name": "EMA 크로스",
          "recall": 0.9163,
          "hit_count": 865,
          "gt_count": 944,
          "avg_bar_offset": 84.1,
          "is_primary": false
        },
        {
          "technique_id": "fib_pullback",
          "technique_name": "피보나치 눌림목",
          "recall": 0.9068,
          "hit_count": 856,
          "gt_count": 944,
          "avg_bar_offset": 116.4,
          "is_primary": false
        },
        {
          "technique_id": "swing_failure",
          "technique_name": "스윙 실패",
          "recall": 0.8941,
          "hit_count": 844,
          "gt_count": 944,
          "avg_bar_offset": 85.4,
          "is_primary": false
        },
        {
          "technique_id": "macd_divergence",
          "technique_name": "MACD 다이버전스",
          "recall": 0.8464,
          "hit_count": 799,
          "gt_count": 944,
          "avg_bar_offset": 122.9,
          "is_primary": false
        },
        {
          "technique_id": "support_bounce",
          "technique_name": "지지·저항 반등",
          "recall": 0.7786,
          "hit_count": 735,
          "gt_count": 944,
          "avg_bar_offset": 135.0,
          "is_primary": false
        },
        {
          "technique_id": "rsi_divergence",
          "technique_name": "RSI 다이버전스",
          "recall": 0.7288,
          "hit_count": 688,
          "gt_count": 944,
          "avg_bar_offset": 146.4,
          "is_primary": false
        },
        {
          "technique_id": "volume_spike",
          "technique_name": "거래량 스파이크",
          "recall": 0.7161,
          "hit_count": 676,
          "gt_count": 944,
          "avg_bar_offset": 130.5,
          "is_primary": false
        },
        {
          "technique_id": "obv_divergence",
          "technique_name": "OBV 다이버전스",
          "recall": 0.6451,
          "hit_count": 609,
          "gt_count": 944,
          "avg_bar_offset": 188.1,
          "is_primary": false
        },
        {
          "technique_id": "composite_full",
          "technique_name": "전체 통합 복합",
          "recall": 0.6059,
          "hit_count": 572,
          "gt_count": 944,
          "avg_bar_offset": 204.0,
          "is_primary": false
        },
        {
          "technique_id": "roc_reversal",
          "technique_name": "ROC 반전",
          "recall": 0.2903,
          "hit_count": 274,
          "gt_count": 944,
          "avg_bar_offset": 114.9,
          "is_primary": false
        },
        {
          "technique_id": "pivot_points",
          "technique_name": "피벗 포인트",
          "recall": 0.0074,
          "hit_count": 7,
          "gt_count": 944,
          "avg_bar_offset": 240.9,
          "is_primary": false
        },
        {
          "technique_id": "supertrend",
          "technique_name": "Supertrend",
          "recall": 0.0,
          "hit_count": 0,
          "gt_count": 944,
          "avg_bar_offset": 0.0,
          "is_primary": false
        }
      ]
    },
    {
      "signal_type": "pullback",
      "signal_label": "눌림목 (B*)",
      "side": "buy",
      "gt_count": 406,
      "primary_techniques": [
        "ema_pullback",
        "fib_pullback",
        "support_bounce",
        "local_extrema",
        "bb_reversal",
        "composite_pullback"
      ],
      "best_technique_id": "adx_trend",
      "best_technique_name": "ADX 추세",
      "best_recall": 1.0,
      "best_avg_offset": 9.8,
      "ranking": [
        {
          "technique_id": "adx_trend",
          "technique_name": "ADX 추세",
          "recall": 1.0,
          "hit_count": 406,
          "gt_count": 406,
          "avg_bar_offset": 9.8,
          "is_primary": false
        },
        {
          "technique_id": "atr_channel",
          "technique_name": "ATR 채널",
          "recall": 1.0,
          "hit_count": 406,
          "gt_count": 406,
          "avg_bar_offset": 10.4,
          "is_primary": false
        },
        {
          "technique_id": "bb_reversal",
          "technique_name": "볼린저 역추세",
          "recall": 1.0,
          "hit_count": 406,
          "gt_count": 406,
          "avg_bar_offset": 3.3,
          "is_primary": true
        },
        {
          "technique_id": "bb_squeeze_breakout",
          "technique_name": "BB 스퀴즈 돌파",
          "recall": 1.0,
          "hit_count": 406,
          "gt_count": 406,
          "avg_bar_offset": 39.8,
          "is_primary": false
        },
        {
          "technique_id": "cci_extreme",
          "technique_name": "CCI 극값",
          "recall": 1.0,
          "hit_count": 406,
          "gt_count": 406,
          "avg_bar_offset": 6.6,
          "is_primary": false
        },
        {
          "technique_id": "composite_breakout",
          "technique_name": "돌파 복합",
          "recall": 1.0,
          "hit_count": 406,
          "gt_count": 406,
          "avg_bar_offset": 13.8,
          "is_primary": false
        },
        {
          "technique_id": "composite_divergence",
          "technique_name": "다이버전스 복합",
          "recall": 1.0,
          "hit_count": 406,
          "gt_count": 406,
          "avg_bar_offset": 24.4,
          "is_primary": false
        },
        {
          "technique_id": "composite_pullback",
          "technique_name": "눌림목 복합",
          "recall": 1.0,
          "hit_count": 406,
          "gt_count": 406,
          "avg_bar_offset": 32.5,
          "is_primary": true
        },
        {
          "technique_id": "composite_swing",
          "technique_name": "스윙 복합",
          "recall": 1.0,
          "hit_count": 406,
          "gt_count": 406,
          "avg_bar_offset": 31.9,
          "is_primary": false
        },
        {
          "technique_id": "composite_v3",
          "technique_name": "v3 통합 스코어링",
          "recall": 1.0,
          "hit_count": 406,
          "gt_count": 406,
          "avg_bar_offset": 41.6,
          "is_primary": false
        },
        {
          "technique_id": "donchian",
          "technique_name": "돈치안 채널",
          "recall": 1.0,
          "hit_count": 406,
          "gt_count": 406,
          "avg_bar_offset": 14.2,
          "is_primary": false
        },
        {
          "technique_id": "ema_pullback",
          "technique_name": "EMA 눌림목",
          "recall": 1.0,
          "hit_count": 406,
          "gt_count": 406,
          "avg_bar_offset": 20.0,
          "is_primary": true
        },
        {
          "technique_id": "fib_pullback",
          "technique_name": "피보나치 눌림목",
          "recall": 1.0,
          "hit_count": 406,
          "gt_count": 406,
          "avg_bar_offset": 50.6,
          "is_primary": true
        },
        {
          "technique_id": "fractal_swing",
          "technique_name": "프랙탈 스윙",
          "recall": 1.0,
          "hit_count": 406,
          "gt_count": 406,
          "avg_bar_offset": 0.0,
          "is_primary": false
        },
        {
          "technique_id": "ichimoku_trend",
          "technique_name": "일목 추세",
          "recall": 1.0,
          "hit_count": 406,
          "gt_count": 406,
          "avg_bar_offset": 12.3,
          "is_primary": false
        },
        {
          "technique_id": "keltner_breakout",
          "technique_name": "Keltner 돌파",
          "recall": 1.0,
          "hit_count": 406,
          "gt_count": 406,
          "avg_bar_offset": 31.9,
          "is_primary": false
        },
        {
          "technique_id": "keltner_reversal",
          "technique_name": "Keltner 역추세",
          "recall": 1.0,
          "hit_count": 406,
          "gt_count": 406,
          "avg_bar_offset": 10.9,
          "is_primary": false
        },
        {
          "technique_id": "ma_cross",
          "technique_name": "EMA 크로스",
          "recall": 1.0,
          "hit_count": 406,
          "gt_count": 406,
          "avg_bar_offset": 32.8,
          "is_primary": false
        },
        {
          "technique_id": "macd_cross",
          "technique_name": "MACD 크로스",
          "recall": 1.0,
          "hit_count": 406,
          "gt_count": 406,
          "avg_bar_offset": 5.7,
          "is_primary": false
        },
        {
          "technique_id": "parabolic_sar",
          "technique_name": "Parabolic SAR",
          "recall": 1.0,
          "hit_count": 406,
          "gt_count": 406,
          "avg_bar_offset": 7.9,
          "is_primary": false
        },
        {
          "technique_id": "pivot_swing",
          "technique_name": "피벗 스윙",
          "recall": 1.0,
          "hit_count": 406,
          "gt_count": 406,
          "avg_bar_offset": 0.4,
          "is_primary": false
        },
        {
          "technique_id": "stochastic_cross",
          "technique_name": "Stochastic 크로스",
          "recall": 1.0,
          "hit_count": 406,
          "gt_count": 406,
          "avg_bar_offset": 4.8,
          "is_primary": false
        },
        {
          "technique_id": "support_resistance",
          "technique_name": "구조적 지지·저항",
          "recall": 1.0,
          "hit_count": 406,
          "gt_count": 406,
          "avg_bar_offset": 5.2,
          "is_primary": false
        },
        {
          "technique_id": "swing_failure",
          "technique_name": "스윙 실패",
          "recall": 1.0,
          "hit_count": 406,
          "gt_count": 406,
          "avg_bar_offset": 38.2,
          "is_primary": false
        },
        {
          "technique_id": "volume_breakout",
          "technique_name": "거래량 돌파",
          "recall": 1.0,
          "hit_count": 406,
          "gt_count": 406,
          "avg_bar_offset": 46.2,
          "is_primary": false
        },
        {
          "technique_id": "macd_divergence",
          "technique_name": "MACD 다이버전스",
          "recall": 0.9975,
          "hit_count": 405,
          "gt_count": 406,
          "avg_bar_offset": 85.8,
          "is_primary": false
        },
        {
          "technique_id": "range_breakout",
          "technique_name": "레인지 돌파",
          "recall": 0.9951,
          "hit_count": 404,
          "gt_count": 406,
          "avg_bar_offset": 53.4,
          "is_primary": false
        },
        {
          "technique_id": "rsi_swing",
          "technique_name": "RSI 스윙",
          "recall": 0.9926,
          "hit_count": 403,
          "gt_count": 406,
          "avg_bar_offset": 50.7,
          "is_primary": false
        },
        {
          "technique_id": "rsi_divergence",
          "technique_name": "RSI 다이버전스",
          "recall": 0.9138,
          "hit_count": 371,
          "gt_count": 406,
          "avg_bar_offset": 144.2,
          "is_primary": false
        },
        {
          "technique_id": "obv_divergence",
          "technique_name": "OBV 다이버전스",
          "recall": 0.8842,
          "hit_count": 359,
          "gt_count": 406,
          "avg_bar_offset": 147.7,
          "is_primary": false
        },
        {
          "technique_id": "support_bounce",
          "technique_name": "지지·저항 반등",
          "recall": 0.8596,
          "hit_count": 349,
          "gt_count": 406,
          "avg_bar_offset": 153.8,
          "is_primary": true
        },
        {
          "technique_id": "composite_full",
          "technique_name": "전체 통합 복합",
          "recall": 0.8276,
          "hit_count": 336,
          "gt_count": 406,
          "avg_bar_offset": 166.4,
          "is_primary": false
        },
        {
          "technique_id": "local_extrema",
          "technique_name": "국소 극값",
          "recall": 0.8103,
          "hit_count": 329,
          "gt_count": 406,
          "avg_bar_offset": 97.5,
          "is_primary": true
        },
        {
          "technique_id": "minor_swing",
          "technique_name": "소형 스윙 하이브리드",
          "recall": 0.8079,
          "hit_count": 328,
          "gt_count": 406,
          "avg_bar_offset": 103.8,
          "is_primary": false
        },
        {
          "technique_id": "volume_spike",
          "technique_name": "거래량 스파이크",
          "recall": 0.6626,
          "hit_count": 269,
          "gt_count": 406,
          "avg_bar_offset": 201.2,
          "is_primary": false
        },
        {
          "technique_id": "zigzag_causal",
          "technique_name": "인과 ZigZag",
          "recall": 0.3842,
          "hit_count": 156,
          "gt_count": 406,
          "avg_bar_offset": 273.4,
          "is_primary": false
        },
        {
          "technique_id": "roc_reversal",
          "technique_name": "ROC 반전",
          "recall": 0.0911,
          "hit_count": 37,
          "gt_count": 406,
          "avg_bar_offset": 267.6,
          "is_primary": false
        },
        {
          "technique_id": "pivot_points",
          "technique_name": "피벗 포인트",
          "recall": 0.0123,
          "hit_count": 5,
          "gt_count": 406,
          "avg_bar_offset": 94.6,
          "is_primary": false
        },
        {
          "technique_id": "supertrend",
          "technique_name": "Supertrend",
          "recall": 0.0,
          "hit_count": 0,
          "gt_count": 406,
          "avg_bar_offset": 0.0,
          "is_primary": false
        }
      ]
    },
    {
      "signal_type": "breakout",
      "signal_label": "돌파 (B^)",
      "side": "buy",
      "gt_count": 122,
      "primary_techniques": [
        "donchian",
        "range_breakout",
        "keltner_breakout",
        "bb_squeeze_breakout",
        "volume_breakout",
        "composite_breakout"
      ],
      "best_technique_id": "adx_trend",
      "best_technique_name": "ADX 추세",
      "best_recall": 1.0,
      "best_avg_offset": 16.7,
      "ranking": [
        {
          "technique_id": "adx_trend",
          "technique_name": "ADX 추세",
          "recall": 1.0,
          "hit_count": 122,
          "gt_count": 122,
          "avg_bar_offset": 16.7,
          "is_primary": false
        },
        {
          "technique_id": "atr_channel",
          "technique_name": "ATR 채널",
          "recall": 1.0,
          "hit_count": 122,
          "gt_count": 122,
          "avg_bar_offset": 49.8,
          "is_primary": false
        },
        {
          "technique_id": "bb_reversal",
          "technique_name": "볼린저 역추세",
          "recall": 1.0,
          "hit_count": 122,
          "gt_count": 122,
          "avg_bar_offset": 25.5,
          "is_primary": false
        },
        {
          "technique_id": "bb_squeeze_breakout",
          "technique_name": "BB 스퀴즈 돌파",
          "recall": 1.0,
          "hit_count": 122,
          "gt_count": 122,
          "avg_bar_offset": 23.1,
          "is_primary": true
        },
        {
          "technique_id": "cci_extreme",
          "technique_name": "CCI 극값",
          "recall": 1.0,
          "hit_count": 122,
          "gt_count": 122,
          "avg_bar_offset": 33.8,
          "is_primary": false
        },
        {
          "technique_id": "composite_breakout",
          "technique_name": "돌파 복합",
          "recall": 1.0,
          "hit_count": 122,
          "gt_count": 122,
          "avg_bar_offset": 3.2,
          "is_primary": true
        },
        {
          "technique_id": "composite_divergence",
          "technique_name": "다이버전스 복합",
          "recall": 1.0,
          "hit_count": 122,
          "gt_count": 122,
          "avg_bar_offset": 64.4,
          "is_primary": false
        },
        {
          "technique_id": "composite_pullback",
          "technique_name": "눌림목 복합",
          "recall": 1.0,
          "hit_count": 122,
          "gt_count": 122,
          "avg_bar_offset": 17.7,
          "is_primary": false
        },
        {
          "technique_id": "composite_swing",
          "technique_name": "스윙 복합",
          "recall": 1.0,
          "hit_count": 122,
          "gt_count": 122,
          "avg_bar_offset": 20.2,
          "is_primary": false
        },
        {
          "technique_id": "composite_v3",
          "technique_name": "v3 통합 스코어링",
          "recall": 1.0,
          "hit_count": 122,
          "gt_count": 122,
          "avg_bar_offset": 25.8,
          "is_primary": false
        },
        {
          "technique_id": "donchian",
          "technique_name": "돈치안 채널",
          "recall": 1.0,
          "hit_count": 122,
          "gt_count": 122,
          "avg_bar_offset": 42.2,
          "is_primary": true
        },
        {
          "technique_id": "ema_pullback",
          "technique_name": "EMA 눌림목",
          "recall": 1.0,
          "hit_count": 122,
          "gt_count": 122,
          "avg_bar_offset": 11.2,
          "is_primary": false
        },
        {
          "technique_id": "fib_pullback",
          "technique_name": "피보나치 눌림목",
          "recall": 1.0,
          "hit_count": 122,
          "gt_count": 122,
          "avg_bar_offset": 51.3,
          "is_primary": false
        },
        {
          "technique_id": "fractal_swing",
          "technique_name": "프랙탈 스윙",
          "recall": 1.0,
          "hit_count": 122,
          "gt_count": 122,
          "avg_bar_offset": 4.1,
          "is_primary": false
        },
        {
          "technique_id": "ichimoku_trend",
          "technique_name": "일목 추세",
          "recall": 1.0,
          "hit_count": 122,
          "gt_count": 122,
          "avg_bar_offset": 15.9,
          "is_primary": false
        },
        {
          "technique_id": "keltner_breakout",
          "technique_name": "Keltner 돌파",
          "recall": 1.0,
          "hit_count": 122,
          "gt_count": 122,
          "avg_bar_offset": 8.2,
          "is_primary": true
        },
        {
          "technique_id": "keltner_reversal",
          "technique_name": "Keltner 역추세",
          "recall": 1.0,
          "hit_count": 122,
          "gt_count": 122,
          "avg_bar_offset": 48.4,
          "is_primary": false
        },
        {
          "technique_id": "ma_cross",
          "technique_name": "EMA 크로스",
          "recall": 1.0,
          "hit_count": 122,
          "gt_count": 122,
          "avg_bar_offset": 49.1,
          "is_primary": false
        },
        {
          "technique_id": "macd_cross",
          "technique_name": "MACD 크로스",
          "recall": 1.0,
          "hit_count": 122,
          "gt_count": 122,
          "avg_bar_offset": 7.4,
          "is_primary": false
        },
        {
          "technique_id": "pivot_swing",
          "technique_name": "피벗 스윙",
          "recall": 1.0,
          "hit_count": 122,
          "gt_count": 122,
          "avg_bar_offset": 17.3,
          "is_primary": false
        },
        {
          "technique_id": "stochastic_cross",
          "technique_name": "Stochastic 크로스",
          "recall": 1.0,
          "hit_count": 122,
          "gt_count": 122,
          "avg_bar_offset": 23.3,
          "is_primary": false
        },
        {
          "technique_id": "support_resistance",
          "technique_name": "구조적 지지·저항",
          "recall": 1.0,
          "hit_count": 122,
          "gt_count": 122,
          "avg_bar_offset": 21.0,
          "is_primary": false
        },
        {
          "technique_id": "swing_failure",
          "technique_name": "스윙 실패",
          "recall": 1.0,
          "hit_count": 122,
          "gt_count": 122,
          "avg_bar_offset": 89.6,
          "is_primary": false
        },
        {
          "technique_id": "volume_breakout",
          "technique_name": "거래량 돌파",
          "recall": 1.0,
          "hit_count": 122,
          "gt_count": 122,
          "avg_bar_offset": 7.4,
          "is_primary": true
        },
        {
          "technique_id": "parabolic_sar",
          "technique_name": "Parabolic SAR",
          "recall": 0.9918,
          "hit_count": 121,
          "gt_count": 122,
          "avg_bar_offset": 13.3,
          "is_primary": false
        },
        {
          "technique_id": "range_breakout",
          "technique_name": "레인지 돌파",
          "recall": 0.9836,
          "hit_count": 120,
          "gt_count": 122,
          "avg_bar_offset": 19.7,
          "is_primary": true
        },
        {
          "technique_id": "rsi_swing",
          "technique_name": "RSI 스윙",
          "recall": 0.9836,
          "hit_count": 120,
          "gt_count": 122,
          "avg_bar_offset": 128.4,
          "is_primary": false
        },
        {
          "technique_id": "macd_divergence",
          "technique_name": "MACD 다이버전스",
          "recall": 0.9754,
          "hit_count": 119,
          "gt_count": 122,
          "avg_bar_offset": 113.3,
          "is_primary": false
        },
        {
          "technique_id": "rsi_divergence",
          "technique_name": "RSI 다이버전스",
          "recall": 0.8934,
          "hit_count": 109,
          "gt_count": 122,
          "avg_bar_offset": 190.3,
          "is_primary": false
        },
        {
          "technique_id": "obv_divergence",
          "technique_name": "OBV 다이버전스",
          "recall": 0.877,
          "hit_count": 107,
          "gt_count": 122,
          "avg_bar_offset": 171.1,
          "is_primary": false
        },
        {
          "technique_id": "support_bounce",
          "technique_name": "지지·저항 반등",
          "recall": 0.8361,
          "hit_count": 102,
          "gt_count": 122,
          "avg_bar_offset": 182.4,
          "is_primary": false
        },
        {
          "technique_id": "composite_full",
          "technique_name": "전체 통합 복합",
          "recall": 0.8115,
          "hit_count": 99,
          "gt_count": 122,
          "avg_bar_offset": 124.1,
          "is_primary": false
        },
        {
          "technique_id": "local_extrema",
          "technique_name": "국소 극값",
          "recall": 0.6148,
          "hit_count": 75,
          "gt_count": 122,
          "avg_bar_offset": 237.1,
          "is_primary": false
        },
        {
          "technique_id": "minor_swing",
          "technique_name": "소형 스윙 하이브리드",
          "recall": 0.6066,
          "hit_count": 74,
          "gt_count": 122,
          "avg_bar_offset": 238.2,
          "is_primary": false
        },
        {
          "technique_id": "volume_spike",
          "technique_name": "거래량 스파이크",
          "recall": 0.4426,
          "hit_count": 54,
          "gt_count": 122,
          "avg_bar_offset": 215.5,
          "is_primary": false
        },
        {
          "technique_id": "zigzag_causal",
          "technique_name": "인과 ZigZag",
          "recall": 0.1557,
          "hit_count": 19,
          "gt_count": 122,
          "avg_bar_offset": 359.6,
          "is_primary": false
        },
        {
          "technique_id": "roc_reversal",
          "technique_name": "ROC 반전",
          "recall": 0.0574,
          "hit_count": 7,
          "gt_count": 122,
          "avg_bar_offset": 328.4,
          "is_primary": false
        },
        {
          "technique_id": "pivot_points",
          "technique_name": "피벗 포인트",
          "recall": 0.0082,
          "hit_count": 1,
          "gt_count": 122,
          "avg_bar_offset": 59.0,
          "is_primary": false
        },
        {
          "technique_id": "supertrend",
          "technique_name": "Supertrend",
          "recall": 0.0,
          "hit_count": 0,
          "gt_count": 122,
          "avg_bar_offset": 0.0,
          "is_primary": false
        }
      ]
    },
    {
      "signal_type": "div_bull",
      "signal_label": "상승 다이버전스 (Bd)",
      "side": "buy",
      "gt_count": 115,
      "primary_techniques": [
        "rsi_divergence",
        "macd_divergence",
        "obv_divergence",
        "rsi_swing",
        "composite_divergence"
      ],
      "best_technique_id": "adx_trend",
      "best_technique_name": "ADX 추세",
      "best_recall": 1.0,
      "best_avg_offset": 9.3,
      "ranking": [
        {
          "technique_id": "adx_trend",
          "technique_name": "ADX 추세",
          "recall": 1.0,
          "hit_count": 115,
          "gt_count": 115,
          "avg_bar_offset": 9.3,
          "is_primary": false
        },
        {
          "technique_id": "atr_channel",
          "technique_name": "ATR 채널",
          "recall": 1.0,
          "hit_count": 115,
          "gt_count": 115,
          "avg_bar_offset": 10.8,
          "is_primary": false
        },
        {
          "technique_id": "bb_reversal",
          "technique_name": "볼린저 역추세",
          "recall": 1.0,
          "hit_count": 115,
          "gt_count": 115,
          "avg_bar_offset": 2.5,
          "is_primary": false
        },
        {
          "technique_id": "bb_squeeze_breakout",
          "technique_name": "BB 스퀴즈 돌파",
          "recall": 1.0,
          "hit_count": 115,
          "gt_count": 115,
          "avg_bar_offset": 45.5,
          "is_primary": false
        },
        {
          "technique_id": "cci_extreme",
          "technique_name": "CCI 극값",
          "recall": 1.0,
          "hit_count": 115,
          "gt_count": 115,
          "avg_bar_offset": 6.7,
          "is_primary": false
        },
        {
          "technique_id": "composite_breakout",
          "technique_name": "돌파 복합",
          "recall": 1.0,
          "hit_count": 115,
          "gt_count": 115,
          "avg_bar_offset": 17.2,
          "is_primary": false
        },
        {
          "technique_id": "composite_divergence",
          "technique_name": "다이버전스 복합",
          "recall": 1.0,
          "hit_count": 115,
          "gt_count": 115,
          "avg_bar_offset": 16.3,
          "is_primary": true
        },
        {
          "technique_id": "composite_pullback",
          "technique_name": "눌림목 복합",
          "recall": 1.0,
          "hit_count": 115,
          "gt_count": 115,
          "avg_bar_offset": 37.9,
          "is_primary": false
        },
        {
          "technique_id": "composite_swing",
          "technique_name": "스윙 복합",
          "recall": 1.0,
          "hit_count": 115,
          "gt_count": 115,
          "avg_bar_offset": 40.5,
          "is_primary": false
        },
        {
          "technique_id": "composite_v3",
          "technique_name": "v3 통합 스코어링",
          "recall": 1.0,
          "hit_count": 115,
          "gt_count": 115,
          "avg_bar_offset": 55.9,
          "is_primary": false
        },
        {
          "technique_id": "donchian",
          "technique_name": "돈치안 채널",
          "recall": 1.0,
          "hit_count": 115,
          "gt_count": 115,
          "avg_bar_offset": 22.9,
          "is_primary": false
        },
        {
          "technique_id": "ema_pullback",
          "technique_name": "EMA 눌림목",
          "recall": 1.0,
          "hit_count": 115,
          "gt_count": 115,
          "avg_bar_offset": 26.7,
          "is_primary": false
        },
        {
          "technique_id": "fib_pullback",
          "technique_name": "피보나치 눌림목",
          "recall": 1.0,
          "hit_count": 115,
          "gt_count": 115,
          "avg_bar_offset": 54.0,
          "is_primary": false
        },
        {
          "technique_id": "fractal_swing",
          "technique_name": "프랙탈 스윙",
          "recall": 1.0,
          "hit_count": 115,
          "gt_count": 115,
          "avg_bar_offset": 0.0,
          "is_primary": false
        },
        {
          "technique_id": "ichimoku_trend",
          "technique_name": "일목 추세",
          "recall": 1.0,
          "hit_count": 115,
          "gt_count": 115,
          "avg_bar_offset": 11.3,
          "is_primary": false
        },
        {
          "technique_id": "keltner_breakout",
          "technique_name": "Keltner 돌파",
          "recall": 1.0,
          "hit_count": 115,
          "gt_count": 115,
          "avg_bar_offset": 37.5,
          "is_primary": false
        },
        {
          "technique_id": "keltner_reversal",
          "technique_name": "Keltner 역추세",
          "recall": 1.0,
          "hit_count": 115,
          "gt_count": 115,
          "avg_bar_offset": 10.7,
          "is_primary": false
        },
        {
          "technique_id": "ma_cross",
          "technique_name": "EMA 크로스",
          "recall": 1.0,
          "hit_count": 115,
          "gt_count": 115,
          "avg_bar_offset": 32.6,
          "is_primary": false
        },
        {
          "technique_id": "macd_cross",
          "technique_name": "MACD 크로스",
          "recall": 1.0,
          "hit_count": 115,
          "gt_count": 115,
          "avg_bar_offset": 4.4,
          "is_primary": false
        },
        {
          "technique_id": "parabolic_sar",
          "technique_name": "Parabolic SAR",
          "recall": 1.0,
          "hit_count": 115,
          "gt_count": 115,
          "avg_bar_offset": 5.7,
          "is_primary": false
        },
        {
          "technique_id": "pivot_swing",
          "technique_name": "피벗 스윙",
          "recall": 1.0,
          "hit_count": 115,
          "gt_count": 115,
          "avg_bar_offset": 0.1,
          "is_primary": false
        },
        {
          "technique_id": "stochastic_cross",
          "technique_name": "Stochastic 크로스",
          "recall": 1.0,
          "hit_count": 115,
          "gt_count": 115,
          "avg_bar_offset": 5.7,
          "is_primary": false
        },
        {
          "technique_id": "support_resistance",
          "technique_name": "구조적 지지·저항",
          "recall": 1.0,
          "hit_count": 115,
          "gt_count": 115,
          "avg_bar_offset": 3.6,
          "is_primary": false
        },
        {
          "technique_id": "swing_failure",
          "technique_name": "스윙 실패",
          "recall": 1.0,
          "hit_count": 115,
          "gt_count": 115,
          "avg_bar_offset": 40.1,
          "is_primary": false
        },
        {
          "technique_id": "range_breakout",
          "technique_name": "레인지 돌파",
          "recall": 0.9913,
          "hit_count": 114,
          "gt_count": 115,
          "avg_bar_offset": 68.8,
          "is_primary": false
        },
        {
          "technique_id": "volume_breakout",
          "technique_name": "거래량 돌파",
          "recall": 0.9913,
          "hit_count": 114,
          "gt_count": 115,
          "avg_bar_offset": 60.1,
          "is_primary": false
        },
        {
          "technique_id": "macd_divergence",
          "technique_name": "MACD 다이버전스",
          "recall": 0.9826,
          "hit_count": 113,
          "gt_count": 115,
          "avg_bar_offset": 64.7,
          "is_primary": true
        },
        {
          "technique_id": "rsi_swing",
          "technique_name": "RSI 스윙",
          "recall": 0.9652,
          "hit_count": 111,
          "gt_count": 115,
          "avg_bar_offset": 45.2,
          "is_primary": true
        },
        {
          "technique_id": "rsi_divergence",
          "technique_name": "RSI 다이버전스",
          "recall": 0.9391,
          "hit_count": 108,
          "gt_count": 115,
          "avg_bar_offset": 101.2,
          "is_primary": true
        },
        {
          "technique_id": "support_bounce",
          "technique_name": "지지·저항 반등",
          "recall": 0.9217,
          "hit_count": 106,
          "gt_count": 115,
          "avg_bar_offset": 84.4,
          "is_primary": false
        },
        {
          "technique_id": "obv_divergence",
          "technique_name": "OBV 다이버전스",
          "recall": 0.913,
          "hit_count": 105,
          "gt_count": 115,
          "avg_bar_offset": 151.4,
          "is_primary": true
        },
        {
          "technique_id": "composite_full",
          "technique_name": "전체 통합 복합",
          "recall": 0.6261,
          "hit_count": 72,
          "gt_count": 115,
          "avg_bar_offset": 205.6,
          "is_primary": false
        },
        {
          "technique_id": "local_extrema",
          "technique_name": "국소 극값",
          "recall": 0.6261,
          "hit_count": 72,
          "gt_count": 115,
          "avg_bar_offset": 168.5,
          "is_primary": false
        },
        {
          "technique_id": "minor_swing",
          "technique_name": "소형 스윙 하이브리드",
          "recall": 0.5913,
          "hit_count": 68,
          "gt_count": 115,
          "avg_bar_offset": 169.0,
          "is_primary": false
        },
        {
          "technique_id": "volume_spike",
          "technique_name": "거래량 스파이크",
          "recall": 0.3913,
          "hit_count": 45,
          "gt_count": 115,
          "avg_bar_offset": 199.9,
          "is_primary": false
        },
        {
          "technique_id": "zigzag_causal",
          "technique_name": "인과 ZigZag",
          "recall": 0.0435,
          "hit_count": 5,
          "gt_count": 115,
          "avg_bar_offset": 445.6,
          "is_primary": false
        },
        {
          "technique_id": "roc_reversal",
          "technique_name": "ROC 반전",
          "recall": 0.0261,
          "hit_count": 3,
          "gt_count": 115,
          "avg_bar_offset": 162.3,
          "is_primary": false
        },
        {
          "technique_id": "pivot_points",
          "technique_name": "피벗 포인트",
          "recall": 0.0174,
          "hit_count": 2,
          "gt_count": 115,
          "avg_bar_offset": 126.0,
          "is_primary": false
        },
        {
          "technique_id": "supertrend",
          "technique_name": "Supertrend",
          "recall": 0.0,
          "hit_count": 0,
          "gt_count": 115,
          "avg_bar_offset": 0.0,
          "is_primary": false
        }
      ]
    },
    {
      "signal_type": "swing_high",
      "signal_label": "스윙 매도 (S)",
      "side": "sell",
      "gt_count": 944,
      "primary_techniques": [
        "zigzag_causal",
        "minor_swing",
        "pivot_swing",
        "fractal_swing",
        "composite_swing"
      ],
      "best_technique_id": "adx_trend",
      "best_technique_name": "ADX 추세",
      "best_recall": 1.0,
      "best_avg_offset": 16.5,
      "ranking": [
        {
          "technique_id": "adx_trend",
          "technique_name": "ADX 추세",
          "recall": 1.0,
          "hit_count": 944,
          "gt_count": 944,
          "avg_bar_offset": 16.5,
          "is_primary": false
        },
        {
          "technique_id": "atr_channel",
          "technique_name": "ATR 채널",
          "recall": 1.0,
          "hit_count": 944,
          "gt_count": 944,
          "avg_bar_offset": 15.2,
          "is_primary": false
        },
        {
          "technique_id": "bb_reversal",
          "technique_name": "볼린저 역추세",
          "recall": 1.0,
          "hit_count": 944,
          "gt_count": 944,
          "avg_bar_offset": 8.2,
          "is_primary": false
        },
        {
          "technique_id": "cci_extreme",
          "technique_name": "CCI 극값",
          "recall": 1.0,
          "hit_count": 944,
          "gt_count": 944,
          "avg_bar_offset": 21.5,
          "is_primary": false
        },
        {
          "technique_id": "composite_breakout",
          "technique_name": "돌파 복합",
          "recall": 1.0,
          "hit_count": 944,
          "gt_count": 944,
          "avg_bar_offset": 23.6,
          "is_primary": false
        },
        {
          "technique_id": "composite_pullback",
          "technique_name": "눌림목 복합",
          "recall": 1.0,
          "hit_count": 944,
          "gt_count": 944,
          "avg_bar_offset": 61.7,
          "is_primary": false
        },
        {
          "technique_id": "ema_pullback",
          "technique_name": "EMA 눌림목",
          "recall": 1.0,
          "hit_count": 944,
          "gt_count": 944,
          "avg_bar_offset": 33.2,
          "is_primary": false
        },
        {
          "technique_id": "fractal_swing",
          "technique_name": "프랙탈 스윙",
          "recall": 1.0,
          "hit_count": 944,
          "gt_count": 944,
          "avg_bar_offset": 0.9,
          "is_primary": true
        },
        {
          "technique_id": "ichimoku_trend",
          "technique_name": "일목 추세",
          "recall": 1.0,
          "hit_count": 944,
          "gt_count": 944,
          "avg_bar_offset": 21.9,
          "is_primary": false
        },
        {
          "technique_id": "keltner_reversal",
          "technique_name": "Keltner 역추세",
          "recall": 1.0,
          "hit_count": 944,
          "gt_count": 944,
          "avg_bar_offset": 15.1,
          "is_primary": false
        },
        {
          "technique_id": "macd_cross",
          "technique_name": "MACD 크로스",
          "recall": 1.0,
          "hit_count": 944,
          "gt_count": 944,
          "avg_bar_offset": 10.8,
          "is_primary": false
        },
        {
          "technique_id": "minor_swing",
          "technique_name": "소형 스윙 하이브리드",
          "recall": 1.0,
          "hit_count": 944,
          "gt_count": 944,
          "avg_bar_offset": 0.3,
          "is_primary": true
        },
        {
          "technique_id": "pivot_swing",
          "technique_name": "피벗 스윙",
          "recall": 1.0,
          "hit_count": 944,
          "gt_count": 944,
          "avg_bar_offset": 15.6,
          "is_primary": true
        },
        {
          "technique_id": "range_breakout",
          "technique_name": "레인지 돌파",
          "recall": 1.0,
          "hit_count": 944,
          "gt_count": 944,
          "avg_bar_offset": 46.1,
          "is_primary": false
        },
        {
          "technique_id": "stochastic_cross",
          "technique_name": "Stochastic 크로스",
          "recall": 1.0,
          "hit_count": 944,
          "gt_count": 944,
          "avg_bar_offset": 4.6,
          "is_primary": false
        },
        {
          "technique_id": "support_resistance",
          "technique_name": "구조적 지지·저항",
          "recall": 1.0,
          "hit_count": 944,
          "gt_count": 944,
          "avg_bar_offset": 10.9,
          "is_primary": false
        },
        {
          "technique_id": "zigzag_causal",
          "technique_name": "인과 ZigZag",
          "recall": 1.0,
          "hit_count": 944,
          "gt_count": 944,
          "avg_bar_offset": 0.0,
          "is_primary": true
        },
        {
          "technique_id": "keltner_breakout",
          "technique_name": "Keltner 돌파",
          "recall": 0.9989,
          "hit_count": 943,
          "gt_count": 944,
          "avg_bar_offset": 38.7,
          "is_primary": false
        },
        {
          "technique_id": "volume_breakout",
          "technique_name": "거래량 돌파",
          "recall": 0.9968,
          "hit_count": 941,
          "gt_count": 944,
          "avg_bar_offset": 63.4,
          "is_primary": false
        },
        {
          "technique_id": "donchian",
          "technique_name": "돈치안 채널",
          "recall": 0.9958,
          "hit_count": 940,
          "gt_count": 944,
          "avg_bar_offset": 27.1,
          "is_primary": false
        },
        {
          "technique_id": "bb_squeeze_breakout",
          "technique_name": "BB 스퀴즈 돌파",
          "recall": 0.9936,
          "hit_count": 938,
          "gt_count": 944,
          "avg_bar_offset": 71.2,
          "is_primary": false
        },
        {
          "technique_id": "composite_divergence",
          "technique_name": "다이버전스 복합",
          "recall": 0.9703,
          "hit_count": 916,
          "gt_count": 944,
          "avg_bar_offset": 55.1,
          "is_primary": false
        },
        {
          "technique_id": "composite_swing",
          "technique_name": "스윙 복합",
          "recall": 0.9693,
          "hit_count": 915,
          "gt_count": 944,
          "avg_bar_offset": 80.0,
          "is_primary": true
        },
        {
          "technique_id": "rsi_swing",
          "technique_name": "RSI 스윙",
          "recall": 0.9661,
          "hit_count": 912,
          "gt_count": 944,
          "avg_bar_offset": 62.0,
          "is_primary": false
        },
        {
          "technique_id": "local_extrema",
          "technique_name": "국소 극값",
          "recall": 0.9492,
          "hit_count": 896,
          "gt_count": 944,
          "avg_bar_offset": 57.7,
          "is_primary": false
        },
        {
          "technique_id": "fib_pullback",
          "technique_name": "피보나치 눌림목",
          "recall": 0.9237,
          "hit_count": 872,
          "gt_count": 944,
          "avg_bar_offset": 112.8,
          "is_primary": false
        },
        {
          "technique_id": "ma_cross",
          "technique_name": "EMA 크로스",
          "recall": 0.9184,
          "hit_count": 867,
          "gt_count": 944,
          "avg_bar_offset": 84.3,
          "is_primary": false
        },
        {
          "technique_id": "swing_failure",
          "technique_name": "스윙 실패",
          "recall": 0.8951,
          "hit_count": 845,
          "gt_count": 944,
          "avg_bar_offset": 85.8,
          "is_primary": false
        },
        {
          "technique_id": "composite_v3",
          "technique_name": "v3 통합 스코어링",
          "recall": 0.8782,
          "hit_count": 829,
          "gt_count": 944,
          "avg_bar_offset": 126.2,
          "is_primary": false
        },
        {
          "technique_id": "macd_divergence",
          "technique_name": "MACD 다이버전스",
          "recall": 0.8591,
          "hit_count": 811,
          "gt_count": 944,
          "avg_bar_offset": 115.3,
          "is_primary": false
        },
        {
          "technique_id": "support_bounce",
          "technique_name": "지지·저항 반등",
          "recall": 0.7712,
          "hit_count": 728,
          "gt_count": 944,
          "avg_bar_offset": 137.1,
          "is_primary": false
        },
        {
          "technique_id": "rsi_divergence",
          "technique_name": "RSI 다이버전스",
          "recall": 0.7172,
          "hit_count": 677,
          "gt_count": 944,
          "avg_bar_offset": 151.9,
          "is_primary": false
        },
        {
          "technique_id": "obv_divergence",
          "technique_name": "OBV 다이버전스",
          "recall": 0.6684,
          "hit_count": 631,
          "gt_count": 944,
          "avg_bar_offset": 176.6,
          "is_primary": false
        },
        {
          "technique_id": "volume_spike",
          "technique_name": "거래량 스파이크",
          "recall": 0.6674,
          "hit_count": 630,
          "gt_count": 944,
          "avg_bar_offset": 157.3,
          "is_primary": false
        },
        {
          "technique_id": "composite_full",
          "technique_name": "전체 통합 복합",
          "recall": 0.3496,
          "hit_count": 330,
          "gt_count": 944,
          "avg_bar_offset": 218.6,
          "is_primary": false
        },
        {
          "technique_id": "roc_reversal",
          "technique_name": "ROC 반전",
          "recall": 0.2722,
          "hit_count": 257,
          "gt_count": 944,
          "avg_bar_offset": 153.3,
          "is_primary": false
        },
        {
          "technique_id": "parabolic_sar",
          "technique_name": "Parabolic SAR",
          "recall": 0.0169,
          "hit_count": 16,
          "gt_count": 944,
          "avg_bar_offset": 255.2,
          "is_primary": false
        },
        {
          "technique_id": "pivot_points",
          "technique_name": "피벗 포인트",
          "recall": 0.0,
          "hit_count": 0,
          "gt_count": 944,
          "avg_bar_offset": 0.0,
          "is_primary": false
        },
        {
          "technique_id": "supertrend",
          "technique_name": "Supertrend",
          "recall": 0.0,
          "hit_count": 0,
          "gt_count": 944,
          "avg_bar_offset": 0.0,
          "is_primary": false
        }
      ]
    },
    {
      "signal_type": "div_bear",
      "signal_label": "하락 다이버전스 (Sd)",
      "side": "sell",
      "gt_count": 144,
      "primary_techniques": [
        "rsi_divergence",
        "macd_divergence",
        "obv_divergence",
        "rsi_swing",
        "composite_divergence"
      ],
      "best_technique_id": "adx_trend",
      "best_technique_name": "ADX 추세",
      "best_recall": 1.0,
      "best_avg_offset": 9.4,
      "ranking": [
        {
          "technique_id": "adx_trend",
          "technique_name": "ADX 추세",
          "recall": 1.0,
          "hit_count": 144,
          "gt_count": 144,
          "avg_bar_offset": 9.4,
          "is_primary": false
        },
        {
          "technique_id": "atr_channel",
          "technique_name": "ATR 채널",
          "recall": 1.0,
          "hit_count": 144,
          "gt_count": 144,
          "avg_bar_offset": 11.1,
          "is_primary": false
        },
        {
          "technique_id": "bb_reversal",
          "technique_name": "볼린저 역추세",
          "recall": 1.0,
          "hit_count": 144,
          "gt_count": 144,
          "avg_bar_offset": 4.6,
          "is_primary": false
        },
        {
          "technique_id": "bb_squeeze_breakout",
          "technique_name": "BB 스퀴즈 돌파",
          "recall": 1.0,
          "hit_count": 144,
          "gt_count": 144,
          "avg_bar_offset": 43.0,
          "is_primary": false
        },
        {
          "technique_id": "cci_extreme",
          "technique_name": "CCI 극값",
          "recall": 1.0,
          "hit_count": 144,
          "gt_count": 144,
          "avg_bar_offset": 7.7,
          "is_primary": false
        },
        {
          "technique_id": "composite_breakout",
          "technique_name": "돌파 복합",
          "recall": 1.0,
          "hit_count": 144,
          "gt_count": 144,
          "avg_bar_offset": 12.7,
          "is_primary": false
        },
        {
          "technique_id": "composite_divergence",
          "technique_name": "다이버전스 복합",
          "recall": 1.0,
          "hit_count": 144,
          "gt_count": 144,
          "avg_bar_offset": 20.0,
          "is_primary": true
        },
        {
          "technique_id": "composite_pullback",
          "technique_name": "눌림목 복합",
          "recall": 1.0,
          "hit_count": 144,
          "gt_count": 144,
          "avg_bar_offset": 52.3,
          "is_primary": false
        },
        {
          "technique_id": "composite_swing",
          "technique_name": "스윙 복합",
          "recall": 1.0,
          "hit_count": 144,
          "gt_count": 144,
          "avg_bar_offset": 39.0,
          "is_primary": false
        },
        {
          "technique_id": "donchian",
          "technique_name": "돈치안 채널",
          "recall": 1.0,
          "hit_count": 144,
          "gt_count": 144,
          "avg_bar_offset": 23.6,
          "is_primary": false
        },
        {
          "technique_id": "ema_pullback",
          "technique_name": "EMA 눌림목",
          "recall": 1.0,
          "hit_count": 144,
          "gt_count": 144,
          "avg_bar_offset": 29.0,
          "is_primary": false
        },
        {
          "technique_id": "fib_pullback",
          "technique_name": "피보나치 눌림목",
          "recall": 1.0,
          "hit_count": 144,
          "gt_count": 144,
          "avg_bar_offset": 57.3,
          "is_primary": false
        },
        {
          "technique_id": "fractal_swing",
          "technique_name": "프랙탈 스윙",
          "recall": 1.0,
          "hit_count": 144,
          "gt_count": 144,
          "avg_bar_offset": 0.1,
          "is_primary": false
        },
        {
          "technique_id": "ichimoku_trend",
          "technique_name": "일목 추세",
          "recall": 1.0,
          "hit_count": 144,
          "gt_count": 144,
          "avg_bar_offset": 11.5,
          "is_primary": false
        },
        {
          "technique_id": "keltner_breakout",
          "technique_name": "Keltner 돌파",
          "recall": 1.0,
          "hit_count": 144,
          "gt_count": 144,
          "avg_bar_offset": 29.9,
          "is_primary": false
        },
        {
          "technique_id": "keltner_reversal",
          "technique_name": "Keltner 역추세",
          "recall": 1.0,
          "hit_count": 144,
          "gt_count": 144,
          "avg_bar_offset": 12.0,
          "is_primary": false
        },
        {
          "technique_id": "ma_cross",
          "technique_name": "EMA 크로스",
          "recall": 1.0,
          "hit_count": 144,
          "gt_count": 144,
          "avg_bar_offset": 33.2,
          "is_primary": false
        },
        {
          "technique_id": "macd_cross",
          "technique_name": "MACD 크로스",
          "recall": 1.0,
          "hit_count": 144,
          "gt_count": 144,
          "avg_bar_offset": 4.6,
          "is_primary": false
        },
        {
          "technique_id": "macd_divergence",
          "technique_name": "MACD 다이버전스",
          "recall": 1.0,
          "hit_count": 144,
          "gt_count": 144,
          "avg_bar_offset": 63.1,
          "is_primary": true
        },
        {
          "technique_id": "pivot_swing",
          "technique_name": "피벗 스윙",
          "recall": 1.0,
          "hit_count": 144,
          "gt_count": 144,
          "avg_bar_offset": 0.4,
          "is_primary": false
        },
        {
          "technique_id": "stochastic_cross",
          "technique_name": "Stochastic 크로스",
          "recall": 1.0,
          "hit_count": 144,
          "gt_count": 144,
          "avg_bar_offset": 3.2,
          "is_primary": false
        },
        {
          "technique_id": "support_resistance",
          "technique_name": "구조적 지지·저항",
          "recall": 1.0,
          "hit_count": 144,
          "gt_count": 144,
          "avg_bar_offset": 2.3,
          "is_primary": false
        },
        {
          "technique_id": "swing_failure",
          "technique_name": "스윙 실패",
          "recall": 1.0,
          "hit_count": 144,
          "gt_count": 144,
          "avg_bar_offset": 33.3,
          "is_primary": false
        },
        {
          "technique_id": "volume_breakout",
          "technique_name": "거래량 돌파",
          "recall": 1.0,
          "hit_count": 144,
          "gt_count": 144,
          "avg_bar_offset": 54.7,
          "is_primary": false
        },
        {
          "technique_id": "range_breakout",
          "technique_name": "레인지 돌파",
          "recall": 0.9931,
          "hit_count": 143,
          "gt_count": 144,
          "avg_bar_offset": 67.6,
          "is_primary": false
        },
        {
          "technique_id": "rsi_divergence",
          "technique_name": "RSI 다이버전스",
          "recall": 0.9861,
          "hit_count": 142,
          "gt_count": 144,
          "avg_bar_offset": 138.3,
          "is_primary": true
        },
        {
          "technique_id": "rsi_swing",
          "technique_name": "RSI 스윙",
          "recall": 0.9861,
          "hit_count": 142,
          "gt_count": 144,
          "avg_bar_offset": 39.9,
          "is_primary": true
        },
        {
          "technique_id": "composite_v3",
          "technique_name": "v3 통합 스코어링",
          "recall": 0.9653,
          "hit_count": 139,
          "gt_count": 144,
          "avg_bar_offset": 80.5,
          "is_primary": false
        },
        {
          "technique_id": "obv_divergence",
          "technique_name": "OBV 다이버전스",
          "recall": 0.9653,
          "hit_count": 139,
          "gt_count": 144,
          "avg_bar_offset": 138.6,
          "is_primary": true
        },
        {
          "technique_id": "support_bounce",
          "technique_name": "지지·저항 반등",
          "recall": 0.9306,
          "hit_count": 134,
          "gt_count": 144,
          "avg_bar_offset": 101.2,
          "is_primary": false
        },
        {
          "technique_id": "local_extrema",
          "technique_name": "국소 극값",
          "recall": 0.6319,
          "hit_count": 91,
          "gt_count": 144,
          "avg_bar_offset": 107.2,
          "is_primary": false
        },
        {
          "technique_id": "minor_swing",
          "technique_name": "소형 스윙 하이브리드",
          "recall": 0.625,
          "hit_count": 90,
          "gt_count": 144,
          "avg_bar_offset": 120.3,
          "is_primary": false
        },
        {
          "technique_id": "volume_spike",
          "technique_name": "거래량 스파이크",
          "recall": 0.4306,
          "hit_count": 62,
          "gt_count": 144,
          "avg_bar_offset": 191.0,
          "is_primary": false
        },
        {
          "technique_id": "composite_full",
          "technique_name": "전체 통합 복합",
          "recall": 0.25,
          "hit_count": 36,
          "gt_count": 144,
          "avg_bar_offset": 256.7,
          "is_primary": false
        },
        {
          "technique_id": "zigzag_causal",
          "technique_name": "인과 ZigZag",
          "recall": 0.0278,
          "hit_count": 4,
          "gt_count": 144,
          "avg_bar_offset": 430.8,
          "is_primary": false
        },
        {
          "technique_id": "parabolic_sar",
          "technique_name": "Parabolic SAR",
          "recall": 0.0,
          "hit_count": 0,
          "gt_count": 144,
          "avg_bar_offset": 0.0,
          "is_primary": false
        },
        {
          "technique_id": "pivot_points",
          "technique_name": "피벗 포인트",
          "recall": 0.0,
          "hit_count": 0,
          "gt_count": 144,
          "avg_bar_offset": 0.0,
          "is_primary": false
        },
        {
          "technique_id": "roc_reversal",
          "technique_name": "ROC 반전",
          "recall": 0.0,
          "hit_count": 0,
          "gt_count": 144,
          "avg_bar_offset": 0.0,
          "is_primary": false
        },
        {
          "technique_id": "supertrend",
          "technique_name": "Supertrend",
          "recall": 0.0,
          "hit_count": 0,
          "gt_count": 144,
          "avg_bar_offset": 0.0,
          "is_primary": false
        }
      ]
    }
  ],
  "techniques": [
    {
      "technique_id": "fractal_swing",
      "technique_name": "프랙탈 스윙",
      "category": "swing",
      "overall_score": 0.9136,
      "signal_types": {
        "swing_low": {
          "label": "스윙 매수 (B)",
          "gt_count": 944,
          "hit_count": 944,
          "recall": 1.0,
          "avg_bar_offset": 0.9,
          "is_primary": true
        },
        "pullback": {
          "label": "눌림목 (B*)",
          "gt_count": 406,
          "hit_count": 406,
          "recall": 1.0,
          "avg_bar_offset": 0.0,
          "is_primary": false
        },
        "breakout": {
          "label": "돌파 (B^)",
          "gt_count": 122,
          "hit_count": 122,
          "recall": 1.0,
          "avg_bar_offset": 4.1,
          "is_primary": false
        },
        "div_bull": {
          "label": "상승 다이버전스 (Bd)",
          "gt_count": 115,
          "hit_count": 115,
          "recall": 1.0,
          "avg_bar_offset": 0.0,
          "is_primary": false
        },
        "swing_high": {
          "label": "스윙 매도 (S)",
          "gt_count": 944,
          "hit_count": 944,
          "recall": 1.0,
          "avg_bar_offset": 0.9,
          "is_primary": true
        },
        "div_bear": {
          "label": "하락 다이버전스 (Sd)",
          "gt_count": 144,
          "hit_count": 144,
          "recall": 1.0,
          "avg_bar_offset": 0.1,
          "is_primary": false
        }
      }
    },
    {
      "technique_id": "pivot_swing",
      "technique_name": "피벗 스윙",
      "category": "swing",
      "overall_score": 0.911,
      "signal_types": {
        "swing_low": {
          "label": "스윙 매수 (B)",
          "gt_count": 944,
          "hit_count": 944,
          "recall": 1.0,
          "avg_bar_offset": 15.3,
          "is_primary": true
        },
        "pullback": {
          "label": "눌림목 (B*)",
          "gt_count": 406,
          "hit_count": 406,
          "recall": 1.0,
          "avg_bar_offset": 0.4,
          "is_primary": false
        },
        "breakout": {
          "label": "돌파 (B^)",
          "gt_count": 122,
          "hit_count": 122,
          "recall": 1.0,
          "avg_bar_offset": 17.3,
          "is_primary": false
        },
        "div_bull": {
          "label": "상승 다이버전스 (Bd)",
          "gt_count": 115,
          "hit_count": 115,
          "recall": 1.0,
          "avg_bar_offset": 0.1,
          "is_primary": false
        },
        "swing_high": {
          "label": "스윙 매도 (S)",
          "gt_count": 944,
          "hit_count": 944,
          "recall": 1.0,
          "avg_bar_offset": 15.6,
          "is_primary": true
        },
        "div_bear": {
          "label": "하락 다이버전스 (Sd)",
          "gt_count": 144,
          "hit_count": 144,
          "recall": 1.0,
          "avg_bar_offset": 0.4,
          "is_primary": false
        }
      }
    },
    {
      "technique_id": "minor_swing",
      "technique_name": "소형 스윙 하이브리드",
      "category": "hybrid",
      "overall_score": 0.8636,
      "signal_types": {
        "swing_low": {
          "label": "스윙 매수 (B)",
          "gt_count": 944,
          "hit_count": 944,
          "recall": 1.0,
          "avg_bar_offset": 0.3,
          "is_primary": true
        },
        "pullback": {
          "label": "눌림목 (B*)",
          "gt_count": 406,
          "hit_count": 328,
          "recall": 0.8079,
          "avg_bar_offset": 103.8,
          "is_primary": false
        },
        "breakout": {
          "label": "돌파 (B^)",
          "gt_count": 122,
          "hit_count": 74,
          "recall": 0.6066,
          "avg_bar_offset": 238.2,
          "is_primary": false
        },
        "div_bull": {
          "label": "상승 다이버전스 (Bd)",
          "gt_count": 115,
          "hit_count": 68,
          "recall": 0.5913,
          "avg_bar_offset": 169.0,
          "is_primary": false
        },
        "swing_high": {
          "label": "스윙 매도 (S)",
          "gt_count": 944,
          "hit_count": 944,
          "recall": 1.0,
          "avg_bar_offset": 0.3,
          "is_primary": true
        },
        "div_bear": {
          "label": "하락 다이버전스 (Sd)",
          "gt_count": 144,
          "hit_count": 90,
          "recall": 0.625,
          "avg_bar_offset": 120.3,
          "is_primary": false
        }
      }
    },
    {
      "technique_id": "local_extrema",
      "technique_name": "국소 극값",
      "category": "swing",
      "overall_score": 0.8394,
      "signal_types": {
        "swing_low": {
          "label": "스윙 매수 (B)",
          "gt_count": 944,
          "hit_count": 915,
          "recall": 0.9693,
          "avg_bar_offset": 46.8,
          "is_primary": false
        },
        "pullback": {
          "label": "눌림목 (B*)",
          "gt_count": 406,
          "hit_count": 329,
          "recall": 0.8103,
          "avg_bar_offset": 97.5,
          "is_primary": true
        },
        "breakout": {
          "label": "돌파 (B^)",
          "gt_count": 122,
          "hit_count": 75,
          "recall": 0.6148,
          "avg_bar_offset": 237.1,
          "is_primary": false
        },
        "div_bull": {
          "label": "상승 다이버전스 (Bd)",
          "gt_count": 115,
          "hit_count": 72,
          "recall": 0.6261,
          "avg_bar_offset": 168.5,
          "is_primary": false
        },
        "swing_high": {
          "label": "스윙 매도 (S)",
          "gt_count": 944,
          "hit_count": 896,
          "recall": 0.9492,
          "avg_bar_offset": 57.7,
          "is_primary": false
        },
        "div_bear": {
          "label": "하락 다이버전스 (Sd)",
          "gt_count": 144,
          "hit_count": 91,
          "recall": 0.6319,
          "avg_bar_offset": 107.2,
          "is_primary": false
        }
      }
    },
    {
      "technique_id": "zigzag_causal",
      "technique_name": "인과 ZigZag",
      "category": "swing",
      "overall_score": 0.7761,
      "signal_types": {
        "swing_low": {
          "label": "스윙 매수 (B)",
          "gt_count": 944,
          "hit_count": 944,
          "recall": 1.0,
          "avg_bar_offset": 0.0,
          "is_primary": true
        },
        "pullback": {
          "label": "눌림목 (B*)",
          "gt_count": 406,
          "hit_count": 156,
          "recall": 0.3842,
          "avg_bar_offset": 273.4,
          "is_primary": false
        },
        "breakout": {
          "label": "돌파 (B^)",
          "gt_count": 122,
          "hit_count": 19,
          "recall": 0.1557,
          "avg_bar_offset": 359.6,
          "is_primary": false
        },
        "div_bull": {
          "label": "상승 다이버전스 (Bd)",
          "gt_count": 115,
          "hit_count": 5,
          "recall": 0.0435,
          "avg_bar_offset": 445.6,
          "is_primary": false
        },
        "swing_high": {
          "label": "스윙 매도 (S)",
          "gt_count": 944,
          "hit_count": 944,
          "recall": 1.0,
          "avg_bar_offset": 0.0,
          "is_primary": true
        },
        "div_bear": {
          "label": "하락 다이버전스 (Sd)",
          "gt_count": 144,
          "hit_count": 4,
          "recall": 0.0278,
          "avg_bar_offset": 430.8,
          "is_primary": false
        }
      }
    },
    {
      "technique_id": "stochastic_cross",
      "technique_name": "Stochastic 크로스",
      "category": "momentum",
      "overall_score": 0.7506,
      "signal_types": {
        "swing_low": {
          "label": "스윙 매수 (B)",
          "gt_count": 944,
          "hit_count": 944,
          "recall": 1.0,
          "avg_bar_offset": 3.9,
          "is_primary": false
        },
        "pullback": {
          "label": "눌림목 (B*)",
          "gt_count": 406,
          "hit_count": 406,
          "recall": 1.0,
          "avg_bar_offset": 4.8,
          "is_primary": false
        },
        "breakout": {
          "label": "돌파 (B^)",
          "gt_count": 122,
          "hit_count": 122,
          "recall": 1.0,
          "avg_bar_offset": 23.3,
          "is_primary": false
        },
        "div_bull": {
          "label": "상승 다이버전스 (Bd)",
          "gt_count": 115,
          "hit_count": 115,
          "recall": 1.0,
          "avg_bar_offset": 5.7,
          "is_primary": false
        },
        "swing_high": {
          "label": "스윙 매도 (S)",
          "gt_count": 944,
          "hit_count": 944,
          "recall": 1.0,
          "avg_bar_offset": 4.6,
          "is_primary": false
        },
        "div_bear": {
          "label": "하락 다이버전스 (Sd)",
          "gt_count": 144,
          "hit_count": 144,
          "recall": 1.0,
          "avg_bar_offset": 3.2,
          "is_primary": false
        }
      }
    },
    {
      "technique_id": "support_resistance",
      "technique_name": "구조적 지지·저항",
      "category": "structure",
      "overall_score": 0.7472,
      "signal_types": {
        "swing_low": {
          "label": "스윙 매수 (B)",
          "gt_count": 944,
          "hit_count": 944,
          "recall": 1.0,
          "avg_bar_offset": 15.1,
          "is_primary": false
        },
        "pullback": {
          "label": "눌림목 (B*)",
          "gt_count": 406,
          "hit_count": 406,
          "recall": 1.0,
          "avg_bar_offset": 5.2,
          "is_primary": false
        },
        "breakout": {
          "label": "돌파 (B^)",
          "gt_count": 122,
          "hit_count": 122,
          "recall": 1.0,
          "avg_bar_offset": 21.0,
          "is_primary": false
        },
        "div_bull": {
          "label": "상승 다이버전스 (Bd)",
          "gt_count": 115,
          "hit_count": 115,
          "recall": 1.0,
          "avg_bar_offset": 3.6,
          "is_primary": false
        },
        "swing_high": {
          "label": "스윙 매도 (S)",
          "gt_count": 944,
          "hit_count": 944,
          "recall": 1.0,
          "avg_bar_offset": 10.9,
          "is_primary": false
        },
        "div_bear": {
          "label": "하락 다이버전스 (Sd)",
          "gt_count": 144,
          "hit_count": 144,
          "recall": 1.0,
          "avg_bar_offset": 2.3,
          "is_primary": false
        }
      }
    },
    {
      "technique_id": "atr_channel",
      "technique_name": "ATR 채널",
      "category": "volatility",
      "overall_score": 0.7232,
      "signal_types": {
        "swing_low": {
          "label": "스윙 매수 (B)",
          "gt_count": 944,
          "hit_count": 944,
          "recall": 1.0,
          "avg_bar_offset": 7.4,
          "is_primary": false
        },
        "pullback": {
          "label": "눌림목 (B*)",
          "gt_count": 406,
          "hit_count": 406,
          "recall": 1.0,
          "avg_bar_offset": 10.4,
          "is_primary": false
        },
        "breakout": {
          "label": "돌파 (B^)",
          "gt_count": 122,
          "hit_count": 122,
          "recall": 1.0,
          "avg_bar_offset": 49.8,
          "is_primary": false
        },
        "div_bull": {
          "label": "상승 다이버전스 (Bd)",
          "gt_count": 115,
          "hit_count": 115,
          "recall": 1.0,
          "avg_bar_offset": 10.8,
          "is_primary": false
        },
        "swing_high": {
          "label": "스윙 매도 (S)",
          "gt_count": 944,
          "hit_count": 944,
          "recall": 1.0,
          "avg_bar_offset": 15.2,
          "is_primary": false
        },
        "div_bear": {
          "label": "하락 다이버전스 (Sd)",
          "gt_count": 144,
          "hit_count": 144,
          "recall": 1.0,
          "avg_bar_offset": 11.1,
          "is_primary": false
        }
      }
    },
    {
      "technique_id": "keltner_reversal",
      "technique_name": "Keltner 역추세",
      "category": "volatility",
      "overall_score": 0.7228,
      "signal_types": {
        "swing_low": {
          "label": "스윙 매수 (B)",
          "gt_count": 944,
          "hit_count": 944,
          "recall": 1.0,
          "avg_bar_offset": 7.3,
          "is_primary": false
        },
        "pullback": {
          "label": "눌림목 (B*)",
          "gt_count": 406,
          "hit_count": 406,
          "recall": 1.0,
          "avg_bar_offset": 10.9,
          "is_primary": false
        },
        "breakout": {
          "label": "돌파 (B^)",
          "gt_count": 122,
          "hit_count": 122,
          "recall": 1.0,
          "avg_bar_offset": 48.4,
          "is_primary": false
        },
        "div_bull": {
          "label": "상승 다이버전스 (Bd)",
          "gt_count": 115,
          "hit_count": 115,
          "recall": 1.0,
          "avg_bar_offset": 10.7,
          "is_primary": false
        },
        "swing_high": {
          "label": "스윙 매도 (S)",
          "gt_count": 944,
          "hit_count": 944,
          "recall": 1.0,
          "avg_bar_offset": 15.1,
          "is_primary": false
        },
        "div_bear": {
          "label": "하락 다이버전스 (Sd)",
          "gt_count": 144,
          "hit_count": 144,
          "recall": 1.0,
          "avg_bar_offset": 12.0,
          "is_primary": false
        }
      }
    },
    {
      "technique_id": "bb_reversal",
      "technique_name": "볼린저 역추세",
      "category": "indicator",
      "overall_score": 0.7206,
      "signal_types": {
        "swing_low": {
          "label": "스윙 매수 (B)",
          "gt_count": 944,
          "hit_count": 944,
          "recall": 1.0,
          "avg_bar_offset": 9.8,
          "is_primary": false
        },
        "pullback": {
          "label": "눌림목 (B*)",
          "gt_count": 406,
          "hit_count": 406,
          "recall": 1.0,
          "avg_bar_offset": 3.3,
          "is_primary": true
        },
        "breakout": {
          "label": "돌파 (B^)",
          "gt_count": 122,
          "hit_count": 122,
          "recall": 1.0,
          "avg_bar_offset": 25.5,
          "is_primary": false
        },
        "div_bull": {
          "label": "상승 다이버전스 (Bd)",
          "gt_count": 115,
          "hit_count": 115,
          "recall": 1.0,
          "avg_bar_offset": 2.5,
          "is_primary": false
        },
        "swing_high": {
          "label": "스윙 매도 (S)",
          "gt_count": 944,
          "hit_count": 944,
          "recall": 1.0,
          "avg_bar_offset": 8.2,
          "is_primary": false
        },
        "div_bear": {
          "label": "하락 다이버전스 (Sd)",
          "gt_count": 144,
          "hit_count": 144,
          "recall": 1.0,
          "avg_bar_offset": 4.6,
          "is_primary": false
        }
      }
    },
    {
      "technique_id": "donchian",
      "technique_name": "돈치안 채널",
      "category": "swing",
      "overall_score": 0.7151,
      "signal_types": {
        "swing_low": {
          "label": "스윙 매수 (B)",
          "gt_count": 944,
          "hit_count": 944,
          "recall": 1.0,
          "avg_bar_offset": 10.1,
          "is_primary": false
        },
        "pullback": {
          "label": "눌림목 (B*)",
          "gt_count": 406,
          "hit_count": 406,
          "recall": 1.0,
          "avg_bar_offset": 14.2,
          "is_primary": false
        },
        "breakout": {
          "label": "돌파 (B^)",
          "gt_count": 122,
          "hit_count": 122,
          "recall": 1.0,
          "avg_bar_offset": 42.2,
          "is_primary": true
        },
        "div_bull": {
          "label": "상승 다이버전스 (Bd)",
          "gt_count": 115,
          "hit_count": 115,
          "recall": 1.0,
          "avg_bar_offset": 22.9,
          "is_primary": false
        },
        "swing_high": {
          "label": "스윙 매도 (S)",
          "gt_count": 944,
          "hit_count": 940,
          "recall": 0.9958,
          "avg_bar_offset": 27.1,
          "is_primary": false
        },
        "div_bear": {
          "label": "하락 다이버전스 (Sd)",
          "gt_count": 144,
          "hit_count": 144,
          "recall": 1.0,
          "avg_bar_offset": 23.6,
          "is_primary": false
        }
      }
    },
    {
      "technique_id": "cci_extreme",
      "technique_name": "CCI 극값",
      "category": "momentum",
      "overall_score": 0.7128,
      "signal_types": {
        "swing_low": {
          "label": "스윙 매수 (B)",
          "gt_count": 944,
          "hit_count": 944,
          "recall": 1.0,
          "avg_bar_offset": 12.8,
          "is_primary": false
        },
        "pullback": {
          "label": "눌림목 (B*)",
          "gt_count": 406,
          "hit_count": 406,
          "recall": 1.0,
          "avg_bar_offset": 6.6,
          "is_primary": false
        },
        "breakout": {
          "label": "돌파 (B^)",
          "gt_count": 122,
          "hit_count": 122,
          "recall": 1.0,
          "avg_bar_offset": 33.8,
          "is_primary": false
        },
        "div_bull": {
          "label": "상승 다이버전스 (Bd)",
          "gt_count": 115,
          "hit_count": 115,
          "recall": 1.0,
          "avg_bar_offset": 6.7,
          "is_primary": false
        },
        "swing_high": {
          "label": "스윙 매도 (S)",
          "gt_count": 944,
          "hit_count": 944,
          "recall": 1.0,
          "avg_bar_offset": 21.5,
          "is_primary": false
        },
        "div_bear": {
          "label": "하락 다이버전스 (Sd)",
          "gt_count": 144,
          "hit_count": 144,
          "recall": 1.0,
          "avg_bar_offset": 7.7,
          "is_primary": false
        }
      }
    },
    {
      "technique_id": "macd_cross",
      "technique_name": "MACD 크로스",
      "category": "indicator",
      "overall_score": 0.7065,
      "signal_types": {
        "swing_low": {
          "label": "스윙 매수 (B)",
          "gt_count": 944,
          "hit_count": 944,
          "recall": 1.0,
          "avg_bar_offset": 10.6,
          "is_primary": false
        },
        "pullback": {
          "label": "눌림목 (B*)",
          "gt_count": 406,
          "hit_count": 406,
          "recall": 1.0,
          "avg_bar_offset": 5.7,
          "is_primary": false
        },
        "breakout": {
          "label": "돌파 (B^)",
          "gt_count": 122,
          "hit_count": 122,
          "recall": 1.0,
          "avg_bar_offset": 7.4,
          "is_primary": false
        },
        "div_bull": {
          "label": "상승 다이버전스 (Bd)",
          "gt_count": 115,
          "hit_count": 115,
          "recall": 1.0,
          "avg_bar_offset": 4.4,
          "is_primary": false
        },
        "swing_high": {
          "label": "스윙 매도 (S)",
          "gt_count": 944,
          "hit_count": 944,
          "recall": 1.0,
          "avg_bar_offset": 10.8,
          "is_primary": false
        },
        "div_bear": {
          "label": "하락 다이버전스 (Sd)",
          "gt_count": 144,
          "hit_count": 144,
          "recall": 1.0,
          "avg_bar_offset": 4.6,
          "is_primary": false
        }
      }
    },
    {
      "technique_id": "adx_trend",
      "technique_name": "ADX 추세",
      "category": "trend",
      "overall_score": 0.6906,
      "signal_types": {
        "swing_low": {
          "label": "스윙 매수 (B)",
          "gt_count": 944,
          "hit_count": 944,
          "recall": 1.0,
          "avg_bar_offset": 15.0,
          "is_primary": false
        },
        "pullback": {
          "label": "눌림목 (B*)",
          "gt_count": 406,
          "hit_count": 406,
          "recall": 1.0,
          "avg_bar_offset": 9.8,
          "is_primary": false
        },
        "breakout": {
          "label": "돌파 (B^)",
          "gt_count": 122,
          "hit_count": 122,
          "recall": 1.0,
          "avg_bar_offset": 16.7,
          "is_primary": false
        },
        "div_bull": {
          "label": "상승 다이버전스 (Bd)",
          "gt_count": 115,
          "hit_count": 115,
          "recall": 1.0,
          "avg_bar_offset": 9.3,
          "is_primary": false
        },
        "swing_high": {
          "label": "스윙 매도 (S)",
          "gt_count": 944,
          "hit_count": 944,
          "recall": 1.0,
          "avg_bar_offset": 16.5,
          "is_primary": false
        },
        "div_bear": {
          "label": "하락 다이버전스 (Sd)",
          "gt_count": 144,
          "hit_count": 144,
          "recall": 1.0,
          "avg_bar_offset": 9.4,
          "is_primary": false
        }
      }
    },
    {
      "technique_id": "ichimoku_trend",
      "technique_name": "일목 추세",
      "category": "trend",
      "overall_score": 0.6713,
      "signal_types": {
        "swing_low": {
          "label": "스윙 매수 (B)",
          "gt_count": 944,
          "hit_count": 944,
          "recall": 1.0,
          "avg_bar_offset": 22.3,
          "is_primary": false
        },
        "pullback": {
          "label": "눌림목 (B*)",
          "gt_count": 406,
          "hit_count": 406,
          "recall": 1.0,
          "avg_bar_offset": 12.3,
          "is_primary": false
        },
        "breakout": {
          "label": "돌파 (B^)",
          "gt_count": 122,
          "hit_count": 122,
          "recall": 1.0,
          "avg_bar_offset": 15.9,
          "is_primary": false
        },
        "div_bull": {
          "label": "상승 다이버전스 (Bd)",
          "gt_count": 115,
          "hit_count": 115,
          "recall": 1.0,
          "avg_bar_offset": 11.3,
          "is_primary": false
        },
        "swing_high": {
          "label": "스윙 매도 (S)",
          "gt_count": 944,
          "hit_count": 944,
          "recall": 1.0,
          "avg_bar_offset": 21.9,
          "is_primary": false
        },
        "div_bear": {
          "label": "하락 다이버전스 (Sd)",
          "gt_count": 144,
          "hit_count": 144,
          "recall": 1.0,
          "avg_bar_offset": 11.5,
          "is_primary": false
        }
      }
    },
    {
      "technique_id": "rsi_swing",
      "technique_name": "RSI 스윙",
      "category": "indicator",
      "overall_score": 0.6685,
      "signal_types": {
        "swing_low": {
          "label": "스윙 매수 (B)",
          "gt_count": 944,
          "hit_count": 929,
          "recall": 0.9841,
          "avg_bar_offset": 43.5,
          "is_primary": false
        },
        "pullback": {
          "label": "눌림목 (B*)",
          "gt_count": 406,
          "hit_count": 403,
          "recall": 0.9926,
          "avg_bar_offset": 50.7,
          "is_primary": false
        },
        "breakout": {
          "label": "돌파 (B^)",
          "gt_count": 122,
          "hit_count": 120,
          "recall": 0.9836,
          "avg_bar_offset": 128.4,
          "is_primary": false
        },
        "div_bull": {
          "label": "상승 다이버전스 (Bd)",
          "gt_count": 115,
          "hit_count": 111,
          "recall": 0.9652,
          "avg_bar_offset": 45.2,
          "is_primary": true
        },
        "swing_high": {
          "label": "스윙 매도 (S)",
          "gt_count": 944,
          "hit_count": 912,
          "recall": 0.9661,
          "avg_bar_offset": 62.0,
          "is_primary": false
        },
        "div_bear": {
          "label": "하락 다이버전스 (Sd)",
          "gt_count": 144,
          "hit_count": 142,
          "recall": 0.9861,
          "avg_bar_offset": 39.9,
          "is_primary": true
        }
      }
    },
    {
      "technique_id": "composite_divergence",
      "technique_name": "다이버전스 복합",
      "category": "composite",
      "overall_score": 0.6633,
      "signal_types": {
        "swing_low": {
          "label": "스윙 매수 (B)",
          "gt_count": 944,
          "hit_count": 927,
          "recall": 0.982,
          "avg_bar_offset": 45.7,
          "is_primary": false
        },
        "pullback": {
          "label": "눌림목 (B*)",
          "gt_count": 406,
          "hit_count": 406,
          "recall": 1.0,
          "avg_bar_offset": 24.4,
          "is_primary": false
        },
        "breakout": {
          "label": "돌파 (B^)",
          "gt_count": 122,
          "hit_count": 122,
          "recall": 1.0,
          "avg_bar_offset": 64.4,
          "is_primary": false
        },
        "div_bull": {
          "label": "상승 다이버전스 (Bd)",
          "gt_count": 115,
          "hit_count": 115,
          "recall": 1.0,
          "avg_bar_offset": 16.3,
          "is_primary": true
        },
        "swing_high": {
          "label": "스윙 매도 (S)",
          "gt_count": 944,
          "hit_count": 916,
          "recall": 0.9703,
          "avg_bar_offset": 55.1,
          "is_primary": false
        },
        "div_bear": {
          "label": "하락 다이버전스 (Sd)",
          "gt_count": 144,
          "hit_count": 144,
          "recall": 1.0,
          "avg_bar_offset": 20.0,
          "is_primary": true
        }
      }
    },
    {
      "technique_id": "composite_breakout",
      "technique_name": "돌파 복합",
      "category": "composite",
      "overall_score": 0.6502,
      "signal_types": {
        "swing_low": {
          "label": "스윙 매수 (B)",
          "gt_count": 944,
          "hit_count": 937,
          "recall": 0.9926,
          "avg_bar_offset": 42.1,
          "is_primary": false
        },
        "pullback": {
          "label": "눌림목 (B*)",
          "gt_count": 406,
          "hit_count": 406,
          "recall": 1.0,
          "avg_bar_offset": 13.8,
          "is_primary": false
        },
        "breakout": {
          "label": "돌파 (B^)",
          "gt_count": 122,
          "hit_count": 122,
          "recall": 1.0,
          "avg_bar_offset": 3.2,
          "is_primary": true
        },
        "div_bull": {
          "label": "상승 다이버전스 (Bd)",
          "gt_count": 115,
          "hit_count": 115,
          "recall": 1.0,
          "avg_bar_offset": 17.2,
          "is_primary": false
        },
        "swing_high": {
          "label": "스윙 매도 (S)",
          "gt_count": 944,
          "hit_count": 944,
          "recall": 1.0,
          "avg_bar_offset": 23.6,
          "is_primary": false
        },
        "div_bear": {
          "label": "하락 다이버전스 (Sd)",
          "gt_count": 144,
          "hit_count": 144,
          "recall": 1.0,
          "avg_bar_offset": 12.7,
          "is_primary": false
        }
      }
    },
    {
      "technique_id": "ema_pullback",
      "technique_name": "EMA 눌림목",
      "category": "pullback",
      "overall_score": 0.6123,
      "signal_types": {
        "swing_low": {
          "label": "스윙 매수 (B)",
          "gt_count": 944,
          "hit_count": 944,
          "recall": 1.0,
          "avg_bar_offset": 40.6,
          "is_primary": false
        },
        "pullback": {
          "label": "눌림목 (B*)",
          "gt_count": 406,
          "hit_count": 406,
          "recall": 1.0,
          "avg_bar_offset": 20.0,
          "is_primary": true
        },
        "breakout": {
          "label": "돌파 (B^)",
          "gt_count": 122,
          "hit_count": 122,
          "recall": 1.0,
          "avg_bar_offset": 11.2,
          "is_primary": false
        },
        "div_bull": {
          "label": "상승 다이버전스 (Bd)",
          "gt_count": 115,
          "hit_count": 115,
          "recall": 1.0,
          "avg_bar_offset": 26.7,
          "is_primary": false
        },
        "swing_high": {
          "label": "스윙 매도 (S)",
          "gt_count": 944,
          "hit_count": 944,
          "recall": 1.0,
          "avg_bar_offset": 33.2,
          "is_primary": false
        },
        "div_bear": {
          "label": "하락 다이버전스 (Sd)",
          "gt_count": 144,
          "hit_count": 144,
          "recall": 1.0,
          "avg_bar_offset": 29.0,
          "is_primary": false
        }
      }
    },
    {
      "technique_id": "keltner_breakout",
      "technique_name": "Keltner 돌파",
      "category": "breakout",
      "overall_score": 0.604,
      "signal_types": {
        "swing_low": {
          "label": "스윙 매수 (B)",
          "gt_count": 944,
          "hit_count": 930,
          "recall": 0.9852,
          "avg_bar_offset": 51.6,
          "is_primary": false
        },
        "pullback": {
          "label": "눌림목 (B*)",
          "gt_count": 406,
          "hit_count": 406,
          "recall": 1.0,
          "avg_bar_offset": 31.9,
          "is_primary": false
        },
        "breakout": {
          "label": "돌파 (B^)",
          "gt_count": 122,
          "hit_count": 122,
          "recall": 1.0,
          "avg_bar_offset": 8.2,
          "is_primary": true
        },
        "div_bull": {
          "label": "상승 다이버전스 (Bd)",
          "gt_count": 115,
          "hit_count": 115,
          "recall": 1.0,
          "avg_bar_offset": 37.5,
          "is_primary": false
        },
        "swing_high": {
          "label": "스윙 매도 (S)",
          "gt_count": 944,
          "hit_count": 943,
          "recall": 0.9989,
          "avg_bar_offset": 38.7,
          "is_primary": false
        },
        "div_bear": {
          "label": "하락 다이버전스 (Sd)",
          "gt_count": 144,
          "hit_count": 144,
          "recall": 1.0,
          "avg_bar_offset": 29.9,
          "is_primary": false
        }
      }
    },
    {
      "technique_id": "composite_pullback",
      "technique_name": "눌림목 복합",
      "category": "composite",
      "overall_score": 0.5961,
      "signal_types": {
        "swing_low": {
          "label": "스윙 매수 (B)",
          "gt_count": 944,
          "hit_count": 942,
          "recall": 0.9979,
          "avg_bar_offset": 78.0,
          "is_primary": false
        },
        "pullback": {
          "label": "눌림목 (B*)",
          "gt_count": 406,
          "hit_count": 406,
          "recall": 1.0,
          "avg_bar_offset": 32.5,
          "is_primary": true
        },
        "breakout": {
          "label": "돌파 (B^)",
          "gt_count": 122,
          "hit_count": 122,
          "recall": 1.0,
          "avg_bar_offset": 17.7,
          "is_primary": false
        },
        "div_bull": {
          "label": "상승 다이버전스 (Bd)",
          "gt_count": 115,
          "hit_count": 115,
          "recall": 1.0,
          "avg_bar_offset": 37.9,
          "is_primary": false
        },
        "swing_high": {
          "label": "스윙 매도 (S)",
          "gt_count": 944,
          "hit_count": 944,
          "recall": 1.0,
          "avg_bar_offset": 61.7,
          "is_primary": false
        },
        "div_bear": {
          "label": "하락 다이버전스 (Sd)",
          "gt_count": 144,
          "hit_count": 144,
          "recall": 1.0,
          "avg_bar_offset": 52.3,
          "is_primary": false
        }
      }
    },
    {
      "technique_id": "bb_squeeze_breakout",
      "technique_name": "BB 스퀴즈 돌파",
      "category": "breakout",
      "overall_score": 0.591,
      "signal_types": {
        "swing_low": {
          "label": "스윙 매수 (B)",
          "gt_count": 944,
          "hit_count": 922,
          "recall": 0.9767,
          "avg_bar_offset": 91.2,
          "is_primary": false
        },
        "pullback": {
          "label": "눌림목 (B*)",
          "gt_count": 406,
          "hit_count": 406,
          "recall": 1.0,
          "avg_bar_offset": 39.8,
          "is_primary": false
        },
        "breakout": {
          "label": "돌파 (B^)",
          "gt_count": 122,
          "hit_count": 122,
          "recall": 1.0,
          "avg_bar_offset": 23.1,
          "is_primary": true
        },
        "div_bull": {
          "label": "상승 다이버전스 (Bd)",
          "gt_count": 115,
          "hit_count": 115,
          "recall": 1.0,
          "avg_bar_offset": 45.5,
          "is_primary": false
        },
        "swing_high": {
          "label": "스윙 매도 (S)",
          "gt_count": 944,
          "hit_count": 938,
          "recall": 0.9936,
          "avg_bar_offset": 71.2,
          "is_primary": false
        },
        "div_bear": {
          "label": "하락 다이버전스 (Sd)",
          "gt_count": 144,
          "hit_count": 144,
          "recall": 1.0,
          "avg_bar_offset": 43.0,
          "is_primary": false
        }
      }
    },
    {
      "technique_id": "range_breakout",
      "technique_name": "레인지 돌파",
      "category": "breakout",
      "overall_score": 0.5905,
      "signal_types": {
        "swing_low": {
          "label": "스윙 매수 (B)",
          "gt_count": 944,
          "hit_count": 942,
          "recall": 0.9979,
          "avg_bar_offset": 62.2,
          "is_primary": false
        },
        "pullback": {
          "label": "눌림목 (B*)",
          "gt_count": 406,
          "hit_count": 404,
          "recall": 0.9951,
          "avg_bar_offset": 53.4,
          "is_primary": false
        },
        "breakout": {
          "label": "돌파 (B^)",
          "gt_count": 122,
          "hit_count": 120,
          "recall": 0.9836,
          "avg_bar_offset": 19.7,
          "is_primary": true
        },
        "div_bull": {
          "label": "상승 다이버전스 (Bd)",
          "gt_count": 115,
          "hit_count": 114,
          "recall": 0.9913,
          "avg_bar_offset": 68.8,
          "is_primary": false
        },
        "swing_high": {
          "label": "스윙 매도 (S)",
          "gt_count": 944,
          "hit_count": 944,
          "recall": 1.0,
          "avg_bar_offset": 46.1,
          "is_primary": false
        },
        "div_bear": {
          "label": "하락 다이버전스 (Sd)",
          "gt_count": 144,
          "hit_count": 143,
          "recall": 0.9931,
          "avg_bar_offset": 67.6,
          "is_primary": false
        }
      }
    },
    {
      "technique_id": "composite_swing",
      "technique_name": "스윙 복합",
      "category": "composite",
      "overall_score": 0.5858,
      "signal_types": {
        "swing_low": {
          "label": "스윙 매수 (B)",
          "gt_count": 944,
          "hit_count": 913,
          "recall": 0.9672,
          "avg_bar_offset": 81.1,
          "is_primary": true
        },
        "pullback": {
          "label": "눌림목 (B*)",
          "gt_count": 406,
          "hit_count": 406,
          "recall": 1.0,
          "avg_bar_offset": 31.9,
          "is_primary": false
        },
        "breakout": {
          "label": "돌파 (B^)",
          "gt_count": 122,
          "hit_count": 122,
          "recall": 1.0,
          "avg_bar_offset": 20.2,
          "is_primary": false
        },
        "div_bull": {
          "label": "상승 다이버전스 (Bd)",
          "gt_count": 115,
          "hit_count": 115,
          "recall": 1.0,
          "avg_bar_offset": 40.5,
          "is_primary": false
        },
        "swing_high": {
          "label": "스윙 매도 (S)",
          "gt_count": 944,
          "hit_count": 915,
          "recall": 0.9693,
          "avg_bar_offset": 80.0,
          "is_primary": true
        },
        "div_bear": {
          "label": "하락 다이버전스 (Sd)",
          "gt_count": 144,
          "hit_count": 144,
          "recall": 1.0,
          "avg_bar_offset": 39.0,
          "is_primary": false
        }
      }
    },
    {
      "technique_id": "ma_cross",
      "technique_name": "EMA 크로스",
      "category": "indicator",
      "overall_score": 0.5754,
      "signal_types": {
        "swing_low": {
          "label": "스윙 매수 (B)",
          "gt_count": 944,
          "hit_count": 865,
          "recall": 0.9163,
          "avg_bar_offset": 84.1,
          "is_primary": false
        },
        "pullback": {
          "label": "눌림목 (B*)",
          "gt_count": 406,
          "hit_count": 406,
          "recall": 1.0,
          "avg_bar_offset": 32.8,
          "is_primary": false
        },
        "breakout": {
          "label": "돌파 (B^)",
          "gt_count": 122,
          "hit_count": 122,
          "recall": 1.0,
          "avg_bar_offset": 49.1,
          "is_primary": false
        },
        "div_bull": {
          "label": "상승 다이버전스 (Bd)",
          "gt_count": 115,
          "hit_count": 115,
          "recall": 1.0,
          "avg_bar_offset": 32.6,
          "is_primary": false
        },
        "swing_high": {
          "label": "스윙 매도 (S)",
          "gt_count": 944,
          "hit_count": 867,
          "recall": 0.9184,
          "avg_bar_offset": 84.3,
          "is_primary": false
        },
        "div_bear": {
          "label": "하락 다이버전스 (Sd)",
          "gt_count": 144,
          "hit_count": 144,
          "recall": 1.0,
          "avg_bar_offset": 33.2,
          "is_primary": false
        }
      }
    },
    {
      "technique_id": "volume_breakout",
      "technique_name": "거래량 돌파",
      "category": "breakout",
      "overall_score": 0.5744,
      "signal_types": {
        "swing_low": {
          "label": "스윙 매수 (B)",
          "gt_count": 944,
          "hit_count": 923,
          "recall": 0.9778,
          "avg_bar_offset": 98.5,
          "is_primary": false
        },
        "pullback": {
          "label": "눌림목 (B*)",
          "gt_count": 406,
          "hit_count": 406,
          "recall": 1.0,
          "avg_bar_offset": 46.2,
          "is_primary": false
        },
        "breakout": {
          "label": "돌파 (B^)",
          "gt_count": 122,
          "hit_count": 122,
          "recall": 1.0,
          "avg_bar_offset": 7.4,
          "is_primary": true
        },
        "div_bull": {
          "label": "상승 다이버전스 (Bd)",
          "gt_count": 115,
          "hit_count": 114,
          "recall": 0.9913,
          "avg_bar_offset": 60.1,
          "is_primary": false
        },
        "swing_high": {
          "label": "스윙 매도 (S)",
          "gt_count": 944,
          "hit_count": 941,
          "recall": 0.9968,
          "avg_bar_offset": 63.4,
          "is_primary": false
        },
        "div_bear": {
          "label": "하락 다이버전스 (Sd)",
          "gt_count": 144,
          "hit_count": 144,
          "recall": 1.0,
          "avg_bar_offset": 54.7,
          "is_primary": false
        }
      }
    },
    {
      "technique_id": "swing_failure",
      "technique_name": "스윙 실패",
      "category": "swing",
      "overall_score": 0.5685,
      "signal_types": {
        "swing_low": {
          "label": "스윙 매수 (B)",
          "gt_count": 944,
          "hit_count": 844,
          "recall": 0.8941,
          "avg_bar_offset": 85.4,
          "is_primary": false
        },
        "pullback": {
          "label": "눌림목 (B*)",
          "gt_count": 406,
          "hit_count": 406,
          "recall": 1.0,
          "avg_bar_offset": 38.2,
          "is_primary": false
        },
        "breakout": {
          "label": "돌파 (B^)",
          "gt_count": 122,
          "hit_count": 122,
          "recall": 1.0,
          "avg_bar_offset": 89.6,
          "is_primary": false
        },
        "div_bull": {
          "label": "상승 다이버전스 (Bd)",
          "gt_count": 115,
          "hit_count": 115,
          "recall": 1.0,
          "avg_bar_offset": 40.1,
          "is_primary": false
        },
        "swing_high": {
          "label": "스윙 매도 (S)",
          "gt_count": 944,
          "hit_count": 845,
          "recall": 0.8951,
          "avg_bar_offset": 85.8,
          "is_primary": false
        },
        "div_bear": {
          "label": "하락 다이버전스 (Sd)",
          "gt_count": 144,
          "hit_count": 144,
          "recall": 1.0,
          "avg_bar_offset": 33.3,
          "is_primary": false
        }
      }
    },
    {
      "technique_id": "fib_pullback",
      "technique_name": "피보나치 눌림목",
      "category": "pullback",
      "overall_score": 0.5529,
      "signal_types": {
        "swing_low": {
          "label": "스윙 매수 (B)",
          "gt_count": 944,
          "hit_count": 856,
          "recall": 0.9068,
          "avg_bar_offset": 116.4,
          "is_primary": false
        },
        "pullback": {
          "label": "눌림목 (B*)",
          "gt_count": 406,
          "hit_count": 406,
          "recall": 1.0,
          "avg_bar_offset": 50.6,
          "is_primary": true
        },
        "breakout": {
          "label": "돌파 (B^)",
          "gt_count": 122,
          "hit_count": 122,
          "recall": 1.0,
          "avg_bar_offset": 51.3,
          "is_primary": false
        },
        "div_bull": {
          "label": "상승 다이버전스 (Bd)",
          "gt_count": 115,
          "hit_count": 115,
          "recall": 1.0,
          "avg_bar_offset": 54.0,
          "is_primary": false
        },
        "swing_high": {
          "label": "스윙 매도 (S)",
          "gt_count": 944,
          "hit_count": 872,
          "recall": 0.9237,
          "avg_bar_offset": 112.8,
          "is_primary": false
        },
        "div_bear": {
          "label": "하락 다이버전스 (Sd)",
          "gt_count": 144,
          "hit_count": 144,
          "recall": 1.0,
          "avg_bar_offset": 57.3,
          "is_primary": false
        }
      }
    },
    {
      "technique_id": "composite_v3",
      "technique_name": "v3 통합 스코어링",
      "category": "composite",
      "overall_score": 0.5464,
      "signal_types": {
        "swing_low": {
          "label": "스윙 매수 (B)",
          "gt_count": 944,
          "hit_count": 907,
          "recall": 0.9608,
          "avg_bar_offset": 94.0,
          "is_primary": false
        },
        "pullback": {
          "label": "눌림목 (B*)",
          "gt_count": 406,
          "hit_count": 406,
          "recall": 1.0,
          "avg_bar_offset": 41.6,
          "is_primary": false
        },
        "breakout": {
          "label": "돌파 (B^)",
          "gt_count": 122,
          "hit_count": 122,
          "recall": 1.0,
          "avg_bar_offset": 25.8,
          "is_primary": false
        },
        "div_bull": {
          "label": "상승 다이버전스 (Bd)",
          "gt_count": 115,
          "hit_count": 115,
          "recall": 1.0,
          "avg_bar_offset": 55.9,
          "is_primary": false
        },
        "swing_high": {
          "label": "스윙 매도 (S)",
          "gt_count": 944,
          "hit_count": 829,
          "recall": 0.8782,
          "avg_bar_offset": 126.2,
          "is_primary": false
        },
        "div_bear": {
          "label": "하락 다이버전스 (Sd)",
          "gt_count": 144,
          "hit_count": 139,
          "recall": 0.9653,
          "avg_bar_offset": 80.5,
          "is_primary": false
        }
      }
    },
    {
      "technique_id": "macd_divergence",
      "technique_name": "MACD 다이버전스",
      "category": "divergence",
      "overall_score": 0.5463,
      "signal_types": {
        "swing_low": {
          "label": "스윙 매수 (B)",
          "gt_count": 944,
          "hit_count": 799,
          "recall": 0.8464,
          "avg_bar_offset": 122.9,
          "is_primary": false
        },
        "pullback": {
          "label": "눌림목 (B*)",
          "gt_count": 406,
          "hit_count": 405,
          "recall": 0.9975,
          "avg_bar_offset": 85.8,
          "is_primary": false
        },
        "breakout": {
          "label": "돌파 (B^)",
          "gt_count": 122,
          "hit_count": 119,
          "recall": 0.9754,
          "avg_bar_offset": 113.3,
          "is_primary": false
        },
        "div_bull": {
          "label": "상승 다이버전스 (Bd)",
          "gt_count": 115,
          "hit_count": 113,
          "recall": 0.9826,
          "avg_bar_offset": 64.7,
          "is_primary": true
        },
        "swing_high": {
          "label": "스윙 매도 (S)",
          "gt_count": 944,
          "hit_count": 811,
          "recall": 0.8591,
          "avg_bar_offset": 115.3,
          "is_primary": false
        },
        "div_bear": {
          "label": "하락 다이버전스 (Sd)",
          "gt_count": 144,
          "hit_count": 144,
          "recall": 1.0,
          "avg_bar_offset": 63.1,
          "is_primary": true
        }
      }
    },
    {
      "technique_id": "support_bounce",
      "technique_name": "지지·저항 반등",
      "category": "pullback",
      "overall_score": 0.4684,
      "signal_types": {
        "swing_low": {
          "label": "스윙 매수 (B)",
          "gt_count": 944,
          "hit_count": 735,
          "recall": 0.7786,
          "avg_bar_offset": 135.0,
          "is_primary": false
        },
        "pullback": {
          "label": "눌림목 (B*)",
          "gt_count": 406,
          "hit_count": 349,
          "recall": 0.8596,
          "avg_bar_offset": 153.8,
          "is_primary": true
        },
        "breakout": {
          "label": "돌파 (B^)",
          "gt_count": 122,
          "hit_count": 102,
          "recall": 0.8361,
          "avg_bar_offset": 182.4,
          "is_primary": false
        },
        "div_bull": {
          "label": "상승 다이버전스 (Bd)",
          "gt_count": 115,
          "hit_count": 106,
          "recall": 0.9217,
          "avg_bar_offset": 84.4,
          "is_primary": false
        },
        "swing_high": {
          "label": "스윙 매도 (S)",
          "gt_count": 944,
          "hit_count": 728,
          "recall": 0.7712,
          "avg_bar_offset": 137.1,
          "is_primary": false
        },
        "div_bear": {
          "label": "하락 다이버전스 (Sd)",
          "gt_count": 144,
          "hit_count": 134,
          "recall": 0.9306,
          "avg_bar_offset": 101.2,
          "is_primary": false
        }
      }
    },
    {
      "technique_id": "rsi_divergence",
      "technique_name": "RSI 다이버전스",
      "category": "divergence",
      "overall_score": 0.4481,
      "signal_types": {
        "swing_low": {
          "label": "스윙 매수 (B)",
          "gt_count": 944,
          "hit_count": 688,
          "recall": 0.7288,
          "avg_bar_offset": 146.4,
          "is_primary": false
        },
        "pullback": {
          "label": "눌림목 (B*)",
          "gt_count": 406,
          "hit_count": 371,
          "recall": 0.9138,
          "avg_bar_offset": 144.2,
          "is_primary": false
        },
        "breakout": {
          "label": "돌파 (B^)",
          "gt_count": 122,
          "hit_count": 109,
          "recall": 0.8934,
          "avg_bar_offset": 190.3,
          "is_primary": false
        },
        "div_bull": {
          "label": "상승 다이버전스 (Bd)",
          "gt_count": 115,
          "hit_count": 108,
          "recall": 0.9391,
          "avg_bar_offset": 101.2,
          "is_primary": true
        },
        "swing_high": {
          "label": "스윙 매도 (S)",
          "gt_count": 944,
          "hit_count": 677,
          "recall": 0.7172,
          "avg_bar_offset": 151.9,
          "is_primary": false
        },
        "div_bear": {
          "label": "하락 다이버전스 (Sd)",
          "gt_count": 144,
          "hit_count": 142,
          "recall": 0.9861,
          "avg_bar_offset": 138.3,
          "is_primary": true
        }
      }
    },
    {
      "technique_id": "obv_divergence",
      "technique_name": "OBV 다이버전스",
      "category": "divergence",
      "overall_score": 0.3978,
      "signal_types": {
        "swing_low": {
          "label": "스윙 매수 (B)",
          "gt_count": 944,
          "hit_count": 609,
          "recall": 0.6451,
          "avg_bar_offset": 188.1,
          "is_primary": false
        },
        "pullback": {
          "label": "눌림목 (B*)",
          "gt_count": 406,
          "hit_count": 359,
          "recall": 0.8842,
          "avg_bar_offset": 147.7,
          "is_primary": false
        },
        "breakout": {
          "label": "돌파 (B^)",
          "gt_count": 122,
          "hit_count": 107,
          "recall": 0.877,
          "avg_bar_offset": 171.1,
          "is_primary": false
        },
        "div_bull": {
          "label": "상승 다이버전스 (Bd)",
          "gt_count": 115,
          "hit_count": 105,
          "recall": 0.913,
          "avg_bar_offset": 151.4,
          "is_primary": true
        },
        "swing_high": {
          "label": "스윙 매도 (S)",
          "gt_count": 944,
          "hit_count": 631,
          "recall": 0.6684,
          "avg_bar_offset": 176.6,
          "is_primary": false
        },
        "div_bear": {
          "label": "하락 다이버전스 (Sd)",
          "gt_count": 144,
          "hit_count": 139,
          "recall": 0.9653,
          "avg_bar_offset": 138.6,
          "is_primary": true
        }
      }
    },
    {
      "technique_id": "volume_spike",
      "technique_name": "거래량 스파이크",
      "category": "volume",
      "overall_score": 0.3887,
      "signal_types": {
        "swing_low": {
          "label": "스윙 매수 (B)",
          "gt_count": 944,
          "hit_count": 676,
          "recall": 0.7161,
          "avg_bar_offset": 130.5,
          "is_primary": false
        },
        "pullback": {
          "label": "눌림목 (B*)",
          "gt_count": 406,
          "hit_count": 269,
          "recall": 0.6626,
          "avg_bar_offset": 201.2,
          "is_primary": false
        },
        "breakout": {
          "label": "돌파 (B^)",
          "gt_count": 122,
          "hit_count": 54,
          "recall": 0.4426,
          "avg_bar_offset": 215.5,
          "is_primary": false
        },
        "div_bull": {
          "label": "상승 다이버전스 (Bd)",
          "gt_count": 115,
          "hit_count": 45,
          "recall": 0.3913,
          "avg_bar_offset": 199.9,
          "is_primary": false
        },
        "swing_high": {
          "label": "스윙 매도 (S)",
          "gt_count": 944,
          "hit_count": 630,
          "recall": 0.6674,
          "avg_bar_offset": 157.3,
          "is_primary": false
        },
        "div_bear": {
          "label": "하락 다이버전스 (Sd)",
          "gt_count": 144,
          "hit_count": 62,
          "recall": 0.4306,
          "avg_bar_offset": 191.0,
          "is_primary": false
        }
      }
    },
    {
      "technique_id": "composite_full",
      "technique_name": "전체 통합 복합",
      "category": "composite",
      "overall_score": 0.2565,
      "signal_types": {
        "swing_low": {
          "label": "스윙 매수 (B)",
          "gt_count": 944,
          "hit_count": 572,
          "recall": 0.6059,
          "avg_bar_offset": 204.0,
          "is_primary": false
        },
        "pullback": {
          "label": "눌림목 (B*)",
          "gt_count": 406,
          "hit_count": 336,
          "recall": 0.8276,
          "avg_bar_offset": 166.4,
          "is_primary": false
        },
        "breakout": {
          "label": "돌파 (B^)",
          "gt_count": 122,
          "hit_count": 99,
          "recall": 0.8115,
          "avg_bar_offset": 124.1,
          "is_primary": false
        },
        "div_bull": {
          "label": "상승 다이버전스 (Bd)",
          "gt_count": 115,
          "hit_count": 72,
          "recall": 0.6261,
          "avg_bar_offset": 205.6,
          "is_primary": false
        },
        "swing_high": {
          "label": "스윙 매도 (S)",
          "gt_count": 944,
          "hit_count": 330,
          "recall": 0.3496,
          "avg_bar_offset": 218.6,
          "is_primary": false
        },
        "div_bear": {
          "label": "하락 다이버전스 (Sd)",
          "gt_count": 144,
          "hit_count": 36,
          "recall": 0.25,
          "avg_bar_offset": 256.7,
          "is_primary": false
        }
      }
    },
    {
      "technique_id": "parabolic_sar",
      "technique_name": "Parabolic SAR",
      "category": "trend",
      "overall_score": 0.2561,
      "signal_types": {
        "swing_low": {
          "label": "스윙 매수 (B)",
          "gt_count": 944,
          "hit_count": 944,
          "recall": 1.0,
          "avg_bar_offset": 8.7,
          "is_primary": false
        },
        "pullback": {
          "label": "눌림목 (B*)",
          "gt_count": 406,
          "hit_count": 406,
          "recall": 1.0,
          "avg_bar_offset": 7.9,
          "is_primary": false
        },
        "breakout": {
          "label": "돌파 (B^)",
          "gt_count": 122,
          "hit_count": 121,
          "recall": 0.9918,
          "avg_bar_offset": 13.3,
          "is_primary": false
        },
        "div_bull": {
          "label": "상승 다이버전스 (Bd)",
          "gt_count": 115,
          "hit_count": 115,
          "recall": 1.0,
          "avg_bar_offset": 5.7,
          "is_primary": false
        },
        "swing_high": {
          "label": "스윙 매도 (S)",
          "gt_count": 944,
          "hit_count": 16,
          "recall": 0.0169,
          "avg_bar_offset": 255.2,
          "is_primary": false
        },
        "div_bear": {
          "label": "하락 다이버전스 (Sd)",
          "gt_count": 144,
          "hit_count": 0,
          "recall": 0.0,
          "avg_bar_offset": 0.0,
          "is_primary": false
        }
      }
    },
    {
      "technique_id": "roc_reversal",
      "technique_name": "ROC 반전",
      "category": "momentum",
      "overall_score": 0.1288,
      "signal_types": {
        "swing_low": {
          "label": "스윙 매수 (B)",
          "gt_count": 944,
          "hit_count": 274,
          "recall": 0.2903,
          "avg_bar_offset": 114.9,
          "is_primary": false
        },
        "pullback": {
          "label": "눌림목 (B*)",
          "gt_count": 406,
          "hit_count": 37,
          "recall": 0.0911,
          "avg_bar_offset": 267.6,
          "is_primary": false
        },
        "breakout": {
          "label": "돌파 (B^)",
          "gt_count": 122,
          "hit_count": 7,
          "recall": 0.0574,
          "avg_bar_offset": 328.4,
          "is_primary": false
        },
        "div_bull": {
          "label": "상승 다이버전스 (Bd)",
          "gt_count": 115,
          "hit_count": 3,
          "recall": 0.0261,
          "avg_bar_offset": 162.3,
          "is_primary": false
        },
        "swing_high": {
          "label": "스윙 매도 (S)",
          "gt_count": 944,
          "hit_count": 257,
          "recall": 0.2722,
          "avg_bar_offset": 153.3,
          "is_primary": false
        },
        "div_bear": {
          "label": "하락 다이버전스 (Sd)",
          "gt_count": 144,
          "hit_count": 0,
          "recall": 0.0,
          "avg_bar_offset": 0.0,
          "is_primary": false
        }
      }
    },
    {
      "technique_id": "pivot_points",
      "technique_name": "피벗 포인트",
      "category": "structure",
      "overall_score": 0.0022,
      "signal_types": {
        "swing_low": {
          "label": "스윙 매수 (B)",
          "gt_count": 944,
          "hit_count": 7,
          "recall": 0.0074,
          "avg_bar_offset": 240.9,
          "is_primary": false
        },
        "pullback": {
          "label": "눌림목 (B*)",
          "gt_count": 406,
          "hit_count": 5,
          "recall": 0.0123,
          "avg_bar_offset": 94.6,
          "is_primary": false
        },
        "breakout": {
          "label": "돌파 (B^)",
          "gt_count": 122,
          "hit_count": 1,
          "recall": 0.0082,
          "avg_bar_offset": 59.0,
          "is_primary": false
        },
        "div_bull": {
          "label": "상승 다이버전스 (Bd)",
          "gt_count": 115,
          "hit_count": 2,
          "recall": 0.0174,
          "avg_bar_offset": 126.0,
          "is_primary": false
        },
        "swing_high": {
          "label": "스윙 매도 (S)",
          "gt_count": 944,
          "hit_count": 0,
          "recall": 0.0,
          "avg_bar_offset": 0.0,
          "is_primary": false
        },
        "div_bear": {
          "label": "하락 다이버전스 (Sd)",
          "gt_count": 144,
          "hit_count": 0,
          "recall": 0.0,
          "avg_bar_offset": 0.0,
          "is_primary": false
        }
      }
    },
    {
      "technique_id": "supertrend",
      "technique_name": "Supertrend",
      "category": "trend",
      "overall_score": 0.0,
      "signal_types": {
        "swing_low": {
          "label": "스윙 매수 (B)",
          "gt_count": 944,
          "hit_count": 0,
          "recall": 0.0,
          "avg_bar_offset": 0.0,
          "is_primary": false
        },
        "pullback": {
          "label": "눌림목 (B*)",
          "gt_count": 406,
          "hit_count": 0,
          "recall": 0.0,
          "avg_bar_offset": 0.0,
          "is_primary": false
        },
        "breakout": {
          "label": "돌파 (B^)",
          "gt_count": 122,
          "hit_count": 0,
          "recall": 0.0,
          "avg_bar_offset": 0.0,
          "is_primary": false
        },
        "div_bull": {
          "label": "상승 다이버전스 (Bd)",
          "gt_count": 115,
          "hit_count": 0,
          "recall": 0.0,
          "avg_bar_offset": 0.0,
          "is_primary": false
        },
        "swing_high": {
          "label": "스윙 매도 (S)",
          "gt_count": 944,
          "hit_count": 0,
          "recall": 0.0,
          "avg_bar_offset": 0.0,
          "is_primary": false
        },
        "div_bear": {
          "label": "하락 다이버전스 (Sd)",
          "gt_count": 144,
          "hit_count": 0,
          "recall": 0.0,
          "avg_bar_offset": 0.0,
          "is_primary": false
        }
      }
    }
  ]
}