国内ブローカーで稼働し始めました某EAが、S/Lを付与する注文の失敗を繰り返しています。
このEAは、他のブローカーでも稼働させていて、今までこのような問題はなかったですが、何故?ブローカーの違いですよね。
しかしながら、S/Lの設定にミスるのは致命傷になりかねないので、なんとか手を打たねば。
すでに、先週の金曜日にやられているのですが、これ以上やられる訳にはいきません。
サポート期間が終了している状況でしたので、取り急ぎ自作でS/Lを付与するEAを開発しました。(サポートには追い追いどうするか、、、)
リアル口座で稼働確認済みで、本日から稼働を開始しています。MQLには、やはりなれないですね。
EAの概要::
- 任意のS/L未設定のポジションを検知した場合、S/Lを設定する
- 監視対象のポジションは、マジックナンバーで選定する。マジックナンバーは、EA稼働時にパラメータとして設定する
- 設定するS/L値も、EA稼働時のパラメータとする
- 処理する通貨ペアは、当EAを設定したチャートの通貨ペアのみを処理対象とする
- 監視インターバルは30秒とした
※なんの保証もありませんが、ご参考まで。。。
S/L付与は、マジックナンバーで狙い撃ちます。
一度、S/Lが設定されていれば、その後にS/L値を再設定することが無いように構築しています。
監視対象のポジションのトレードが発生する度に、S/Lをきちんと付与できるように、稼働し続けます。
稼働の様子。
EAのパラメータで指定したとおり、S/L値の設定ができます。(BUY、SELLの方向チェックもあります)
が、いろいろなケースを網羅した確認までは取りきれていませんので、続くソースコードは、完全なるご参考程度になります。
このEAのソースコード。。。
//+------------------------------------------------------------------+ //| SafetyStop.mq4 | //| Copyright 2015, Life with FX | //| http://lifewithfx.jp | //+------------------------------------------------------------------+ #property copyright "Copyright 2015, Life with FX" #property link "http://lifewithfx.jp" #property version "1.00" #property strict extern int MAGIC = 286411; extern double STOPLOSS = 120; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { // 30秒毎にポジション状態をチェックする EventSetTimer(30); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { EventKillTimer(); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { } //+------------------------------------------------------------------+ //| Timer function | //+------------------------------------------------------------------+ void OnTimer() { double newOrderStopLoss; double digitsFactor; for (int i = 0; i < OrdersTotal(); i++) { if (OrderSelect(i, SELECT_BY_POS) == false) { break; } // EAが稼働するチャートの通貨ペアと、マジックナンバーで処理対象を決定する if (OrderSymbol() != Symbol() || OrderMagicNumber() != MAGIC) { continue; } // ポジションオープンから経過時間が10秒以内のポジションは、処理対象外 if ((TimeCurrent() - OrderOpenTime()) <= 10) { continue; } // ポジションにストップロスが設定されている場合は、処理対象外 if (OrderStopLoss() > 0.0001) { continue; } // お使いのブローカーは、何桁ブローカー? if (Digits == 3 || Digits == 5) { digitsFactor = 10; } else { digitsFactor = 1; } // ストップロス値を設定する。スプレッドの考慮無し。待機注文は処理対象外 if (OrderType() == OP_BUY) { newOrderStopLoss = OrderOpenPrice() - (STOPLOSS * Point * digitsFactor); } else if (OrderType() == OP_SELL) { newOrderStopLoss = OrderOpenPrice() + (STOPLOSS * Point * digitsFactor); } else { continue; } // 注文変更。ストップロスを新たに設定し、テイクプロフィットは以前のものを引き継ぐ OrderModify(OrderTicket(), 0, newOrderStopLoss, OrderTakeProfit(), 0); } }
lfxさん、こんにちは。
私もその某EAを、おそらくlfxさんと同じ国内ブローカーで稼働させておりますが、
今のところこういった問題は発生しておりません。
淡々とストップロスに刺さり続けております。(TдT) ウゥ…
LinuxのVPSに関連して発生している問題じゃないですかね?
いちおう、ご参考までに……。
kumanamiさん
こんにちは。情報をありがとうございます。
確かに、LinuxVPSに起因する問題かも知れないです。
時々、S/L設定注文が成功することもあって、余計に???です。
ただ、そのブローカーと、他のブローカーで注文方式が相違する点が気になっています。
一方は即時実行で、もう一方はマーケット実行で差異がある為、問題が起きやすくなっているのかも知れないです。
何れにせよ、ここ数日は私のところもS/Lに刺さり続けていますよ〜
ドル売りの流れが続いていますね。
今朝の朝スキャは相当危なかったです、いやまだ危ないです。。。
こんばんわ。
カウントダウン形式の注文で、成り行き注文後にSLが上手く入らないのは、おそらくVPSに起因する通信上の問題ではないでしょうか?
PepperStoneで某ベンダーのEAも失敗することが多かったですが、VPS、ブローカーを変更すると失敗しにくくなりました。
今でもごくまれに失敗しますが、オートクロース機能があるので、ほぼ放置しています。気になる時は手動でSTだけセットしています。
Shin@さん
こんばんみー〜、、、。。。
いつもフォローしていただきまして、ありがとうございます。
やはり、VPSに起因しているのかも知れないですね。
VPS?EA?の処理が速すぎるのでしょうか。
ポジションオープンしてから、1/1000秒後にすぐさまS/Lを設定しに行っているようでして。
今回の場合、カウントダウン形式ではなく、成り行き形式のパターンでして、この形式の場合にはブローカー側としては、”まあちょっと待て”と構えているのかもと、勝手に思っています。
先週末のトレードで、通常のS/Lの2倍ぐらいのダメージをくらってしまったので、対処すべき問題として手を打った次第です。