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: 4898
Beiträge: 43025
Benutzer: 7.149
Aktive Benutzer: 79
Links: 83
Wir begrüßen unseren neuesten Benutzer: jacekart
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 23:38).
Neue Benutzer:
vor 16 Stunden
- jacekart
vor einer Woche
- SSC_Forex
vor einer Woche
- kenny0983
vor einer Woche
- fxNuri
vor 2 Wochen
- pedroo

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

Empfehlungen

Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt vor einer Woche
Mitglied
 
Registriert seit: Aug 2020
Beiträge: 63
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
Mit Zitat antworten
  #2 (permalink)  
Alt vor einer Woche
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.688
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.
Mit Zitat antworten
  #3 (permalink)  
Alt vor einer Woche
Mitglied
 
Registriert seit: Aug 2020
Beiträge: 63
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 :-(
Mit Zitat antworten
  #4 (permalink)  
Alt vor einer Woche
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.688
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.
Mit Zitat antworten
  #5 (permalink)  
Alt vor einer Woche
Mitglied
 
Registriert seit: Aug 2020
Beiträge: 63
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
Mit Zitat antworten
Antwort

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 +2. Es ist jetzt 02:48 Uhr.





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