Hallo Zusammen,
ich habe einen EA geschrieben und dieser ist soweit auch fertig bis auf eine Detailsfrage.
Der EA soll im 1 Stunden Chart handeln und hat einen engen SL als auch TP. Leider eröffnet dieser sofort eine neue Order nachdem die alte geschlossen wurde. Eigentlich soll stattdessen gewartet werden bis die laufende Stunde vorbei ist und dann in der darauf folgenden Stunde erneut gehandelt werden.
Hier ein Teil des Codes:
Code:
//Globale Variablen
int BuyTicket;
int SellTicket;
double UsePoint;
int UseSlippage;
int openbuy = 0;
int opensell = 0;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
UsePoint = PipPoint(Symbol());
UseSlippage = GetSlippage(Symbol(), Slippage);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
double FreeDepo=NormalizeDouble(AccountBalance()-AccountMargin(),Digits2Round);
double Risk=NormalizeDouble((FreeDepo*PercentOfFreeDepo/100),Digits2Round);
double Lot=NormalizeDouble(Risk/(StopLoss/0.0001)*0.1,Digits2Round);
//===================== Lets determine lot size and risk ===================================
if ( Lot<Minlot )
{
Lot=Minlot;
}
Comment( "\n","Acceptable risk is ",PercentOfFreeDepo, "% = ",Risk," of the free money ",FreeDepo," in lots = ",Lot);
opensell = 0;
openbuy = 0;
for(int i = OrdersTotal() - 1; i >= 0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) //==> select also on magicnumber and symbol
{
if(OrderMagicNumber()== MagicNumber && OrderSymbol()== Symbol() && OrderType() == OP_BUY){openbuy++;}
if(OrderMagicNumber()== MagicNumber && OrderSymbol()== Symbol() && OrderType() == OP_SELL){opensell++;}
if((OrderOpenTime()+3600) < TimeCurrent() && OrderMagicNumber()== MagicNumber && OrderSymbol()== Symbol())
{
if (OrderType() == OP_BUY)
{
bool Closed = OrderClose(OrderTicket() ,OrderLots(), OrderClosePrice(), UseSlippage, Red);
openbuy = openbuy-1; //openbuy--;
}
if (OrderType() == OP_SELL)
{
Closed = OrderClose(OrderTicket() ,OrderLots(), OrderClosePrice(), UseSlippage, Red);
opensell = opensell-1; //opensell--;
}
}
}
}
//BuyOrder
if ((TradeHour1==Hour()) && openbuy == 0) //Signal Buy
{
openbuy=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage ,Ask - StopLoss * Point,Bid + TakeProfit * Point,"Kompensation buy",MagicNumber,0,Green);
if (openbuy < 0) Print("OrderSend OP_BUY failed, error: ", GetLastError() );
}
//SellOrder
if ((TradeHour1==Hour()) && opensell == 0) //Signal Sell
{
opensell=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,Bid + StopLoss * Point,Ask - TakeProfit * Point,"Kompensation sell",MagicNumber,0,Red);
if (opensell < 0) Print("OrderSend OP_SELL failed, error: ", GetLastError() );
}
//----
return(0);
}
Ich gehe davon aus, das der Fehler in dem Dickmarkierten Bereich liegt...kann mir jemand den Lichtblick geben, damit ich hier weiter komme?
Vielen lieben Dank
Marc