← Issues一覧 完了 暗号資産

Issue #001: 方向予測の基準が予測と実績で不一致

報告日

2026-02-21

現象

原因

予測方向(direction_prediction.py:158-164)

change_pct = (predicted_close - base_price) / base_price * 100
if change_pct >= 0:
    direction = 1   # UP
else:
    direction = -1  # DOWN

base_price = 基準足(15:45)の終値。predicted_closeがbase_priceより低ければDOWNになる。

実績方向(confirm_predictions.py:200-204)

actual_direction = determine_direction(
    actual_open, actual_high, actual_low, actual_close,
    base_price=actual_open,  # 実績は始値が基準
    atr=atr
)

base_price = ターゲット足の始値。actual_close vs actual_openで判定。

表示の実績方向(views.py:224-225)

actual_direction = 1 if actual_close > actual_open else -1

こちらもactual_close vs actual_openで判定。

不一致

基準 判定ロジック
予測方向 base_price = 基準足のclose predicted_close vs 基準足close
実績方向 actual_open = ターゲット足の始値 actual_close vs ターゲット足open

1本先の予測ではbase_price ≈ target_openなので差は小さいが、 複数本先の予測(15Mで3本先=15:45→16:30)ではbase_priceとtarget_openの乖離が大きくなり、 ローソク足は陽線なのに「下げ予測」と判定されるケースが発生する。

修正方針

予測方向の判定基準を predicted_close vs predicted_open に変更する。

変更箇所

1. direction_prediction.py: predict_direction_hourly()

# Before (line 157-164):
if predicted_close is not None:
    change_pct = (predicted_close - base_price) / base_price * 100

# After:
if predicted_close is not None:
    ref_price = predicted_open if predicted_open is not None else base_price
    change_pct = (predicted_close - ref_price) / ref_price * 100

predicted_open 引数の追加が必要。

2. predict_ohlc.py: リアルタイム予測(line 529-536)

# predicted_openも渡す
direction, dir_confidence, dir_conditions = predict_direction_hourly(
    df, target_dt,
    predicted_close=predictions['target_close'],
    predicted_high=predictions['target_high'],
    predicted_low=predictions['target_low'],
    predicted_open=predictions['target_open'],  # 追加
    base_price=latest_close,
    atr=atr_val
)

3. predict_ohlc.py: バックテスト(line 1240-1247)

同様に predicted_open を渡す。

4. predict_direction_daily() も同様に修正

5. 横ばい判定(line 140-154)

横ばい判定の change_pct も同様に predicted_open ベースに変更する。

影響範囲

優先度

高(ユーザー向け表示の信頼性に直結)

対応完了

2026-02-22

修正内容

バックテスト検証結果(30M足、803件)

項目 結果
方向的中率 87.5% (703/803)
目標的中率 96.3% (750/779)
Close MAE 0.147%
上昇予測的中率 88.7%
下落予測的中率 88.9%
Lowバイアス +0.11% → -0.002%(解消)

備考