MT4のEAプログラムについて質問です。

1本前の4時間足の高値を越えたらロングでエントリー、4時間足1本あたり1回しかエントリーしないようにしたいのですが、うまくいきません。

if(Ask > iHigh(NULL,PERIOD_H4,1) && entrybar != Bars)
{
OrderSend(Symbol(), OP_BUY, 1, Ask, 3, 0, 0, "Buy", 0, 0, Blue);
entrybar = Bars;
}

期間はH4、全ティックでテストしてるのですが、同じ時間足で複数回エントリーすることがあります。

例えば、1本前の4時間足の高値が100.00だとして、次の4時間で100.00を超えたらエントリーします。ところが、そのポジションが利確でも損切りでも同じ4時間の中でイグジットすると、その4時間足が確定するまでは、1本前の4時間足の高値は100.00なので、再び100.00を超えたらエントリーしてしまいます。どこが間違っているのでしょうか。

回答 1

entrybar を、記憶変数として宣言する必要があります。

やり方は、2通りあります。

?entrybarを、スタート関数内ではなく、その外(グローバル領域)で宣言します。

int entrybar=0;

でいいです。

?スタート関数内で宣言するなら、

static int entrybar=0;

という具合に書きます。

回答2

多分、entrybarの定義をstart関数の中でやっていると思われます。
entrybarの定義をグローバル変数として定義すればうまく行くでしょう。
具体的には、
現在、

int start() {
int entrybar;
if(Ask > iHigh(NULL,PERIOD_H4,1) && entrybar != Bars)
{
OrderSend(Symbol(), OP_BUY, 1, Ask, 3, 0, 0, "Buy", 0, 0, Blue);
entrybar = Bars;
}

となって い襪里髻

int entrybar;

int start() {
if(Ask > iHigh(NULL,PERIOD_H4,1) && entrybar != Bars)
{
OrderSend(Symbol(), OP_BUY, 1, Ask, 3, 0, 0, "Buy", 0, 0, Blue);
entrybar = Bars;
}

としてやるのです。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA