Fragen von Anfängern MQL4 MT4 MetaTrader 4 - Seite 133

 
Aliaksandr Kryvanos:

Hallo!

Kann jemand eine analoge Ersetzung von MaxLotCheck() aus MT5 für MT4 vorschlagen, danke

Es gibt keine Funktion selbst. Sie müssen Ihren eigenen Text schreiben. Mit allen Prüfungen sollten 10-20 Zeilen ausreichen.

 
Ihor Herasko:

Es gibt keine Funktion selbst. Sie müssen Ihren eigenen Text schreiben. Mit allen Prüfungen sollten 10-20 Zeilen ausreichen.

OK, aber die Formel selbst?

 
Aliaksandr Kryvanos:

OK, aber hier ist die Formel selbst?

Schauen wir uns die Quelle an:

//+------------------------------------------------------------------+
//| Access functions OrderCalcMargin(...).                           |
//| INPUT:  name            - symbol name,                           |
//|         trade_operation - trade operation,                       |
//|         price           - price of the opening position,         |
//|         percent         - percent of available margin [1-100%].   |
//+------------------------------------------------------------------+
double CAccountInfo::MaxLotCheck(const string symbol,const ENUM_ORDER_TYPE trade_operation,
                                 const double price,const double percent) const
  {
   double margin=0.0;
//--- checks
   if(symbol=="" || price<=0.0 || percent<1 || percent>100)
     {
      Print("CAccountInfo::MaxLotCheck invalid parameters");
      return(0.0);
     }
//--- calculate margin requirements for 1 lot
   if(!OrderCalcMargin(trade_operation,symbol,1.0,price,margin) || margin<0.0)
     {
      Print("CAccountInfo::MaxLotCheck margin calculation failed");
      return(0.0);
     }
//---
   if(margin==0.0) // for pending orders
      return(SymbolInfoDouble(symbol,SYMBOL_VOLUME_MAX));
//--- calculate maximum volume
   double volume=NormalizeDouble(FreeMargin()*percent/100.0/margin,2);
//--- normalize and check limits
   double stepvol=SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP);
   if(stepvol>0.0)
      volume=stepvol*MathFloor(volume/stepvol);
//---
   double minvol=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MIN);
   if(volume<minvol)
      volume=0.0;
//---
   double maxvol=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MAX);
   if(volume>maxvol)
      volume=maxvol;
//--- return volume
   return(volume);
  }
ENUM_ORDER_TYPE und OrderCalcMargin müssen hier ersetzt werden.
 
Yum) die Quelle... danke
 

Immer noch nicht klar....

margin = MarketInfo(Symbol(), MODE_MARGINREQUIRED)

и

double margin;

OrderCalcMargin(ORDER_TYPE_BUY,Symbol(),1.0,SymbolInfoDouble(Symbol(),SYMBOL_ASK),margin);


unterschiedliche Anzahl von Margen zur Eröffnung von 1 Lot zurückgeben

 
Aliaksandr Kryvanos:

Immer noch nicht klar....

margin = MarketInfo(Symbol(), MODE_MARGINREQUIRED)

и

double margin;

OrderCalcMargin(ORDER_TYPE_BUY,Symbol(),1.0,SymbolInfoDouble(Symbol(),SYMBOL_ASK),margin);


unterschiedliche Anzahl von Margen für die Eröffnung von 1 Lot zurückgeben

Sie vergleichen offensichtlich auf verschiedenen Terminals )) Oben: MT4, unten: MT5. Die Server sind also anders, die Handelsbedingungen sind anders. Der einfachste Weg ist eine andere Hebelwirkung.

Was haben Sie tatsächlich bekommen, was waren die Werte?

 

Ja, das stimmt, die Hebelwirkung ist unterschiedlich, auf der einen Seite 1/300, auf der anderen 1/2000

danke

 

Hallo zusammen!

Mein EA verwendet eine mehrstufige Suche nach einem Einstiegspunkt, dazu prüft er zunächst die Historie auf Signale vom Start, dann arbeitet er in Echtzeit. Also in der Strategie-Tester, alles funktioniert gut mit der Geschichte, aber wenn ich es in Echtzeit laufen, es nicht richtig scannen die Geschichte und verpasst Signale, was könnte das Problem sein?

Vielleicht gibt es eine offensichtliche Antwort, denn das Codefragment ist ziemlich groß, um es hier zu posten, also gebe ich den Code noch nicht an.

 
ArturR:

Hallo zusammen!

Mein EA verwendet eine mehrstufige Suche nach einem Einstiegspunkt, dazu prüft er zunächst die Historie auf Signale vom Start, dann arbeitet er in Echtzeit. Also in der Strategie-Tester, alles funktioniert gut mit der Geschichte, aber wenn ich es in Echtzeit laufen, es nicht richtig scannen die Geschichte und verpasst Signale, was könnte das Problem sein?

Vielleicht gibt es eine offensichtliche Antwort, denn das Codefragment ist ziemlich groß, um es hier zu posten, also gebe ich den Code noch nicht an.

Führen Sie die Fehlersuche Stück für Stück durch. Trennen Sie den Verlaufsscan in das Skript. Geben Sie mit Alert() detaillierte Informationen aus: zunächst die Anzahl der Balken in der Historie, das Start- und Enddatum, ... und dann den Prozess des Scannens. Es kann bequemer sein, alles in eine Datei zu schreiben
 
STARIJ:
Führen Sie die Fehlersuche Schritt für Schritt durch. Trennen Sie den Verlaufsscan in ein Skript. Geben Sie mit Alert() die detaillierten Informationen aus: vor allem die Anzahl der Balken in der Historie, das Start- und Enddatum, ... und dann den Prozess des Scannens. Es kann bequemer sein, alles in eine Datei zu schreiben

Danke für den Tipp, ich werde nachlesen, wie man das macht.

Ich habe eine weitere Frage, wenn ich Echtzeit-Debugging, Metatrader4 läuft es immer auf CHF, weiß jemand, was zu justieren, um es auf das Paar, das ich brauche laufen?

Es waren die Indikatorwerte für andere Zeiträume, die offenbar im Tester nicht berücksichtigt werden. Ich habe auch den Weg gefunden, das richtige Paar zu machen. Danke für Ihre Teilnahme )
Grund der Beschwerde: