初心者です。ポジションが上手く決済されません。
FastMaとSlowMaのGC・DCでポジションを持ちSL・TPで決済したいのですが
反対のポジションを持ったときに決済してしまいます。
どこがダメなのでしょうか?
初歩的なことだと思いますが、一週間悩んでも分りませんでした。
よろしくお願いします。
//| パラメーター
extern int FastMA_Period = 4;
extern int SlowMA_Period = 8;
extern double Lots = 0.1;
extern int Slippage = 3;
extern int SLpips = 150; // 損切り値幅(pips)
extern int TPpips = 80; // 利食い値幅(pips)
//| ポジションを決済する
void ClosePositions()
{
for(int i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == false) break;
if(OrderMagicNumber() != MAGIC || OrderSymbol() != Symbol()) continue;
//オーダータイプのチェック
if(OrderType()==OP_BUY)
{
OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,White);
break;
}
if(OrderType()==OP_SELL)
{
OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,White);
break;
}
}
}
//| スタート関数
int start()
{
//バーの始値でトレード可能かチェック
if(Volume[0]>1 || IsTradeAllowed()==false) return(0);
//移動平均の計算
double FastMA1 = iMA(NULL,0,FastMA_Period,0,MODE_SMA,PRICE_CLOSE,1);
double SlowMA1 = iMA(NULL,0,SlowMA_Period,0,MODE_SMA,PRICE_CLOSE,1);
double FastMA2 = iMA(NULL,0,FastMA_Period,0,MODE_SMA,PRICE_CLOSE,2);
double SlowMA2 = iMA(NULL,0,SlowMA_Period,0,MODE_SMA,PRICE_CLOSE,2);
//買いシグナル
if(FastMA2 <= SlowMA2 && FastMA1 > SlowMA1)
{
ClosePositions();
OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,Ask-SLpips*Point,0,"",MAGIC,0,Blue);
return(0);
}
//売りシグナル
if(FastMA2 >= SlowMA2 && FastMA1 < SlowMA1)
{
ClosePositions();
OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,Bid+SLpips*Point,0,"",MAGIC,0,Red);
return(0);
}
return(0);
}