無料でロボットをダウンロードする方法を見る
Facebook上で私たちを見つけてください。
私たちのファンページに参加してください
私たちのファンページに参加してください
スクリプトを気に入りましたか?MetaTrader 5ターミナルの中でそれを試してみてください。
- ビュー:
- 15
- 評価:
- パブリッシュ済み:
-
このコードに基づいたロボットまたはインジケーターが必要なら、フリーランスでご注文ください フリーランスに移動
取引を自動化するトレーダーなら誰でも、遅かれ早かれエラー130「無効なストップ」に遭遇したり、注文がまったく成立しなかったりすることがあります。その際の一般的な反応は、EAのせいにすることです。しかし、ほとんどの場合、EA自体に問題はなく、サーバー側が契約上の制限を適用しているのです。
が適用されているのです。これらは、ターミナルウィンドウには一切表示されません。ストップレベル、フリーズレベル、あるいはポジションサイジングが遵守していない最小ロットステップなどが該当します。これらの制限は銘柄やブローカーごとに異なり、予告なく変更されることもあります
通知なしに変更されることがあります。このスクリプトは、それらを表示します。
どのチャートにも読み込めます。このツールは仕様情報の読み取りのみを行い、ファイルの開く・変更・閉じるといった操作は一切行いません。また、アルゴリズム取引を有効にする必要もありません。カンマ区切りの銘柄リストを指定するか、入力欄を空のままにしておくと、マーケットウォッチで選択されている銘柄を順に処理します。
印刷内容
--- XAUUSD (bid 4402.15 / ask 4402.63) --------------------- stops level 350 pts | freeze level 0 pts | EFFECTIVE band 351 pts VERDICT: a stop/pending placed 100 pts from price would be REJECTED as 'Invalid price' (band is 351 pts) buy at ask 4402.63: you asked SL 4401.63 -> nearest legal SL 4399.12 (moved out)
最後の行が特に参考になります。この行は、単にこの銘柄で100ポイントのストップが成立しないことを伝えるだけでなく、サーバーが代わりに受け入れる正確な水準も示しています。
ルール
2つの異なる制限条件によってストップ注文が拒否される可能性があり、そのうちの1つしかチェックしないツールでは、ブローカーの半数において誤った結果が出てしまいます:
double MinStopDistance(const string sym) { long stops = SymbolInfoInteger(sym, SYMBOL_TRADE_STOPS_LEVEL); long freeze = SymbolInfoInteger(sym, SYMBOL_TRADE_FREEZE_LEVEL); long band = (stops > freeze ? stops : freeze) + 1; return band * SymbolInfoDouble(sym, SYMBOL_POINT); }
この4行の中に、3つの決定が詰め込まれている。
このバンド幅は2つの制限のうち「より大きい」方です。なぜなら、一部のサーバーではフリーズをゼロに設定してストップを強制する一方で、他のサーバーではその逆の処理を行うからです。どちらがより大きいかを選べば、自分がどの種類のサーバーに接続しているかを知らなくても、両方のケースを網羅できます。
バンドの端にぴったりと位置するレベルであっても、多くのサーバーでは依然として拒否されるため、1点が加算されます。文書化されたルールは「より近い」ですが、実装されているルールは多くの場合「より近い、または等しい」であり、1点加えることにコストはかかりません。
結果はポイントではなく、PRICE単位で返されます。これは実際のストップレベルを設定する際に必要な値であり、5桁の銘柄で10倍の誤差を引き起こす「ポイントとピップの混同」を解消します。
ご自身のEAで活用してください
2つ目の関数が、コピーする価値のあるものです。この関数は、指定されたストップを受け取り、サーバーが受け入れる最も近いストップを、価格の正しい側で返します:
double LegalStopLoss(const string sym, const bool isBuy, const double price, const double wanted) { double dist = MinStopDistance(sym); int digits = (int)SymbolInfoInteger(sym, SYMBOL_DIGITS); double sl = wanted; if(isBuy) { if(price - sl < dist) sl = price - dist; } else { if(sl - price < dist) sl = price + dist; } return NormalizeDouble(sl, digits); }
すでに合法な停留所は変更なしで戻ってくるため、すべての停留所をそこを経由するようにルートを設定しても問題ありません。既存の計算をラップするには、1行追加するだけで済みます:
double sl = LegalStopLoss(_Symbol, true, ask, ask - atr * 1.5);
これは、ボラティリティがバンドに対して高い場合に特に重要になります。EURUSDでは問題のないATRストップでも、金や株価指数では相場が静かな時間帯にバンドの内側に入ってしまうことがあります。まさにその時に、反発に驚かされるのです。なぜなら、昨日までは同じコードがうまく機能していたからです。
出力の読み方に関する注意事項
スプレッドが広いのは、ブローカーが意地悪だからというわけではありません。通常、それはその銘柄の価格設定やヘッジの仕方を反映しており、あるサーバーでは正常に動作するスキャルピング用EAが、コードを1行も変更していないにもかかわらず、別のサーバーでは動作しなくなる理由でもあります。
移行する前に比較してください。CSVエクスポートはデフォルトで有効になっており、MQL5\FilesにBrokerSpecs.csvが書き込まれます。このファイルには、シンボルごとに1行ずつ、バンド、最小ストップ距離、および最も近い有効レベルが含まれています。 2つのブローカーでスクリプトを実行し、ファイルを並べて比較すれば、デバッグに1週間もかかっていたであろう違いが、わずか1分で明らかになります。
スケーリングを行う前に証拠金余力を確認してください。「証拠金余力」の欄は、最小ロット1つ分に対応しています。その数値がすでに証拠金余力に近づいている場合、ポジションサイズにはまだ把握していない上限が存在します。
銘柄は「マーケットウォッチ」に表示されており、少なくとも1回のティックデータが記録されている必要があります。ティックデータが記録されていない銘柄がある場合は、その銘柄のチャートを一度開いてから、再度実行してください。
MetaQuotes Ltdによって英語から翻訳されました。
元のコード: https://www.mql5.com/en/code/76178
Session Opening Range Breakout EA
定義されたセッションの開始ウィンドウの高値・安値を測定し、そのレンジからのブレイクアウトが確認された際に、リスクに基づいたポジションサイズ設定と「1セッションにつき1トレード」の上限を適用して取引を行うエキスパートアドバイザーです。
Reverse RSI Bands
「リバースRSIバンド」は、RSIの計算式を数学的に逆算して導き出した先行指標です。メインチャート上に正確な目標価格帯を直接表示し、RSIが指定した買われすぎまたは売られすぎの水準に、リアルタイムでどの価格に達するかを正確に示します。
Custom Simple Moving Average
傾きに応じて色が変わり、価格と平均値のクロスオーバーを矢印で示す、2段階のアダプティブ移動平均(基本平均+二次平滑化)です。
Accelerator Oscillator (AC)
アクセルレーション/デセレレーションインジケーター(AC)は現在の市場を動かす力の加速と減速を測ります。
