Schau mal hier: https://www.mql5.com/de/articles/6921
Hier ist eine umfangreiche Bibliothek für mq4 und mq5, die auch das bieten sollte, was Du brauchst.
Eventuell musst Du Dir einen Teil kopieren und anpassen.
- www.mql5.com
Hallo zusammen,
danke, das hat mir schon mal weitergeholfen, ich habe es jetzt wie folgt umgesetzt (MQL5):
void OnTick() { bool history = HistorySelectByPosition(positionInfo.Ticket()); for(int y=HistoryDealsTotal()-1;y>=0;y--) if(historyOrderInfo.SelectByIndex(y)) if(historyOrderInfo.Symbol()==symbolInfo.Name() && historyOrderInfo.Magic()==MagicNr) if(historyOrderInfo.TypeReason() == ORDER_REASON_SL) if(historyOrderInfo.OrderType() == ORDER_TYPE_BUY) { countSL_Sell++; }else if (historyOrderInfo.OrderType() == ORDER_TYPE_SELL) { countSL_Buy++; } ...
habe dafür extra die historyOrderInfo.mqh um die Methode "TypeReason" erweitert, denn die konnte das nicht.
ENUM_ORDER_REASON TypeReason(void) const; ENUM_ORDER_REASON CHistoryOrderInfo::TypeReason(void) const { return((ENUM_ORDER_REASON)HistoryOrderGetInteger(m_ticket,ORDER_REASON)); }
Er zählt jetzt die ersten Tage im Tester so wie er soll pro Stop-Loss einen auf den jeweiligen Zähler, läuft dann aber nach drei vier Tagen amok und schlägt mir in einem einzigen Tick bei einem einzigen Deal mit ORDER_REASON_SL auf einen Schlg zwischen 9-ca.22 auf den Zähler drauf...
Im Protokoll wird aber wie gesgt nur ein nerer SL-bedingter Deal aufgeführt.
Was stimmt da nicht?
Hallo zusammen,
danke, das hat mir schon mal weitergeholfen, ich habe es jetzt wie folgt umgesetzt (MQL5):
habe dafür extra die historyOrderInfo.mqh um die Methode "TypeReason" erweitert, denn die konnte das nicht.
Er zählt jetzt die ersten Tage im Tester so wie er soll pro Stop-Loss einen auf den jeweiligen Zähler, läuft dann aber nach drei vier Tagen amok und schlägt mir in einem einzigen Tick bei einem einzigen Deal mit ORDER_REASON_SL auf einen Schlg zwischen 9-ca.22 auf den Zähler drauf...
Im Protokoll wird aber wie gesgt nur ein nerer SL-bedingter Deal aufgeführt.
Was stimmt da nicht?
Du musst den zeitraum angeben in dem du suchen willst, das machst du mit HistorySelect
Hi amando, und wieder gebührt Dir mein Dank, das funktioniert jetzt mit der HistorySelect(0,TimeCurrent());
Aber er zählt jetzt blöderweise immer weiter hoch, selbst wenn ich meinen Zähler zwischenzeitlich auf 0 zurück setze check er ja bei jedem Tick die ganze Historie durch und trägt dann wieder alle Stopps ein, die darin vorkommen.
Wie sage ich ihm, dass er ab dem zweiten ausgelösten Stopp-Loss in einer Richtung die alte Historie vergessen/löschen soll und erst ab diesem Zeitpunkt mit einer Neuen beginnen darf?
Kann das ja nicht von der vergangenen Zeit in Sekunden oder Minuten abhängig machen…
Hi amando, und wieder gebührt Dir mein Dank, das funktioniert jetzt mit der HistorySelect(0,TimeCurrent());
Aber er zählt jetzt blöderweise immer weiter hoch, selbst wenn ich meinen Zähler zwischenzeitlich auf 0 zurück setze check er ja bei jedem Tick die ganze Historie durch und trägt dann wieder alle Stopps ein, die darin vorkommen.
Wie sage ich ihm, dass er ab dem zweiten ausgelösten Stopp-Loss in einer Richtung die alte Historie vergessen/löschen soll und erst ab diesem Zeitpunkt mit einer Neuen beginnen darf?
Kann das ja nicht von der vergangenen Zeit in Sekunden oder Minuten abhängig machen…
Relativ einfach, setz den zähler vor der schleife einfach auf 0
dann beginnt er immer bei 0 und du bekommst das gewünschte ergebnis
Relativ einfach, setz den zähler vor der schleife einfach auf 0
dann beginnt er immer bei 0 und du bekommst das gewünschte ergebnis
Hi amando,
also das klappt nicht, da er sofort nach dem O-setzen ja wieder die ganze Historie durchcheckt und den Zähler dann wieder auf den Höchststand setzt.
habs jetzt so gelöst:
HistorySelect(start_time,TimeCurrent());
Die Variable start_time wird mit 0 initialisiert und bei bestimmten if-Kriterien einfach auf TimeCurrent() gesetzt und er zählt damit nur noch ab dem gewünschten Zeitpunkt. Die Zähler werden dann automatisch auf Null zurückgesetzt.
Der Profitfaktor hat sich durch die Methode nochmal erhöht
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Hallo zusammen,
für meinen RSI EA möchte ich Positionen, die in den fixen Stop-Loss laufen begrenzen. Maximal soll er ein zweites oder drittes Mal hintereinander eine Position derselben Richtung (buy oder sell) eröffnen dürfen, wenn die vorherige Position(en) negativ ausgestoppt wurden. Beim RSI kann das nämlich dann relativ schnell passieren, wenn der Markt pausenlos fällt oder steigt ohne Korrektur. Ein normaler RSI-EA öffnet dann ständig Positionen, die zigmal hintereinander negativ ausgestoppt werden...
Welcher Aufruf gibt mir welchen Wert zurück, wenn eine Position ausgestoppt wird? Das würde ich dann gerne über eine Schleife Zählen lassen, damit die Neueröffnungen begrenzen und erst bei einem Richtungswechsel auf Null zurücksezten, so der Plan
Wer kennt sich aus?
Danke vorab.