Fehler, Irrtümer, Fragen - Seite 2411

 
Aleksey Sergan:



Bitte führen Sie diesen Code aus:Multicurrency iMA Trend 2.

Geben Sie in den Einstellungen ( Parameter Symbole) "EURUSD,GBPUSD" an.

Zu meiner Konfiguration

MetaTrader 5 x64 build 2009 started (MetaQuotes Software Corp.)
Windows 10 (build 17763) x64, IE 11, UAC, Intel Core i3-3120 M  @ 2.50 GHz, Memory: 3518 / 8077 Mb, Disk: 86 / 415 Gb, GMT+2
C:\Users\barab\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075

alle SLs zu ihren Symbolpreisen geschlossen. Das heißt, es liegt kein Preisüberschneidungsfehler vor.

 
Vladimir Karputov:

Bitte führen Sie diesen Code aus:Multicurrency iMA Trend 2.

Geben Sie in den Einstellungen ( Parameter Symbole) "EURUSD,GBPUSD" an.

Zu meiner Konfiguration

alle SLs zu ihren Symbolpreisen geschlossen. Das heißt, es liegt kein Preisüberschneidungsfehler vor.

Vielen Dank, der Fehler wurde lokalisiert. Beitrag unten.

 
Andrey Barinov:

Es gibt zwei Fehler.

№1. Ihr Fehler. Irgendwo im Code. Sie setzen SL für EURUSD-Positionen anhand des GBPUSD-Kurses. Das Terminal sollte nichts dagegen haben.

№2. Fehler im Terminal. Wenn dieser SL zum dann nicht existierenden Preis im EURUSD-Flow ausgelöst wird, wird der GBPUSD-Preis verwendet.

Andrej Barinow:

https://www.mql5.com/ru/docs/constants/structures/mqltraderequest

Offenbar hat beim Senden einer Änderungsanfrage das Positionsfeld Vorrang vor dem Symbol.Anfrageposition drucken

Ja, Sie hatten Recht, mein Fehler ist logisch:

in der Struktur:

MqlTradeRequest m_request;

m_request.position = #3

m_request.symbol = GBPUSD

m_request.sl = 1.60704

aktuelle Positionsnummer für GBPUSD #4

Wenn OrderSend ausgeführt wird, setzt der Prüfer einen Stopp für das Symbol, das der Position 3 entspricht, d. h. eurusd.

Tester-Fehler:

- prüft nicht, ob m_request.position und m_request.symbol übereinstimmen;

- setzt einen Stop bei 1,60704 für die Kaufposition, das Symbol eurusd, das einen aktuellen Kurs von 1,30935 hat;

- setzt beim nächsten Tick einen Stopp bei 1,60704, obwohl der tatsächliche Kurs bei 1,30935 liegt.

Ich danke Ihnen allen. Ich hoffe, dass die Entwickler der Plattform diesen Beitrag sehen werden.

 
Aleksey Sergan:

Ja, Sie hatten Recht, mein Fehler ist logisch:

In der Struktur:

MqlTradeRequest m_request;

m_request.position = #3

m_request.symbol = GBPUSD

m_request.sl = 1.60704

aktuelle Positionsnummer für GBPUSD #4

Wenn OrderSend ausgeführt wird, setzt der Prüfer einen Stopp für das Symbol, das der Position 3 entspricht, d. h. eurusd.

Tester-Fehler:

- prüft nicht, ob m_request.position und m_request.symbol übereinstimmen;

- setzt einen Stop bei 1,60704 für die Kaufposition, das Symbol eurusd, das einen aktuellen Kurs von 1,30935 hat;

- setzt beim nächsten Tick einen Stopp bei 1,60704, obwohl der tatsächliche Preis bei 1,30935 liegt.

Ich danke Ihnen allen. Ich hoffe, dass die Entwickler der Plattform den Beitrag sehen werden.

Die Ausführung eines Stopps für eine Kaufposition bei 1,60704 zum aktuellen Kurs von 1,30935 ist kein Fehler. Aber das Setzen eines Kaufstopps auf das Niveau von 1,60704 beim aktuellen Kurs von 1,30935 ist ein Fehler.

 

Bau 2007

Funktion:

bool GetDialLastProfit (string symbol, datetime startDate, datetime endDate, long magic, double &profit, double &lot)
{
  HistorySelect (startDate, endDate);
  int deals = HistoryDealsTotal ();
  ulong ticket;

  for (int i = deals - 1; i >= 0; i--)
  //for (int i = 0; i < deals; i++)
  {
    ticket = HistoryDealGetTicket (i);
    if (ticket != 0)
    {
      if (HistoryDealGetInteger(ticket, DEAL_MAGIC) == magic)
      {
        profit = HistoryDealGetDouble (ticket, DEAL_PROFIT);
        
        //if (!HistoryDealGetDouble(ticket, DEAL_PROFIT, profit))
        //  return false;
        
        lot    = HistoryDealGetDouble (ticket, DEAL_VOLUME);
        
        return (true);
      }
    }
  }

  return (false);
}

soll das finanzielle Ergebnis der Transaktion in die Gewinnvariable ausgeben, aber es stellt sich immer als 0,0 heraus, und der Wert in der Losvariable ist immer korrekt.

Liegt ein Fehler vor? - Oder mache ich etwas falsch?

 
Andrey Dik:

Bau 2007

Funktion:

soll das finanzielle Ergebnis der Transaktion in die Gewinnvariable ausgeben, aber es stellt sich immer als 0,0 heraus, und der Wert in der Losvariable ist immer korrekt.

Liegt ein Fehler vor? - Oder mache ich etwas falsch?

DEAL_ENTRY_OUT oder INOUT sollte geprüft werden. Die _IN-Geschäfte haben einen Gewinn von 0

 
Andrey Barinov:

DEAL_ENTRY_OUT oder INOUT sollten beobachtet werden. Die _IN-Geschäfte haben einen Gewinn von 0

Nun, der erste vom Ende der Liste ist besetzt, er sollte OUT sein

 
Andrey Dik:

Nun, es ist das erste vom Ende der Liste, es sollte OUT sein

Wenn Sie TimeCurrent() im endDate übergeben, ersetzen Sie es durch TimeCurrent()+60 oder etwas Ähnliches. Das sollte helfen.

 
Andrey Barinov:

Wenn Sie TimeCurrent() in endDate übergeben, ersetzen Sie es durch TimeCurrent()+60 oder etwas Ähnliches. Das sollte helfen.

Nein, es ist immer noch 0,0.

 
Andrey Dik:

Nein, es ist immer noch 0,0.

Dann debuggen Sie es. Drucken Sie Transaktionsscheine aus und sehen Sie im Prüfgerät, was dort tatsächlich ausgewählt ist. Fügen Sie einen Filter nach Handelsart hinzu.