考え方:本物の相場だけが持っているもの

置換検定(permutation test)とは、データの順番を並べ替えて「調べたい性質だけを壊したデータ」を作り、本物のデータの結果がその中でどれくらい珍しいかを見る方法です。 Timothy Masters は、インタビュー(Better System Trader、2021年、13:51〜)で、これを「トレードシステム開発で最も見過ごされている統計の道具」と呼んでいます。以下、この回の Masters の説明は自動字幕からの要約です。

考え方の出発点は、第1回で見た非対称です。弱すぎるルールは成績が悪いのですぐ分かりますが、ノイズまで覚え込んだ強すぎるルールは、奇跡のような成績を出します。その好成績が「本物の規則を見つけた」からなのか、「ノイズに合わせ込んだ」からなのかを見分けたい。 そこで、相場の値動きを並べ替えて、予測できる規則をすべて壊した相場を作ります。規則のない相場では、どんなルールも将来を予測できません。そこで最適化しても、出てくるのは「最適化の力だけで作れる成績」です。

置換検定の骨組み:同じ手順を「本物」と「偽物1,000本」の両方に当てる 本物の相場データ 時間構造・因果関係あり 最適化手順を実行 (3,456通りから最良案) 本物の成績(1個) 例:+5,143 pips 並べ替えた相場 × 1,000本生成 (時間的結びつき破壊) 同じ最適化を 1,000回やり直す (各相場で3,456通り) 偽物の成績(1,000個) 帰無分布を形成 (ノイズ最良値の集団) 判定:本物の成績は、偽物1,000個の山の「上位5%より外」に抜け出ているか?
置換検定の骨組み。本物と偽物に同じ手順を当て、本物の成績が偽物の中から抜け出るかを見る

この検定の一番の利点を、Masters は次のように説明しています。好成績が過剰最適化かどうかを確かめる「よくある、しかしひどいやり方」は、取っておいた未使用データ(アウトオブサンプル)で試すことです。未使用データは一度しか正しく使えない貴重なもので、使い回せば価値がなくなります(第7回)。 置換検定は、学習に使ったデータだけで完結します。未使用データを1本も消費せず、しかも開発の早い段階で「このルールは追いかける価値があるか」が分かります。

第2回の実験と似ていますが、問いが違います。第2回のランダムウォークは、値動きの大きさだけを本物に似せた「完全に作りものの相場」でした。置換検定は、本物の値動きを材料にして、順番だけを並べ替えます。1本1本の値動きの大きさ、極端な動きの頻度、そして後で見るように「残すと決めた性質」は本物のまま残ります。何を壊して何を残すかを選べることが、置換検定の強みです。

シャッフル相場の作り方

Masters が説明する基本の作り方(13:51〜17:03)は、次の手順です。

  1. 価格ではなく、変化を並べ替える:価格そのものを並べ替えると、昔の安い価格と今の高い価格が隣に並んでしまう。並べ替えるのは、1本ごとの値動き(変化)です。
  2. 価格の対数をとってから変化を計算する:対数の差(対数変化)にすると、価格が20のときも1000のときも、同じ割合の動きが同じ大きさになる。
  3. 並べ替えて、足し直す:対数変化を並べ替え、最初の値から順に足し上げて価格の系列に戻す。こうしてできた相場は、始まりと終わりの価格は本物と同じで、途中の道筋だけが予測できないものになる。
  4. 日中と日またぎを分ける:日足の始値は前日の終値の近くにあるのが普通なので、足ごとにまとめて並べ替えると、前日の終値と翌日の始値の間に不自然な大きな窓ができる。そこで「始値→終値(日中)」と「終値→翌日の始値(日またぎ)」の2つの系列に分け、別々に並べ替えてから組み立て直す。
  5. 日中足はさらに工夫が要る:1分足のような日中足や、夜間の取引時間がある市場はもっと複雑になるが、同じ考え方で扱える(詳しくは Masters の置換検定の本で説明されている)。

FXの15分足では、もう1つ考えることがあります。時刻帯によって値動きの大きさがまったく違うことです。東京の昼とロンドンの寄り付きでは、15分の値幅が大きく違います。1日の中の足をまとめて並べ替えると、ロンドンの大きな動きが東京の早朝に入り込み、「時間帯による値動きの形」まで壊れてしまいます。 そこで今回の実験では、次のように並べ替えました。

本物(2009年の4日分) 並べ替え後 9:0012:0016:0018:00 9:0012:0016:0018:00 日A日B日C日D 日A日B日C日D AAAA BBBB CCCC DDDD CBDA ADCB DABC BCAD 列ごとに 入れ替え =その日の最初の始値(本物のまま) 点線の枠=同じ年の中だけで入れ替える 残るもの:時刻帯ごとの値動きの大きさ、年ごとの平均的な流れ、各日の始まりの価格 壊れるもの:1日の中の足の並び(東京レンジとロンドンの動きの関係) 文字は「どの日の足か」を表す。実際は探索期間3,130営業日の各年・15分足の全時刻帯で行う
今回の並べ替え。同じ年・同じ時刻帯の列の中だけで日を入れ替えるので、東京時間の値動きとロンドン序盤の値動きの結び付きだけが切れる

この作り方で何を問うことになるかを、はっきりさせておきます。Aさん・Bさんのアイデアは「東京時間のレンジを、ロンドン勢が来ると抜けて伸びやすい」というものでした。これは1日の中の、東京時間とロンドン序盤の値動きの結び付きについての主張です。 並べ替えた相場では、ロンドン序盤の足は同じ年の別の日から来るので、その日の東京レンジとは無関係になります。一方で、ロンドン序盤の値動きが大きいことや、その年にドル円が上がったか下がったかは残ります。 つまりこの検定は、「時間帯の値動きの大きさと年ごとの流れだけで、同じ成績が作れるか」を問います。作れるなら、東京レンジのブレイクという仕組みの価値は示されていません。

検定1:最適化ごとやり直す

Masters が「開発の道具を1つだけ選ぶならこれ」と言うのが、この検定1です(18:06〜23:20)。本物の学習データで最適化して成績を記録し、次に置換データを作ってもう一度最適化し直し、その最良の成績を記録します。これを何百回、できれば何千回と繰り返し、本物の成績の順位を見ます。 大事なのは、置換データの上でも最適化をやり直すことです。最適化で選ばれたパラメータを固定したまま置換データに当てると、「本物のデータで最良の1つを選んだこと」の有利さが本物側にだけ残り、比べる意味がなくなります。

今回は、探索期間(2005〜2016年)で、前の章の並べ替えを1000回行いました。Aさんの57,600通りのグリッドを1000回やり直すのは計算量が大きすぎるため、パラメータの候補を減らした縮小グリッド3,456通りを使い、置換データごとに3,456通りを計算し直して、総pipsが最大(取引100回以上)の案を選びました。本物の相場での縮小グリッドの最良は、全グリッドの最良と同じ +5,143 pipsでした(どちらもAさんが見ていた条件=シグナル足の終値で約定・コスト0、フィルタなし)。

Bさん:固定ルールを当てる

Bさんのルールは事前に決めた1通りで、最適化をしていません。やり直す最適化がないので、固定したルールをそのまま1000本の置換データに当てます。 本物の相場での1取引の平均は −0.14 pips(往復0.4 pips込み)、置換データでの平均は −0.31 pips(1000本の5〜95%の範囲は −1.55〜+0.98 pips)でした。本物以上の成績になった置換データは1000本中411本、p=0.411です。

Bさんの置換検定(探索期間):本物の成績がシャッフル相場のど真ん中に埋没(p=0.41) 本物の成績: -0.14 pips p値 = 0.41(中央付近) -2.0 0.0 +2.0 pips/取引 ※ 探索期間(2005〜2016年)のBさんのルールは、規則を壊したシャッフル相場と何も変わらない
本物の相場の成績が、規則を壊した相場の成績の中に埋もれている。探索期間のBさんのルールには、区別できる力がない(USDJPY 15分足、探索期間2005〜2016年、置換1000回)

探索期間のBさんのルールは、東京レンジとロンドン序盤の結び付きを壊した相場でも、同じくらいの成績になります。探索期間では、Bさんの仮説を支える証拠は出ていない、というのが素直な読み方です。 Bさんはここでルールを直しません。事前登録どおり、判定は最終テストに持ち越します。

Aさん:最適化ごとやり直す

Aさんの手順では、置換データ1本ごとに3,456通りを計算し直し、その中の最良案の総pipsを記録しました。 結果は、置換データでの最良が中央値 +3,826 pips(5〜95%の範囲は +2,282〜+5,968 pips)。本物の最良 +5,143 pips 以上になった置換データは1000本中155本で、p=0.155でした。最良案の年率Sharpeで比べても、p=0.155 です。

Aさんの置換検定:因果を壊した偽物相場でも、最適化し直せば「聖杯」が量産される 偽物の中央値:+3,826 本物の最良: +5,143 p値 = 0.155(155本に敗北) +2,000 +4,000 +6,000 +8,000 pips 足の並びを完全に壊した偽物相場でも、3,456通り探せば +3,800pipsの「偽の聖杯」が100%作れる!
年ごとの流れを残したまま並びだけを壊した相場でも、最適化は中央値 +3,826 pipsの「聖杯」を作る。本物の +5,143 は1000本中155本に負けている(シグナル足の終値で約定・コスト0、縮小グリッド3,456通り)

置換データでも、最適化は83%で「買いのみ」を選びました。並べ替えても年ごと・時刻帯ごとの平均的な流れは残るので、どの置換データでも「買う」案が上位に来やすいのです。 本物の最良 +5,143 pipsのうち、約3,970 pips(77%)は置換データでも作れる大きさで、残りの約1,170 pipsは有意ではありません。 第10回で、Aさんの利益から「相場の流れ」と「フィルタ」の分を除いた「残り」がルールの実力かどうかは置換検定で確かめる、と書きました。答えは、残りも、最適化の力と区別できないです。

ここで第2回の結果と並べると、何が起きているかがはっきりします。 第2回のランダムウォーク(年ごとの流れもない、平均ゼロの相場)では、最良案の年率Sharpeは中央値 0.72、95%点 1.06 で、実データの最良案の 1.44 に届いたものは1本もありませんでした。「実データには何かがある」ことは、そこで分かっていました。 ところが、年ごとの流れを残した置換データと比べると、実データは抜け出ません(Sharpeでも p=0.155)。実データにあった「何か」は、置換でも残る年ごとの流れ(相場の流れ)であって、東京レンジとロンドン序盤の結び付きではなかったということです。 第11回で見た「台地の正体は、ドル円を買うことだった」という読みを、別の方法で確かめた形になります。

開発者やったこと置換検定1の結果(探索期間)読み方
Aさんグリッドで総pips最大を選んだ(検定では縮小グリッド3,456通りを置換データごとにやり直した)本物 +5,143 pips、置換の最良は中央値 +3,826、p=0.155。置換でも83%で「買いのみ」好成績の大部分は、年ごとの流れと最適化の力で作れる。ブレイクの仕組みの価値は示されない
Bさん事前登録の1通りを固定(N=1)。置換データにもそのまま当てた本物 −0.14 pips、置換の平均 −0.31、p=0.411探索期間では区別できる力がない。ルールは変えず、判定は最終テストへ

検定2:完成したルールを最終テスト期間で確かめる

検定2は、完成したルールを未使用データで試して良い成績が出たときに使います(23:20〜26:33)。 Masters によれば、未使用データで良い成績が出ることは必要条件であって、十分条件ではありません。価値のないルールでも運でそのくらいの成績が出る確率が十分にあるなら、そのルールは使うべきではない。そこで、未使用期間の値動きを何百回・何千回と並べ替え、同じルールを当てて、本物の成績が抜け出るかを見ます。 検定1との違いは、ルールを固定し、最適化をやり直さないことです。未使用データで行うので、検定1のように開発の途中で何度も使うものではありません。

このコースでは、検定2をBさんの合格ラインの1つ(「置換検定2で p<0.05」)として事前に登録し、最終テスト期間(2023年1月〜2026年7月)を開けたときに1回だけ計算しました。 結果は、Bさん p=0.007、Aさん p=0.21です。探索期間では埋もれていたBさんのルールが、最終テスト期間では並べ替えた相場から抜け出し、Aさんのルールは最終テスト期間でも埋もれました。 ただし、Bさんは他の合格ライン(悪化コストでの信頼区間の下限、比較対象との差)を満たさなかったため、判定は「保留」です。検定2に通ったことは、採用の十分条件ではありません。開け方と判定の詳細は第17回で扱います。

検定3:開発のやり方そのものを検定する

検定3は、1つのルールではなく、ルールの作り方(開発の手順)を検定します(26:33〜31:53)。 手順とは、たとえば「どの市場を選ぶか」「トレンドフォローにするか逆張りにするか」「パラメータをどう探し、どう選ぶか」といった、ルールを作るまでの決め方の全体です。置換データの上でその手順を丸ごとやり直し、規則のない相場からでも本物と同じくらいの「聖杯」が出てくるかを見ます。

Masters がこの検定を勧める理由は、開発者が抱える板ばさみにあります。直近1年を未使用データとして残せば、公平に試せる代わりに、ルールは1年古くなります。今日までのデータで作れば最新のルールになりますが、試すデータが残りません。 そこで手順そのものを検定し、手順が良いと確かめられれば、今日までのデータで作っても安心できる、という考え方です。逆に、手順が規則のない相場からも聖杯を作ってしまうなら、その手順でルールを作ること自体をやめて、作り方から見直します。

Mastersの3つの置換検定:何を固定し、何をやり直すかで答える問いが変わる 検定 1 ルールの力 学習データだけで検定 並べ替える毎に再最適化 問い:好成績は過剰適合か? B: p=0.41 / A: p=0.155 使用時期:開発の初期段階 検定 2 未使用期間の成績 最終テスト期間で検定 ルールを固定して走査 問い:未知の相場の勝ちは運か? B: p=0.007(合格) / A: p=0.21 使用時期:最終テスト時 検定 3 作り方そのもの 全期間の手順を丸ごと再実行 アルゴリズム自体を検定 問い:この作り方はノイズからも 聖杯を作ってしまうのか? 直近データを全学習に使う前
Masters の3つの置換検定。何を固定し、何をやり直すかで、答える問いが変わる

今回のAさんの検定は、検定1と検定3の中間にあたります。置換データごとにやり直したのは「縮小グリッドを計算して総pipsが最大の案を選ぶ」という手順の一部で、Aさんが実際に行ったフィルタの後付け(曜日・月・RSI)や、検証期間を12回見て乗り換えた部分は、計算量の都合で含めていません。 それでも結論は十分に読めます。手順の一部だけでも、規則のない相場から中央値 +3,826 pipsの最良案が出てきます。フィルタの後付けや検証期間の使い回しまで加えれば、置換データでの「聖杯」はさらに良く見える方向に働くと考えられます(今回は計算していません)。Aさんの作り方は、ノイズと年ごとの流れからでも聖杯を作れる手順だった、ということになります。

結果の読み方:回数・p値・限界

p値は「本物以上だった置換の割合」

置換検定のp値は、置換データの成績が本物の成績以上になった本数を、置換の回数で割ったものです。Aさんの p=0.155 は「1000本中155本が本物以上だった」という意味で、それ以上でも以下でもありません。 「このルールが偽物である確率が15.5%」という意味ではありませんし、将来の成績についても何も言いません。言えるのは、「残すと決めた性質(今回は時刻帯の値動きの大きさと年ごとの流れ)だけで、この成績は1000本中155本の割合で作れた」ということです。

回数は最低100回、できれば1000回

Masters は、置換の回数について「100回はぎりぎりの最低限で、それだけでは不安になる。自分は少なくとも1000回行う」と述べています(31:53〜33:58)。 100回では、p値は0.01刻みでしか出せず、偶然による p値そのもののぶれも大きくなります。今回はA・Bとも1000回行いました。最適化のやり直しが重くて1000回が難しいときは、今回のようにグリッドを縮小し、縮小したことを報告に書きます。

事例:「1000回中999回に勝つ」をどう読むか

Unbiased Trading の動画(2026年、08:20〜10:27)は、Turnaround Tuesday(月曜に下げたら買う、古くから知られた曜日のパターン)を、SPY の日次収益を並べ替えた偽の相場で検定しています。 並べ替えても値動きの大きさと全体の上昇(ドリフト)は同じで、日の順番だけが無作為になります。その上でルールを動かすと、1000本中999本に勝った、つまり運でこうなる可能性は1000分の1程度だ、という結果でした(この動画はデータ提供元から報酬を受けたことを動画内で開示しています)。

この結果は、今回の枠組みでどう読めるでしょうか。

並べ替えが壊してしまうもの

置換は、ルールが拾うかもしれない規則だけでなく、相場が本来持っている性質も一緒に壊します。代表的なのは次の2つです。

こうした性質を残したいときは、数日や数週間のまとまり(ブロック)ごとに並べ替える方法があります。何を残して何を壊すかで、検定が答える問いが変わるので、並べ替えの方法は結果を見る前に決めて書いておきます。並べ替え方を何通りも試して、都合の良いp値が出たものを報告すれば、それも試行です。

Sharpe の信頼区間をブートストラップで出すことへの注意

ブートストラップ(手元の取引や収益を、重複を許して取り直して分布を作る方法)について、Masters は「自分はほとんど使わない」と述べています(32:55〜33:58)。本人の見解では、裾の重い分布に非常に敏感で、特に Sharpe のように分母にばらつきが入る割り算の指標では、ブートストラップは信頼できず、大きく間違った結果が出ることがある、というものです。 置換検定は「規則を壊した相場と比べる」という別の問いに答える方法で、成績の幅を見積もる方法(第13回)とは役割が違います。

最小コード(Python)

今回の並べ替えの中心部分を、短くまとめたものです。コードを読まなくても、本文の内容は理解できます。読む場合は、次の3つの関数の役割だけ押さえてください。

Python
import numpy as np

# O, H, L, C: (日数, 1日の15分足の本数) の配列。データのない足は NaN。
# years: 各日の年(行ごと)。欠損の細かい扱いは省略している。

def decompose(O, H, L, C):
    """15分足を4つの対数変化に分ける"""
    prev_close = np.roll(C, 1, axis=1)
    gap = np.log(O / prev_close)   # 1本前の足の終値 → この足の始値
    gap[:, 0] = 0.0                # その日の最初の足は、本物の始値から始める
    oc = np.log(C / O)             # 始値 → 終値
    hi = np.log(H / O)             # 始値 → 高値
    lo = np.log(L / O)             # 始値 → 安値
    return gap, oc, hi, lo

def permute(parts, years, rng):
    """同じ年・同じ時刻帯(列)の中で、日(行)を入れ替える"""
    out = [a.copy() for a in parts]
    for y in np.unique(years):
        rows = np.where(years == y)[0]
        for k in range(parts[0].shape[1]):          # k = その日の何本目の足か
            r = rows[~np.isnan(parts[0][rows, k])]  # その時刻帯にデータがある日
            p = rng.permutation(r)
            for src, dst in zip(parts, out):        # 4つの部品を同じ順番で動かす
                dst[r, k] = src[p, k]
    return out

def rebuild(first_open, gap, oc, hi, lo):
    """各日の最初の始値(本物)から、変化を足し直して足に戻す"""
    O, H, L, C = (np.full(gap.shape, np.nan) for _ in range(4))
    for i in range(gap.shape[0]):
        last_close = None
        for k in range(gap.shape[1]):
            if np.isnan(gap[i, k]):
                continue
            if last_close is None:
                log_open = np.log(first_open[i])
            else:
                log_open = last_close + gap[i, k]
            O[i, k] = np.exp(log_open)
            C[i, k] = np.exp(log_open + oc[i, k])
            H[i, k] = np.exp(log_open + hi[i, k])
            L[i, k] = np.exp(log_open + lo[i, k])
            last_close = log_open + oc[i, k]
    return O, H, L, C

# 検定1:置換データごとに最適化をやり直す
# best_total_pips は、縮小グリッド3,456通りを計算して
# 総pips最大(取引100回以上)の案の成績を返す関数(中身は省略)
rng = np.random.default_rng(20260924)
parts = decompose(O, H, L, C)
real = best_total_pips(O, H, L, C)
perm = []
for j in range(1000):
    Op, Hp, Lp, Cp = rebuild(O[:, 0], *permute(parts, years, rng))
    perm.append(best_total_pips(Op, Hp, Lp, Cp))   # 固定せず、毎回やり直す
p_value = np.mean(np.array(perm) >= real)          # 本物以上だった割合

最後の3行が検定1の本体です。置換データごとに best_total_pips を呼び、最適化をやり直していることに注意してください。ここで本物の相場で選んだパラメータを使い回すと、よくある間違いの2つ目になります。 Bさんのような固定ルールなら、best_total_pips の代わりに、固定したルールの成績を返す関数を使います。

よくある間違い

「置換検定に通れば、将来も勝てる」

置換検定が答えるのは、「検定した期間の値動きの並びに、ルールが拾う何かがあったか」です。その何かが将来も続くかは答えません。Bさんは最終テスト期間の検定2に通りましたが(p=0.007)、他の合格ラインを満たさず「保留」で、フォワードで確かめ続けます(第18回)。

「最適化済みのパラメータを固定して、置換データに当てる」

最適化で選んだルールの検定1では、置換データの上でも最適化をやり直します。固定したまま当てると、本物の側だけが「最良を選んだ」有利さを持つので、本物が抜け出て見えやすくなります。Aさんの手順は、やり直すと中央値 +3,826 pipsの最良案を置換データからも作りました。

「価格そのものを並べ替える/日中と日またぎを混ぜる」

価格を並べ替えると、昔の価格と今の価格が隣り合う不自然な相場になります。変化を並べ替える場合も、日中の変化と日またぎの窓を混ぜると、不自然な窓ができます。FXの日中足では、時刻帯ごとの値動きの大きさも残す工夫が必要です。

「数十回の置換でp値を出す」

回数が少ないと、p値は粗くしか出せず、偶然のぶれも大きくなります。Masters の目安は、最低100回、できれば1000回です。計算が重いときは、回数を減らすのではなく、グリッドを縮小したことを明記して回数を確保します。

実戦課題

自分が最適化したルールを1つ選び、次の順に作業してください。

  1. 残す性質と壊す性質を書く:自分のルールが拾っていると主張する規則(例:東京とロンドンの結び付き、曜日の並び)を1文で書き、それを壊し、それ以外(時間帯の値動きの大きさ、年ごとの流れなど)を残す並べ替え方を決めます。結果を見る前に研究ログに書きます。
  2. 最適化の手順を関数にまとめる:探索範囲・選択基準(総pips最大、取引100回以上など)を含めて、データを渡せば最良案の成績が返る形にします。重すぎるならグリッドを縮小し、縮小の内容を記録します。
  3. 1000回やり直す:置換データごとに最適化をやり直し、最良案の成績と、選ばれた方向・時間帯などを記録します。
  4. p値と中身を報告する:p値だけでなく、置換データでの最良成績の中央値と5〜95%の範囲、置換データで選ばれた設定の傾向(Aさんなら「83%で買いのみ」)を並べます。
  5. 未使用データは開けない:この課題は学習期間だけで行います。検定2は、合格ラインを書いて最終テストを開けるときまで取っておきます。

やるべきこと/やるべきでないこと

やるべきことやるべきでないこと
置換データで最適化ごとやり直す成績の良さだけで「エッジがある」と言う
価格の対数変化を並べ替え、日中と日またぎ・時刻帯を分けて扱う価格そのもの、または1日の足をまとめて並べ替える
何を残し何を壊すか(並べ替えの方法)を、結果の前に決める並べ替え方を何通りも試し、都合の良いp値を報告する
置換は1000回(最低でも100回)行い、縮小したグリッドはそう書く数十回の置換でp値を出す
検定1は学習データだけで行い、未使用データを残す過剰最適化かどうかを、未使用データを何度も使って確かめる
p値と一緒に、置換データで選ばれた設定の傾向を報告するp値だけを見て、何が再現されたかを確かめない
置換検定に通っても、フォワードで確かめ続ける置換検定に通ったことを、将来も勝てる証拠にする

チェックリスト

次の回に進む前に、以下が自分の言葉で説明できるか確認してください。

ミニテスト

4問で確認します。不正解なら別の選択肢を選び直せます。正解すると解説が表示されます。

Q1. グリッド探索で選んだルールに検定1を行うとき、正しいやり方は?

本物の側だけが「最良を選んだ」有利さを持たないよう、置換データでも同じ最適化をやり直します。検定1は学習データだけで完結し、未使用データを消費しません。

Q2. Aさんの手順を置換データ1000本でやり直すと、本物の最良 +5,143 pips以上の最良案が155本で出ました(p=0.155)。正しい読み方は?

p値は「本物以上だった置換の割合」で、ルールが本物である確率ではありません。置換データでも最適化は83%で「買いのみ」を選び、本物の最良のうち約77%は置換データでも作れる大きさでした。残りの約1,170 pipsは有意ではありません。

Q3. 今回の並べ替え(同じ年・同じ時刻帯の中で、日をまたいで入れ替える)で残るものは?

壊れるのは1日の中の足の並びで、Aさん・Bさんのアイデアが拾おうとした「東京レンジとロンドン序盤の結び付き」です。年ごとの流れが残るため、置換データでも「買い」の案が選ばれやすくなりました。

Q4. SPY の日次収益を並べ替えた相場1000本のうち999本に勝った(5年・44トレード)という結果から言えることは?

日次収益の並べ替えでは上昇の大きさは残るので、上昇だけでは999本には勝てません。一方、置換検定はその期間の並びが偶然かを問うだけで、持続性は問いません。5年・44トレード・1市場という限界は第13回で扱います。