Fehler, Irrtümer, Fragen - Seite 4

 
Interesting:

MarketInfo(Symbol(),MODE_MARGININIT) = SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL)

Was entspricht dann MODE_MARGINREQUIRED? Oder anders gefragt, woher weiß ich, wie viel freies Geld ich brauche, um 1 Los zu öffnen und zu kaufen?

In Moving Average.mq5 Expert Advisor von mql5 creators werden die Lose wie folgt berechnet

input double MaximumRisk        = 0.02;    // Maximum Risk in percentage
input double DecreaseFactor     = 3;       // Descrease factor
input int    MovingPeriod       = 12;      // Moving Average period
input int    MovingShift        = 6;       // Moving Average shift
//---
int   ExtHandle=0;
//+------------------------------------------------------------------+
//| Calculate optimal lot size                                       |
//+------------------------------------------------------------------+
double TradeSizeOptimized(void)
  {
//--- select lot size
   double lot=NormalizeDouble(AccountInfoDouble(ACCOUNT_FREEMARGIN)*MaximumRisk/1000.0,2);

Warum ist MaximumRisk so klein (0,02%) und wird bei der Berechnung der Lose durch 1000 geteilt? Wofür steht diese 1000? Vielleicht 1000 = verfügbare Mittel, die zum Kauf von 1 Lot benötigt werden, multipliziert mit 100% (um 0,02% in 0,0002 Bruchteile umzuwandeln)? Das heißt, die verfügbaren Mittel für den Kauf eines Loses betragen $10 ($10x100%=1000). Geht es in die richtige Richtung, wie ich finde?

Und noch eine Frage. Gibt es eine Obergrenze für die Anzahl der offenen Aufträge?

 
gpwr:

Was entspricht dann MODE_MARGINREQUIRED? Oder woher weiß ich sonst, wie viel Geld zur Verfügung steht, um 1 Los zum Kauf zu eröffnen?

Und noch eine Frage. Gibt es eine Obergrenze für die Anzahl der offenen Aufträge?


Ich habe mir diese Frage gestellt.


Hier ist die Antwort der Entwickler:

Rashid Umarov:

Siehe

SYMBOL_TRADE_CONTRACT_SIZE

Größe des Handelsvertrags

doppelt

и

SYMBOL_WAEHRUNG_MARGIN

Währung, in der die Marge berechnet wird

String


So wie ich das verstehe, müssen Sie das selbst berechnen.

 

gpwr:

In Moving Average.mq5 Expert Advisor von mql5 creators werden die Lose wie folgt berechnet

Warum ist MaximumRisk so klein (0,02%) und wird bei der Berechnung der Lose durch 1000 geteilt? Wofür steht diese 1000? Vielleicht 1000 = verfügbare Mittel, die zum Kauf von 1 Lot erforderlich sind, multipliziert mit 100% (um 0,02% in 0,0002 Bruchteile umzuwandeln)? Das heißt, die verfügbaren Mittel für den Kauf eines Loses betragen $10 ($10x100%=1000). Geht es in die richtige Richtung, wie ich finde?

Und noch eine Frage. Gibt es eine Obergrenze für die Anzahl der offenen Aufträge?


AccountInfoDouble(ACCOUNT_FREEMARGIN)*MaximumRisk

In dieser Zeile wird das Risiko mit 2 % des Betrags der freien Mittel berechnet, wenn ich das richtig verstanden habe. Warum wird dieser Betrag durch 1000 geteilt?


Aber wenn ich richtig verstehe, dann mit einer Einzahlung (freie Mittel) von $ 20.000, empfiehlt der Expert Advisor, nicht mehr als 2% dieses Betrags ($ 400) zu öffnen.

Dividiert man diesen Betrag durch 1.000, so erhält man logischerweise 0,4 Lot...

 

gpwr:

Gibt es eine Obergrenze für die Anzahl der offenen Aufträge?

Das habe ich mich auch schon gefragt. Es gibt einen Vorschlag, über den die Entwickler noch nachdenken (für sie übrigens - Antrag 15802).
 
Interesting:

In dieser Zeile wird das Risiko mit 2 % der verfügbaren Mittel berechnet, wenn ich das richtig verstanden habe. Warum dieser Betrag durch 1.000 geteilt wird, bleibt den Entwicklern überlassen.

Aber wenn ich richtig verstehe, dann mit einer Einzahlung (freie Mittel) von $ 20.000, empfiehlt der Expert Advisor, nicht mehr als 2% dieses Betrags ($ 400) zu öffnen.

Dividiert man diesen Betrag durch 1.000, so erhält man logischerweise 0,4 Lot...

Jetzt habe ich es verstanden. Es gibt einen Fehler in der Datei Moving Average.mq5. Anstelle von

input double MaximumRisk        = 0.02;    // Maximum Risk in percentage

Es sollte sein

input double MaximumRisk        = 0.02;    // Maximum Risk as a fraction  of a free margin

Dann ist die Division durch 1000 bei der Berechnung der Lose klar: 100.000 $(Losgröße)/100(Hebelwirkung) = 1000. Allerdings dürfen die mql5-Entwickler ein solches Beispiel für einen Expert Advisor nicht zeigen. Sie sollte geändert werden

double lot=NormalizeDouble(AccountInfoDouble(ACCOUNT_FREEMARGIN)*MaximumRisk/1000.0,2);

An

double LotSize    =SymbolInfoDouble(_Symbol,SYMBOL_TRADE_CONTRACT_SIZE);
int    Leverage   =AccountInfoInteger(ACCOUNT_LEVERAGE);
double FreeMargin =AccountInfoDouble(ACCOUNT_FREEMARGIN);  
double LotRqdMgn  =LotSize/Leverage;
double lot        =NormalizeDouble(FreeMargin*MaximumRisk/LotRqdMgn,2);

Oder noch besser

double Step       =SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP);
double LotSize    =SymbolInfoDouble(_Symbol,SYMBOL_TRADE_CONTRACT_SIZE);
int    Leverage   =AccountInfoInteger(ACCOUNT_LEVERAGE);
double FreeMargin =AccountInfoDouble(ACCOUNT_FREEMARGIN);  
double LotRqdMgn  =LotSize/Leverage;
double lot        =NormalizeDouble(MathFloor(FreeMargin*MaximumRisk/LotRqdMgn/Step)*Step,2);

Es ist allerdings schade, dass MODE_MARGINREQUIRED verloren gegangen ist. Vielleicht werden die Entwickler diesen Parameter wiederherstellen, um die Anzahl der Berechnungen zu verringern.

 
Interesting:
stringo:
Kurznamen wurden bisher immer nur für die Anzeige im Teilfenster Indikator verwendet
Also wird es dort nicht angezeigt, entweder ist es ein Fehler oder ich verstehe etwas nicht...
Der Fehler wurde gefunden und behoben, 16051 kann geschlossen werden.
 

Ich weiß nicht, ob ich meine Fehlerberichte an die richtige Stelle schreibe. Falls nicht, korrigieren Sie mich bitte.

Beim Testen meines EA habe ich absichtlich eine solche Situation geschaffen, um zu sehen, ob der Tester die Marge korrekt ermittelt. Also, die Kaution von 100 Dollar. Wir handeln EURUSD. Die Mindestlosgröße beträgt 0,1. Der folgende Code zur Berechnung der Lose befindet sich im Expert Advisor

double volMin     =SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN);
double LotSize    =SymbolInfoDouble(_Symbol,SYMBOL_TRADE_CONTRACT_SIZE);
long   Leverage   =AccountInfoInteger(ACCOUNT_LEVERAGE);
double FreeMargin =AccountInfoDouble(ACCOUNT_FREEMARGIN);  
double LotRqdMgn  =LotSize/Leverage;
double vol=NormalizeDouble(MathFloor(FreeMargin*MaxRisk/LotRqdMgn/Step)*Step,2);
if(vol<volMin) vol=volMin;
if(vol*LotRqdMgn>FreeMargin) vol=0.0;
Print(LotRqdMgn," ",FreeMargin);
return(vol);

Das Prüfgerät erzeugt diese Fehler

2010.06.08 22:28:57 Kern 1 nicht genug Geld [Sofortkauf 0,10 EURUSD zu 1,19242]
2010.06.08 22:28:57 Kern 1 PrevBalance: 100.00, PrevEquity 100.00, PrevMargin: 0.00, NewMargin: 119.24, NewFreeMargin: -19.24
2010.06.08 22:28:57 Kern 1 1000 100
2010.06.08 22:28:57 Kern 1 nicht genug Geld [Sofortkauf 0,10 EURUSD zu 1,19180]
2010.06.08 22:28:57 Kern 1 PrevBalance: 100.00, PrevEquity 100.00, PrevMargin: 0.00, NewMargin: 119.18, NewFreeMargin: -19.18
2010.06.08 22:28:57 Kern 1 1000 100
2010.06.08 22:28:57 Kern 1 nicht genug Geld [Sofortkauf 0,10 EURUSD zu 1,19362]
2010.06.08 22:28:57 Kern 1 PrevBalance: 100,00, PrevEquity 100,00, PrevMargin: 0,00, NewMargin: 119,36, NewFreeMargin: -19,36
2010.06.08 22:28:57 Kern 1 1000 100

Nach diesen Meldungen zu urteilen, ist die für den Kauf von 1 Lot benötigte freie Marge, LotRqdMgn, gleich 1000, was korrekt zu sein scheint. FreeMargin=100. Multiplizieren Sie 0,1 Lot mit 1000 und Sie erhalten 100. Das bedeutet, dass wir genug Mittel haben, um das 1. Los zu eröffnen. Aber der Prüfer meldet, dass wir nicht genug Mittel haben. Wo liegt der Fehler?

 
gpwr:

Ausgehend von diesen Meldungen beträgt die für den Kauf von 1 Lot, LotRqdMgn, erforderliche freie Marge 1000, was korrekt zu sein scheint. FreeMargin=100. Multiplizieren Sie 0,1 Lot mit 1000 und Sie erhalten 100. Das bedeutet, dass wir genug Mittel haben, um das 1. Los zu eröffnen. Aber der Prüfer meldet, dass wir nicht genug Mittel haben. Wo liegt der Fehler?

Der Fehler liegt darin, dass Sie bei Ihren Berechnungen die Nachschusswährung vergessen haben: Saldo = 100 USD und Nachschusspflicht = 100 EUR (119 USD).

Deshalb können Sie keine Transaktion vornehmen - alles ist korrekt.

 
Renat:

Der Fehler liegt darin, dass Sie bei Ihren Berechnungen die Margin-Währung vergessen haben: Saldo = 100 USD und Margin-Anforderung = 100 EUR (119 USD).

Deshalb ist es nicht möglich, eine Transaktion vorzunehmen - alles ist korrekt.

Vielen Dank, Renat. Ich habe meinen Fehler verstanden. Ich habe die Formel für die LotRqdMgn-Berechnung geändert und alles funktioniert jetzt korrekt.

 

Ein neues Wort im Bibliothekswesen, oder das erstaunliche daneben...


Ich habe also einen Expert Advisor erstellt, der die Bibliothek verwendet, ihn überprüft und alles funktioniert. Ich habe ein Archiv mit dem Expert Advisor, dieser Bibliothek und einigen MQL5- und MQH-Dateien erstellt. Ich habe das Archiv dem Antragsteller/Entwickler zum Testen übergeben.


Das wäre in Ordnung, aber ich habe beschlossen, die Tests an einem anderen Terminal durchzuführen. Also entpackte ich das Archiv und beschloss, den Expert Advisor an den Chart anzuhängen.


Und im Terminaljournal stehen diese beiden Zeilen:

2010.06.10 09:54:51 PM Experten MechanicalTrading-Infinity-2010 (EURUSD,Daily)
2010.06.10 09:54:51 Experten Laden von MechanicalTrading-Infinity-2010 (EURUSD,Daily) fehlgeschlagen


Ich begann zu suchen, was und wie es funktioniert (oder besser gesagt, nicht funktioniert) und fand eine erstaunliche Tatsache - Terminal sieht kompilierte Bibliothek im Verzeichnis (als *.ex5), aber hartnäckig "sinkt" es, was nicht sehr gut ist, wie Sie verstehen...

Nachdem ich viele mögliche Gründe für ein solches Verhalten ausprobiert hatte, beschloss ich, die Originaldatei (als *.mq5) in den Ordner mit der Bibliothek zu legen. Ich habe versucht, einen EA zum Chart hinzuzufügen - oh mein Gott, alles funktioniert.


Im Laufe des Spiels kamen eine Reihe von Fragen auf:

1. Warum funktioniert der Expert Advisor nicht, wenn die Bibliothek nur als .ex5 dargestellt wird?

2. Warum löscht das Terminal diese Datei hartnäckig aus dem Verzeichnis?

3. Warum enthält das Terminalprotokoll keinen eindeutigen Kommentar zu all diesen Punkten?

4. Warum wird in der Dokumentation nicht erwähnt, dass dieses Verhalten möglich ist?


Und schließlich die fünfte und letzte Frage - wie komme ich mit all dem zurecht und was mache ich falsch (vielleicht fehlt dem Terminal eine EX5-Datei und er sucht nach etwas, zum Beispiel einer Header-Datei oder der Bibliothek selbst)?


PS

Übrigens, ich habe den gleichen Fehler mit Expert Advisors, hartnäckiges Löschen der *.ex5 Datei... :(

Grund der Beschwerde: