国内ブローカーで稼働し始めました某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倍ぐらいのダメージをくらってしまったので、対処すべき問題として手を打った次第です。