Fehler, Irrtümer, Fragen - Seite 932

 
notused:

Die Fernagenten sind seit einigen Monaten regelmäßig (mehrmals pro Woche) aus Platzmangel abgereist:

oder

und die Agentenprotokolle sind entweder sauber oder:

und es gibt tatsächlich jede Menge Platz:

Tritt auf, wenn man etwas Schweres testet (ich meine eine Multiview-Ansicht von 10 Tools über einen Zeitraum von ein oder zwei Jahren). Es scheint, dass der Agent irgendwann eine Megadatei erstellen will (obwohl es im EA keine Drucke oder Dateien gibt, mit denen man arbeiten kann). Alles in allem ist es wirklich schwer geworden, zu arbeiten.

Zählung: Ein Jahr Tick-Historie (alle Ticks im M1-Modus) erfordert etwa 3 GB Festplattenspeicher für temporäre Dateien (achten Sie auf den Ordner "...\tester\Agent-0.0.0.0-xxxxx\temp", wenn ein umfangreicher Job läuft). Multiplizieren Sie mit der Anzahl der Bearbeiter. 17 Gigabyte sind bereits knapp bemessen (und wenn Sie 8 Agenten haben, sind Sie schon darüber).

Lustiger Name für einen Expert Advisor. ;)

PS.Tester (743) wird durch ungenannte Grenzwerte ausgebremst...

 

Hilfe, bitte. Warum findet es den Handel nicht (Fehler 4755)?

void OnTradeTransaction(const MqlTradeTransaction& trans,
                        const MqlTradeRequest& request,
                        const MqlTradeResult& result) {
  if ((trans.type == TRADE_TRANSACTION_DEAL_ADD) && (trans.symbol == _Symbol)) {
    if (HistoryDealSelect(trans.deal)) {
      long DealMagic;
      if (HistoryDealGetInteger(trans.deal, DEAL_MAGIC, DealMagic)) {
        //
      }
      else Print("HistoryDealGetInteger(" + (string)trans.deal + ", DEAL_MAGIC, DealMagic) = false! GetLastError() = ", GetLastError());
    }
    else Print("HistoryDealSelect(" + (string)trans.deal + ") = false! GetLastError() = ", GetLastError());
  }
}

Terminal-Liste:

2013.02.07 10:31:52   instant sell 0.01 EURUSD at 1.35354 (1.35354 / 1.35364 / 1.35354)
2013.02.07 10:31:52   deal #1028 sell 0.01 EURUSD at 1.35354 done (based on order #1028)
2013.02.07 10:31:52   deal performed [#1028 sell 0.01 EURUSD at 1.35354]
2013.02.07 10:31:52   order performed sell 0.01 at 1.35354 [#1028 sell 0.01 EURUSD at 1.35354]
2013.02.07 10:31:52   HistoryDealGetInteger(1028, DEAL_MAGIC, DealMagic) = false! GetLastError() = 4755
 
Ashes:

Rechnen Sie nach: Ein Jahr Tick-Historie (mit allen Ticks auf M1) erfordert etwa 3 GB Festplattenspeicher für temporäre Dateien (achten Sie auf den Ordner "...\tester\Agent-0.0.0.0-xxxxx\temp", wenn Sie einen umfangreichen Auftrag erhalten). Multiplizieren Sie mit der Anzahl der Bearbeiter. 17 Gigabyte sind bereits knapp bemessen (und wenn Sie 8 Agenten haben, sind Sie schon darüber).

Lustiger Name für einen Expert Advisor. ;)

Danke! Ich konnte ja nicht ahnen, dass 16 GB nicht ausreichen würden. Ich werde die Agenten auf eine andere Festplatte übertragen - 650 GB werden hoffentlich ausreichen.

Das habe ich früher auch gesehen - vor allem, wenn mein Computer beschäftigt ist. Aber in letzter Zeit, wenn der Computer geladen ist, schaltet ein einziger Testlauf das Terminal einfach ab (nicht wegen Platzmangels - das Terminal befindet sich dort, wo 650 GB freier Speicherplatz vorhanden ist). Aber wenn Sie alle möglichen Prozesse beenden, geht alles gut.
 
voix_kas:

Hilfe, bitte. Warum findet es keinen Handel (Fehler 4755)?

Es kann ein Problem mit HistoryDealSelect geben, wenn der Code im Strategie-Tester getestet wurde.

Link


 
sion:

Es kann ein Problem mit HistoryDealSelect geben, wenn der Code im Strategie-Tester getestet wurde.

ping


Wenn ich eine Konstruktion mit HistorySelect() verwende, funktioniert alles einwandfrei.

Es funktioniert nicht mit OnTradeTransaction. Dieses Ereignis tritt wahrscheinlich ein, bevor die Informationen über den Handel in einer Datenbank gespeichert werden. Trotz des ausdrücklichen Hinweises in der Dokumentation:

TRADE_TRANSACTION_DEAL_ADD -Hinzufügen eines Geschäfts zur Historie. Sie wird als Ergebnis der Ausführung von Aufträgen oder von Kontobewegungen durchgeführt.

 
voix_kas:

Wenn ich HistorySelect() verwende, funktioniert alles einwandfrei.

OnTradeTransaction funktioniert nicht. Wahrscheinlich tritt dieses Ereignis ein, bevor die Informationen über die Transaktion in einer Datenbank gespeichert werden. Trotz des ausdrücklichen Hinweises in der Dokumentation:

TRADE_TRANSACTION_DEAL_ADD -Hinzufügen eines Geschäfts zur Historie. Sie erfolgt als Folge der Ausführung eines Auftrags oder einer Transaktion im Kontostand.

Hier haben wir getestet, dass es durch HistorySelect() funktioniert, die gleiche Anfrage durch HistoryDealSelect schlägt bereits fehl. In diesem Beispiel hatte die Geschwindigkeit der Platzierung in der Datenbank keine Auswirkungen.

Prüfen Sie also im Strategietester? Auf der realen, höchstwahrscheinlich, wird gut funktionieren.

 
sion:

Hier haben wir getestet, es funktionierte durch HistorySelect(), die gleiche Anfrage durch HistoryDealSelect schlägt bereits fehl. In diesem Beispiel hatte die Geschwindigkeit der Platzierung in der Datenbank keine Auswirkungen.

Prüfen Sie also im Strategietester? Auf der realen, ist wahrscheinlich gut zu funktionieren.

Ich bestätige, dieser Code mit kastriert als HistorySelect() funktioniert gut:

void OnTradeTransaction(const MqlTradeTransaction& trans,
                        const MqlTradeRequest& request,
                        const MqlTradeResult& result) {
  if ((trans.type == TRADE_TRANSACTION_DEAL_ADD) && (trans.symbol == _Symbol)) {
    if (HistorySelect(0, TimeTradeServer())) {
      for (int i = 0; i < HistoryDealsTotal(); i++) {
        ulong Ticket = HistoryDealGetTicket(i);
        if (trans.deal == HistoryDealGetInteger(Ticket, DEAL_ORDER)) {
          Print(HistoryDealGetInteger(Ticket, DEAL_MAGIC));
          break;
        }
      }
    }
    else Log("HistorySelect(0, TimeTradeServer() = false! GetLastError() = ", GetLastError());
  }
}

Es bleibt abzuwarten, wann der Entwickler den offensichtlichen Fehler beheben wird.

 
Ja, ich überprüfe das im Strategietester. Es gibt kein Problem in Echtzeit.
 
voix_kas:
Ja, ich überprüfe das im Strategietester. Kein Problem in Echtzeit.
Tintz. Könnte sich als nützlich erweisen, wahrscheinlich hat sich auch nichts geändert.
 
sion:
Yountz. Es könnte sich als nützlich erweisen, wahrscheinlich hat sich auch nichts geändert.

Wie auch immer, ich habe eine Lösung für mein Problem gefunden. OhneOnTradeTransaction.

Es gibt eine zusätzliche Frage zur FunktionHistoryDealGetTicket().

In der Dokumentation steht, dass die Ticketnummer der Transaktion zurückgegeben wird. Die Fälle, in denen Fehler zurückgegeben werden, sind jedoch nicht explizit beschrieben, z. B. sollte der zurückgegebene Wert auf ">0" geprüft werden?

Ähnliches gilt für HistoryOrderGetTicket(). Das letztgenannte Beispiel enthält jedoch die Prüfung auf einen positiven Rückgabewert.

Eine Suche im Forum zeigt, dass die Leute den Rückgabewert sowohl bei einer Bestellung als auch bei einer Transaktion überprüfen.

Wahrscheinlich sollte eine solche Prüfung z. B. bei einer Transaktionsanforderung mit einer Auftragsnummer größer als HistoryDealTotal()-1 durchgeführt werden. Aber ich war den Entwicklern dankbar für die Klarheit in der Dokumentation für die MQL5-Sprache.