Fehler 01.
Die benutzerdefinierte Zeichentabelle ist geöffnet. Wenn Sie z. B. alle Balken- und Tick-Historien manuell löschen, bleibt das Diagrammfenster einfach hängen, ohne sich zu aktualisieren.
Erwartetes Verhalten wie bei einem leeren benutzerdefinierten Symbol.
Fehler 02.
Sie müssen die letzte Woche der benutzerdefinierten symbolischen Anführungszeichen löschen. Sie können es löschen, aber auch ChartRedraw hat keinen visuellen Effekt.
Nur wenn Sie das Diagramm mit der Maus verschieben, wird es wieder normal angezeigt. Können Sie die Visualisierung durch ChartRedraw korrigieren?
ZZY Ähnliche Überziehung im Moment
ChartSetInteger(0, CHART_SHIFT, !ChartGetInteger(0, CHART_SHIFT)); Sleep(1000); ChartRedraw(); ChartSetInteger(0, CHART_SHIFT, !ChartGetInteger(0, CHART_SHIFT));
Fehler 03.
TicksAdd bietet den folgenden Schutz. Liegt ein Tick vor dem Tick in der Marktbeobachtung, wird er ignoriert.
Leider interagiert dieser Mechanismus nicht mit TicksDelete und TicksReplace.
Sie müssen den letzten Tag der Historie des benutzerdefinierten Symbols löschen und den letzten Tick nach der Löschung in Market Watch eingeben.
Wenn das Löschen in Ordnung ist, dann wird das Aufdecken des letzten Häkchens aufgrund der oben beschriebenen Regel nicht funktionieren.
Ich schlage vor, entweder die Regel TicksAdd zu ändern, oder dass TicksDelete/TicksReplace den Tick in Market Watch durch den letzten Tick in der Historie ersetzt, wenn dessen Zeit kleiner als die aktuelle Zeit ist.
Wiederholungsproblem
template <typename T> T MyPrint( const T Value, const string Str, const bool DebugFlag = false ) { Print(Str + " = " + (string)Value); return(Value); } #define _P(A) MyPrint(A, __FUNCSIG__ ", Line = " + (string)__LINE__ + ": " + #A) // Макрос для удобного и наглядного вывода значений void OnStart() { const string Name = "TEMP1235"; // Имя кастомного символа const string SymbOrig = "EURUSD"; // Имя оригинального символа MqlTick Ticks[]; const int Size = _P(CopyTicksRange(SymbOrig, Ticks, COPY_TICKS_ALL, (long)D'2019.01.01' * 1000)); // Считали EURUSD-тики за 2019 год. if ((Size > 0) && _P(CustomSymbolCreate(Name, NULL, SymbOrig)) && _P(SymbolSelect(Name, true))) // Создали символ на основе EURUSD. { _P(CustomTicksReplace(Name, 0, LONG_MAX, Ticks)); // Поместили в него историю EURUSD. MqlTick AddTicks[1]; AddTicks[0] = Ticks[Size - 1]; // Последний тик в истории. _P(CustomTicksAdd(Name, AddTicks)); // Последний тик добавили в Обзор рынка и еще раз в историю _P(CustomTicksDelete(Name, (long)D'2019.02.01' * 1000, LONG_MAX)); // Удалили все тики, оставив только данные за январь 2019. _P(CopyTicks(Name, AddTicks, COPY_TICKS_ALL, 0, 1)); // Взяли последний тик из оставшейся истории. ArrayPrint(AddTicks); // Посмотрели, что это, действительно, последний тик января. _P(CustomTicksAdd(Name, AddTicks)); // Попробовали записать его в Обзор рынка - не получилось. _P(SymbolSelect(Name, false)); // Удалили символ из Обзора рынка. _P(CustomSymbolDelete(Name)); // Удалили символ. } }
Ergebnis
void OnStart(), Line = 11: CopyTicksRange(SymbOrig,Ticks,COPY_TICKS_ALL,(long)D'2019.01.01'*1000) = 3316638 void OnStart(), Line = 13: CustomSymbolCreate(Name,NULL,SymbOrig) = true void OnStart(), Line = 13: SymbolSelect(Name,true) = true void OnStart(), Line = 15: CustomTicksReplace(Name,0,LONG_MAX,Ticks) = 3316638 void OnStart(), Line = 20: CustomTicksAdd(Name,AddTicks) = 1 void OnStart(), Line = 22: CustomTicksDelete(Name,(long)D'2019.02.01'*1000,LONG_MAX) = 1159087 void OnStart(), Line = 23: CopyTicks(Name,AddTicks,COPY_TICKS_ALL,0,1) = 1 [time] [bid] [ask] [last] [volume] [time_msc] [flags] [volume_real] [0] 2019.01.31 23:59:58 1.14461 1.14486 0.0000 0 1548979198644 2 0.00000 void OnStart(), Line = 26: CustomTicksAdd(Name,AddTicks) = -1 void OnStart(), Line = 28: SymbolSelect(Name,false) = true void OnStart(), Line = 29: CustomSymbolDelete(Name) = true
Ich verstehe, dass ohne den Quellcode die Fehlermeldung in Worten bleibt. Wie langweilig es war, das zu beschreiben, aber es ist wahrscheinlich der effektivste Weg, um den Fehler zu zeigen, zu finden und zu beheben.
Ich habe gestern erst angefangen, die Kunststoffe auszusortieren, da ist einiges an Unsinn im Testgerät. Funktionieren Kunststoffe mit Formeln im Prüfgerät?
Erstellt eine synthetische, Formel aus der Hilfe. Ist das richtig?
Das hat der Test ergeben.
Das ist Unsinn - alle Geschäfte sind gewinnbringend, was dem Bild nach gar nicht sein kann; alle werden am Ende des Tests geschlossen und der Gewinn ist gleich Null. Ich muss etwas falsch machen. Was sollte ich noch überprüfen? Ich füge das Protokoll bei.
Ich muss etwas falsch machen. Worauf sollte ich noch achten?
Im Screenshot können Sie sehen, dass die Gewinnwährung des Symbols nicht mit der Kontowährung übereinstimmt. Daher ergibt die Umrechnung Null.
Damit es "out of the box" funktioniert, benennen Sie es wie "EURUSD_ALEX1".
Können Sie mir sagen, in welchen Ordnern die benutzerdefinierten Symbole und ihre Einstellungen gespeichert sind? Das Löschen im Terminal und in der Software hilft nicht.
\MetaTrader5\Bases\Custom\
Fehler 04.
Ein weiterer Fehler mit spezifischer Wiedergabe
template <typename T> T MyPrint( const T Value, const string Str, const bool DebugFlag = false ) { Print(Str + " = " + (string)Value); return(Value); } #define _P(A) MyPrint(A, __FUNCSIG__ ", Line = " + (string)__LINE__ + ": " + #A) // Макрос для удобного и наглядного вывода значений void OnStart() { const string Name = "TEMP8"; // Для каждого запуска нужно менять имя символа, чтобы увидеть проблему const string SymbOrig = "EURUSD"; // Имя оригинального символа MqlTick Ticks[]; const int Size = _P(CopyTicksRange(SymbOrig, Ticks, COPY_TICKS_ALL, (long)D'2019.01.01' * 1000)); // Считали EURUSD-тики за 2019 год. if ((Size > 0) && _P(CustomSymbolCreate(Name, NULL, SymbOrig)) && _P(SymbolSelect(Name, true))) // Создали символ на основе EURUSD. { _P(CustomTicksReplace(Name, 0, LONG_MAX, Ticks)); // Поместили в него историю EURUSD. MqlTick AddTicks[1]; AddTicks[0] = Ticks[Size - 1]; // Последний тик в истории. _P(CustomTicksAdd(Name, AddTicks)); // Последний тик добавили в Обзор рынка и еще раз в историю _P(CustomTicksDelete(Name, (long)D'2019.02.01' * 1000, LONG_MAX)); // Удалили все тики, оставив только данные за январь 2019. _P(CopyTicks(Name, AddTicks, COPY_TICKS_ALL, 0, 1)); // Взяли последний тик из оставшейся истории. ArrayPrint(AddTicks); // Посмотрели, что это, действительно, последний тик января. const int NewSize = _P(CopyTicksRange(Name, Ticks)); // Запросили всю историю тиков кастомного символа _P(CopyTicks(Name, AddTicks, COPY_TICKS_ALL, 0, 1)); // Снова Взяли последний тик из истории. ArrayPrint(AddTicks); // Увидели, что последний тик изменился! _P(SymbolSelect(Name, false)); // Удалили символ из Обзора рынка. _P(CustomSymbolDelete(Name)); // Удалили символ. } }
Ergebnis
void OnStart(), Line = 11: CopyTicksRange(SymbOrig,Ticks,COPY_TICKS_ALL,(long)D'2019.01.01'*1000) = 3316638 void OnStart(), Line = 13: CustomSymbolCreate(Name,NULL,SymbOrig) = true void OnStart(), Line = 13: SymbolSelect(Name,true) = true void OnStart(), Line = 15: CustomTicksReplace(Name,0,LONG_MAX,Ticks) = 3316638 void OnStart(), Line = 20: CustomTicksAdd(Name,AddTicks) = 1 void OnStart(), Line = 22: CustomTicksDelete(Name,(long)D'2019.02.01'*1000,LONG_MAX) = 1159087 void OnStart(), Line = 23: CopyTicks(Name,AddTicks,COPY_TICKS_ALL,0,1) = 1 [time] [bid] [ask] [last] [volume] [time_msc] [flags] [volume_real] [0] 2019.01.31 23:59:58 1.14461 1.14486 0.0000 0 1548979198644 2 0.00000 void OnStart(), Line = 26: CopyTicksRange(Name,Ticks) = 2157552 void OnStart(), Line = 28: CopyTicks(Name,AddTicks,COPY_TICKS_ALL,0,1) = 1 [time] [bid] [ask] [last] [volume] [time_msc] [flags] [volume_real] [0] 2019.02.22 23:57:59 1.13303 1.13316 0.0000 0 1550879879799 6 0.00000 void OnStart(), Line = 31: SymbolSelect(Name,false) = true void OnStart(), Line = 32: CustomSymbolDelete(Name) = true
Fehler in CopyTicksRange enthalten - ändert die Tick-Historie! Bitte beachten Sie, dass Sie den Namen des benutzerdefinierten Symbols im Skript immer wieder ändern müssen, um es zu reproduzieren. Und das, obwohl das Skript sie erfolgreich löscht. Es stellt sich heraus, dass das Löschen eines Symbols überhaupt kein Löschen ist.
Im Screenshot können Sie sehen, dass die Gewinnwährung des Symbols nicht mit der Kontowährung übereinstimmt. Daher ergibt die Umrechnung Null.
Damit es "out of the box" funktioniert, benennen Sie es wie "EURUSD_ALEX1".
Danke, das war der Punkt. Ich habe es so benannt, wie es in meinem Konto steht, und es hat funktioniert. Eine andere Frage. Was passiert beim realen Handel? Werden synthetische Aufträge in Aufträge und Positionen auf reale Paare, in diesem Fall (siehe Formel) EURUSD und USDCAD, umgesetzt?
Wo kann ich es sehen, das Testerprotokoll zeigt nur synthetische Daten an.
- 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.