Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.


Portalsuche


Werbung

Login
Benutzername:
Kennwort:


Statistik
Themen: 3824
Beiträge: 36909
Benutzer: 6.079
Aktive Benutzer: 495
Links: 80
Wir begrüßen unseren neuesten Benutzer: Rene1504
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor 6 Stunden
- Rene1504
vor 7 Stunden
- ibdafx
vor einem Tag
- Batangenyo
vor 2 Tagen
- Spitzmaus
vor 2 Tagen
- juleslesqu...

Onlineuser
'Wer ist online' anzeigen Benutzer: 0
Gäste: 64
Gesamt: 64
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

Werbung

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 13.10.15
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);
  } 
  #2 (permalink)  
Alt 13.10.15
Benutzerbild von Crashbulle
Elite Mitglied
 
Registriert seit: Sep 2011
Ort: Voreifel
Beiträge: 584
Crashbulle befindet sich auf einem aufstrebenden Ast
Crashbulle eine Nachricht über MSN schicken Crashbulle eine Nachricht über Skype™ schicken
Standard

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 .
__________________
Was hoch aufsteigt, fällt tief herunter
Portfolio
Portfolio_1
  #3 (permalink)  
Alt 13.10.15
Neues Mitglied
 
Registriert seit: Oct 2015
Beiträge: 5
bantoine2 befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Crashbulle Beitrag anzeigen
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.
  #4 (permalink)  
Alt 13.10.15
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.875
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Auf beiden dasselbe TimeFrame?
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #5 (permalink)  
Alt 13.10.15
Neues Mitglied
 
Registriert seit: Oct 2015
Beiträge: 5
bantoine2 befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von traderdoc Beitrag anzeigen
Auf beiden dasselbe TimeFrame?
Beide Broker haben verschiedene Zeitzonen, dies wurde jedoch im EA berücksichtigt.

Der EA läuft unter Range bars.
  #6 (permalink)  
Alt 13.10.15
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.875
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Ne, ich hatte nach den TimeFrames gefragt.
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #7 (permalink)  
Alt 13.10.15
Neues Mitglied
 
Registriert seit: Oct 2015
Beiträge: 5
bantoine2 befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von traderdoc Beitrag anzeigen
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
  #8 (permalink)  
Alt 13.10.15
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.875
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Ist ok, daran kann es eigentlich auch nicht liegen.
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #9 (permalink)  
Alt 13.10.15
Neues Mitglied
 
Registriert seit: Oct 2015
Beiträge: 5
bantoine2 befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von traderdoc Beitrag anzeigen
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?
Thema geschlossen

Lesezeichen

Stichworte
fehler, fehler code, mql4, problem code, programmierung, programmierung metatrader, öffnet trades


Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +1. Es ist jetzt 21:55 Uhr.



Der Wavesnode - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2017 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2017 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------