Einzelnen Beitrag anzeigen
  #6 (permalink)  
Alt 15.01.12
Biatsch Biatsch ist offline
Mitglied
 
Registriert seit: Oct 2011
Beiträge: 77
Biatsch befindet sich auf einem aufstrebenden Ast
Standard

Ich hab den Code doch noch ein bischen abgeändert und der Fehler "Zero divide" wird nicht mehr angezeigt. Ich bekomme aber neue Fehlermeldungen und hab keinen Plan, wo die herkommen.

Hier mein Code:
Zuerst wird geprüft, ob Stochastik und RSI auf mehreren Zeitebenen im Extrembereich sind. die Variablen "c" und "f" werden "true", wenn die Indikatoren im Extrembereich liegen.

Code:
.
.//RSI + Stochastik überkauft => c = true
.//RSI + Stochastik überverkauft => f = true
.
.
//---------------Money-Management-------------------------
//Bestimme den höchsten und niedrigsten Kurs der letzten 80 Candles
double Max = High[Highest(NULL,240,MODE_HIGH,80,0)];
double Min = Low[Lowest(NULL,240,MODE_LOW,80,0)];
double Balance = AccountBalance();

//Bestimme die Mindest- und Höchst-Lotgröße
double minlotsize = MarketInfo(Symbol(), MODE_MINLOT);
double maxlotsize = MarketInfo(Symbol(), MODE_MAXLOT);

*/Prüfe nun, ob das Hoch der letzten 80 Candles höher war, als der aktuelle Kurs. Die Differenz dieser beiden Kurse sollte mindestens 30 Pips betragen.
Dann wird die Lotgröße für einen Short-Trade bestimmt, wobei der Stoploss = dem Abstand vom aktuellen Kurs zum Höchstkurs der letzten 80 Candles ist + weitere 30 Pips.
Wenn die errechnete Lotgröße zu groß/klein ist, wird sie auf die Minimale/Maximale Lotgröße gesetzt. Risk ist hier 0.02, ich will also 2% meines Guthabens verlieren, wenn es schief geht./*

if(Max > Bid){
if((Max - Bid)>0.003){
   double dLotsShort = (Balance*Risk)/(100000 * (Max - Bid + 0.003));  //
      if(dLotsShort < minlotsize)
         dLotsShort = minlotsize;
      if(dLotsShort > maxlotsize)
         dLotsShort = maxlotsize;
}}

*/Hier das gleiche nochmal für Long-Trades./*

if(Min < Ask){
if((Ask - Min)>0.003){
   double dLotsLong  = (Balance*Risk)/(100000 * (Ask - Min + 0.003));
      if(dLotsLong < minlotsize)
         dLotsLong = minlotsize;
      if(dLotsLong > maxlotsize)
         dLotsLong = maxlotsize;
}}

//------------------------------------------------------------------------
//---------------Sell_Logik------------------------------------------------

if(Max > Bid){
if(ShortTradesAccepted == true)
{
   iTotalTrades=OrdersTotal();
   
   if(c == true)
   {
      iTradeSignal = iOpenSellSignal;
   }  
   if((iTradeSignal == iOpenSellSignal) && (iTotalTrades < iMaxTrades))
   {
      double dSellStopLoss   = Max + 0.003;            //Hier liegt evtl. ein Fehler
      double dSellTakeProfit = Bid-(iTakeProfit*Point);   //vlt. auch hier ?
       
   iOrderOpenStatus = OrderSend(Symbol(), OP_SELL,dLotsShort, Bid, iSlippage, dSellStopLoss, dSellTakeProfit, "TRADERS MAG EA",iMagicNumber,0,Red);
   
   if (iOrderOpenStatus<0)
      {
      iErrorNumber=GetLastError();
      Print ("Order fehlgeschlagen!: ", iErrorNumber);
      return;
      }
   }
      c = false;
}}
//-------------------------------------------------------------------------
//--------------------------Buy_Logik-------------------------------------
//-------------------------------------------------------------------------
if(Min < Ask){
if(LongTradesAccepted == true)
{
   iTotalTrades=OrdersTotal();
   
   if(f == true)
   {
      iTradeSignal = iOpenBuySignal;
   }
   if((iTradeSignal == iOpenBuySignal) && (iTotalTrades < iMaxTrades))
   { 
      double dBuyStopLoss   = Min - 0.003;          //Hier ist evtl. ein Fehler
      double dBuyTakeProfit = Ask+(iTakeProfit*Point);    //Oder hier

   iOrderOpenStatus = OrderSend(Symbol(), OP_BUY,dLotsLong, Ask, iSlippage, dBuyStopLoss, dBuyTakeProfit, "TRADERS MAG EA",iMagicNumber,0,Green);
   
   if (iOrderOpenStatus<0)
      {
      iErrorNumber=GetLastError();
      Print ("Order fehlgeschlagen!: ", iErrorNumber);
      return;
      }
   }
      f = false;
}}

Beim Durchlaufen des des Backtests kommen folgende Fehlermeldungen:
1.) Ordersend Error 4051
2.) Ordersend Error 4107
3.) invalid price 1.34896000 for OrderSend function

Bei 3.) wird ein Kurs mit 5 Nachkommastellen angezeigt, ich benutze aber einen 4-Digit-Broker. Und ich kapier nicht wo dieser price überhaupt herkommt.

Sieht jemand, wodurch diese Fehler verursacht werden? Vieleicht sehe ich den Wald vor lauter Bäumen nicht.