Fehler, Irrtümer, Fragen - Seite 479

 
Schreiben Sie dann an servicedesk und fügen Sie den Code bei.
 
sergeev:

Schreiben Sie dann an Service Desk und fügen Sie den Code bei.

Ja, es ist besser, dem Service Desk den Expertencode beizufügen.

Machen Sie sich keine Sorgen um den Code - wir löschen alles nach den Tests. Unsere wichtigste und einzige Aufgabe ist es , Fehler zu finden.

 

Eine andere Frage. Ich verwende die Funktion CopyTime. Anrufen:

CopyTime("EURUSD", PERIOD_MN1, D'2011.06.30', D'2011.08.01', Array)

gibt aus irgendeinem Grund nur ein Element mit dem Wert D'2011.08.01' zurück. Wo ist eigentlich D'2011.07.01'? Was ist der Trick?

P.S. Array[] ist ein dynamisches Array.

 
marketeer:

Eine andere Frage. Ich verwende die Funktion CopyTime. Anrufen:

gibt aus irgendeinem Grund nur ein Element mit dem Wert D'2011.08.01' zurück. Wo ist eigentlich D'2011.07.01'? Wo ist der Haken?

P.S. Das Array Array[] ist dynamisch.

Ja, aus irgendeinem Grund wird das erste Element übersprungen, schreiben Sie an servicedesk.

datetime Array[];
   CopyTime("EURUSD", PERIOD_MN1, D'2011.06.01', D'2011.08.01', Array); 
   for(int i=0;i<ArraySize(Array);i++)
     {
      Print(i," ",Array[i]);
     }

1 2011.08.01 00:00:00

0 2011.07.01 00:00:00

 
marketeer:

Eine andere Frage. Ich verwende die Funktion CopyTime.

Es gibt bereits eine ähnliche Anwendung.

Es herauszufinden.

 

Hier ist ein weiteres Rätsel. Ich kann mich nicht anstecken - ich weiß nicht, ob es mein Fehler ist oder der des Terminals.

Es gibt einen trivialen Code, der die Anzahl der vom Expert Advisor erteilten Aufträge zählt. Der Zähler wird in globalen Variablen gespeichert. Das sieht folgendermaßen aus:

int Count;

int OnInit()
{
  Count = (int)GlobalVariableGet("Count");
  return(0);
}

void OnTick()
{
  // bla-bla-bla
  if(успешно отправлен ордер)
  {
    Count++;
    if(!MQL5InfoInteger(MQL5_TESTING))
    {
      if(GlobalVariableSet("Count", Count) == 0)
      {
        Print("GlobalVariableSet error ", GetLastError());
      }
    }
  }
}

Diese Zahl wird in Bestellkommentaren verwendet. Infolgedessen stelle ich gelegentlich fest, dass die nächste Auftragsnummer (um einige Einheiten) niedriger ist als die Anzahl der Positionen, die bereits auf dem Markt sind. Das Protokoll enthält keine Fehler.

Haben Sie eine Ahnung? Vielleicht ist jemand auf ein ähnliches "Verschwinden" der letzten Werte globaler Variablen gestoßen, z.B. weil sie beim Beenden des Terminals unter bestimmten Bedingungen nicht gespeichert werden (nun, vielleicht in einem Fall, in dem die Verbindung unterbrochen wird - nur eine Version)?

Документация по MQL5: Глобальные переменные терминала / GlobalVariableGet
Документация по MQL5: Глобальные переменные терминала / GlobalVariableGet
  • www.mql5.com
Глобальные переменные терминала / GlobalVariableGet - Документация по MQL5
 
marketeer:

Hier ist ein weiteres Rätsel. Ich kann mich nicht anstecken - ich weiß nicht, ob es mein Fehler ist oder der des Terminals.

Versuchen Sie so etwas. Ich habe es nicht wirklich global gemacht. Aber es zählt richtig.

    int Amount_Orders = 0;

    for(count = 0; count < OrdersTotal(); count++)
       {  
        if(OrderSelect(OrderGetTicket(count))) 
          {
           int tp_ord = (ENUM_ORDER_TYPE)OrderGetInteger(ORDER_TYPE);  
           if(tp_ord == ORDER_TYPE_BUY_STOP  || tp_ord == ORDER_TYPE_SELL_STOP ||
              tp_ord == ORDER_TYPE_BUY_LIMIT || tp_ord == ORDER_TYPE_SELL_LIMIT)
           Amount_Orders++;  
          }
       }
 
tol64:

Versuchen Sie so etwas. Ich habe es nicht wirklich global gemacht. Aber es zählt richtig.

Das Problem, das ich habe, ist, dass der Wert, der in die globale Variable geschrieben wird, verloren geht, d.h. nicht vollständig (wie beim Löschen durch monatliche Zeitüberschreitung), sondern der alte Wert bleibt. Sie können die Aufträge natürlich neu berechnen, aber meine Methode sollte auch funktionieren.
 
papaklass:

An die Entwickler:

Ist es beabsichtigt, dass die Schließung einer Order bis zu ihrer Verfallszeit in keiner Weise von OnTrade verfolgt wird?

PS: Der Zweck des Handlers für Handelsereignisse OnTrade ist nicht klar: Wenn ein Stop-Loss oder Take nicht abgefangen wird, wenn eine schwebende Order bis zu ihrer Verfallszeit geschlossen wird, wird sie nicht abgefangen. Wir müssen während des Algorithmuslaufs alles doppelt überprüfen. Dieser Ansatz führt zu Verwirrung, weil wir uns auf den Handler für Handelsereignisse verlassen, ihn aber doppelt überprüfen müssen. Umso mehr, dass wir nach einer doppelten Überprüfung Ereignisse abfangen, die nicht von OnTrade() behandelt werden. Warum ist das notwendig? Aber jetzt können wir Tetris spielen und allen möglichen Unsinn auf Karten zeichnen. Die Entwickler, bitte bringen Sie den Handelsteil der Plattform zu seinem logischen Abschluss.

Zu laufenden Aufträgen kann ich nichts sagen, da ich noch nicht mit ihnen gearbeitet habe.

Zum Beispiel gibt der OnTrade-Handler diese Zeilen in das Protokoll aus:

2011.08.08 09:03:05 ChTestExp (EURUSD,H1) Long-Position von EURAUD wird mit Stop-Loss geschlossen
2011.08.08:09:03:05 ChTestExp (EURUSD,H1) -----------------Deal #5263582 [sl 1.37819]
2011.08.08 09:03:05 ChTestExp (EURUSD,H1) oldDealsTotal=558 newDealsTotal=559
 
papaklass:

Fügen Sie die Funktion Print(__FUNCTION__) in die Funktion OnTrade() ein. Und wenn Sie es in Ihrem Logbuch haben

Stop-Loss ausgelöst buy 0.10 AUDUSD 0.89783 sl: 0.89544 tp: 0.90024 [#15 sell 0.10 AUDUSD at 0.89544]
Geschäft #7 Verkauf 0.10 AUDUSD zu 0.89544 abgeschlossen (basierend auf Auftrag #15)
Geschäft durchgeführt [#7 Verkauf 0,10 AUDUSD bei 0,89544]
Auftrag ausgeführt Verkauf 0,10 zu 0,89544 [#15 Verkauf 0,10 AUDUSD zu 0,89544]

Können Sie überprüfen, ob OnTrade() funktioniert hat?

Bei mir funktioniert alles auch ohne Ihre Eingabe, denn alle Geschäfte, ihre Volumina, Gewinne werden berechnet, es wird alles summiert und in OnDeinite für jedes Symbol einzeln angezeigt. Da alle summierten Parameter (Anzahl der Trades, Gewinn) genau mit dem Bericht des Testers übereinstimmen, habe ich keinen Grund, an OnTrade() zu zweifeln.

Das Einzige, was nicht in OnTrade() verarbeitet wird, sind die Transaktionen der Positionsschließung am Ende des Tests (mit dem Kommentar 'end of test') und die Schließung durch einen Stop Out im Tester (Kommentar 'so ...'), im Testmodus müssen wir sie zusätzlich in OnDeinit verarbeiten. Auszug aus dem Protokoll des Testers:

2011.08.09 00:06:43 Kern 1 Protokolldatei "E:\Programme\MetaTrader 5\Tester\Agent-127.0.0.1-3000\logs\20110809.log" geschrieben
2011.08.09 00:06:43 Core 1 EURUSD,H1: 888296 Ticks (275 Balken) generiert innerhalb von 13962 ms (Gesamtbalken in der Historie 6479, Gesamtzeit 16177 ms)
2011.08.09 00:06:43 Kern 1 Stopout bei 8% des Testintervalls aufgetreten
2011.08.09 00:06:43 Kern 1 2011.01.18 10:11:00 Deinit Ende
2011.08.09 00:06:43 Kern 1 2011.01.18 10:11:00 Alle Gewinn = -9072,04
2011.08.09 00:06:43 Kern 1 2011.01.18 10:11:00 Geschäfte insgesamt: 17
.....
2011.08.09 00:06:43 Kern 1 2011.01.18 10:11:00 ----------------------------------------
2011.08.09 00:06:43 Kern 1 2011.01.18 10:11:00 Gesamtgewinn EURGBP = -4738.97
2011.08.09 00:06:43 Kern 1 2011.01.18 10:11:00 Gewinn für die Woche EURGBP = 319.68
2011.08.09 00:06:43 Kern 1 2011.01.18 10:11:00 GBPUSD Gesamtgewinn = -3775.86
2011.08.09 00:06:43 Kern 1 2011.01.18 10:11:00 Gewinn für die Woche GBPUSD = -1798.83
2011.08.09 00:06:43 Kern 1 2011.01.18 10:11:00 Gesamtgewinn EURUSD = -557.21
2011.08.09 00:06:43 Kern 1 2011.01.18 10:11:00 Gewinn für die Woche EURUSD = 65.85
2011.08.09 00:06:43 Kern 1 2011.01.18 10:11:00 Saldo=927,96 Eigenkapital=927,96 Gewinn=0,00 Margenniveau=0,00
2011.08.09 00:06:43 Kern 1 2011.01.18 10:11:00 ---------------Bericht-------------------
2011.08.09 00:06:43 Kern 1 2011.01.18 10:11:00 Saldo=10000.00 Equite=927.96 Gewinn=0.00 MarginLevel=0.00
2011.08.09 00:06:43 2011.01.18 10:11:00 Kern 1 Fehler beim Öffnen: 1 Fehler beim Schließen: 0 Fehler beim Ändern: 0 Requotes: 1
2011.08.09 00:06:43 Kern 1 2011.01.18 10:11:00 Laufzeit: 0 min. 14 sec.
2011.08.09 00:06:43 Core 1 2011.01.18 10:11:00 ChTestExp Expert Advisor beendet Arbeit auf EURUSD Chart, H1 Periode
2011.08.09 00:06:43 Kern 1 2011.01.18 10:11:00 Deinit-Ausführung
2011.08.09 00:06:43 Core 1 2011.01.18 10:11:00 OnDeinit_UninitReason = Ein anderer Grund
2011.08.09 00:06:43 Kern 1 OnTestergebnis 0
2011.08.09 00:06:43 Kern 1 2011.01.18 10:11:00 Auftrag Kauf 1,65 zu 1,59804 [#69 Kauf 1,65 GBPUSD zu 1,59804]
2011.08.09 00:06:43 Core 1 2011.01.18 10:11:00 Geschäft durchgeführt [#68 buy 1.65 GBPUSD at 1.59804]
2011.08.09 00:06:43 Core 1 2011.01.18 10:11:00 Geschäft #68 Kauf 1,65 GBPUSD zu 1,59804 erledigt (basierend auf Auftrag #69)
2011.08.09 00:06:43 Core 1 2011.01.18 10:11:00 Position geschlossen wegen Ende des Tests bei 1,59804 [sell 1,65 GBPUSD 1,57341182 tp: 1,57247]
2011.08.09 00:06:43 Kern 1 2011.01.18 10:11:00 Auftrag Kauf 0,45 zu 0,83931 [#68 Kauf 0,45 EURGBP zu 0,83931]
2011.08.09 00:06:43 Core 1 2011.01.18 10:11:00 Auftrag ausgeführt [#67 buy 0.45 EURGBP at 0.83931]
2011.08.09 00:06:43 2011.01.18 10:11:00 Geschäft #67 Kauf 0.45 EURGBP zu 0.83931 erledigt (basierend auf Auftrag #68)
2011.08.09 00:06:43 Core 1 2011.01.18 10:11:00 position stop triggered at 29.09% [sell 0.45 EURGBP 0.83930333 tp: 0.80463]
2011.08.09 00:06:43 Kern 1 2011.01.17 14:39:39 Lange Position durch EURUSD zu schließen von stop-loss
2011.08.09 00:06:43 Kern 1 2011.01.17 14:39:39 -----------------Deal #66 sl 1.32900

2011.08.09 00:06:43 Kern 1 2011.01.17 14:39:39 oldDealsTotal=65 newDealsTotal=66

Aus dem Bericht des Testers:

Ergebnisse
Qualität der Geschichte: 100%
Bars: 275 Tiki: 888296
Reingewinn: -9 072.04 Gesamtgewinn: 1 652.29 Totalverlust: -10 724.33
Rentabilität: 0.15 Erwartete Auszahlung: -533.65
Erholungsfaktor: -0.92 Sharpe Ratio: -0.35

Bilanzverkürzung:
Absolute Bilanzverkürzung: 9 072.04 Maximale Inanspruchnahme in der Bilanz: 10 392.34 (91.80%) Relative Inanspruchnahme nach Bilanzsumme: 91.80% (10 392.34)
Inanspruchnahme der Mittel:
Absolute Inanspruchnahme der Mittel: 9 072.04 Maximale Inanspruchnahme der Mittel: 9 852.02 (91.39%) Relative Inanspruchnahme der Mittel: 91.39% (9 852.02)

Gesamter Handel: 17 Short Trades (% der Gewinner): 10 (70.00%) Long Trades (% Gewinne): 7 (85.71%)
Gesamter Handel: 67 Gewinnbringende Abschlüsse (% aller Abschlüsse): 13 (76.47%) Verlustgeschäfte (% von allen): 4 (23.53%)

Größter profitabler Handel: 263.25 Größter Verlusthandel: -5 036.39

Durchschnittlich profitabler Handel: 127.10 Durchschnittlicher Verlusthandel: -2 681.08

Maximale Anzahl von Dauergewinnen (Gewinn): 10 (1 320.30) Maximale Anzahl von kontinuierlichen Verlusten (Verlust): 2 (-4 084.59)

Maximale Anzahl von kontinuierlichen Gewinnen (Anzahl der Gewinne): 1 320.30 (10) Maximaler Dauerverlust (Anzahl der Verluste): -5 036.39 (1)

Durchschnittliche Dauergewinne: 4 Durchschnittliche kontinuierliche Verluste: 1


Wie Sie sehen können, sind die unabhängig voneinander berechneten Gesamtwerte gleich, d. h. alles ist korrekt. Ich habe das Beispiel mit dem Stopp absichtlich herausgenommen.