結論から書きます。AI(生成AI、対話型の文章生成ツール)に表計算の式を書かせて損益を集計するとき、必ず自分で確かめるべきなのは「母集団(どの行を拾っているか)」「符号と単位(プラスマイナスと通貨・pips の揃え方)」「境界(期間の端と分母ゼロ)」の3か所です。式そのものの文法エラーは表計算ソフトが教えてくれますが、この3か所のずれはエラーを出さず、もっともらしい数字として表示されます。成績の過大評価は、そのままロット(取引数量)の過大化につながるので、検算は手法の一部として組み込んでおく価値があります。
なぜAIの集計式は「合っているように見える」のか?
AIが出す式は、構文として正しいことが多いです。SUMIFS(条件に合う行だけ合計する関数)も COUNTIFS(条件に合う行数を数える関数)も、引数の数が合っていればエラーにならず数字を返します。問題は、その数字がこちらの意図した母集団に対する数字かどうかを、表計算ソフトが判定してくれないことです。
AIはこちらが見せていないデータの性質を推測で埋めます。たとえば次のような場面です。日付列が文字列として保存されているのに、AIは日付のシリアル値(表計算内部で日付を表す数値)だと前提して比較式を書く。決済損益にスワップ(翌日持ち越しで発生する金利差調整)が含まれているかどうかを知らないまま、手数料を別列から引く式を足す。どちらも計算は走り、結果は出ます。ただし数字は意図と違います。
これはAI生成の売買コードで最初に潰す3つの穴と同じ構図です。生成されたものを「動くかどうか」で判定すると、動く間違いを素通りさせます。
検算1:その式はどの行を拾っている?
最初に確かめるのは件数です。金額の合計は正しそうに見えても、裏で数行が落ちていることがあります。
確認手順はシンプルで、条件別の件数の合計が、無条件の総件数と一致するかを見ます。たとえば「勝ちトレード件数+負けトレード件数+損益ゼロ件数」が総件数と一致しない場合、どこかの条件が行を取りこぼしています。同じことを金額でもやります。条件別の損益合計の総和が、全件の合計と一致するかです。一致しなければ母集団が壊れています。
行が落ちる典型的な原因は次のとおりです。
- 数値が文字列になっている — CSV取り込み時に起きやすく、SUMIFS の数値比較から外れます
- 空白セルと空文字の違い — 見た目は同じでも条件式の扱いが変わります
- SUBTOTAL と SUM の違い — SUBTOTAL は非表示行を除く挙動があり、フィルタをかけた状態で数字が変わります
- 条件の重複・漏れ — 「損益>0」と「損益<0」だけ書くと、損益ちょうど0の行がどこにも入りません
- 同一トレードの分割決済 — 1エントリーが複数行で決済されている場合、件数の定義が人によって変わります
件数の検算は、別経路で同じ数字を出すのが確実です。SUMIFS で出した数字を、ピボットテーブルまたは FILTER 関数で作った抽出結果からも出して突き合わせます。同じ式を2回読み返しても同じ思い込みをなぞるだけなので、経路を変えることに意味があります。
検算2:符号と単位は揃っている?
2つ目は符号と単位です。ここは元データ側の規約に依存するため、AIには判断できません。
| 確認項目 | 起こりうるずれ | 検算の仕方 |
|---|---|---|
| 損失の符号 | 負の数で持つ形式と、絶対値+売買区分で持つ形式が混在 | 負の値の最小値と最大値を表示し、想定と合うか見る |
| 手数料・スワップ | 損益列に込みか、別列か。二重に引いていないか | 純損益=総損益−手数料−スワップ が成り立つ行を数件手計算 |
| pips と金額 | pips(価格の最小変動幅の呼び方)と通貨額を同じ列で平均している | 単位列を作り、単位ごとに集計を分ける |
| 建玉通貨 | クロス円とドルストレートで1pipsの金額価値が違う | 金額ベースに統一してから集計する |
| 口座の基準通貨 | 複数口座で基準通貨が異なるまま合算 | 換算レートの基準日を決めてから換算列を作る |
プロフィットファクター(総利益÷総損失の絶対値)のような指標は、損失側を絶対値にするかどうかで符号が反転し、結果が逆さまになります。AIに書かせた式では ABS が入ったり入らなかったりするので、小さな手作りデータで必ず通します。たとえば「+100、−50、+30、−80、0」の5件だけを別シートに置き、手計算した値と式の出力を突き合わせる方法です。5件なら暗算で検算できます。
複数口座をまたぐ集計をしている場合は、集計式より先に記録設計のほうを見直したほうが早いことがあります。この点は複数口座の成績を混ぜない記録設計で整理しています。
検算3:期間の端と分母ゼロはどうなる?
3つ目は境界条件です。月次・週次で区切るとき、期間の端の1件が入るか入らないかで数字が動きます。
決めておくべきは次の3点です。
- 端の扱い — 「開始日以上かつ終了日未満」で統一するのが扱いやすい。「以下」を使うと、時刻付きの日時データで当日分が落ちる場合があります
- どの時刻で区切るか — エントリー時刻か決済時刻か。またブローカーのサーバー時刻か自分の現地時刻か。ここは検証データの欠け・重複・時刻ずれを潰す手順と同じ論点です
- 分母ゼロ — 負けが1件もない月のプロフィットファクター、取引が0件の週の平均損益。エラー値のままだと、その月を含む上位の集計まで巻き込んでエラーになります
分母ゼロは IFERROR で包んで隠すのが手軽ですが、隠すと「計算できなかった」のか「本当に0だった」のかが区別できなくなります。0件と計算不能を別の表示にするほうが、後から読み返したときに判断を誤りません。
もう1点、小数の丸めも境界の一種です。表計算の小数計算は IEEE 754 という浮動小数点の規格に基づいており、0.1+0.2 が厳密に 0.3 にならないことが知られています。損益の一致判定を「=0」で書くと、ごく小さい誤差で不一致になることがあります。判定は丸めてから行うか、許容幅を持たせます。
この検算が効かない場面はどこ?
ここまでの3か所は、あくまで集計式の内部整合を確かめるものです。次の場合は、検算を全部通しても誤った数字が残ります。
- 元データ自体が欠けている — 約定履歴のダウンロード期間が足りない、強制決済分が別レポートになっている
- 定義が人によって違う指標 — 「1トレード」の数え方、連勝連敗の数え方。式が正しくても定義がぶれれば比較できません
- サンプル数が少ない — 数十件の集計で出した勝率や平均損益は、集計が正しくても結論を支えません。この切り分けはAIが出したパターンを偶然と切り分ける手順の考え方が使えます
- 相場環境が変わっている期間をまたぐ — ボラティリティ(値動きの大きさ)や流動性が大きく異なる期間を1本の平均にまとめると、数字は正しくても意味が薄くなります
また、AIに式を書かせること自体が向かない場面もあります。列構成が頻繁に変わる作業中のシート、1行に複数の意味が混ざっている台帳などです。この場合は式より先に、表の形を整えるほうが結果的に速いことが多いです。
まとめ
AIに損益集計の式を書かせるときの検算は、次の3か所に絞ると回しやすくなります。
- 母集団 — 条件別の件数と金額の総和が、無条件の総計と一致するか。別経路でも同じ数字が出るか
- 符号と単位 — 損失の符号、手数料とスワップの二重計上、pips と金額の混在、基準通貨
- 境界 — 期間の端の以上・未満、どの時刻で区切るか、分母ゼロと丸め誤差
運用上のコツは、AIに式を渡す前に列名・データ型・符号の規約・期間の区切り方を文章で先に固定することと、長いネスト式を一度に書かせず中間列に分けさせることです。中間列があれば、どこでずれたかを目で追えます。
最後にリスクについて触れておきます。集計が正しくなることと、成績が良くなることは別です。正確な数字は判断材料を増やすだけで、将来の損益を保証しません。むしろ、集計ミスで実力より良い数字が出ていた場合、それに基づいてロットを上げると損失が拡大します。本記事は特定の売買や業者・製品を勧めるものではなく、投資助言でもありません。検証も実取引も、損失を許容できる範囲で行ってください。
この記事は、AI で下書きを作り、益山康秀(運営者)が内容を確認して公開しています
この記事は情報の提供を目的としたもので、特定の金融商品の売買をすすめるものではありません。売買の判断は、ご自身の責任で行ってください。(運営者情報)