時間帯別の損益を分析する | ランダムウォークへの挑戦⑥2026/7/22

最近は暑すぎてプールが気持ちいいです。
今日は夏休みをとって、昼間から泳ぎに行きました。

前回は分析結果をグラフ化するところまで進めました。

今回は、決済時刻から「時間」を取り出し、0時台、1時台、2時台……という単位で、集計し分析ます。また、グラフも併せて作成します。

コードの追加

前回まで作成したPythonファイル「」に以下のコードを追記します。

# ==============================
# 時間帯別分析
# ==============================

# 決済時刻から「時」だけを取り出す
trades["時間帯"] = trades["時間"].dt.hour

# 時間帯ごとの集計
hourly_analysis = (
    trades
    .groupby("時間帯")
    .agg(
        取引回数=("損益", "count"),
        勝ち数=("損益", lambda x: (x > 0).sum()),
        負け数=("損益", lambda x: (x < 0).sum()),
        総損益=("損益", "sum"),
        平均損益=("損益", "mean"),
        総利益=("損益", lambda x: x[x > 0].sum()),
        総損失=("損益", lambda x: x[x < 0].sum())
    )
)

# 勝率を計算
hourly_analysis["勝率"] = (
    hourly_analysis["勝ち数"]
    / hourly_analysis["取引回数"]
    * 100
)

# PFを計算
hourly_analysis["PF"] = (
    hourly_analysis["総利益"]
    / hourly_analysis["総損失"].abs()
)

# 表示する列の順番を整える
hourly_analysis = hourly_analysis[
    [
        "取引回数",
        "勝ち数",
        "負け数",
        "勝率",
        "総損益",
        "平均損益",
        "PF"
    ]
]

print("\n===== 時間帯別分析 =====")
print(hourly_analysis.round(2))

aggは、aggregate(集計する)の略で時間帯ごとに分けたデータに対して、複数の計算をまとめて実行することを意味します。

lambda は、その場で作る小さな関数です。

Pythonでは、計算時におおむね、

True  = 1
False = 0

として扱えるため、勝ち数は.sum()で計算できます。

また、グラフ化のために次のコードを最下行に追記します。

# 時間帯別損益グラフ
plt.figure(figsize=(12, 6))

plt.bar(
    hourly_analysis.index,
    hourly_analysis["総損益"]
)

plt.title("Profit by Hour")
plt.xlabel("Hour")
plt.ylabel("Profit")
plt.xticks(range(24))
plt.axhline(0, linewidth=1)
plt.tight_layout()
plt.savefig("hourly_profit.png")
plt.close()

print("時間帯別損益グラフを hourly_profit.png として保存しました。")

# 結果をcvsに出力
hourly_analysis.to_csv(
    "results/hourly_analysis.csv",
    encoding="utf-8-sig"
)

結果として以下のCSVが出力されました。(枠線とグラフは筆者が追加しました)

出力結果
出力結果

分析

分析結果を見ると、深夜~早朝(3~10時)が非常に強い一方で、夜22~23時が壊滅的に悪いです。

よい時間帯

6時台

  • 取引回数:32回
  • 勝率:87.5%
  • 総損益:+18,803円
  • PF:11.06

これは突出しています。ただし32回なので、「良い傾向」ではあるものの、まだサンプル数は少なめです。

10時台

  • 122回(最も多い)
  • 勝率:77.0%
  • 総損益:+50,079円
  • PF:3.89

ここはかなり信頼できます。取引数も十分あり、システムが最も利益を生んでいる時間帯です。

5時台

  • 勝率:67.5%
  • PF:4.12
  • 総利益:+42,348円

ここも非常に優秀です。

9時台

  • 84回
  • 勝率:71.4%
  • PF:3.63

ここもかなり安定しています。

悪い時間帯

23時台

  • 51回
  • 勝率:35.3%
  • 総損益:-55,360円
  • PF:0.24

システム全体の利益をかなり削っています。

22時台

  • 勝率:30.6%
  • PF:0.38
  • 総損益:-31,063円

こちらも悪いです。

0時台

  • 勝率:39.5%
  • PF:0.44
  • 総損益:-24,928円

20時台

  • PF:0.63
  • 総損益:-12,916円

ここもマイナスです。

不思議な時間帯

4時台は勝率76.4%なのに総損益 -2,027円となっています。つまり勝率は高いのに負けています。

これは平均利益より平均損失がかなり大きい可能性があります。

分析まとめ

時間帯別に集計したところ、3〜10時台では利益が大きく、特に10時台は取引回数122回、総損益約5万円、PF3.89と最も安定した結果となった。一方、22〜23時台は勝率が30〜35%程度に留まり、PFも0.4未満で大きく利益を削っていることが分かった。時間帯によるパフォーマンス差は予想以上に大きく、今後はエントリー時間を制限することで成績改善につながる可能性がある。

次回は曜日別の損益を分析することを目標にします。

今日はここまで。

おまけ

この本を読みました。

「私たちが小麦を栽培化したのではなく、小麦が私たちを家畜化した。」この一文が衝撃的でした。

人間は最も成功した種で地球の主人公だと、無意識に思っていましたが、実は我々は小麦にコントロールされていたという衝撃。

また、「種」としての成功は必ずしも「個」の幸福にはつながらないという主張も納得しました。
家畜だけでなく、現代日本人ももれなく当てはまります。

「幸せとは、内なる感情の追及をやめること」ブッダの教えがここまで科学的とは思いませんでした。

次の記事

関連記事

記事は見つかりませんでした。

コメント

タイトルとURLをコピーしました