Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1383

 

Wie wäre es damit?

bool CheckSpr(int _sp)
{
   static int ts=0, res=0;
   static long tc=0;
   if(tc>50 && res*3<_sp) return(false);
   tc++;
   ts += _sp;
   res =ts/tc;
   if(tc>LONG_MAX-1) {
      tc=0;
      ts=0;
   }
   // Comment( res,"=",tc );
   if(tc<50) return(false);
   return(res>_sp?true:false);
}

Auch hier ist der Haken, wenn Sie den Code während des Rollover ausführen und nicht davor, schreibt er einen riesigen Spread von 50 Ticks und diese Zeile macht keinen Sinn.

Wie lässt sich der Code korrigieren?

 
Vitaly Muzichenko:

Wie wäre es damit?

Auch hier ist der Haken, wenn Sie den Code während des Rollover ausführen und nicht davor, schreibt er einen riesigen Spread von 50 Ticks und diese Zeile macht keinen Sinn.

Wie lässt sich der Code korrigieren?

Die Logik ist nicht gut. Warum genau Durchschnitt von 50 Ticks mit einem Zähler auf longmax, die eine lange Zeit dauern kann.

In den Symboleigenschaften gibt es eine deklarierte Spanne. Sie sollte zunächst durch eine Eingabe eingegeben werden. Und wenn sie nicht eingegeben wird, wird sie empfangen. Und wenn wir eine erhöhte Spanne erhalten, halten wir sie fälschlicherweise für durchschnittlich. Wir brauchen den Durchschnittswert in einem relativ kurzen Bereich, um die Veränderung zu erkennen.

Wenn es einen Intraday-Spread gibt, vergleichen wir ihn bei jedem Tick und ermitteln den Durchschnittswert zum erforderlichen Wert. Die Frage ist, dass man den Durchschnitt nicht berechnen kann, ohne sich die Zwischenwerte zu merken. Ich verwende also, ich merke mir alle Werte, und wenn ich den letzten Wert plus eins erhalte, addiere ich ihn zur Summe und subtrahiere den ersten, und verschiebe die Nummerierung (in der Matrix A(n) = A(n+1)). Das ist billiger, als den Zähler auf riesige Werte hochzudrehen. Und bis zu 10 - 20 Werten verwende ich Variablen.

Ich weiß nicht, was teurer ist:SymbolInfoInteger oder die Differenz zwischen Bid und Ask).

 
Valeriy Yastremskiy:

Die Logik ist nicht gut. Warum genau Durchschnitt von 50 Ticks mit einem Zähler auf longmax, die eine lange Zeit dauern kann.

In den Symboleigenschaften gibt es eine deklarierte Spanne. Sie wird zunächst durch eine Eingabe eingegeben. Und wenn sie nicht eingegeben wird, wird sie empfangen. Und wenn wir eine erhöhte Spanne erhalten, halten wir sie fälschlicherweise für durchschnittlich. Wir brauchen den Durchschnittswert in einem relativ kurzen Bereich, um die Veränderung zu erkennen.

Wenn es einen Intraday-Spread gibt, vergleichen wir ihn bei jedem Tick und ermitteln den Durchschnittswert zum erforderlichen Wert. Die Frage ist, dass man den Durchschnitt nicht berechnen kann, ohne sich die Zwischenwerte zu merken. Ich verwende also, ich merke mir alle Werte, und wenn ich den letzten Wert plus eins erhalte, addiere ich ihn zur Summe und subtrahiere den ersten, und verschiebe die Nummerierung (in der Matrix A(n)=A(n+1)). Das ist billiger, als den Zähler auf riesige Werte hochzudrehen. Und bis zu 10 - 20 Werten verwende ich Variablen.

Ich weiß nicht, was teurer ist (SymbolInfoInteger oder Differenz zwischen Bid und Ask).

Nur das Wort "Floating", das ist das Problem.


 
Vitaly Muzichenko:

Nur das Wort "Floating", das ist die Herausforderung.


ein wenig aufgeregt). Dann die Logik, dass die ersten Werte richtig sind. Oder warten Sie 10 Minuten, sammeln Sie Statistiken über die Gleichmäßigkeit der Streuung während dieser Zeit, ermitteln Sie das durchschnittliche Minimum von 50 oder 100 Ticks und nehmen Sie es als Durchschnitt. Kontrollieren Sie die Startzeit, damit sie nicht in die Zeit fällt, in der die Vermittlungsstellen nicht arbeiten. Wenn Sie sich auch vor einem Dummkopf schützen wollen)

 
Valeriy Yastremskiy:

(Ich war ein wenig aufgeregt.) Dann die Logik, dass die ersten Werte richtig sind. Oder warten Sie 10 Minuten, sammeln Sie Statistiken über die Gleichmäßigkeit der Streuung während dieser Zeit, ermitteln Sie den durchschnittlichen Minimalwert von 50 oder 100 Ticks und nehmen Sie diesen als Durchschnittswert. Kontrollieren Sie die Startzeit, damit sie nicht in die Zeit fällt, in der die Vermittlungsstellen nicht arbeiten. Wenn auch mit vollem Schutz vor einem Dummkopf).

Dies sollte irgendwie vermieden werden.

Der Algorithmus funktioniert, wenn wir den Expert Advisor beim Rollover nicht laufen lassen, und das wird nach dem Wochenende immer wieder passieren.

 
Vitaly Muzichenko:

Dies sollte irgendwie vermieden werden.

Der Algorithmus funktioniert, solange wir den Expert Advisor nicht bei einem Rollover laufen lassen, was nach dem Wochenende immer wieder vorkommen wird.

Eine Kontrolle, die ohnehin vermieden werden sollte, sollte durch etwas anderes ersetzt werden. Die Zeit zwischen den Ticks. Nicht zu teuer. Und wenn die Zeit zwischen den Ticks mehr als 10 Sekunden beträgt, ist etwas nicht in Ordnung.

 
Vitaly Muzichenko:

Dies sollte irgendwie vermieden werden.

Der Algorithmus funktioniert, solange wir den Expert Advisor nicht bei einem Rollover laufen lassen, was nach dem Wochenende immer wieder vorkommen wird.

Wir müssen separate Zeitparameter für den Rollover erstellen: Start/Ende.
Und während dieser Zeit nichts tun (außer dem Kommentar "Rollover, warten").

 
Taras Slobodyanik:

Sie müssen separate Zeitparameter für den Rollover erstellen: Start/Ende.
Und zu diesem Zeitpunkt nichts tun (außer dem Kommentar "Rollover, warten").

Es gab einen Parameter "work by time", ich änderte den Handel und startete Eulen - der Handel wurde beim Rollover geöffnet.

Es stellte sich heraus, dass die Handelszeit -1 gmt statt der üblichen +2gmt war.

Deshalb war der Wunsch groß, der Zeitvorschrift zu entkommen.

 
Vitaly Muzichenko:

Es gab einen "Work by time"-Parameter, ich änderte den Handel und startete Eulen - der Handel wurde beim Rollover eröffnet.

Es stellte sich heraus, dass die Handelszeit -1 gmt statt der üblichen +2gmt war.

Deshalb habe ich den großen Wunsch, von der Zeitvorschrift wegzukommen.

Würde es funktionieren, den "Zeitwert" durch die Differenz zwischen der eingehenden (neuen) Zeit und der zuletzt berechneten Zeit zu ersetzen?

Das heißt, wir werden wissen, dass die neue Zeit angebrochen ist:

-aus new day

-aus einer neuen Woche

-oder mit einer Differenz von mehr als dem angegebenen

 
Vitaly Muzichenko:

Es gab einen "Work by time"-Parameter, ich änderte den Handel und startete Eulen - der Handel wurde beim Rollover eröffnet.

Es stellte sich heraus, dass die Handelszeit -1 gmt statt der üblichen +2gmt war.

Deshalb war der Wunsch groß, der Zeitvorschrift zu entkommen.

Machen Sie, wenn der Anfang der Woche "Rollover, warten" und egal die Zeit des Servers