初心者です。ポジションが上手く決済されません。
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);
}
補足
ご回答いただきありがとうございました。 結果的には、自己解決できました。 MT4のプログラミングは、親切なのか?不親切なのか良くわかりません。 WEBで検索して、その結果、解決したのですが、 私の他にも同じようなところで躓いている方が大勢いるようです。 プログラミングを始めた方は、(特にカウントダウン方式を採用しているブローカーでは) ここら辺のクリアーが一つの壁になっているようですね。 私が躓いたのは、 OrderSelectの記述方法と、OrderCloseの記述方法が、雛形が作れないままでしたので、 困っていました。 WEBで検索をかければ解ると思いますが、 ここらへんで躓いている方がいれば、 double Last_Price = 0; for(int a=0;a < OrdersTotal();a++) { if(OrderSelect(a, SELECT_BY_POS, MODE_TRADES) == true) { if(OrderMagicNumber() != MagicNumber) continue; if(OrderSymbol() != Symbol()) continue;//通貨 Last_Price = OrderOpenPrice( ); } } で決済のポジションを取り込んで、 if (ここには決済条件を書いて) OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(),Green(ここは使いたい色の指定です、ご自由に)); てな感じで記述すれば決済できます。 自分で使うEA,自分で組めなければ使うのは辞めといた方が無難ですね。 業者に依頼代行するなんて、愚の骨頂です。(笑)