MT4用EAを作成し、MT4でテストをしてみたのですが、注文は行われているよ…

うなのですが、決済が思うように行われていないようです。

注文・決済共、4本の移動平均線を利用して行いたいと思っています。
不備修正箇所のご指摘をいただけないでしょうか。
下記が作成したEAです。

//+——————————————————————+
//| kana.mq4 |
//| original |
//| http://www. |
//+——————————————————————+
#property copyright "original"
#property link "http://www."

//— input parameters
extern int ShortMA03_Period=03; //短期移動平均線3
extern int ShortMA15_Period=15; //短期移動平均線15
extern int LongMA30_Period=30; // $BD94|0\F0J?6Q@~30
extern int LongMA60_Period=60; //長期移動平均線60
extern double Lots=0.1; //ロット
extern int Stoploss=1000; //損切りポイント

//+——————————————————————+
//| expert initialization function |
//+——————————————————————+
int init()
{
//—-

//—-
return(0);
}
//+——————————————————————+
//| expert deinitialization function |
//+——————————————————————+
int deinit()
{
//—-

//—-
return(0);
}
//+——————————————————————+
//| expert start function |
//+——————————————————————+
int start()
{

double Short1,Short2,Short3,Short4,Short5,Short6,Long1,Long2,Long3,Long4,Long5,Long6; //移動平均線の値を入れる変数の宣言

Short1=iMA(NULL,0,ShortMA03_Period,0,MODE_EMA,PRICE_CLOSE,0); //現在の短期移動平均線3
Short2=iMA(NULL,0,ShortMA03_Period,0,MODE_EMA,PRICE_CLOSE,5); //5個前の短期移動平均線3
Short3=iMA(NULL,0,ShortMA03_Period,0,MODE_EMA,PRICE_CLOSE,15); //15個前の短期移動平均線3
Short4=iMA(NULL,0,ShortMA15_Period,0,MODE_EMA,PRICE_CLOSE,0); //現在の短期移動平均線15
Short5=iMA(NULL,0,ShortMA15_Period,0,MODE_EMA,PRICE_CLOSE,5); //5個前の短期移動平均線15
Short6=iMA(NULL,0,ShortMA15_Period,0,MODE_EMA,PRICE_CLOSE,15); //15個前の短期移動平均線15
Long1=iMA(NULL,0,LongMA30_Period,0,MODE_EMA,PRICE_CLOSE,0); //現在の長期移動平均線30
Long2=iMA(NULL,0,LongMA30_Period,0,MODE_EMA,PRICE_CLOSE,5); //5 個前の長期移動平均線30
Long3=iMA(NULL,0,LongMA30_Period,0,MODE_EMA,PRICE_CLOSE,15); //15個前の長期移動平均線30
Long4=iMA(NULL,0,LongMA60_Period,0,MODE_EMA,PRICE_CLOSE,0); //現在の長期移動平均線60
Long5=iMA(NULL,0,LongMA60_Period,0,MODE_EMA,PRICE_CLOSE,5); //5個前の長期移動平均線60
Long6=iMA(NULL,0,LongMA60_Period,0,MODE_EMA,PRICE_CLOSE,15); //15個前の長期移動平均線60

//ポジションがない場合
if(OrdersTotal()==0)
{
//もしゴールデンクロスしたら
if(Short1>Short4 && Short2<Short5 && Long1>Long4 && Long2<Long5 && Short4>Long1 && Short5<Long2)
{
//買いポジションを取る
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-(Stoploss*Point),0,"BUY",0,0,Blue);
}
//もしデッドクロスしたら
if(Short1<Short4 && Short2>Short5 && Long1<Long4 && Long2>Long5 && Short4<Long1 && Short5>Long2)
{
//売りポジションを取る
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+(Stoploss*Point),0,"SELL",0,0,Red);
}

}

OrderSelect(0,SELECT_BY_POS,MODE_TRADES);
{

//売りポジションならば
if(OrderType()==OP_SELL)
{
//ゴールデンクロスすると
if(Short1>Short4 && Short3<Short6 && Long1>Long4 && Long3<Long6 && Short4>Long1 && Short6<Long3)
{
//買い決済する
OrderClose(OrderTicket(),Lots,Ask*Point,3,White);
}
}
//買いポジションならば
if(OrderType()==OP_BUY)
{
//デッドクロスすると
if(Short1<Short4 && Short3>Short6 && Long1<Long4 && Long3>Long6 && Short4<Lon g1 && Short6>Long3)
{
//売り決済する
OrderClose(OrderTicket(),Lots,Bid*Point,3,White);
}
}
}
}
return(0);

// the end.

回答1

OrderCloseの価格指定部分の「*Point」が不要です。

あと単体で動かす場合は特に問題にはなりませんが、複数のEAを稼動させる場合はOrderSelectのポジション番号部分は0で固定しないほうが良いと思います。

コメントを残す

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

CAPTCHA