Quantum Queen X のソースコードを読んだ:バックテストを静かに描き直す 3 つのハードコード日付テーブル
Quantum Queen X v4.3 のソースには 51 個の具体的な過去の日付が埋め込まれています。24 日は新規建て禁止、8 日は利確幅を 15 倍、19 日は 5 倍。すべて過去の日付で、最後の 1 件はビルド日直前。つまりバックテストしか書き換えられず、将来の 1 日にも作用しません。原文のコードを引用しながら、なぜこれが最適化ではなく不正なのかを解説します。

当店は Quantum Queen X を販売しています。実際、当店で最も売れているゴールド EA の一つです。だからこそ、v4.3 のソースコードを入手し、整理して単独で販売する準備をした際に読み取った内容は、そのままお伝えしなければなりません。
結論から述べます。この EA のコードには、51 個の具体的な過去の日付が直接書き込まれています。それは 3 つのテーブルに分かれており、24 個の日付では一切ポジションを建てず、8 個の日付では利確距離を 15 倍に、19 個の日付では 5 倍にします。すべてすでに過ぎ去った日付であり、しかも最後の 1 件は v4.3 のビルド日のすぐ隣にあります。
これはパラメータ最適化ではなく、「ニュースフィルター」でもありません。相場がどう動いたかを知ったうえで、過去の売買行動を書き換えているのです。学術的には先読みバイアス(look-ahead bias)、平たく言えば不正です。以下、コードを順に引用します。
第 1 の証拠:24 個の「この日は取引禁止」
時間フィルター ScheduleAllowsTrading() の末尾、曜日・雇用統計の金曜日・金曜夜の停止といった正当なルールを処理したあとに、次のコードが続きます。
static int pause_dates[24]=
{
20200203, 20200807, 20220125, 20220308, 20220309, 20221227,
20230310, 20230313, 20230614, 20230731, 20240703, 20240705,
20240730, 20241015, 20250226, 20250730, 20251024, 20260128,
20260129, 20260202, 20260223, 20260323, 20260402, 20260428
};
int ymd = now.year * 10000 + mmdd;
for(int i = 0; i < ArraySize(pause_dates); i++)
if(ymd == pause_dates[i])
return false; // この日は 12 戦略すべてが新規建てしない
return true;
このコードは何も判定していません。経済カレンダーも読まず、ボラティリティも測らず、スプレッドも見ません。サーバー日付を 20230310 のような整数に整形し、固定リストと照合するだけです。
本物のニュースフィルターとはルールです。「重要指標の前後 30 分は新規建てしない」といったルールは、過去にも未来にも等しく作用します。しかしリストは、リストに載っている日にしか効きません。そしてある日をリストに載せるには、その日に何が起きたかをすでに知っている必要があります。
結果は外科手術のように綺麗です。バックテストがこの 24 日に差しかかると EA は何もせず、それらの日が本来もたらしたはずの損失は損益曲線から消え去ります。そして 2026 年 4 月 28 日より後は、このテーブルが再び一致することは決してありません。実口座では死んだコードです。
第 2 の証拠:8 日は利確 15 倍、さらに 19 日は 5 倍
こちらはより直接的です。バスケットの目標価格は本来「保有加重平均価格 ± 固定ポイント数」ですが、その固定ポイント数に乗数が差し込まれています。
static int dates_x15[8]=
{
20210204, 20210603, 20210701, 20220119,
20250123, 20250127, 20250402, 20250724
};
static int dates_x5[19]=
{
20210112, 20210121, 20210312, 20210512, 20210907,
20211116, 20220301, 20220309, 20220602, 20250205,
20250210, 20250226, 20250227, 20250624, 20260122,
20260220, 20260319, 20260420, 20260610
};
int multiplier = 1;
for(int i = 0; i < ArraySize(dates_x15); i++)
if(ymd == dates_x15[i]) { multiplier = 15; break; }
if(multiplier == 1)
for(int i = 0; i < ArraySize(dates_x5); i++)
if(ymd == dates_x5[i]) { multiplier = 5; break; }
double average = weighted_price / total_volume;
g_basket_target_price[slot] = NormalizeRecoveredPrice(
direction > 0 ? average + target_points[slot] * multiplier * _Point
: average - target_points[slot] * multiplier * _Point);
数字にしてみましょう。小数点以下 2 桁の XAUUSD では 1 ポイント = 0.01 ドルです。戦略 1 の target_points は 50、つまり 0.50 ドルの値幅で利確します。×15 の日付に当たると、これが 7.50 ドルになります。戦略 9 の 200 ポイント(2.00 ドル)は 30.00 ドルです。
普段は 50 セントを取って逃げるのに、この特定の 8 日間だけ突然忍耐強くなり、15 倍の距離まで持ち続けるわけです。
公平を期して言えば、利確幅を広げれば必ず勝てるわけではありません。方向が逆なら決済されず、ナンピンを続けるだけです。しかし問題は「利確幅を広げること」ではなく、なぜこの 8 日なのかです。実行時のプログラムに、今日が大きな一方向の相場になるかを知る手段はありません。それを知りうるのは、過去のチャートを遡って日付を選んでいる作者だけです。
なぜこれが「最適化」ではなく不正なのか
パラメータ最適化は正当です。DeMarker の期間やグリッド幅を調整すれば、得られるのはすべての日付を等しく扱う数値であり、アウトオブサンプルでどれだけ劣化するかは誰もが理解しています。
しかし日付のハードコードは別物で、致命的な特徴が 3 つあります。
- 過去にしか作用しない。3 つのテーブルに合計 51 個の日付があり、最も新しいものは 2026 年 6 月 10 日。一方 v4.3 のバージョン表記にはビルド日 22/07/2026 とあります。つまりテーブルはリリース直前まで更新され続けており、リリース後は二度と一致しません。
- アウトオブサンプル検証ができない。過去にしか作用しないからこそ、フォワードテストでは測定できません。将来への寄与は恒等的にゼロです。バックテスト上のその利益は、二度と再現しません。
- 購入者からは見えない。ソースコードを手にして初めてテーブルの存在がわかります。ストアに並ぶのは加工された曲線で、加工の手口はコンパイル済みバイナリの中に封じられています。
言い換えれば、テスターで評価する曲線と、実口座で得られる曲線は、同じルールから生まれていないのです。これこそが問題の核心です。
日付テーブルを削っても、残る構造はやはり過剰最適化
12 戦略のうち半数が、1 日のうち特定の 1 時間しか取引しない
bool StrategyHourAllowed(const int slot, const int hour)
{
switch(slot)
{
case 0: return hour == 22 || hour == 23;
case 1: return hour == 3; // この 1 時間だけ
case 2: return hour == 22;
case 3: return hour == 19;
case 4: return hour == 0;
case 5: return hour == 23;
case 6: return hour >= 8 && hour <= 10;
case 7: return hour >= 6 && hour <= 11;
case 8: return hour >= 10 && hour <= 13;
case 9: return hour == 22;
case 10: return hour >= 4 && hour <= 8;
case 11: return hour == 8 || hour == 9;
}
return false;
}
「この戦略は 03:00 台にしか新規建てしない」というルールに、市場構造上の根拠はありません。過去データから探索して出てきた数字です。さらに戦略ごとの指標設定が重なります。
g_demarker_a[0] = iDeMarker(_Symbol, PERIOD_M6, 18);
g_demarker_b[0] = iDeMarker(_Symbol, PERIOD_M15, 16);
g_demarker_a[1] = iDeMarker(_Symbol, PERIOD_M15, 14);
g_demarker_b[1] = iDeMarker(_Symbol, PERIOD_M20, 20);
// ... 合計 24 ハンドル
static double upper_a[12]={0.7,0.7,0.7,0.7,0.7,0.7,0.9,0.5,0.9,0.7,0.7,0.7};
static double lower_a[12]={0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.1};
M6、M10、M12、M20 という非標準の時間足に注目してください。MT5 の既定チャートには 6 分足も 20 分足も存在しません。これらを選ぶ取引上の理由はなく、理由はただ一つ、パラメータ探索でたまたま成績が良かったからです。しきい値も同様で、大半は 0.7/0.3 なのに戦略 7 は 0.9、戦略 8 は 0.5、戦略 12 の下限は 0.1。こうした孤立した例外値は「このマスを少しいじると曲線が滑らかになる」の痕跡そのものです。
自由度をざっと数えます。各戦略はエントリー時間足、2 組の(指標時間足 + 期間 + 上限 + 下限)、時間帯、グリッド幅、利確距離を持ち、およそ 13 個の可変数値。12 戦略で約 150 個、それらすべてが XAUUSD という単一銘柄への当てはめに使われています。
12 戦略中 8 つが買い専用、しかも損切りは 1 つもない
int StrategyDirection(const int slot)
{
...
if(slot == 4 || slot == 5 || slot == 10 || slot == 11)
return -1;
return 1; // 残り 8 戦略は買いのみ
}
// 発注:第 4・第 5 引数が SL と TP。どちらも 0 を渡している
g_trade.Buy(volume, _Symbol, 0.0, 0.0, 0.0, SafeComment(slot));
12 戦略のうち 8 つが買い専用です。これに損切りなしのグリッドナンピン(1 戦略あたり最大 100 ポジション)を組み合わせ、ゴールドが 1,500 から 3,000 超へ上昇した 2020〜2026 年に適用すれば、バックテストで損をするほうが難しい組み合わせになります。測定されているのは戦略ではなく、この相場局面そのものです。この構造のリスクについては別記事があります:グリッド/マーチンゲール EA はどれほど危険か。
付け加えると、唯一のブレーキである InpDDMode(ドローダウン保護)は既定でオフです。
ブローカーを変えると、有効な戦略の組み合わせが変わる
if(InpSets == QQ_PRESET_ICVT_HIGH)
return slot==0 || slot==1 || slot==2 || slot==4 || slot==5 ||
slot==7 || slot==8 || slot==9 || slot==11;
if(InpSets == QQ_PRESET_ICVT_MEDIUM)
return slot==0 || slot==2 || slot==7 || slot==8 || slot==11;
if(InpSets == QQ_PRESET_ROBO_ECN)
return slot==0 || slot==2 || slot==3 || slot==4 || slot==5 ||
slot==7 || slot==8 || slot==9 || slot==11;
宣伝されている「ブローカー専用セットファイル」の実体は、ブローカーごとに有効化する戦略番号の組み合わせを差し替えているだけです。ブローカー間の実際の差はスプレッド・手数料・約定品質であり、それらはコスト側のパラメータに反映されるべきもので、「A 社では戦略 6 を有効、B 社では無効」という形を取るものではありません。各社のヒストリカルデータに対して個別に最適化探索を回した結果と読むのが自然です。
当店が公開するソースコードについて
念のため申し添えます。当店が販売するのは作者から提供された v4.3 のオリジナル MQL5 ソースコードです。行ったのは可読性のための整理のみ——コメントを英語に統一し、ライセンスおよび試用期間の検証を削除し、6 組の並列配列に分散していた 12 戦略を 1 枚の設定テーブルに統合し、ティックごとに 30 回以上あったポジション再走査を 1 回のスナップショットにまとめました。
戦略パラメータ表、時間帯ルール、シグナルのしきい値、決済ロジックの数値は一つも変更していません——本記事が批判している 3 つの日付テーブルも含めてです。1 行も削除せず、ソースパッケージにそのまま残し、同梱の README で名指しして示しています。何かを批判するのなら、読者が自分で開いて確かめられるようにすべきだからです。
ご自身で検証する 3 ステップ
- ソースを開き、
2021で検索する。3 つのテーブルは設定セクションに丸見えで置かれています。特別なツールは不要です。 - それらを削除して、同じバックテストをもう一度回す。
multiplierを常に 1 にし、pause_datesを空にしたうえで、同一の銘柄・時間足・期間・リアルティックモードで再実行し、2 本の曲線を並べます。その差が、3 つのテーブルの「貢献分」です。自分を欺かないテスト設定についてはMT5 バックテストの正しい手順をご覧ください。 - バックテストではなく、作者のライブシグナルを見る。実口座ではこれらのテーブルは 1 日も一致しないため、ライブの曲線こそがこの戦略の正直な実力です。シグナルページの読み方の落とし穴はMyfxbook での EA 検証にまとめています。
では、なぜ当店はそれでも販売するのか
高潔を装うつもりはありません。Quantum Queen X はきちんと動くグリッド EA で、トレンドが味方する間は実際に利益を出しますし、ライブシグナルは公開され検証可能です。当店はこれを販売し、同時に次の 3 つを行います。
- 価格を正す。当店では $110 です。加工されたバックテストで正当化される価格帯ではありません。
- リスクを明示する。商品ページには、グリッドでポジションを積み増すこと、極端な一方向の値動きで含み損が急拡大することを明記しています。当店自身のドローダウンも公開しています。
- 誰でも検証できるようソースを公開する。3 つの日付テーブルは 1 行も削っていません。ソースコード商品にそのまま残してあります。批判するのであれば、その対象を見えるようにするのが筋です。
いま損益曲線を眺めている方へ最後に一言。2020 年から今日まで大きなドローダウンなしに伸びた曲線を前にして問うべきは、「どれだけ稼ぐか」ではなく「すでに答えを知っていたのではないか」です。この問いに答えられるのは、ソースコードだけです。
リスクに関する注意:本記事はソースコードに基づく技術的分析であり、投資助言ではなく、作者の行為に対する法的評価を下すものでもありません。EA および定量戦略はいずれも損失の可能性があり、外国為替および貴金属取引は高リスクです。失っても許容できる資金でのみお取引ください。
本記事でレビューした EA
「Quantum Queen X Source Code v4.3 クラック版 / 無料ダウンロード / ライセンス解除版」をお探しですか?
クラック版の EA にはバックドアやマルウェアが仕込まれ、ロジックが密かに改ざんされたまま更新も受けられません。ライセンス料を一度節約するために、取引口座全体とパソコンに保存したすべてのパスワードを危険にさらすことになります。海賊版 EA を絶対に使ってはいけない理由 →当店の Quantum Queen X Source Code v4.3 は正規ソフトウェアです。Myfxbook で検証可能な実績と、継続的なバージョン更新が付きます。
あわせて読みたい
UBS runs dozens of independent breakout sub-strategies from a single chart. Live at 11 weeks: +16.18%, 543 trades, profit factor 1.27, 11% max drawdown. More important than the numbers: without the autoloader your backtest will be wrong — which is how this EA gets misjudged.
We read every line of Quantum King 3.1's MQL5 source and compiled it. No licence checks, no trial timer, no hardcoded date tables — which is rarer than it should be. But it attaches no stop loss by default and every account-level guard ships disabled. Here's the mechanism and the boundaries.
The Gold Reaper is that rare gold EA with no grid, no martingale and a stop loss on every trade. The author's live signal has run 92 weeks: +261.56%, 71.95% win rate, 16.05% max drawdown. Here's how the strategy works, how to read that record, and who it does and doesn't suit.
