このサイトのEA記事群では、
「損切りを必ず指定する」ことを、
ほぼ毎回繰り返し指摘してきました。
それだけ、損切り(StopLoss)の設定忘れは、
実運用で最も起こりやすく、かつ最も被害が大きいミスだからです。
この記事では、固定pips・ATRベース・リスク%ベース・トレーリングストップという、
4つの損切り設定方法を既刊記事のコードへのリンクとともに一覧化し、
さらに「設定し忘れている状態」そのものを、
検知・可視化する方法までチェックリストにまとめます。
・損切りの決め方4パターン(固定pips/ATR/リスク%/トレーリング)
・それぞれの既刊コードへのリンク
・損切り未設定を検知・可視化する方法
・運用前に確認すべきチェックリスト
なぜこのチェックリストが必要なのか
まず、このチェックリストを作った理由を確認します。
EA記事群で繰り返し指摘してきた最頻出の問題
このサイトのEA記事では、
発注部分のコード例で損切り(`sl`)・利確(`tp`)を、
必ず指定するよう毎回注意書きを入れてきました。
それだけ事故が起きやすいという裏返し
・損切りを指定しないOrderSendはコンパイルエラーにならない
・つまり『動くけど危険なコード』が成立してしまう
・見た目では分からないため、チェックリストでの確認が必要になる
この記事の使い方
個々の方法の詳しいコードは既刊の個別記事に任せ、
この記事では「どの方法を、どういう場面で選ぶか」の全体像を整理します。
損切りの決め方チェックリスト(一覧表)
まず全体像を一覧表で確認します。
4つの決め方の比較表
| 決め方 | 特徴 | 既刊記事 |
|---|---|---|
| 固定pips | 実装が最も簡単、通貨ペア・時間足ごとの調整が必要 | EA記事群全般(例: force-index-cross-ea-mt4.md) |
| ATRベース | ボラティリティに応じて自動で幅が変わる | iatr.md |
| リスク%ベース | 損切り幅からロット数を逆算、資金管理と直結 | lot-size-by-risk-percent-mt4.md |
| トレーリングストップ | 含み益が出た分だけ損切りを近づける、遠ざけない設計が必須 | parabolic-sar-trailing-stop-ea.md |
どの方法を選ぶか迷ったら
まず固定pipsで動かしてみて、
通貨ペアを増やす段階でATRベースかリスク%ベースへ移行する、
という順序が無理のない進め方です。
固定pips・ATRベースの損切り幅
最も基本的な2つの方法を確認します。
固定pipsでの指定(基本形)
double sl = Ask - InpStopLossPips * point; OrderSend(_Symbol, OP_BUY, InpLots, Ask, 3, sl, tp, "Comment", InpMagic, 0, clrBlue);
このサイトのEA記事群の多くが、
この形で損切り(`sl`)を発注時点に必ず指定しています。
ATRベースでの指定(ボラティリティ対応)
double atr = iATR(_Symbol, 0, InpAtrPeriod, 0); double sl = Ask - atr * InpAtrMultiplier;
既刊iatr.mdで扱った`iATR()`の値に倍率をかけることで、
値動きが大きい時間帯・通貨ペアほど損切り幅も自動的に広がります。
固定pipsとATRベースの使い分け
固定pipsは実装が簡単な分、
通貨ペアや時間帯が変わるたびに手動で調整が必要です。
ATRベースは実装がやや複雑になりますが、
一度組めば調整の手間が減ります。
リスク%ベース・トレーリングストップ
資金管理と直結する2つの方法を確認します。
リスク%ベースでロットと損切りを逆算する
既刊lot-size-by-risk-percent-mt4.mdでは、
「損失額を口座残高の2%に固定する」という考え方で、
損切り幅からロット数を逆算する設計を解説しています。
発注せずに確認だけしたい場合
既刊のリスク%ベース計算専用インジケーター記事は、
発注を伴わず、
ドラッグ可能なSLラインから推奨ロット数だけを表示する確認専用の設計です。
トレーリングストップは「近づける」方向にしか動かさない
・既刊parabolic-sar-trailing-stop-ea.mdで指摘した通り
・SARの値をそのままOrderModifyに渡すと損切りが『遠ざかる』事故が起きる
・含み益を守る方向にしか更新しないガード条件が必須
損切り未設定を検知・可視化する仕組み
「決め方」だけでなく「設定し忘れていないか」を確認する方法も重要です。
手動トレードでの可視化
既刊stoploss-distance-indicator.mdは、
保有中のポジションの損切りラインまでの距離をpips換算で画面に常時表示し、
損切り未設定のポジションも一目で分かるようにするインジケーターです。
ドラッグ可能なラインで直感的に動かす
既刊object-get-set-double-mt4.mdの、
`CHARTEVENT_OBJECT_DRAG`を使ったドラッグ可能な価格ラインは、
損切りラインをチャート上で直感的に動かす運用に応用できます。
発注失敗そのものを検知する
損切り付きで発注しても、
ブローカーの最小ストップ距離制限で発注自体が失敗することがあります。
既刊get-last-error.mdの
`GetLastError()`と`ResetLastError()`を、
OrderSendの戻り値チェックと組み合わせて失敗を検知してください。
運用前の最終チェックリスト
実際に運用を始める前に、確認しておきたい項目です。
コードレビューで確認する項目
・OrderSendの`sl`引数が0や未指定になっていないか
・損切り幅がブローカーの最小ストップ距離以上か
・OrderModifyで損切りを更新する場合、遠ざける方向に動いていないか
・発注失敗時にGetLastError()でエラーコードを確認しているか
バックテストで確認する項目
ストラテジーテスターの「結果」タブで、
すべての決済が損切り(`SL`)または利確(`TP`)によるものか、
意図しない理由での決済が混ざっていないかを確認してください。
実運用前の最終確認
デモ口座で最低数日動かし、
実際に損切りで決済される場面を一度は目視で確認することを推奨します。
よくある質問
損切りの実装について、よく検索される疑問に回答します。
・最初は固定pipsで動かし、慣れてからATR・リスク%ベースへ移行する
・複数の通貨ペアで同じEAを動かす場合は固定pipsをそのまま使わない
・トレーリングストップは必ず『近づける方向』のガード条件を入れる
損切りを指定しなくてもコンパイルは通りますか?
通ります。
`OrderSend()`の`sl`引数に0を渡しても、
コンパイルエラーにはなりません。
これが「見た目では分からない危険なコード」になる理由です。
固定pipsとATRベース、どちらから始めるべきですか?
まず固定pipsで動作を確認し、
複数の通貨ペアや時間帯で運用する段階になったら、
ATRベースへ移行する進め方を推奨します。
MQL5でも同じチェックリストは使えますか?
考え方自体はそのまま使えます。
MQL5では`OrderSend()`が構造体ベースに変わるため、
発注時の損切り指定方法は既刊ordersend-mql5.mdを参照してください。
【MQL4/MQL5共通】損切り(StopLoss)を絶対に忘れないための実装チェックリストについてまとめてみた:まとめ
この記事では、固定pips・ATRベース・リスク%ベース・トレーリングストップという、
4つの損切りの決め方を一覧化し、
既刊記事のコードへのリンクとともに整理しました。
さらに、損切りを「設定し忘れている状態」そのものを検知・可視化する方法まで、
運用前の最終チェックリストとしてまとめています。
コメント