日本株の検証を、実測で。

分足の終値で約定したことにすると、成績はどちらに転ぶか|順張りと逆張りで逆でした

「分足の終値で約定したことにすると成績が良く出る」——バックテストの入門書によくある注意です。日本株の1分足で測ったら、順張りでは逆に悪く出ました。逆張りでは通説どおり良く出ます。向きが戦略の型で決まっていました。

  • 順張り(移動平均クロス):37銘柄中28銘柄で「悪く」出た
  • 逆張り(急落を買う):37銘柄中25銘柄で「良く」出た
  • 1取引あたり 順張り −35.9円 / 逆張り +33.7円(100株)
  • 厚い銘柄では、どちらもほぼ消えます(逆張りで −1.0円)
  • つまり「終値約定は甘い」は無条件には成り立ちません

何を比べたか

同じ銘柄・同じ期間・同じ戦略で、約定のつけ方だけを変えます。

# 約定のつけ方を切り替えるだけ。戦略もデータも同じ
Config(fill_model="bar_close")     # 合図が出た足の終値でそのまま約定
Config(fill_model="tick")          # 次のティックの値段で約定
  • bar_close:合図が出た足の終値で、遅れなく約定できたことにする
  • tick:合図のあと、実際に次に付いた値段で約定する

使った戦略は2つです。どちらも中身に意味はありません。「合図が出る場面」が逆になるように選んだだけです。

# 順張り:移動平均のクロス(5/20)
f = c.iloc[-5:].mean()
s = c.iloc[-20:].mean()
if (f > s) != prev_up:          # クロスした足で仕掛ける
    ctx.buy() if f > s else ctx.sell()

# 逆張り:1本で0.15%以上下げたら買い、5本で手仕舞い
if bar["C"] / prev_close - 1.0 <= -0.0015:
    ctx.buy()

★ 順張りでは、終値約定のほうが「悪く」出た

まず移動平均クロスで測りました。通説どおりなら、終値約定のほうが良く出るはずです。

結果
対象37銘柄 / 14営業日 / 2,209取引
終値約定のほうが良く出た銘柄9 / 37
終値約定のほうが悪く出た銘柄28 / 37
1取引あたりの差(100株)中央 −35.9円
差 = 終値約定 − ティック約定。マイナスは終値約定のほうが悪いという意味

逆でした。最初は実装を疑いましたが、何度回しても同じでした。

理由を考える

終値約定は「スリッページがゼロ」という意味ではありません。「合図が出た瞬間の値段で買える」という意味です。問題は、その瞬間の値段がどこにあるかです。

順張りの合図は、上がった直後に出ます。移動平均がクロスするのは、価格が一方向に動いたあとです。つまりその足の終値は、その場の高値圏にあります。

一方、ティック約定では次に付いた値段で買います。1分足のスケールでは、行き過ぎたあとは少し戻ることが多い。だから遅れて買ったほうが、むしろ安く買えていたのです。

仮説が立ったら、向きが反対になる場面で確かめます。
もしこの説明が正しいなら、逆張りでは逆の結果になるはずです。合図が「下がった直後」に出るので、その足の終値はその場の安値圏。遅れて買うと、跳ね返ったところを買わされることになります。

★ 逆張りでは、通説どおり「良く」出た

同じ37銘柄・同じ期間で、急落を買う戦略に差し替えました。

順張り(移動平均クロス)逆張り(急落を買う)
取引数2,2093,367
終値約定のほうが良く出た銘柄9 / 3725 / 37
1取引あたりの差の中央値(100株)−35.9円+33.7円
1株に直すと−0.36円+0.34円

向きがきれいに反転しました。しかも大きさはほぼ同じ、1株あたり0.35円前後です。これは呼値1〜2つぶん、つまり買値と売値の差の半分に相当します。

厚い銘柄では消える

売買代金で3つに分けると、もう少しはっきりします。

銘柄の厚さ順張り逆張り
薄い−50.00円+90.16円
−55.62円+28.94円
厚い−17.65円−1.04円
1取引あたりの差の中央値(100株)

厚い銘柄では、逆張りでも差がほぼゼロ(−1.04円)になります。薄い銘柄ほど買値と売値の差が広く、「その瞬間の値段」と「次に付く値段」が離れるからです。

これで説明が揃います。
終値約定と実約定の差は、買値と売値の差(とその跳ね返り)をどちら側で拾うかです。順張りは不利な側、逆張りは有利な側を拾います。差が広い銘柄ほど大きく、狭い銘柄では消えます。

では「終値約定は甘い」は嘘なのか

嘘ではありませんが、無条件ではありません。成り立つのは逆張り型で、かつ薄い銘柄のときです。順張り型では、むしろ実力より辛く出ます。

ここで怖いのは「甘く出る」ことより、どちら向きにずれているか分からないまま数字を信じることです。辛く出ているのを見て「この戦略はダメだ」と捨てているかもしれません。

  1. 自分の戦略が順張りか逆張りか、はっきりさせる
  2. 約定のつけ方を2通りで回して、差を見る。差が小さければ、どちらでもいい
  3. 差が大きいなら、薄い銘柄を疑う。厚い銘柄では消えます
  4. どちらで出した数字か、結果と一緒に書く

この記事の限界

  • 戦略は2つだけです。順張り・逆張りの代表として選びましたが、2つで型を代表させています
  • 14営業日・37銘柄です。期間が短く、相場の局面も1つだけです
  • 指値は試していません。成行だけの話です
  • 手数料は両方で同じなので、差には影響しません

それでも、向きが戦略の型で反転することと、厚い銘柄では消えることは、偶然で出る形ではないと思っています。


まとめ

「分足の終値で約定したことにすると甘く出る」——この注意書きは、半分だけ正しいものでした。

甘くなるのは逆張り型。順張り型では辛くなります。そして厚い銘柄ではどちらも消えます。大きさは1株あたり0.35円前後、買値と売値の差の半分ぶんでした。

通説をそのまま当てはめず、自分の戦略・自分の銘柄で、両方回して差を見る。回すだけなら設定を1行変えるだけです。

この記事の出どころ

  • データ:J-Quants API V2 の bulk ティックから組んだ1分足。Light プラン+分足・ティックアドオン
  • 期間:2026-09-01 〜 2026-09-18 の14営業日
  • 対象:保管庫のファイルの大きさで厚いものから薄いものまで40銘柄を選び、両方の戦略が回せた37銘柄。順張り2,209取引・逆張り3,367取引
  • 戦略:順張り=1分足の移動平均5/20クロス(成行・ドテン)/逆張り=1本で0.15%以上下げたら買い5本で手仕舞い(成行)。どちらも中身に意味は無く、合図が出る場面が逆になるように選んだだけ
  • 約定bar_close(合図の足の終値)と tick(次に付いた値段)。手数料は両方同じ設定なので差には影響しない
  • 調整:株式分割・併合は日足の調整係数で補正済み
  • 環境:Windows 11 / Python 3.12 / pandas 3.0 / numpy 2.5
  • 測定日:2026年9月21日
  • 注意:掲載したのは集計結果です。取得したデータそのものは配布していません。特定の売買を勧めるものでもありません