MT4のEAがPCを再起動するとポジションを認識しなくなって困ってます。

MT4のEAをiCustom関数を使って本を参考に自作しております。

たとえば、移動平均線でのエントリーの場合、以下のように記載されております。

// 買いエントリー
if( Fast_MA_2 <= Slow_MA_2
&& Fast_MA_1 > Slow_MA_1
&& ( Ticket_L == 0 || Ticket_L == -1 )
&& ( Ticket_S == 0 || Ticket_S == -1 ))
{
Ticket_L = OrderSend(Symbol(),OP_BUY,Lots,Ask,Slip,0,0,Comments,MAGIC,0,Red);
}

バックテストやPCを起動しっぱなしなら問題ないのですが、PCを再起動した場合などに以前のポジションを認識せず、新しいポジションを取ってしまいます。

一致するマジックナンバーがない場合にエントリーするなど、ポジション保有判断の記述の方法はないでしょうか?
ネットで散々調べましたが、わからないので質問させていただ ました。

ご教授のほどよろしくお願いします。

..[補足]..
pgm_fxozさん
ご親切にありがとうございます!
早速、教えていただいた関数を入れてみましたが、入れる場所が間違っているのかうまく動きませんでした。
int start()の前後に入れてみたり、Ticket_L != 0 && Ticket_L != -1と置き換えてみたりしたのですが・・・素人ですいません。
お手数をおかけして申し訳ないですが、教えていただけますでしょうか。
よろしくお願いいたします。

回答1

ポジションの管理をグローバル変数などで行なってしまっているのではないでしょうか。
基本的には、ポジションの管理はOrderSelect等を行い、都度取得・確認する必要があります。
こんな関数を導入してみてはいかが?

//オーダーの有無を調べる
bool Mt4OrderSelect(int magic, int type = -1)
{
for(int i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i, SELECT_BY_POS) == false) break;
if(OrderSymbol() != Symbol() || OrderMagicNumber() != magic) continue;
if(OrderType() != type && type != -1)continue;

return(true);
}
return(false);
}

Originally posted 2019-09-09 19:01:02.

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA


Translate »