クァントのアトリューションの法則:変更後のPnLが上昇した場合、それは変更だった場合、変更後のPnLが下落した場合、それは市場でした。 クァントのアトリューションの法則:変更後のPnLが上昇した場合、それは変更だった場合、変更後のPnLが下落した場合、それは市場でした。 私は定量取引で働き、市場データから生産取引戦略に至るまで、パフォーマンス分析に移行するのを助ける完全に自動化された研究環境と取引システムを構築しています。 これは、私が以前よりもうまくやっているか否かを示す非常に明確なメトリックです。 PnL あなたがライブトレーディング戦略を実行したことがあるなら、あなたはこの日常の儀式を知るでしょう:充填、遅延、在庫をチェックするダッシュボードを開く、そして、避けられない限り、PnLでピックします。 市場は非静止的で、満たしクラスター、変動性の体制が振り回され、マイクロ構造の変化があり、結果の配布は脂肪尾である。 fool yourself この記事はA PnL-chasing をどのように置き換えるか したがって、あなたのイーテレーションループは時間単位ごとにより多くのシグナルを受け取ります。 practical statistical hypothesis testing なぜPnLはノイズなメトリックなのか PnL は A 複数のランダムコンポーネント: アグレージ あなたの日々のPnL分散は、あなたのシステムが変わっていない場合でも、ニュースの日で2倍になることができます。 マイクロ秒のタイミング、列の位置、手数料レベル、隠された対照対照の相互作用 - すべてが取引結果にランダム性を注入します。 いくつかの初期の勝利は、後でより大きな概念的露出(またはその逆)に結合し、曲線を説得力を持たせることなく、取引ごとの基本的な平均結果を変更します。 複数の混乱を引き起こす. inventory caps, quote widths, internal crossing, or routing への変更は、PnL を異なる方向に動かし、互いにキャンセルまたは強化する可能性があります。 PnL はビジネスを追跡するための素晴らしいターゲットですが、短いウィンドウで研究の変更を受け入れる/拒否するのに適切なメトリックではありません。 WHAT WE 知りたい♪ ドー ドー 変更(たとえば、信号の新しい機能、異なる引用論理、異なる実行ルール)を送信するとき、我々は答えたい。 観察された改善は継続する可能性があるのか、それとも偶然に見たものなのか。 Is the observed improvement likely to persist, or is it something we saw by chance? これは、私たちが観察された結果の統計的意義を疑問視する統計的仮説テストの世界に私たちを導きます。 この確率は、 小さなp値は「実際の効果がなければ珍しい」という意味で、大きなp値は「あなたが見たものは騒音の中で共通している」という意味です。 Under a world where the change to the true mean outcome, how often would we see a difference at least as large as what we observed? 何もしない p-value 何もしない 実践的な例:二つの戦略 違うけど、ない。 見る 見る 私たちは変更を発送し、変更前の戦略と変更後の戦略(バックテストからまたはライブトレーディングから)でいくつかのトレーディングを取得しました。 戦略A:変化の前に 戦略B:変化の後 以下、私は2つの合成PnLシリーズを生成しました。 ――チームが勝利を宣言するよう誘惑するようなイメージですが、私たちは実際に見ているものを信頼し、それに基づいて結論を出すことができますか? 結局のところ、PnLは取引戦略の究極の目標ではありませんか? 下記の一般的な統計テストを実行することで、取引ごとの平均PnLが本当に異なるかどうかをテストします。 diverge visibly プロットを作成し、統計テストを実行するために使用したコードは以下の通りです。 import numpy as np import pandas as pd import matplotlib.pyplot as plt from scipy import stats import seaborn as sns sns.set(); rng = np.random.default_rng(49) # generate PnLs per trade n = 1200 pnl_A = rng.normal(loc=0.0, scale=1.0, size=n) pnl_B = rng.normal(loc=0.0, scale=1.0, size=n) # generate cumulative PnLs cum_A = pnl_A.cumsum() cum_B = pnl_B.cumsum() # run a statistical test t_stat, p_value = stats.ttest_ind(pnl_A, pnl_B, equal_var=False) print(f"mean_A={pnl_A.mean():.4f}, mean_B={pnl_B.mean():.4f}") print(f"Welch t-statistic={t_stat:.3f}, p-value={p_value:.3f}") plt.figure(figsize=(12,7)) plt.plot(np.arange(1, n+1), cum_A, label="Strategy A") plt.plot(np.arange(1, n+1), cum_B, label="Strategy B") plt.ylabel("Cumulative PnL", fontsize=15); plt.xlabel("Trade #", fontsize=15); plt.legend(["Cumulative PnL — Strategy A", "Cumulative PnL — Strategy B"], fontsize=15) plt.tight_layout(); plt.savefig("cumulative_pnl_A_vs_B.png", dpi=160); plt.show(); 以下は、彼が出した数字です。 mean_A=0.0611, mean_B=0.0037 Welch t-statistic=1.380, p-value=0.168 統計テストの 2 つの標準出力 - t 統計値と p 値 - を参照します. I will tell more about them further down the story. For now, let us state the interpretation: 言い換えれば、取引当たり平均PnLは異なりますが、2つの累積的な線はかなり遠く離れているように見えます。 there is not enough evidence 何が起こったのか?(仮説のテスト) ほとんどの教科書は、公式とテーブルをあなたに投げかけます。個人的には、私は統計仮説テストについて最初に学んだとき、このアプローチがあまり好きではありませんでしたが、ほとんどのチュートリアルはその背後にあるアイデアを説明しず、あなたが多くのものを覚えさせてくれます。 1)私たちが尋ねる質問 ゼロ仮説(H0):取引当たりの真の平均PnLは、変更の前と後と同じです。 代替(H1):それらは異なります(両面)、または1つはより大きい(一面)、あなたの質問に応じて。 (2)計算した統計 その中心に、The は: t-statistic サンプルの差は、その差の標準エラーで分けることを意味します。 分割 by . difference in sample means the standard error of that difference 二つのサンプルが遠く離れている場合 音に近い場合は、t-stat は小さい。 どんなに騒がしいかというと、 3) p 値がどこから来るか H0 (real difference) では、t 統計は既知の分布に従う(a) いくつかの自由度で)。 単純に: t-distribution p-value あなたが得たものと同じくらい、少なくとも極端(t-stat の大きい値)の t-stat を観察する確率は H0 以下です。 the probability, under H₀, of observing a t-stat at least as extreme (large value of a t-stat) as the one you got. それは、すべてのテーブル(あなたが異なる仮説テストガイドで直面したかもしれない)が行っていることです。 Small p-value means your observed difference would be rare if there was no true effect. 小さなp-値は、観測された差が実際の効果がなければ稀であることを意味します。 looking up a quantile 4) 上記のPythonコードによって生成された実際の数字を読み取る方法 以下は、これらの数字があなたに言っていることです。 t ≈ 1.380 は、AとBの間の取引当たり平均PnLの観測された違いは、ゼロから1380の標準エラーです。 p ≈ 0.168 (両面) は、真に平均の違いがなかった場合、あなたは偶然に少なくともこの大きさの違いを見るでしょう 16-17% の時間. それは、実際の効果を主張するのに十分に珍しくありません. 通常、研究者は、統計的意義を主張するために、p 値が少なくとも 0.05 (5%) ほど低いことを期待します。 5)なぜチャートが私たちを騙したのか 累積PnLはA 数千の取引で、ランダム・ウォッチは定期的に目に浮かぶ金額によって分離されます - たとえ手段が同一であるとしても。 私たちの脳は傾斜と分離を検出するために調整されていますが、差異を正しく統合するにはあまりありません。 . random walk against the per-trade dispersion 6)ここでは何が「重要」だったでしょうか。 実践的に言えば、t 統計の絶対値が 1.96 である場合、0.05 で p 値を見る (可能な t 統計値の 5% だけがそれ以上です) 変数とサンプルサイズ構造を同じように保つと、T 統計を 1.96 / 1.38 ≈ 1.42 に押し上げるために、平均差が約 42% 大きくなります。 “But PnL is what pays the bills.” True—and... 「PnLを辞めない、我々は」 : separating roles PnLは、ビジネス全体が機能しているかどうかを示します。 仮説テストは、あなたが今見たサンプル以外にこの特定の変更が役立つ可能性があるかどうかを示します。 両者が合意しないとき、あなたは何かを学びました:もしかしたら環境が異常に有利だったかもしれない、もしかしたらルーティングの調整が強化された曝露、もしかしたらあなたは複数の変更を送ったかもしれません。 効果です。 増加 実装パターン I recommend (fast iteration without self-deception) Per-trade PnL は良好で、高周波数/市場作成戦略では、1 分間PnL (例えば、1 分間PnL、5 分間PnL) などの集計を使用して、在庫、手数料、リスク集計を反映し、連続関連を減らすことが一般的です。 For a mean-effect question, Welch’s t-test is a good default. If tails are very heavy or serial correlation is strong, switch to: Choose the statistic. (cluster by day, by venue, by symbol group), or Cluster-robust tests (label-shuffling), or Randomization / permutation tests (resample blocks to respect autocorrelation). Bootstrap Pre-commit the stoping rule. オプションストップ(「毎時間見て、p < 0.05 で発送する」)は、偽ポジティブを膨らませます。 複数の比較を処理します. 20 つのボタンを試すと 1 つは「勝つ」ことになります.偽の発見率 (Benjamini-Hochberg) または高賭けの文脈で Bonferroni を使用します. あなたが実行するすべてのテストの中央ログを保持します. 市場や時間を分割し、列車/テストの両方で機能をダブルダイプしないで、凍結日付について明確にしてください。 Sanity-check 実用的な重要性. A p-value can be tiny for a million trades yet the effect is economically meaningless after fees and risk. Track effect size (e.g., average difference in base points per trade), and risk-adjusted PnL (Sharpe, drawdown), not only statistical significance. トレック効果の大きさ(例えば、取引当たりベースポイントの平均差)とリスク調整された PnL (Sharpe, drawdown)は、統計的な重要性ではありません。 モニター安定性. リアルエッジは分裂を生き残るべきです: シンボル流動性バケットによって、日時によって、変動性の体制によって. あなたの「勝利」が1つの薄いシリーズにしか存在しない場合は、注意してください。 再び私たちの例に戻る:あなたが結論づけるべきこと 上記の数値を考慮すると(t ≈ 1.380, p ≈ 0.168): 戦略Bの取引当たり平均PnLが戦略Aと異なるという十分な証拠はありません。 累積PnLにおけるかなりの差異は、平等平均プロセスにおけるランダム性と互換性がある。 または、より多くのデータを収集する(より大きなサンプルを事前に設定する)、仮説を強化する(より良い機能、リスク管理)、またはクリーンA/B(孤立混乱剤)を実行する。 なぜなら 共通の落とし穴(私はそれらをすべて作りましたので、あなたは必要ありません) Peeking を繰り返しテストし、p 値が 0.05 以下に下がると止まります。Peeking を計算する固定地平線または連続方法を使用して、そうでないと偽ポジティブを挙げます。 あなたは100kのサンプルを持っていると思うが、あなたは本当に2kの独立したイベントを持っているかもしれない。 異なるボルム/流動性を持つ期間間の累積曲線を比較し、それを勝利と呼ぶ。 「統計的意義」と「経済的価値」を等しくする。小さな利点は、手数料、遅延スライプ、または在庫リスクによって消去することができる。 選択偏差を無視する. 20 つの機能を調節し、最善を保持する場合は、その選択のために p 値を修正する必要があります。 A mnemonic for the t-test that actually sticks. 実際にストックしているT-testのためのメモニック あなたがPnLグラフを目の当たりにする誘惑を感じるとき、思い出してください: t = 「2つのサンプルメディアがどこまであるか」 ÷ "これらのメディアがどこまで不確実か」 t = “how far the two sample means are” ÷ “how uncertain those means are.” サンプルサイズを倍増すると、名義者(不確実性)が縮小し、微妙な違いが「重要」に見えなくなります。 終わりのノート 私は、あなたがPnLの違いだけを見ることによって、あなたの取引戦略の変更を判断することは明らかでない理由、研究プロセスをより強力にするために使用できる統計ツール、そして、統計仮説のテストで使用されるこれらのすべての用語の背後に何があるのか、そして実際に教科書の指示に盲目的に従わずにそれらを引き出す方法について、いくつかの直感を得たことを願っています。 多くの研究チーム なぜなら、彼らは改善のために幸運を間違っているからである。彼らは、グラフが良いように見えるまでダッシュボード駆動の修正をサイクルし、それを送り、そして損害を解消するために何ヶ月も費やします。あなたはより良いことをするために重量の統計を必要としません。あなたは仮説を述べ、合理的な分析単位を選択し、不確実性に関連して信号を測定するテストを使用し、複数のテストと停止のルールを尊重し、両方の統計に基づいて決定する必要があります。 チームは、彼らの目的に合ったより複雑なフレームワークを構築しますが、これは始めるのに良い場所です。 fail to iterate そして これを行うと、あなたのイーテレーションループはより穏やかで、より速く、そして複雑になります。 この出版物は、公的に利用可能な情報のみを使用し、教育目的ではなく、投資アドバイスのためです。あらゆる見解と意見は、私自身のものであり、私の元/現在の雇用主または他のいかなる当事者の見解を表明しません。