Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien
Bibliotheken: CDouble & CDoubleVector
amrali, 2018.02.12 23:53
#define forEach(element, array) for (int __i = 0, __max = ArraySize((array)); __i < __max && ((element) = array[__i]) == (element); __i++)
Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien
Renat Fatkhullin, 2015.02.10 08:16
Ich habe den Code noch nicht ausgeführt, aber der Quellcode zeigt den klassischen Fehler des falschen Enddatums in HistorySelect.
Jeder erste Programmierer, der diese Funktion mit falschem Datum aufruft, schnappt sich ständig das Ende der Historie und stellt fest, dass ein "Long Time Trade in die Historie gelangt".
Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien
Renat Fatkhullin, 2015.02.10 09:15
Der Fehler besteht darin, dass die Leute nicht darüber nachdenken, was der aktuelle Zeitpunkt ist, und ein falsches Datum aus einer falschen Quelle einsetzen.
Es genügt, ein bekanntes, weit entferntes Datum als Enddatum anzugeben, nicht die veraltete ServerTime.
Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien
Renat Fatkhullin, 2015.02.10 13:56
Und das Start- und Enddatum sollte mit der Realisierung von Fehlern und mit einer obligatorischen Marge festgelegt werden. Das heißt, minus N sec und plus N sec als Minimum.
TimeTradeServer() ist keine rltime-genaue Zeit, sondern wird nur auf Preis-Ticks aktualisiert, die in der Marktübersicht eingehen.
Wenn Sie plötzlich keine Daten in der Verlaufsstichprobe haben, bedeutet dies zu 99 %, dass der Fehler in den Abfragegrenzen liegt.
HistorySelect(0, LONG_MAX);
Предопределённые переменные _XXXX переводятся в функции MQL5 при помощи беспараметрической формы #define:
//--- die Variable _Digits speichert die Anzahl der Stellen nach dem Dezimalpunkt, #define _Digits Digits()
//--- der letzte bekannte Verkäuferpreis (Briefkurs) für das aktuelle Symbol double GetAsk() { MqlTick tick; SymbolInfoTick(Symbol(),tick); return(tick.ask); }
Furchtbar teuer! Wenn Sie es wirklich durch die Struktur tun wollen, sollten Sie es zumindest getan haben. Und aus irgendeinem Grund gibt es keine Prüfung.
SymbolInfoDouble ist voll MT4-kompatibel.
#define IsTradeContextBusy true
Hm?
vielleicht falsch?Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien.
fxsaber, 26.09.2017 09:55 Uhr.
bool RefreshRates( void ) { return(true); } double MarketInfo( const string Symb, const ENUM_SYMBOL_INFO_DOUBLE Property ) { return(SymbolInfoDouble(Symb, Property)); } int MarketInfo( const string Symb, const ENUM_SYMBOL_INFO_INTEGER Property ) { return((int)SymbolInfoInteger(Symb, Property)); } bool IsTesting(void) { return(MQLInfoInteger(MQL_TESTER) || MQLInfoInteger(MQL_OPTIMIZATION)); } bool IsTradeContextBusy( void ) { return(false); } bool IsTradeAllowed(void) { return(MQLInfoInteger(MQL_TRADE_ALLOWED)); } bool IsExpertEnabled(void) { return(AccountInfoInteger(ACCOUNT_TRADE_EXPERT)); } int ObjectFind( const string Name ) { return(ObjectFind(0, Name)); } int ObjectsTotal( void ) { return(ObjectsTotal(0)); } bool ObjectDelete( const string Name ) { return(ObjectDelete(0, Name)); } string ObjectName( const int Pos ) { return(ObjectName(0, Pos)); } double AccountFreeMarginCheck(const string Symb,const int Cmd,const double dVolume) { double Margin; return(OrderCalcMargin((ENUM_ORDER_TYPE)Cmd, Symb, dVolume, SymbolInfoDouble(Symb, (Cmd == ORDER_TYPE_BUY) ? SYMBOL_ASK : SYMBOL_BID), Margin) ? AccountInfoDouble(ACCOUNT_MARGIN_FREE) - Margin : -1); } #define False false #define True true #define Digits _Digits #define Point _Point #define MODE_BID SYMBOL_BID #define MODE_ASK SYMBOL_ASK #define MODE_POINT SYMBOL_POINT #define MODE_DIGITS SYMBOL_DIGITS #define MODE_STOPLEVEL SYMBOL_TRADE_STOPS_LEVEL #define MODE_SPREAD SYMBOL_SPREAD #define StrToTime StringToTime #define StrToInteger StringToInteger #define TimeToStr TimeToString #define DoubleToStr DoubleToString #define Bid SymbolInfoDouble(_Symbol, SYMBOL_BID) #define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)
fxsaber:
В копилку
#define forEach(element, array) for (int __i = 0, __max = ArraySize((array)); __i < __max && ((element) = array[__i]) == (element); __i++)
Interessante und nicht offensichtliche Technik )
Wie viele verdrehte Dinge kann man tun?
Definieren ist eine dumme Ersetzung eines Textes durch einen anderen. Darin liegt keine Macht!
Versuchen Sie lieber, dasselbe bei Vorlagen zu tun.
Wie oft können Sie das tun?
Definieren ist eine dumme Ersetzung eines Textes durch einen anderen. Darin liegt keine Macht!
Weniger Text ist manchmal praktisch
Versuchen Sie lieber, dasselbe mit Vorlagen zu tun.
Es ist nur eine Frage der Machbarkeit, Benutzerfreundlichkeit und Leistung.

- 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.
Neuer Artikel LifeHack für Händler: ForEach mit #define zubereiten :
Eine Zwischenstufe für diejenigen, die immer noch in MQL4 schreiben und nicht auf MQL5 umsteigen können. Wir suchen weiter nach den Möglichkeiten, Codes im MQL4-Stil zu schreiben. Diesmal betrachten wir die Makrosubstitution des Präprozessors #define.
Das Erstellen von Expert Advisors oder Handelsrobotern geht immer mit viel Arbeit mit Schleifen einher. Schleifen umringen uns: Iteration über Orders, Trades in der Historie, Objekte im Chart, Symbolen in der Marktübersicht, Balken im Indikatorpuffer. Um das Leben des Programmierers ein bisschen zu erleichtern, wurden zum MetaEditor Snippets hinzugefügt. Wenn Sie anfängliche Zeichen eingeben und Tab drücken, werden sie automatisch zu einem kleinen Codeteil. So funktioniert ein Snippet für die for-Schleife:

Nicht schlecht, aber das erfüllt nicht alle unsere Bedürfnisse. Das einfachste Beispiel: sei es, wir müssen über alle Symbole in der Marktübersicht iterieren.Autor: Vladimir Karputov