Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4973
Beiträge: 43256
Benutzer: 7.219
Aktive Benutzer: 81
Links: 84
Wir begrüßen unseren neuesten Benutzer: Hopfen&Malz
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor einem Tag
- Hopfen&Mal...
vor 2 Tagen
- frankmicha...
vor einer Woche
- DFeck
vor einer Woche
- bb1107
vor 2 Wochen
- rg-trader

Onlineuser
'Wer ist online' anzeigen Benutzer: 0
Gäste: 259
Gesamt: 259
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 16.11.22
Mitglied
 
Registriert seit: Aug 2020
Beiträge: 64
MarkusWilhelm89 befindet sich auf einem aufstrebenden Ast
Standard loop OrderHistoryTotal() --> Überladen

Hallo,
ich versuche für meinen EA eine Funktion zu erstellen, mit der ich abfrage, ob eine Order geschlossen wurde (bool = newClose).

Üblicherweiße nutze ich dafür den klassischen loop mit OrderHistoryTotal() und einem Zeitstempel.

Code:
bool              newClose       = false; 
static datetime   lastCloseTime  = 0;     
      
      for(int i=0; i<=OrdersHistoryTotal()-1; i++)
         if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) 
            if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber) 
               if(OrderCloseTime()>lastCloseTime) 
               {
                  newClose = true; 
                  lastCloseTime = OrderCloseTime();
               };

Leider wird gerade im Strategie-Tester der EA dann unglaublich langsam, je länger er läuft, da die Anzahl im OrderHistoryTotal() natürlich immer größer wird.

Daher die Frage, ob jemand einen alternativen loop-Ansatz hat um z.B.: nur die neuesten 50 geschlossenen Trades zu loop'en um die Schleife nicht gar zu groß werden zu lassen.

Einfach OrderHistoryTotal() durch zB 50 zu ersetzten und dann den loop mit i++ oder i-- laufen zu lassen, führt ja leider dazu, dass nach 50 History-Order keine weiteren mehr betrachtet werden... :-(

Für Tipps und Anregungen bin ich euch sehr dankbar
  #2 (permalink)  
Alt 16.11.22
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Ich würde die Schleife rückwärts laufen lassen, d.h. die letzte geschlossene Order wird zuerst abgefragt.

Code:
int i = 0;
bool newClose = false; 
static datetime lastCloseTime  = 0;     
      
for (i = OrdersHistoryTotal()-1; i >= 0; i--) {
   if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { 
         if (OrderCloseTime() > lastCloseTime) {
            newClose = true; 
            lastCloseTime = OrderCloseTime();
            break;
         } else break;
      }
   }
}
Diese Schleife wird sofort abbrechen, wenn eine geschlossene Order gefunden wird, deren Close-Time größer ist als die der Variablen lastCloseTime. Auch wird sie abgebrochen, wenn keine Order später als lastCloseTime gefunden wurde, um nicht unnütz alle historischen Orders abzufragen.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #3 (permalink)  
Alt 16.11.22
Mitglied
 
Registriert seit: Aug 2020
Beiträge: 64
MarkusWilhelm89 befindet sich auf einem aufstrebenden Ast
Standard

Danke für den Tipp.
Leider funktioniert es im StrategyTestern nicht.
Er verfällt in eine Schleife aus der erst nicht mehr raus kommt... also er läuft quasi gar nicht erst los da ich in der onTick erst mal nach newClose suche :-(
  #4 (permalink)  
Alt 16.11.22
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Das verstehe ich nicht.
In der unten geschriebenen Schleife kann er sich nicht verfangen.

Dann wäre es hilfreich, wenn Du den Code der OnTick-Funktion mal postest.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #5 (permalink)  
Alt 16.11.22
Mitglied
 
Registriert seit: Aug 2020
Beiträge: 64
MarkusWilhelm89 befindet sich auf einem aufstrebenden Ast
Standard

Wie dumm von mir.
Hab gerade festgestellt dass ich einen Tippfehler drin hazte.
Statt i >= 0 hatte ich 1 >=0

Sorry... mit der Korrektur läuft er durch.
Ich lass ihn mal über Nacht laufen und melde mich demnächst ob es die Lösung war. Daaanke schonmal
Thema geschlossen

Lesezeichen

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +1. Es ist jetzt 17:16 Uhr.





Suchmaschine - Reisen - Wavesnode - Facebook Forum - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------