Fehler, Irrtümer, Fragen - Seite 1786
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Wenn OnCalculate durch OnTick ersetzt wird, treten keine Fehler auf. Das Problem liegt nicht an SymbolInfoTick, sondern daran, dass die Indikatoren nicht richtig auf "No Skips" eingestellt sind.
Wie lange haben die Messungen gedauert? Und was hat das mit der Festlegung der Indikatoren zu tun? Die Ankunftszeit des aktuellen Ticks ist 10, die Ankunftszeit des vorherigen Ticks ist 11. Dies ist ein Fehler der Funktion, die nicht den aktuellen Wert zurückgibt. Sie stimmen zu, dass der aktuelle Zeitwert nicht kleiner sein kann als der vorherige, oder?
SymbolInfoTick funktioniert in Indikatoren anders als in EAs.
In einem Indikator gibt er immer den Tick zurück, der den Aufruf von OnCalculate ausgelöst hat. Und diese Initiator-Ticks im Indikator sollten nicht übersprungen werden - das ist die Ideologie der Entwickler. Das Problem liegt in der Bildung der Warteschlange für diese Zecken.
Im EA gibt der SymbolInfoTick in OnTick nicht den Tick zurück, der den Aufruf von OnTick ausgelöst hat, sondern er fragt den aktuellen Status vollständig ab.
Gemessen zehn Minuten auf Si.
SymbolInfoTick funktioniert in Indikatoren anders als in EAs.
In einem Indikator gibt er immer den Tick zurück, der den Aufruf von OnCalculate ausgelöst hat. Und diese Initiator-Ticks im Indikator sollten nicht übersprungen werden - das ist die Ideologie der Entwickler. Das Problem liegt in der Bildung der Warteschlange für diese Zecken.
Im Expert Advisor gibt SymbolInfoTick in OnTick nicht den Tick zurück, der den Aufruf von OnTick ausgelöst hat, sondern stellt eine vollständige Anfrage nach dem aktuellen Status.
Gemessen zehn Minuten auf Si.
Drittens, auch wenn SymbolInfoTick() in Ordnung ist - es funktioniert immer noch besser als CopyTicks(), weil es oft aktuellere Werte liefert.
Situationen, in denen CopyTicks aktuellere Daten lieferte als SymbolInfoTick LATER, wurden behoben. Deshalb mache ich eine Abfrage mit zwei Funktionen auf einmal und wähle das letzte Häkchen aus.
SymbolInfoTick funktioniert in Indikatoren anders als in EAs.
In einem Indikator gibt er immer den Tick zurück, der den Aufruf von OnCalculate ausgelöst hat. Und diese Initiator-Ticks im Indikator sollten nicht übersprungen werden - das ist die Ideologie der Entwickler. Das Problem liegt in der Bildung der Warteschlange für diese Zecken.
Im Expert Advisor gibt der SymbolInfoTick in OnTick nicht den Tick zurück, der den Aufruf von OnTick ausgelöst hat, sondern fragt vollständig nach dem aktuellen Status.
Dann wäre es logisch, sie durch die
mit der Zecke, die sie verursacht hat, vor allem, weil es nichts kostet.
Und die Funktion SymbolInfoTick() sollte vollständig in Indicator und Expert Advisor implementiert werden (sie gibt die aktuellen Preise zurück, nicht die Preise zum Zeitpunkt des Aufrufs vonOnCalculate)
MT4 verblüfft weiterhin mit Unberechenbarkeit )) Wer schreibt die Implementierung der Handelsfunktionen? MT4 Version 1045
Beginnen wir mit der witzigen Info, die an Zadornov geschickt werden sollte, weil er sich immer über die dummen Amerikaner aufregt.
SYMBOL_TRADE_TICK_VALUE
Wert SYMBOL_TRADE_TICK_VALUE_PROFIT
doppelt
SYMBOL_TRADE_TICK_VALUE_PROFIT
Nicht unterstützt
doppelt
SYMBOL_TRADE_TICK_VALUE_LOSS
Nicht unterstützt
doppelt
In der Zwischenzeit erzeugt SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_VALUE, tickValue) einen Wert. BUT!!!!! Wenn Sie den Indikator auf das Diagramm werfen, ist er beim Start in Ordnung. Und wenn Sie das Terminal neu starten, wird diese Funktion beim ersten Aufruf true und null tickValue zurückgeben! Entspannen Sie sich also nicht, Mr. Expert Advisor-Entwickler, alles muss mit eigenen Händen überprüft werden.
bool Quote2Price(double diff,double &price4lot,string symbol="EURUSD")
{
int dig=(int)MarketInfo(symbol,MODE_DIGITS);
if(dig == 0)
return(false); // symbol is none
double tickSize = MarketInfo(symbol, MODE_TICKSIZE); // пункт в валюте котировки (0,00001 для EURUSD на 5-знаке)
//double tickValue = MarketInfo(symbol, MODE_TICKVALUE); // пункт в валюте депозита ($1 для EURUSD на 5-знаке)
double tickValue;
if(!SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_VALUE, tickValue)) // пункт в валюте депозита ($1 для EURUSD на 5-знаке)
Print(__FUNCTION__, " SymbolInfoDouble(...) returns false"); // всегда возвращается true!!
Print("tickSize= ", tickSize, " tickValue= ", tickValue);
if(tickValue == 0.0) // исключений нет, терминал врет, надо тупо везде проверять на деление на ноль...
return false;
double price=diff/(tickSize/tickValue); // а то завалимся c tickValue == 0
price4lot=NormalizeDouble(price,2);
return (true);
}
Ausstieg:
2017.02.07 16:08:25.332 ShowImportantParams EURUSD.e,M15: tickSize= 1e-05 tickValue= 1.0
2017.02.07 16:08:25.332 ShowImportantParams EURUSD.e,M15: tickSize= 1e-05 tickValue= 1.0
2017.02.07 16:08:24.515 ShowImportantParams EURUSD.e,M15: tickSize= 1e-05 tickValue= 0.0
2017.02.07 16:08:23.037 ShowImportantParams EURUSD.e,M15: tickSize= 1e-05 tickValue= 0.0
2017.02.07 16:08:23.037 ShowImportantParams EURUSD.e,M15: initialisiert
2017.02.07 16:08:23.002 Custom indicator ShowImportantParams EURUSD.e,M15: erfolgreich geladen
Dann wäre es logisch, die
mit der Zecke, die sie gerufen hat, zumal sie nichts kostet
Und die Funktion SymbolInfoTick() sollte in Indicator und Expert Advisor voll funktionsfähig sein (aktuelle Preise zurückgeben, nicht die Preise zum Zeitpunkt desOnCalculate-Aufrufs)
Es ist sogar sinnvoll, der aktuellen Warteschlange eine Tick-Nummer hinzuzufügen.