2回目のエントリーで時間通りにクローズ出来ない
以前の質問内容からパラメーターをコピーし_2にしてからstart関数内に
同じようにコピーしましたが、2回目のエントリーの後、時間通りに決済ができません。
どなたか対策案教えてください。ここまでできるようになりましたが本当に困っております。
-----------------------------
int start()
{
if(OrdersTotal() == 0){
if((TimeHour(TimeCurrent()) == OrderHour || CheckOrderHour == false)&&(TimeMinute(TimeCurrent()) == OrderMinute || CheckOrderMinute == false) &&(TimeSeconds(TimeCurrent()) == OrderSeconds || CheckOrderSeconds == false))
{
if(Cmd == OP_BUY){
OrderSend(Symbol(),Cmd,Lots,Ask,Slippage,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",MagicNumber,0,Red);
return(0);
}
if(Cmd == OP_SELL){
OrderSend(Symbol(),Cmd,Lots,Bid,Slippage,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",MagicNumber,0,Blue);
return(0);
}
}
}
if((TimeHour(TimeCurrent()) == CloseHour || CheckCloseHour == false)&&(TimeMinute(TimeCurrent()) == CloseMinute || CheckCloseMinute == false)&&(TimeSeconds(TimeCurrent()) == CloseSeconds || CheckCloseSeconds == false))
{
for(int i = 0; i < OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == false)
{
break;
}
if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
if(OrderType() == OP_BUY)
{
OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Yellow);
return(0);
}
if(OrderType() == OP_SELL)
{
OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Lime);
return(0);
}
}
}
}
if(OrdersTotal() == 0){
if((TimeHour(TimeCurrent()) == OrderHour_2 || CheckOrderHour_2 == false)&&(TimeMinute(TimeCurrent()) == OrderMinute_2 || CheckOrderMinute_2 == false) &&(TimeSeconds(TimeCurrent()) == OrderSeconds_2 || CheckOrderSeconds_2 == false))
{
if(Cmd_2 == OP_BUY){
OrderSend(Symbol(),Cmd_2,Lots_2,Ask,Slippage_2,Ask-StopLoss_2*Point,Ask+TakeProfit_2*Point,"",MagicNumber_2,0,Red);
return(0);
{
if(Cmd_2 == OP_SELL){
OrderSend(Symbol(),Cmd_2,Lots_2,Bid,Slippage_2,Bid+StopLoss_2*Point,Bid-TakeProfit_2*Point,"",MagicNumber_2,0,Blue);
return(0);
}
}
}
if((TimeHour(TimeCurrent()) == CloseHour_2 || CheckCloseHour_2 == false)&&(TimeMinute(TimeCurrent()) == CloseMinute_2 || CheckCloseMinute_2 == false)&&(TimeSeconds(TimeCurrent()) == CloseSeconds_2 || CheckCloseSeconds_2 == false))
{
for(int s = 0; s < OrdersTotal(); s++)
{
if(OrderSelect(s,SELECT_BY_POS,MODE_TRADES) == false)
{
break;
}
if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_2)
{
if(OrderType() == OP_BUY)
{
OrderClose(OrderTicket(),OrderLots(),Bid,Slippage_2,Yellow);
return(0);
}
if(OrderType() == OP_SELL)
{
OrderClose(OrderTicket(),OrderLots(),Ask,Slippage_2,Lime);
return(0);
}
}
}
}
return(0);
}
}
}
お礼
回答ありがとうございます。 マニュアルのSleep関数には、カスタムインジケータから呼び出すことができないことが書いてあるんですね。 OrderSend関数にも書いてあれば、ここまではまらずに済んだかもしれないですね、はぁ…。 なるほど、iCustom関数でカスタムインジケータを使用できるんですね。 この関数は、カスタムインジケータから別のカスタムインジケータを使用する時に、利用したことがあります。 EAからカスタムインジケータを使用するイメージが出来てきました! いろいろとご教示頂きありがとうございました。 回答内容を何度も読み返して、とても勉強になりました。 FXって、なんだか孤独だなぁと感じることもあり、そういう意味でも回答を頂けてとても嬉しかったです。 ブログで毎日デモ口座の負けトレードをアップしてますが、勝ちトレードをアップできるようにEAの勉強を頑張ろうと思います(笑) ありがとうございました!