Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   EA öffnet Trades nicht wie programmiert (http://www.expert-advisor.com/forum/showthread.php?t=4512)

bantoine2 13.10.15 17:56

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);
  } 


Crashbulle 13.10.15 19:36

Also,
wenn es beim Broker A läuft und bei Broker B nicht,
wäre als erstes zu schauen, ob beide gleiche Digits haben oder unterschiedliche.
Bei unterschiedliche, müßten die Werte dem entsprechenden 4- oder 5-Digits angepaßt werden.
Wird mit engem TP oder SL gearbeitet, nachschauen, ob diese unter den Mindestwerten des jewiligen Brokers liegen .

bantoine2 13.10.15 19:50

Zitat:

Zitat von Crashbulle (Beitrag 31299)
Also,
wenn es beim Broker A läuft und bei Broker B nicht,
wäre als erstes zu schauen, ob beide gleiche Digits haben oder unterschiedliche.
Bei unterschiedliche, müßten die Werte dem entsprechenden 4- oder 5-Digits angepaßt werden.
Wird mit engem TP oder SL gearbeitet, nachschauen, ob diese unter den Mindestwerten des jewiligen Brokers liegen .

Doch der EA läuft bei beiden Brokern, jedoch werden bei beiden Broker unterschiedliche Trades einfach nicht mitgenommen (was jedoch nicht die gleichen Trades sind).
Bsp:
Broker A:
10:00 Trade genommen
10:30 Trade nicht genommen
11:00 Trade genommen

Broker B:
10:00 Trade nicht genommen
10:30 Trade genommen
11:00 Trade genommen

Bei beiden Broker wären die MACD und BB Bedingungen gegeben.
Und somit kann es nicht an zu engen TP oder SL liegen, denn dann würde ja kein Trade mitgenommen da ich mit 10% vom ADR für den SL und 15% vom ADR für den TP arbeite für jeden Trade an einem Tag.

Und ja beide Broker sind 5 digit Broker.

traderdoc 13.10.15 20:45

Auf beiden dasselbe TimeFrame?

bantoine2 13.10.15 21:17

Zitat:

Zitat von traderdoc (Beitrag 31302)
Auf beiden dasselbe TimeFrame?

Beide Broker haben verschiedene Zeitzonen, dies wurde jedoch im EA berücksichtigt.

Der EA läuft unter Range bars.

traderdoc 13.10.15 21:28

Ne, ich hatte nach den TimeFrames gefragt.

bantoine2 13.10.15 21:56

Zitat:

Zitat von traderdoc (Beitrag 31304)
Ne, ich hatte nach den TimeFrames gefragt.

Die Rangebars sind von ovo. Es ist ein Indikator, welchen ich auf den m1
ziehe, und in der Fußzeile des m1 Charts kommt ein Button welcher automatisch einen offline Chart öffnet. Deshalb kann ich leider nich sagen welcher offline Chart es ist. Aber ich gehe stark davon aus das es m2 ist.
Ist das was du meinst?

Hier sind Screenshots: https://www.dropbox.com/sh/7eg76ml81...YPfJ7hxXa?dl=0

traderdoc 13.10.15 22:08

Ist ok, daran kann es eigentlich auch nicht liegen.

bantoine2 13.10.15 22:11

Zitat:

Zitat von traderdoc (Beitrag 31306)
Ist ok, daran kann es eigentlich auch nicht liegen.

Hättest du sonst eine Idee woran es liegen könnte wenn du dir vl den Code ansiehts? :)


Alle Zeitangaben in WEZ +2. Es ist jetzt 15:11 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum