第5章【中編】:いくつもの波紋 — 独立多層ロジックの胎動
四、共食いするポジションと、深夜の冷汗
2023年、初夏。
複数の独立したアプローチを組み合わせた多層防衛エンジンを組み上げ、期待を胸に回したバックテスト。
しかし、画面のローソク足の上で起きていたのは、私の理想とはかけ離れた「破滅的なポジションの共食い」だった。
相場がわずかに揉み合い、テクニカル指標の条件が重なった瞬間、複数のロジックが一斉に「買い」や「売り」のトリガーを引いてしまう。
わずか数ピップスの極めて狭い価格帯の中に、4つ、5つとポジションが塊のように密集してエントリーされていたのだ。
「これじゃあ、どんなにロジックを多角化しても意味がない……!」
画面を睨みつけながら、私は冷汗を拭った。
ポジションが同じ場所に固まっている状態で相場が逆行すれば、すべてのポジションが同時に含み損を雪だるま式に膨らませ、一瞬で口座維持率を食いつぶしてしまう。
それは、多層防衛どころか、過去の自分が裁量で血迷って連打した「破滅のナンピン」と構造的に何一つ変わらない姿だった。
「独立したエンジンたちが、お互いの存在を知らずに勝手に注文を出すからこうなるんだ。
船全体のバランスを見張り、ポジション同士が絶対に近づきすぎないように統制する『司令塔のコード』を組み込まなければならない」
五、20pipsの結界 — CanOpenNewLine の誕生 —
営業車の中で信号待ちをしている間も、夜にMetaEditorの黒い画面に向き合っている間も、私の頭はその安全装置のアルゴリズムで埋め尽くされていた。
「新しいポジションを開く時、すでに保有している既存のポジションから『一定以上の距離』が離れていなければ、どんなにエントリーサインが出ても絶対に注文を弾く仕組みを作ればいい」
私はキーボードを叩き、新しい判定関数のプログラミングに取り掛かった。
//+------------------------------------------------------------------+
//| 新規ライン開放判定:既存ポジションとの最小距離をチェック |
//+------------------------------------------------------------------+
bool CanOpenNewLine(int cmd, double minDistancePips)
{
for(int i = OrdersTotal() - 1; i >= 0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == InpMagicNumber)
{
if(OrderType() == cmd)
{
// 既存の1本目ポジションとの距離(pips)を計算
double distance = MathAbs(OrderOpenPrice() - (cmd == OP_BUY ? Ask : Bid)) / Point / 10;
if(distance < minDistancePips)
{
return false; // 指定距離未満ならエントリーを拒否(重複防止)
}
}
}
}
}
return true; // 十分な距離が確保されている場合のみ開放許可
}
試しに設定した最小距離は20.0pips。
既存のポジションから最低でも20.0pip以上相場が動いていなければ、どれほど魅力的なエントリーサインが点灯しようとも、プログラムは冷徹にエントリーをキャンセルする。
狭いエリアでのポジション密集を物理的に不可能にし、相場の波に対して常に「広大で安全な間隔」を保たせるための絶対的な結界コードだ。
狭い部屋に兵士をすし詰めにしたら一網打尽にされる。だからこそ、20歩以上離れた場所にしか次の兵士を配置しない『ソーシャルディスタンスの分散防衛網』を敷くのだ。
「これだ……! これでポジション同士の共食いは完全に防げる!」
コンパイルボタンを押し、エラーゼロのログを確認した私は、震える手で再びバックテストを起動した。
六、秩序を取り戻したチャート — 散開する防衛網 —
テスターの画面上で、ローソク足が再び激しく波打ち始めた。
先ほどまでのように、狭い価格帯に団子状にポジションが固まることは二度となかった。
相場が一方へ伸びたとしても、CanOpenNewLineの制御によって、各ポジションは綺麗に20.0pip以上の均等な間隔を開けて規則正しく配置されていく。
【重複防止機構(CanOpenNewLine)導入後の挙動】
・Position 1: 0.9000(第1層がエントリー)
・Position 2: 0.9025(25pip離れた位置で第2層がエントリー)
・Position 3: 0.9050(さらに25pip離れた位置でエントリー)
⇒ ポジションが綺麗に分散され、急激な逆行時でも平均取得単価(アベレージ)が
極めて有利な位置へと自然に引き上げられる。
ポジションが密集しないため、相場が大きく逆行しても証拠金維持率の急落が完全に抑え込まれる。
そして、相場がわずかに反転した瞬間、分散して配置されたポジション群が絶妙なテコの原理を生み出し、一気にプラス決済へと滑り込んでいく。
「美しい……」
モニターに映る秩序あるトレード履歴を見つめ、私は思わず呟いた。
多層アプローチによる波の捕獲と、CanOpenNewLineによる物理的な重複防止。
互いの弱点を完璧に補い合うこの2つの歯車が噛み合った瞬間、私の自作システムは単なる「プログラムの塊」から、相場の荒波をものともしない、真の「不沈艦の骨格」へと決定的な進化を遂げたのだった。