Bot mmnot Tips 開発ログ

🛠️開発記録#209(2025/5/)MMbot開発ログ15「SlackのTotal PnLが更新されない原因と1行で直す即効修正ガイド」

前回の記事に引き続き、今回も仮想通貨botの開発状況をまとめていきます。

はじめに
この記事では、Bot(プログラム)がSlackに送っている「Total PnL(累積損益)」が更新されず、いつも同じ数字のまま止まってしまう問題について、プログラミング初心者の方にもわかりやすく解説します。専門用語は都度説明を入れていますので、安心して読み進めてください。


1. 用語の説明

  • Bot:取引を自動で行うプログラムのこと。
  • Cycle(サイクル):Botが「買い→売り」を一回行う一連の流れ。
  • PnL(Profit and Loss):利益と損失。プラスなら利益、マイナスなら損失を表す数字。
    • Cycle PnL:1サイクル分だけの損益。
    • Total PnL:これまでのすべてのサイクルを合計した累積損益。
  • 変数:プログラムの中でデータを一時的に保存しておく「箱」のようなもの。
  • ループ:同じ処理を何度も繰り返す仕組み。

2. 問題の現象:何が起きている?

  1. Botを動かすと、1回ごとのCycle PnLはちゃんと更新される。
  2. しかしSlackに出力されるTotal PnLは、ずっと「–0.0130」のまま増えない。

→ 表示された数字だけを見ると「プログラムが計算をミスしている?」と勘違いしがちですが、実は「累積用の変数をループごとに更新していない」だけです。


3. 原因をかんたんにイメージしよう

  1. プログラムの最初に「累積用の変数(total_pnl)に一度だけ計算結果を入れる」
  2. その後、ループ(繰り返し処理)の中で変数を増やしていないので、ずっと同じ数字が使われ続ける

→ まるで「1日目の貯金額を出したあと、2日目以降の貯金を足し算し忘れている」ような状態です。


4. 解決方法:たった1行の追加!

ループ前に初期値を用意

total_pnl = 0   # ← まず0(ゼロ)で初期化しておく

ループの中で少しずつ足し算する

 for ... in ...:  
     pnl = calc_pnl(...)    # 1サイクル分の損益を計算する  
+    total_pnl += pnl        # ← ここで「累積=累積 + 今回の損益」を実行  
     await notify_slack(  
         f"Cycle PnL {pnl:+.4f}\nTotal PnL {total_pnl:+.4f}"  
     )
  • total_pnl += pnl は「total_pnl = total_pnl + pnl」と同じ意味です。
  • これで、1サイクルごとに累積損益が正しく増えていきます。

5. 確認方法と再発防止のポイント

  1. 少しだけテスト
    • まずは2~3サイクルだけ回して、Slackに出るTotal PnLが変化するか確認しましょう。
  2. ログ(記録)もチェック
    • 端末(ターミナル)に出るログとSlackの数字が一致すればOK。
  3. 「変数の初期化忘れ」「ループでの更新漏れ」に注意
    • 初心者がはまりやすいミスなので、コードを書くときは
      • 変数は必ず使う前に初期値をセット
      • 繰り返しの中で更新が必要な変数は漏れなく書く
        と意識しましょう。

6. まとめ

  • 問題点:累積損益をためる変数がループで更新されていなかった
  • 解決策:「total_pnl += pnl」をループ内に追加するだけ!
  • 初心者向けポイント
    1. 変数は使う前に初期化
    2. ループで変化させたいデータは必ず中で更新

これで、Botのテスト中にSlackに出るTotal PnLも正しく増えていくようになります。ぜひ、ご自身のコードにこの変更を入れて動作を確認してみてくださいね!

-Bot, mmnot, Tips, 開発ログ