システマティック取引パイプラインのための AutoML
このブログでは、検索方法: どのサンプラーをいつ使用するか (クロスオーバーは評価コスト)、実行した検索の価格設定方法 (デフレート シャープ レシオ)、選択手順自体のスコア付け方法について長い説明を費やしてきました。 (PBO)、そしてその装置全体が正直に着地する場所 (no堅牢なエッジ)。
これまでカバーされていなかったのは、あなたが検索した内容です。これらの記事はすべて、指定された機能セットと戦略ファミリーを取得し、その中のパラメーターを最適化します。 AutoML は上の層を攻撃し、候補自体の構築を自動化します。その 3 つの部分は、このブログの他の場所には掲載されていません。
- 自動化された特徴抽出 — tsfresh は 1 つの価格シリーズを最大 794 の統計的に特徴付けられた特徴に変換し、Featuretools は深層特徴合成を介して関連する市場テーブル全体で特徴を構成します。
- 予算を意識した AutoML — FLAML のコスト倹約最適化。コストに関係なく、コンピューティング予算内で最適なモデルを見つけます。
- フォーミュリック アルファ ファクトリー — マシンが列挙できる構成可能な演算子文法としての WorldQuant の 101 のフォーミュリック アルファ。
他のすべて (目的関数、検証スキーム、複数テストの補正) は、ここの別の場所ですでに測定されているため、この記事は再教育するのではなくリンクしています。 AutoML では試行回数が爆発的に増加し、試行回数がまさにアークの残りの部分に関係するため、これは通常よりも重要です。

AutoML が自動化するもの
AutoML は単一のアルゴリズムではありません。これは、パイプラインのさまざまな段階を自動化する一連のテクニックです。
| ステージ | 手動アプローチ | AutoML アプローチ |
|---|---|---|
| 特徴エンジニアリング | ドメインエキスパートクラフトインジケータ | 自動抽出 (tsfresh、Featuretools) |
| 機能の選択 | 相関分析、直感 | 統計的仮説検定、SHAP |
| モデルの選択 | 2 ~ 3 つのモデルを試してみる | 数十人以上の学習者を検索 |
| ハイパーパラメータ調整 | グリッド検索、手動調整 | ベイジアン / 低コスト検索 (Optuna、FLAML) |
| 建築設計 | 固定ニューラル ネットワーク トポロジ | ニューラル アーキテクチャ検索 (NAS) |
| アンサンブル構築 | 手動スタッキング | 自動アンサンブル選択 |
前提として、システマティック取引では候補空間が膨大であるということが挙げられます。単一のOHLCVシリーズが何百もの技術的特徴を生成し、複数の資産、オーダーブックデータ、代替ソースによって組み合わせが可能になります。この前提は危険でもあります。すべての候補者は裁判であり、裁判は誤った発見を生み出すものです。
目的に関する AutoML 固有のポイントの 1 つ: 検索では、ユーザーが意図したものではなく、書き留めたものを正確に最適化するため、検索で最大化される指標は財務的なものである必要があります。どのスカラーを選択するかによって戦略が暗黙的に選択されます。目的関数設計 を参照してください。そこでは、単純な取引ごとのシャープが 600 シードの 56% で 5% 未満のエクスポージャー宝くじを獲得し、サンプル内シャープ 21 をポストしますが、これはサンプル外で 0.13 に崩壊します。最初から財務指標を AutoML スコアラーに接続します。最適化しない roc_auc そしてそれが伝わることを願っています。
自動化された特徴エンジニアリング
特徴エンジニアリングは、ほとんどのアルファが生息する場所です。生の価格データは誰にとっても同じです。そのデータを予測シグナルに変換することが、収益性の高い戦略とノイズを分けるものになります。

tsfresh: ワンプライス シリーズから 800 以上の機能まで
tsfresh (スケーラブルな仮説テストに基づく時系列特徴抽出) は、時系列特徴抽出専用に構築されています。デフォルトでは、次のような 63 の特性評価方法が計算され、デフォルトで最大 794 の特徴に拡張されます。
- 統計モーメント (平均、分散、歪度、尖度)
- 複数のラグでの自己相関
- フーリエ係数とスペクトルエネルギー
- 複雑さの測定 (概算エントロピー、サンプルエントロピー)
- 非線形特徴 (フリードリヒ係数、最大ランジュバン固定点)
- 分位数と範囲数を変更する
財務データの場合、これは、単一の価格シリーズが数百の候補特徴を生成することを意味します。その多くは、手動の特徴エンジニアリングでは見逃されるダイナミクスを捕捉します。これは、スプレッド モデリング や DeepLOB で使用される手作りのドメイン派生の機能セットとは大きく異なるアプローチです。そこではオーダーブックの不均衡が重要であると人間が判断します。ここではライブラリがすべてを列挙し、仮説テストで決定します。
import pandas as pd
import numpy as np
from tsfresh import extract_features, select_features
from tsfresh.utilities.dataframe_functions import impute
def prepare_rolling_windows(df: pd.DataFrame, window_size: int = 20) -> pd.DataFrame:
"""Convert OHLCV DataFrame into rolling windows for tsfresh."""
records = []
for i in range(window_size, len(df)):
window = df.iloc[i - window_size:i].copy()
window["id"] = i # window identifier
window["time"] = range(window_size)
records.append(window[["id", "time", "close", "volume", "high", "low"]])
return pd.concat(records, ignore_index=True)
df_ohlcv = pd.read_csv("btc_1h.csv", parse_dates=["timestamp"])
df_rolled = prepare_rolling_windows(df_ohlcv, window_size=24)
features = extract_features(
df_rolled,
column_id="id",
column_sort="time",
n_jobs=8, # parallel extraction
disable_progressbar=False,
)
impute(features)
y = df_ohlcv["close"].pct_change(4).shift(-4).iloc[24:].reset_index(drop=True)
y_binary = (y > 0).astype(int)
features_selected = select_features(features, y_binary, fdr_level=0.05)
print(f"Selected {features_selected.shape[1]} features from {features.shape[1]}")
の select_features この関数は、Benjamini-Yekutieli 手順を適用して、機能バッテリー全体にわたる誤検出率を制御します。これは正しい本能であり、Defrated Sharpe の記事 と同じ本能が戦略検索にも当てはまります。それが「しない」ことに注意してください。特徴選択ステップの FDR 制御では、その後に続くモデル検索の試用コストについては何も示されません。これらは 2 つの別個の多重度であり、両方を支払う必要があります。
フィーチャーツール: ディープフィーチャー合成
tsfresh は時系列の特性評価に重点を置いていますが、Featuretools リレーショナル特徴量エンジニアリング、つまり関連するテーブル間で基本的な操作を構成することで特徴量を構築することに優れています。
取引の場合、取引履歴、オーダーブックのスナップショット、資金調達レート、オンチェーンメトリクスなどの複数のテーブルデータがある場合、これは強力です。 Featuretools は、変換プリミティブと集計プリミティブをスタックする深層特徴合成 (DFS) を適用します。
import featuretools as ft
es = ft.EntitySet(id="crypto_trading")
es = es.add_dataframe(
dataframe_name="candles",
dataframe=df_candles,
index="candle_id",
time_index="timestamp",
)
es = es.add_dataframe(
dataframe_name="orderbook",
dataframe=df_orderbook,
index="snapshot_id",
time_index="timestamp",
)
es = es.add_dataframe(
dataframe_name="funding",
dataframe=df_funding,
index="funding_id",
time_index="timestamp",
)
feature_matrix, feature_defs = ft.dfs(
entityset=es,
target_dataframe_name="candles",
agg_primitives=["mean", "std", "max", "min", "skew", "trend"],
trans_primitives=["percentile", "diff", "cum_mean"],
max_depth=2, # compose up to 2 primitives deep
features_only=False,
)
print(f"Generated {len(feature_defs)} features via DFS")
の time_index 宣言は負荷に耐えます。これにより、Featuretools はカットオフ時に存在した行のみを使用して集計を計算できるようになります。それを誤解すると、DFS は将来の機能、つまり 先読みバイアス分類 にカタログ化されたリークのリレーショナル データ インスタンスを喜んで構築します。
tsfresh (時系列特性評価) と Featuretools (リレーショナル合成) を組み合わせると、手動のインジケーター コーディングを行わずに生の市場データから数千の候補シグナルを生成するフィーチャー ファクトリが得られます。
予算を考慮した AutoML: FLAML
Optuna とツリー構造の Parzen 推定器を背景として想定します。導出、サンプラーの比較、ベンチマークは 座標降下とベイジアン最適化 にあります。 どのサンプラーに手を伸ばすかについては、このブログ独自の測定値が参照であり、民間伝承の答えではありません。クロスオーバーはアルゴリズムの賢さではなく、評価コストによって決まります。バックテストがほぼ無料の場合、スクランブルされた Sobol がスループットで勝ち (TPE では ~154 cfg/s に対して ~2,830 cfg/s)、サンプル効率が支払われるのは高価な評価だけです ([ランダム vs スマート]検索](/en/blog/post/search-method-crossover-eval-cost))。

そのフレーミングが、FLAML を競合するサンプラーではなく、別の軸にしているのです。 Optuna は 次にどこでサンプリングするかを尋ねます。 フラムル (高速軽量 AutoML) は、*そもそも何をサンプリングする余裕があるのかを尋ねます。 CFO (コスト倹約最適化) を使用して、時間内または計算予算内で最適なモデルを最適化します。CFO は、評価コストの低い構成を優先し、推定された限界利益が支出を正当化する場合にのみエスカレーションします。
from flaml import AutoML
from sklearn.metrics import make_scorer
import numpy as np
def sharpe_score(y_true, y_pred):
"""Custom scorer: Sharpe ratio of predicted signals."""
signal = np.sign(y_pred - 0.5)
returns = signal * y_true # y_true contains forward returns
if returns.std() == 0:
return 0.0
return np.sqrt(252) * returns.mean() / returns.std()
sharpe_scorer = make_scorer(sharpe_score, greater_is_better=True)
automl = AutoML()
automl_settings = {
"time_budget": 300, # 5 minutes
"metric": sharpe_scorer, # optimize the financial objective, not accuracy
"task": "classification",
"estimator_list": [
"lgbm", "xgboost", "rf", "extra_tree", "catboost",
],
"eval_method": "cv",
"split_type": "time", # time series split (no future leakage)
"n_splits": 5,
"log_file_name": "flaml_trading.log",
"seed": 42,
}
automl.fit(
X_train=X_train,
y_train=y_train,
**automl_settings,
)
print(f"Best model: {automl.best_estimator}")
print(f"Best config: {automl.best_config}")
from flaml.data import get_output_from_log
time_history, best_valid_loss_history, valid_loss_history, config_history, metric_history = \
get_output_from_log(filename="flaml_trading.log", time_budget=300)
取引における FLAML の利点は、異種モデル タイプ間での計算割り当てが可能であることです。 LightGBM 構成が CatBoost よりも 10 倍高速であると評価された場合、FLAML は早期にさらに多くの LightGBM を探索し、コストに見合ったわずかな改善が見込まれる場合にのみ切り替えます。これは、クロスオーバー記事からの安価な体制に関する洞察を一般化したものです。スループットは、検索予算の第一級の用語であり、実装の詳細ではありません。
軌跡ログは保存する価値のある部分です。 get_output_from_log 完全な設定履歴、つまり試行回数が表示されます。試行回数は、これから負うすべてのデフレへの入力となります。
トレーディング モデルのニューラル アーキテクチャの検索
Neural Architecture Search は、固定されたネットワーク トポロジの調整ではなく、ネットワーク トポロジの設計を自動化します。金融シリーズのアーキテクチャの選択はまったく明白ではありません。非定常性、低い S/N 比、混合周波数、数分から数か月にわたる依存関係はすべて異なる方向に引っ張られます。しかし、その動機はすでに別の場所で具体的に議論されています。TFT が LSTM に勝つとき、バニラ Transformer に勝つときについては、Temporal Fusion Transformer を参照してください。 DeepLOB CNN+Inception+LSTM のトレードオフについて。慎重に手作業で設計された固定アーキテクチャがすでに達成しているものについて。 NAS は、この選択自体を検索する必要があるという主張です。
「株価収益率予測のためのニューロエボリューションNAS」に関する研究(https://arxiv.org/html/2410.17212v1) は、EXAMM (メモリ拡張モデルの進化的探索) によって進化した RNN が、単純なロングショート戦略を使用した弱気市場 (2022 年) と強気市場 (2023 年) の両方で DJI と S&P 500 を上回ったと報告しています。これは、ここに再現された結果としてではなく、第三者の主張として扱ってください。これは、デフレが報告されていない、検索結果の最良の数字です。
取引用の NAS 検索スペース
取引モデルのための実用的な NAS 検索スペースには次のものが含まれます。
Search Space:
- Cell types: {LSTM, GRU, Temporal Conv, Transformer block, Linear}
- Number of layers: [1, 8]
- Hidden dimensions: {32, 64, 128, 256}
- Attention heads (if Transformer): {2, 4, 8}
- Dropout rate: [0.0, 0.5]
- Skip connections: {True, False}
- Normalization: {BatchNorm, LayerNorm, None}
- Activation: {ReLU, GELU, SiLU, Mish}
- Lookback window: {20, 60, 120, 252}
Microsoft の NNI (Neural Network Intelligence) を使用すると、この空間を定義して検索できます。
import nni
from nni.nas.nn.pytorch import LayerChoice, InputChoice
import torch
import torch.nn as nn
class TradingNASModel(nn.Module):
"""NAS-searchable model for financial time series."""
def __init__(self, input_dim: int, seq_len: int):
super().__init__()
self.input_proj = nn.Linear(input_dim, 128)
self.temporal_block = LayerChoice([
nn.LSTM(128, 128, num_layers=2, batch_first=True, dropout=0.1),
nn.GRU(128, 128, num_layers=2, batch_first=True, dropout=0.1),
nn.TransformerEncoder(
nn.TransformerEncoderLayer(d_model=128, nhead=4, batch_first=True),
num_layers=2,
),
], label="temporal_cell")
self.head = LayerChoice([
nn.Sequential(nn.Linear(128, 64), nn.ReLU(), nn.Linear(64, 1)),
nn.Sequential(nn.Linear(128, 32), nn.GELU(), nn.Linear(32, 1)),
nn.Linear(128, 1),
], label="prediction_head")
self.skip = InputChoice(n_candidates=2, n_chosen=1, label="skip_conn")
self.skip_proj = nn.Linear(input_dim, 128)
def forward(self, x: torch.Tensor) -> torch.Tensor:
h = self.input_proj(x)
out = self.temporal_block(h)
if isinstance(out, tuple):
out = out[0]
last = out[:, -1, :]
skip_val = self.skip_proj(x[:, -1, :])
last = self.skip([last, last + skip_val])
return self.head(last).squeeze(-1)
検索アルゴリズム (ENAS、DARTS、または進化的) は、財務目標を使用して検証セットに基づいて候補アーキテクチャを評価し、パフォーマンスの高いトポロジに向かって段階的に絞り込みます。この記事の他のすべてに対するコストの非対称性に注意してください。NAS は評価コスト軸のはるかに高価な端に位置しており、これはサンプル効率の高いサンプラーとマルチ忠実度のプルーニングが真に元を取れる 1 つの体制です。
WorldQuant Alpha Factory のアプローチ
WorldQuant のアルファ発見へのアプローチは、金融における AutoML 原則の最も産業規模な実装です。 Igor Tulchinsky によって設立された WorldQuant は、彼らが「アルファ ファクトリー」と呼ぶもの、つまり何百万もの予測シグナルを生成、テスト、結合する体系的なプロセスを運営しています。
哲学: 指数関数的アルファ生成とその修正
WorldQuant は 2010 年にアルファを 100 万個に達するという目標を設定しましたが、当時は年間数千個しか生産していませんでした。彼らは 2016 年にその目標を達成しました。その哲学は、アクティブ運用の基本法則に基づいています。
どこ は情報比率、 情報係数、および 幅 — 独立した ベットの数。一人ひとり 弱い予測子です。その主張は、相関の弱いものを十分に組み合わせると、小さな IC が意味のあるリスク調整済みリターンに複合化されるということです。
これを成否する修正、および数式の単純な解釈が隠れているという修正: 幅は試行回数ではありません。 は独立したベットをカウントしますが、生成されたアルファは独立していません。これらは同じ価格および出来高フィールド上の同じ演算子から構成されるため、相互の相関構造を継承します。このブログでは、信号相関 で効果を直接測定しました。有効幅は次のとおりです。 、そして典型的な暗号相関係数を使用 、10 個の信号は約 3.3 個の独立した信号に相当します。の 期間は、生成したアルファの数によって増加するわけではありません。それは、生き残った 無相関 なものの数に応じて増加します。 100 万の相関アルファは、公式が宣伝しているよりもはるかに少ない金額で購入できます。
これが、以下のステップ 3 (既存のライブラリとの無相関化) がアルファ ファクトリーにおける衛生的なステップではない理由です。そもそも幅を生み出すのはこのステップです。
101 の公式アルファ
論文 [「101 Formulaic Alphas」](https://arxiv.org/pdf/1601.00991)Kakushadze (WorldQuant Research と提携) により、一連の公式アルファ表現、つまり価格、出来高、および基本データに関する数式が公開されました。
Alpha#1: (rank(Ts_ArgMax(SignedPower(((returns < 0) ? stddev(returns, 20)
: close), 2.), 5)) - 0.5)
Alpha#7: ((adv20 < volume) ? ((-1 * ts_rank(abs(delta(close, 7)), 60))
* sign(delta(close, 7))) : (-1 * 1))
Alpha#42: (rank(vwap - close) / rank(vwap + close))
AutoML にとってこれが興味深いのは、これが 文法 であるということです。アルファは、小さな演算子セットの構成です (rank, delta, ts_rank, stddev, correlation, signedpower) 小さなフィールドセット (close, volume, vwap, returns, adv20)。文法は列挙可能です。これは、「良い特徴を考える」のとは異なり、検索スペースが機械生成可能であることを意味します。 AutoML システムでは次のことが可能です。
- データ フィールドに演算子を合成して 候補式を生成
- 各式の IC、ターンオーバー、ドローダウンを 評価
- 統計テストに耐え、かつ 既存のライブラリと十分に相関がない式を フィルター
- 生存者をポートフォリオに 結合します
ステップ 1 と 2 は簡単なステップであり、ステップ 3 が値の場所であることに注意してください。上記の幅の修正を参照してください。
LLM 拡張アルファ検出
WorldQuant は、大規模な言語モデルをアルファ ファクトリーに統合し始めました。経済新聞で報じられているように、同社はLLMがどのようにして「さまざまなドメインにわたるアルファを変換して発見する」ことができるのか、つまり新しい表現を生成し、研究論文を検証可能な仮説に変換し、純粋な列挙型検索では見逃してしまうようなクロスドメインの関係を明らかにすることができるのかを模索している。これは、テキストからシグナルを抽出するメカニズムとは異なります。このブログでは LLM Alpha Mining on Earnings Calls で説明しています。ここで、LLM は 特徴 ではなく 式 を書き込みます。
自分のミニアルファファクトリーを構築する
以下は、演算子文法上のコンパクトだが機能的なアルファ ファクトリです。
import itertools
from dataclasses import dataclass
from typing import Callable, List
import pandas as pd
import numpy as np
from scipy.stats import spearmanr
@dataclass
class Alpha:
name: str
expression: Callable[[pd.DataFrame], pd.Series]
ic: float = 0.0
turnover: float = 0.0
sharpe: float = 0.0
def ts_rank(series: pd.Series, window: int) -> pd.Series:
return series.rolling(window).apply(lambda x: pd.Series(x).rank().iloc[-1] / len(x))
def ts_delta(series: pd.Series, period: int) -> pd.Series:
return series.diff(period)
def ts_std(series: pd.Series, window: int) -> pd.Series:
return series.rolling(window).std()
def cs_rank(series: pd.Series) -> pd.Series:
return series.rank(pct=True)
def ts_mean(series: pd.Series, window: int) -> pd.Series:
return series.rolling(window).mean()
ALPHA_TEMPLATES = [
("momentum_{w}",
lambda df, w: cs_rank(ts_delta(df["close"], w))),
("mean_reversion_{w}",
lambda df, w: -cs_rank(df["close"] / ts_mean(df["close"], w) - 1)),
("vol_surprise_{w}",
lambda df, w: cs_rank(df["volume"] / ts_mean(df["volume"], w))),
("price_vol_divergence_{w}",
lambda df, w: cs_rank(ts_delta(df["close"], w)) * -cs_rank(ts_delta(df["volume"], w))),
("volatility_rank_{w}",
lambda df, w: -cs_rank(ts_std(df["close"].pct_change(), w))),
("high_low_range_{w}",
lambda df, w: cs_rank(ts_mean(df["high"] - df["low"], w) / df["close"])),
]
WINDOWS = [5, 10, 20, 60, 120]
def generate_alphas(df: pd.DataFrame, forward_returns: pd.Series) -> List[Alpha]:
"""Generate and evaluate all alpha candidates."""
alphas = []
for (name_tpl, expr_fn), window in itertools.product(ALPHA_TEMPLATES, WINDOWS):
name = name_tpl.format(w=window)
try:
signal = expr_fn(df, window)
signal = signal.replace([np.inf, -np.inf], np.nan)
valid = signal.notna() & forward_returns.notna()
if valid.sum() < 100:
continue
ic, _ = spearmanr(signal[valid], forward_returns[valid])
turnover = signal.diff().abs().mean()
ret = (signal * forward_returns).dropna()
sharpe = np.sqrt(252) * ret.mean() / (ret.std() + 1e-9)
alphas.append(Alpha(
name=name,
expression=lambda df, fn=expr_fn, w=window: fn(df, w),
ic=ic,
turnover=turnover,
sharpe=sharpe,
))
except Exception:
continue
alphas.sort(key=lambda a: abs(a.ic), reverse=True)
return alphas
5 つのウィンドウにわたる 6 つのテンプレートは、30 の構成のスイープになります。生成されるレポートは次の 概略 の形状になっています。フィールドは工場が出力するものであり、ここでは何も測定されていないため、数値は入力されていません。
SCHEMATIC — illustrative format only, not a measurement
Generated <N> alphas from <N> candidate configurations
Top by |IC|:
<alpha_name> IC=<±0.0xxx> Sharpe=<±x.xxx> Turnover=<0.0xxx>
...
30 の構成スイープからの上位アルファの生のシャープは 結果ではありません。これは 30 回のドローの最大値であり、1,000 のゼロエッジ戦略では、最良の年換算シャープは平均 1.63 ですが、単純なテストでは 100% の確率で発見が宣言されます (デフレートされたシャープ比)。したがって、工場からの正直な成果物は、「アルファを見つけた」ということではなく、デフレから生き残ったアルファの数、つまり IC 分布、試行回数、その回数に対する勝者の DSR、および選択の PBO です。それが、このセクションが依然として負っている評価です。
ガードレール: すでに負っているもの
AutoML は発見と過学習を同等に増幅し、違いが微妙でなくなる試行回数で増幅します。これらのそれぞれについては、別の場所で詳しく説明されています。ここで重要なのは、AutoML ではそれらすべてが推奨されるのではなく、必須になっているということです。
単に修正するだけではなく、検索に価格を設定してください。 特徴モデルのハイパーパラメータ スイープは試行回数であり、試行回数によってバーが移動します。デフレートされたシャープ レシオ を参照してください。
パージとエンバーゴを使用して、一時的に検証します。 単純な時間分割後に生き残ったリークについては、ウォークフォワード最適化 および 先読みバイアス分類 を参照してください。
勝者だけでなく手順にスコアを付けます。 バックテストの過適合の確率 を参照し、その耐荷重補正を実行します。 PBO のヌルは 1 ではなく 0.5 です — 半分は「半分過適合」ではなく、完全に過適合、つまりコイン投げです。
存在しないピークに注意してください。 ノイズが支配的な表面を効率的に検索すると、より鮮明な錯視がより速く見つかります (プラトー分析)。これは戦略パラメータに最も強く食い込みますが、ML ハイパーパラメータには最も食い込みません。これは、FLAML と Optuna が実際に構築されているケースに当てはまります。
検索スペースを制限します。 リーフ サンプルの最小値、深さと推定量の上限、機能バジェット、売上高ペナルティ - 検索を正規化することは、後で検索を縮小するよりもコストがかかりません。
結論
AutoML は、固定候補内のパラメーターの調整から候補自体の生成まで、自動化を 1 つ上のレベルに引き上げます。 3 つのコンポーネントには、努力する価値があります。特徴生成のための tsfresh と Featuretools、予算を考慮したモデル選択のための FLAML のコスト倹約検索、および数えられるアルファ構築のための定型演算子文法です。 NAS は、信号対雑音比が正当である場合にのみコンピューティングの価値があり、サンプル効率が最終的に支払われる評価コスト軸の高価な端に存在します。
WorldQuant の幅に関する議論は、このブログ独自の測定結果と接触しても、修正された形でのみ存続します。 どこ 独立した賭け金をカウントしており、工場の生産物は独立とは程遠いものです。 100 万のアルファを生成するのは簡単な半分です。それらが幅としてカウントできるほど相関がないことを確立することが、式が意味を持っているかどうかを決定する半分になります。
そして、正直な警告は道徳的なものではなく、測定された結果です。このブログでは、The Honest Negative で結論に至るまでの検索とオーバーフィットのアークを実行しました。5 つのメジャーにわたる数万のバックテスト、約 37,000 回の試行で DSR = 0.00、PBO 0.264 および 0.327、ロバスト エッジはありません。 AutoML は試行回数を桁違いに増やします。何が見つかっても、それに応じてより大きなデフレを負うことになります。そして、アルファ工場の有益な生産物は、デフレ前の利益ではなく、デフレ後の生存率です。
Authors
Trading-systems engineer
Trading-systems engineer building bots since 2017: cross-exchange arbitrage (connected up to 30 venues), cointegration-based pairs arbitrage across spot and futures, scalping, news and sentiment-driven strategies, trend algorithms, and portfolio management and balancing algorithms. Also builds sub-millisecond order execution, big-data warehouses, backtesting engines, AI agents, and trading interfaces (incl. open-source profitmaker.cc). Stack: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, architecture.