Fehler, Irrtümer, Fragen - Seite 2750

 
fxsaber:

Es tut mir leid, ich habe es nicht gut formuliert.

Am meisten verwirrt hat mich Ihre anfängliche Betonung von Zeichenketten, obwohl es um die Funktion geht.

Wäre der Test mit dem Funktionscache durchgeführt worden, wäre es viel klarer gewesen

 
Sergey Dzyublik:

Als mögliche Lösung für das Problem schlagen die Entwickler die Einführung einer vordefinierten Variable vor:

Und warum sollten zwei aufeinanderfolgende Anrufe in einem bestimmten Zeitabstand das gleiche Ergebnis liefern?

void f()
{
   MqlTick tick1, tick2; 
   SymbolInfoTick(Symbol(),tick1); //1
   /*вычисления*/
   SymbolInfoTick(Symbol(),tick2); //2
}
const MqlTick _Tick;
void f()
{
   MqlTick tick1, tick2; 
   tick1 = _Tick; //1
   /*вычисления*/
   tick2 = _Tick; //2
}
 
A100:

Und warum sollten zwei aufeinanderfolgende Anrufe in einem bestimmten Zeitabstand das gleiche Ergebnis liefern?

Das sollten sie nicht. Aber für einen Test mit einem einheimischen Charakter ist es in Ordnung.
 
A100:

Und warum sollten zwei aufeinanderfolgende Anrufe in einem bestimmten Zeitabstand das gleiche Ergebnis liefern?

Weil wir nur über Tester sprechen, ohne Sleep zu verwenden- 99% der EAs.

Zu den willkürlichen Verzögerungen der Tester kann ich nichts sagen, da ich diesen Modus noch nie als nützlich empfunden habe.

 
fxsaber:

Zu den willkürlichen Verzögerungen des Testers kann ich nichts sagen, da ich diesen Modus noch nie als nützlich empfunden habe.

Ich habe es nur benutzt, um die Funktionen der Arbeit mit Aufträgen zu testen

Es ist recht praktisch zu sehen, wie stark sich die Neigung des Diagramms des Testers ändert, d.h. wie sehr die Handelslogik der Arbeit mit Marktaufträgen "verzögert".

 
Sergey Dzyublik:

Ein Fehler im ME-Debugger (Build 2370) - nachdem einHaltepunktausgelöst wurde, wird derselbeHaltepunkterneut ausgelöst, ohne dass Codeausgeführt wird,anstatt die Codeausführung durch Drücken von (F5) fortzusetzen.

Wiederholungsschritte:
1) Setzen Sie manuell
den Haltepunkt für beide Zeilen " arr.Add()";
2) Starten Sie das Debugging (F5);
3) Öffnen Sie mit PCM die verschachtelte Datei <Generic\ArrayList.mqh> in einer neuen Registerkarte.
4) Suchen Sie die Zeile "if(m_size==ArraySize(m_items))" in der Funktion "bool CArrayList::Add(T item)" und setzen Sieden Haltepunkt manuell.
5)
Fahren Siein der Registerkarte "ArrayList.mqh" mit der Ausführung des Codes fort (F5).

Dadurch wird derselbe
Haltepunkt wie zuvorausgelöst, ohne dass der Code tatsächlich ausgeführt wird.

Vielen Dank für die Nachricht.

Korrigiert von

 
fxsaber:

Weil wir nur über den Tester sprechen, ohne Sleep zu verwenden- 99% der EAs.

Zu den willkürlichen Verzögerungen der Tester kann ich nichts sagen, da ich diesen Modus noch nie als nützlich empfunden habe.

Ohne etwas grundlegend zu verändern, ist es einfacher, diese Aufnahme zu machen (was ja auch der Fall ist):

SymbolInfoTick( NULL, tick ); //1

würde bedeuten

SymbolInfoTick( Symbol(), tick ); //2

Wenigstens gibt es keine Probleme mit dem Kopieren von Zeichenketten.

 
A100:

Ohne etwas grundlegend zu ändern, ist es einfacher zu machen (was es auch ist), dass der Eintrag

würde bedeuten

zumindest die Frage des Kopierens von Zeilen entfällt

Er braucht den schnellsten Zugriff auf die MqlTick-Struktur bei jedem Tick.

Es ist irgendwie paradox, dass es einen Zugang zu _Symbol .... gibt. aber Sie haben keinen Zugang zu

const MqlTick _Tick; // Текущий _Symbol-тик.

obwohl die MQL-Sprache als die Sprache für die Entwicklung von Handelsstrategien positioniert ist.... Ich weiß nicht, was für einen TS es gibt, wenn man die aktuellen Preise des aktuellen Ticks nicht kennt.

 
Igor Makanu:

am Ende wird etwas anderes verlangt, nämlich der schnellstmögliche Zugriff auf die MqlTick-Struktur bei jedem Tick

Und was ist falsch an

SymbolInfoTick( NULL, tick ); //1

nicht gut genug ist? Zeigen Sie mir, wo der Engpass ist? Wenn es auch langsam ist, dann haben die Entwickler einen Weg gefunden, einen solchen Aufruf zu inline/optimieren - ohne grundlegende Änderungen

 
A100:

Was gibt es da nicht zu mögen?

nicht gut genug ist? Wenn es auch langsam ist, dann haben die Entwickler eine Möglichkeit, einen solchen Aufruf zu inline/optimieren

ja, es ist langsam, zumindest im Tester, ich schreibe es im Testerhttps://www.mql5.com/ru/forum/1111/page2749#comment_16487642

bei einer großen Anzahl von Optimierungsdurchläufen gibt es einen Gewinn


Ich weiß nicht, wie ich es erklären soll, ich weiß nicht, wie ich die elementaren Dinge erklären soll...

Wie schreiben Sie EAs? - Man kompiliert eine Bibliothek im prozeduralen oder OOP-Stil, jede Funktion ist vollständig auf ein anderes Projekt übertragbar, und um dies zu gewährleisten, schreibt man Bid, Ask everywhere - mein Beispiel. Dann stellen Sie aus den Rohlingen eine Handelsstrategie zusammen. Was Entwickler jetzt anbieten - überall SymbolInfoDouble() schreiben