Expert Advisors: Multik

 

Multik:

Der Multicurrency Expert Advisor.

Multicurrency Expert Advisor

Autor: Andrew Kornishkin

 

Werden wir alle Paare auf das aktuelle Instrument normalisieren?

dsma2 = NormalizeDouble(SMA[2] - SMA[3], _Digits);      // MA am Standort 2-3
dsma1 = NormalizeDouble(SMA[1] - SMA[2], _Digits);      // MA am Standort 1-2
 
Valmars:

Werden wir alle Paare auf das aktuelle Instrument normalisieren?


Ja, hier liegt ein Fehler vor. Außerdem kann die Funktion zur Definition eines neuen Balkens auch ohne die Funktion zum Kopieren der Zeit implementiert werden.
 
Valmars:

Werden wir alle Paare auf das aktuelle Instrument normalisieren?


Und wie lässt sich das korrekt umsetzen, so dass es keine Warnungen gibt?

In der ursprünglichen Version ist es so:

     int Digits_ = SymbolInfoInteger(Symbol_, SYMBOL_DIGITS) + 4;
     dsma2 = NormalizeDouble(SMA[2] - SMA[3], Digits_);      // MA am Standort 2-3
     dsma1 = NormalizeDouble(SMA[1] - SMA[2], Digits_);      // MA am Standort 1-2
[Gelöscht]  
AM2:

Wie kann man dies ohne Warnungen umsetzen?

In der ursprünglichen Version ist es so:

Was hat +4 damit zu tun? So sollte es logischerweise sein

int Digits_ = SymbolInfoInteger(Symbol_, SYMBOL_DIGITS);
dsma2 = NormalizeDouble(SMA[2] - SMA[3], Digits_); // MA am Standort 2-3
dsma1 = NormalizeDouble(SMA[1] - SMA[2], Digits_); // MA am Standort 1-2
 
Interesting:

Was hat das mit +4 zu tun? Es soll logisch sein.

So geht auch die Warnung:

möglicher Datenverlust durch Typkonvertierung Multik.mq5 218 18

 
AM2:

So geht auch die Warnung:

möglicher Datenverlust durch die Typkonvertierung Multik.mq5 218 18

Um Warnungen zu vermeiden, müssen Sie die Konvertierung wie folgt vornehmen

int Digits_ = (int)SymbolInfoInteger(Symbol_, SYMBOL_DIGITS);
 

Gute Arbeit, aber verliert Multi-Instrument nicht seinen Sinn, wenn man mit denselben Setups mit gleichartigen Paaren handelt? Ich würde erwarten, dass ihre Drawdowns etwa zur gleichen Zeit auftreten, und das kann ein Problem sein. Leider sind jedoch alle Währungspaare so eng miteinander verbunden, dass dies unvermeidbar ist. Ich handele die Währungspaare EUR/USD, GBP/USD auch zusammen, aber für das eine verwende ich einen Trendfolger, für das andere einen Umkehr-, Tops-and-Bottoms-EA.

 
sergey1294:

Wenn Sie keine Warnungen erhalten wollen, müssen Sie die Konvertierung wie folgt vornehmen.

Danke, es funktioniert!
 

request.volume = Money_M();

Dieser EA ist ein großartiges Beispiel für organisierten Code und hat tolle Kommentare. Ich habe jedoch eine Frage zu Ihrer Losgrößenfunktion namens Money_M(). Was und wo ist der Entscheidungsbaum dahinter?

Ich habe versucht, die Support-Website zu durchsuchen, konnte aber keinen Hinweis finden, und es schien nicht mit einer zugehörigen Klasse verknüpft zu sein.

[Gelöscht]  
bdwezensky:

request.volume = Money_M();

Dieser EA ist ein großartiges Beispiel für organisierten Code und hat tolle Kommentare. Ich habe jedoch eine Frage zu Ihrer Losgrößenfunktion namens Money_M(). Was und wo ist der Entscheidungsbaum dahinter?

Ich habe versucht, die Support-Website zu durchsuchen, konnte aber keinen Verweis finden, und es schien nicht mit einer zugehörigen Klasse verknüpft zu sein.

double Money_M()
  {
   double Lots=AccountInfoDouble(ACCOUNT_FREEMARGIN)/100000*10;
   Lots=MathMin(5,MathMax(0.1,Lots));
   if(Lots<0.1)
      Lots=NormalizeDouble(Lots,2);
   else
     {
      if(Lots<1) Lots=NormalizeDouble(Lots,1);
      else       Lots=NormalizeDouble(Lots,0);
     }
   return(Lots);
  }

Diese Funktion wird verwendet, um die Größe von Handelspartien zu berechnen.

double Lots=AccountInfoDouble(ACCOUNT_FREEMARGIN)/100000*10;

In diesem String wird die berechnete Größe der Handelslose angegeben. Die Berechnung wird mit freiem Geld(ACCOUNT_FREEMARGIN) durchgeführt. Risiko = 10% der verfügbaren freien Mittel.

Lots=MathMin(5,MathMax(0.1,Lots));
In dieser Zeile wird die Normalisierung der Handelslose durchgeführt. 0.1 <= Lot <= 5.0