初心者です。ポジションが上手く決済されません。
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);
}
お礼
ご回答ありがとうございます 不意の単発介入なのでそれほどではないということなのですかね、雇用統計はみんなが待ち構えてるから滑りが激しいということでしょうか