0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

FX自動売買Botに時間帯フィルタを入れてノイズ売買を減らす設計

0
Posted at

FX自動売買Botに時間帯フィルタを入れてノイズ売買を減らす設計

背景

FX自動売買Botは、24時間動かせること自体が強みのように見えます。ただし、常時稼働させるほど不要な時間帯のシグナルまで拾いやすくなり、検証結果と実運用の差が広がることがあります。

今回の設計では、売買判断そのものだけでなく「いつ実行するか」を明示的に制御します。

方針

Botは次の時間帯だけ処理を進めます。

  • 0:0X
  • 2:0X
  • 4:0X

それ以外の時間は、シグナル計算や注文処理に進まずスキップします。目的は、エントリー回数を増やすことではなく、検証済みの時間帯だけで判断を安定させることです。

実装イメージ

実装では、注文ロジックの手前に実行時間フィルタを置きます。

from datetime import datetime

ALLOWED_HOURS = {0, 2, 4}

def should_run(now: datetime) -> bool:
    return now.hour in ALLOWED_HOURS and 0 <= now.minute <= 9


def run_bot(now: datetime) -> None:
    if not should_run(now):
        log_skip(now, reason="outside_execution_window")
        return

    signal = calculate_signal(now)
    if signal is None:
        log_skip(now, reason="no_signal")
        return

    place_order(signal)

ポイントは、時間外でもBotを落とすのではなく、スキップ理由をログに残すことです。あとから「動かなかった」のか「意図して動かさなかった」のかを判別できます。

ログで確認する項目

最低限、次の情報を残します。

  • 実行判定時刻
  • 実行したか、スキップしたか
  • スキップ理由
  • 採用した戦略
  • シグナル値
  • 注文有無
  • 口座残高や評価損益のスナップショット

時間帯フィルタは単純な条件分岐ですが、運用時にはログがないと効果を検証できません。特に自動売買では、売買した履歴だけでなく、売買しなかった履歴も重要です。

検証観点

この設計を入れた後は、次の比較を行います。

  • 全時間帯で動かしたバックテスト
  • 0時台、2時台、4時台だけに絞ったバックテスト
  • フォワードテストでの約定回数
  • スキップされた時間帯の仮想シグナル
  • 最大ドローダウンと勝率の変化

時間を絞ったことで利益機会が減る可能性はあります。一方で、不要なノイズ売買を減らせれば、ドローダウンや手数料負けを抑えやすくなります。

まとめ

自動売買Botでは、ロジックを増やすことだけが改善ではありません。動かす時間を限定し、動かさない判断を明示するだけでも、運用の安定性は変わります。

今回の時間帯フィルタは、裁量なしでBotを回すための基礎制御です。今後は、このフィルタと相場状態分類、戦略切り替え、リスク停止条件を組み合わせて、実運用に耐える構成へ近づけていきます。
2026-06-05-1.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?