Einzelnen Beitrag anzeigen
  #1 (permalink)  
Alt 13.10.15
bantoine2 bantoine2 ist offline
Neues Mitglied
 
Registriert seit: Oct 2015
Beiträge: 5
bantoine2 befindet sich auf einem aufstrebenden Ast
Standard EA öffnet Trades nicht wie programmiert

Hallo Leute

Mein EA läuft in einem Offline Chart und es gibt 2 Probleme

-Es werden Trades außerhalb des Zeitfensters geöffnet

-Im Zeitfenster werden Trades manchmal geöffnet und manchmal nicht

Weiters teste ich den EA mit 2 Brokern und teils bemerke ich, dass er bei Broker A den Trade um 10 Uhr öffnet und bei Broker B nicht, obwohl die Bedingungen ebenfalls erfüllt wären.

Ich sende nachfolgend die komplette onTick() Methode (Ich habe auf anderen Seiten gelesen, dass es mit dieser Methode in Offline Charts zu Problemen kommen kann, verstehe dies jedoch nicht, da es sonst ja zu keinen Trades kommen dürfte oder?). Wir haben einen 5-digit-broker mit einer anderen Zeitzone als jener in der wir leben (FXCM und GKFX). Dies haben wir jedoch berücksichtigt.

Desweiteren erfolgen bei Währungspaaren mit JPY keinerlei Einstiege, was mir auch noch ein Rätsel ist.

Ich vermute einen Fehler in den Teilen LongTrade/ShortTrade öffnen, sende jedoch zur Sicherheit die komplette onTick() Methode.


PHP-Code:
void OnTick()
{

   
//Initialisierung
   
ValueOfLastUpperBB iBands(NULL01220PRICE_CLOSEMODE_UPPER1);
   
ValueOfLastLowerBB iBands(NULL01220PRICE_CLOSEMODE_LOWER1);
   
ValueOfLastMainBB iBands(NULL01220PRICE_CLOSEMODE_MAIN1);
   
ValueOfLastMACD iCustom(NULL0"MACD nrp"12269001);
   
ValueOfLastSignal iCustom(NULL0"MACD nrp"12269031);
   
   
   
   
//Berechnung der Lotgrößen bei gegebenen Risiko
   
AllowedValuePerPoint RisikoProTradeInBasiswaehrung/StopLoss*10;
   
ValuePerPointAndLotInBasisCurrency 0.0001/Ask*100000;
   
LotSize AllowedValuePerPoint/ValuePerPointAndLotInBasisCurrency;
   


   
//Bedingung für Zeitfenster
   
if(((starttimeVM()<=TimeCurrent())&&(TimeCurrent()<endtimeVM())) || ((starttimeNM()<=TimeCurrent())&&(TimeCurrent()<endtimeNM())))
   {
      
//Kein Trade wenn Trend schon besteht!
      
if(FirstTickInTime==true)
      {
         if((
ValueOfLastMACD>0) && (ValueOfLastMACD>ValueOfLastSignal))
         {
            
TradePossible false;
         }
         
         if((
ValueOfLastMACD<0) && (ValueOfLastMACD<ValueOfLastSignal))
         {
            
TradePossible false;
         }
         
         
FirstTickInTime false;
      }
      
      
      
//Trade wieder möglich machen wenn Trend gebrochen wird!
      
if(TradePossible == false)
      {
         if((
ValueOfLastMACD>0) && (ValueOfLastMACD<ValueOfLastSignal))
         {
            
TradePossible true;
         }
         
         if((
ValueOfLastMACD<0) && (ValueOfLastMACD>ValueOfLastSignal))
         {
            
TradePossible true;
         }
      }
      
      
      
//Bedingungen für Long Trade öffnen!
      
if((ValueOfLastMACD>0) && (ValueOfLastMACD>ValueOfLastSignal) && (MarketInfo(NULLMODE_ASK)>=ValueOfLastUpperBB) && (LongTradeAllowed==true) && (LongTradeAllowedInThisSection==true) && (TradePossible == true))
      {
         
LongTradeStarted Ask;
         
LongLotSize LotSize;
         
LongOrderTicketNumber OrderSend(NULLOP_BUYLongLotSizeLongTradeStarted3, (LongTradeStarted StopLoss*Point), 
                                                                 (
LongTradeStarted TakeProfit*Point), NULL12340clrGreen);
         if(
LongOrderTicketNumber<1)
         {
            
error=GetLastError();
            Print(
"Error = ",ErrorDescription(error));
         }
         else
         {
         
OrderSelect(LongOrderTicketNumber,SELECT_BY_TICKET);
         
OrderModify(LongOrderTicketNumber,OrderOpenPrice(),(LongTradeStarted StopLoss*Point), (LongTradeStarted TakeProfit*Point),0,clrGreen);
         
OrderPrint();
         }
         
LongTradeAllowed false;
         
LongTradeAllowedInThisSection false;
         
LongStopShifted false;
      }
      
      
      
//Bedingungen für Short Trade öffnen!
      
if((ValueOfLastMACD<0) && (ValueOfLastMACD<ValueOfLastSignal) && (MarketInfo(NULLMODE_BID)<=ValueOfLastLowerBB) && (ShortTradeAllowed==true) && (ShortTradeAllowedInThisSection==true) && (TradePossible == true))
      {
         
ShortTradeStarted Bid;
         
ShortLotSize LotSize;
         
ShortOrderTicketNumber OrderSend(NULLOP_SELLShortLotSizeShortTradeStarted3, (ShortTradeStarted StopLoss*Point), 
                                                                     (
ShortTradeStarted TakeProfit*Point), NULL12340clrRed);
         if(
ShortOrderTicketNumber<1)
         {
            
error=GetLastError();
            Print(
"Error = ",ErrorDescription(error));
         }
         else
         {
         
OrderSelect(ShortOrderTicketNumber,SELECT_BY_TICKET);
         
OrderModify(ShortOrderTicketNumber,OrderOpenPrice(),(ShortTradeStarted StopLoss*Point), (ShortTradeStarted TakeProfit*Point),0,clrRed);
         
OrderPrint();
         }
         
ShortTradeAllowed false;
         
ShortTradeAllowedInThisSection false;
         
ShortStopShifted false;
      }
   }
   
   
   
   
//Bedingungen für Long Trade schließen
   
if(LongTradeAllowed==false)
   {
      
//Stop nachsetzen!
      
if(LongStopShifted==false)
      { 
          if((
MarketInfo(NULLMODE_ASK)>=(LongTradeStarted StopLoss*Point)) || (ValueOfLastMainBB >= LongTradeStarted))
          {
               
LongSpreadAtShift MarketInfo(NULLMODE_SPREAD)*Point;
               
LongOrderSuccessfulModified OrderModify(LongOrderTicketNumberOrderOpenPrice(), (LongTradeStarted+LongSpreadAtShift), (LongTradeStarted+TakeProfit*Point),
                                                         
0clrBlue);
               
LongStopShifted true;
          }
      }
      
      
      
//Trend wird verlassen!
      
if((ValueOfLastMACD<0) || (ValueOfLastMACD<ValueOfLastSignal))
      {
         
LongOrderSuccessfulClosed OrderClose(LongOrderTicketNumberLongLotSizeMarketInfo(NULLMODE_BID), 3clrRed);
         
LongTradeAllowed true;
         
LongTradeAllowedInThisSection true;
      }
      
      
      
//Trade wurde durch SL oder TP beendet!
      
if(LongStopShifted==false)
      {
         if((
MarketInfo(NULLMODE_BID)>=(LongTradeStarted TakeProfit*Point)) || (MarketInfo(NULLMODE_BID)<=(LongTradeStarted StopLoss*Point)))
         {
            
LongTradeAllowed=true;
         }
      }
      if(
LongStopShifted==true)
      {
         if((
MarketInfo(NULLMODE_BID)>=(LongTradeStarted TakeProfit*Point)) || (MarketInfo(NULLMODE_BID)<=(LongTradeStarted LongSpreadAtShift)))
         {
            
LongTradeAllowed=true;
         }
      }
   }
   
   
   
   
//Bedingungen für Short Trade schließen
   
if(ShortTradeAllowed==false)
   {
      
//Stop nachsetzen!
      
if(ShortStopShifted==false)
      { 
         if((
MarketInfo(NULLMODE_BID)<= (ShortTradeStarted StopLoss*Point)) || ((ValueOfLastMainBB <= ShortTradeStarted)))
         {
               
ShortSpreadAtShift MarketInfo(NULLMODE_SPREAD)*Point;
               
ShortOrderSuccessfulModified OrderModify(ShortOrderTicketNumberOrderOpenPrice(), (ShortTradeStarted-ShortSpreadAtShift), (ShortTradeStarted-TakeProfit*Point),
                                                          
0clrBlue);
               
ShortStopShifted true;
         }
      }
      
      
      
//Trend wird verlassen!
      
if((ValueOfLastMACD>0) || (ValueOfLastMACD>ValueOfLastSignal))
      {
         
ShortOrderSuccessfulClosed OrderClose(ShortOrderTicketNumberShortLotSizeMarketInfo(NULLMODE_ASK), 3clrGreen);
         
ShortTradeAllowed true;
         
ShortTradeAllowedInThisSection true;
      }
      
      
      
//Trade wurde durch SL oder TP beendet!
      
if(ShortStopShifted==false)
      {
         if((
MarketInfo(NULLMODE_ASK)<=(ShortTradeStarted TakeProfit*Point)) || (MarketInfo(NULLMODE_ASK)>=(ShortTradeStarted StopLoss*Point))) //Aufpassen weil ShortTradeStarted von wirklichen Kaufpreis abweichen kann!!
         
{
            
ShortTradeAllowed=true;
         }
      }
      
      if(
ShortStopShifted==true)
      {
         if((
MarketInfo(NULLMODE_ASK)<=(ShortTradeStarted TakeProfit*Point)) || (MarketInfo(NULLMODE_ASK)>=(ShortTradeStarted ShortSpreadAtShift)))
         {
            
ShortTradeAllowed=true;
         }
      }
   }
   
   
   
   
//Long Trades wieder erlauben, wenn Trend gebrochen wird!
   
if(LongTradeAllowedInThisSection==false)
   {
      if((
ValueOfLastMACD<ValueOfLastSignal) || (ValueOfLastMACD<0))
      {
         
LongTradeAllowedInThisSection true;
      }
   }
   
   
   
   
//Short Trades wieder erlauben, wenn Trend gebrochen wird!
   
if(ShortTradeAllowedInThisSection==false)
   {
      if((
ValueOfLastMACD>ValueOfLastSignal) || (ValueOfLastMACD>0))
      {
         
ShortTradeAllowedInThisSection true;
      }
   }
   
   
   
   
//Trades schließen nach Handelszeit
   
if(((LSVM()<=TimeCurrent())&&(TimeCurrent()<(LSVM()+180))) || 
      ((
LSNM()<=TimeCurrent())&&(TimeCurrent()<(LSNM()+180))))
   {
      if(
LongTradeAllowed==false)
      {
         
LastShortOrderSuccessfulClosed OrderClose(LongOrderTicketNumberLongLotSizeMarketInfo(NULLMODE_BID), 3clrRed);
      }
      if(
ShortTradeAllowed==false)
      {
         
LastShortOrderSuccessfulClosed OrderClose(ShortOrderTicketNumberShortLotSizeMarketInfo(NULLMODE_ASK), 3clrGreen);
      }
      
      
LongTradeAllowed true;
      
ShortTradeAllowed true;
      
LongTradeAllowedInThisSection true;
      
ShortTradeAllowedInThisSection true;
      
LongStopShifted false;
      
ShortStopShifted false;
      
FirstTickInTime true;
      
TradePossible true;
   }
}

datetime starttimeVM()
string currentdatestr=TimeToString(TimeCurrent(),TIME_DATE);
  
string datetimenow=currentdatestr+" " StartVM;
  return 
StringToTime(datetimenow);
}

datetime starttimeNM()
string currentdatestr=TimeToString(TimeCurrent(),TIME_DATE);
  
string datetimenow=currentdatestr+" " StartNM;
  return 
StringToTime(datetimenow);
}

datetime endtimeVM()
string currentdatestr=TimeToString(TimeCurrent(),TIME_DATE);
  
string datetimenow=currentdatestr+" " EndeVM;
  return 
StringToTime(datetimenow);
}

datetime endtimeNM()
string currentdatestr=TimeToString(TimeCurrent(),TIME_DATE);
  
string datetimenow=currentdatestr+" " EndeNM;
  return 
StringToTime(datetimenow);
}

datetime LSVM()
string currentdatestr=TimeToString(TimeCurrent(),TIME_DATE);
  
string datetimenow=currentdatestr+" " LetzterTradeSchliessenVM;
  return 
StringToTime(datetimenow);
}

datetime LSNM()
string currentdatestr=TimeToString(TimeCurrent(),TIME_DATE);
  
string datetimenow=currentdatestr+" " LetzterTradeSchliessenNM;
  return 
StringToTime(datetimenow);
}

bool checktime(datetime start,datetime end)
  {
   
datetime dt=TimeCurrent();                          // current time
   
if(start<end) if(dt>=start && dt<end) return(true); // check if we are in the range
   
if(start>=end) if(dt>=start|| dt<end) return(true);
   return(
false);
  }