Fehler, Irrtümer, Fragen - Seite 3030

 
Andrey Dik:

geben wir 0 zurück und sagen damit, dass wir noch nichts gezählt haben und beim nächsten Takt nicht um 1 erhöhen werden.

d.h. wir bleiben an dem Balken, an dem wir die Datenabfrage des älteren Faktors begonnen haben, bis wir zurückkehren (rates_total)

Aus der Hilfe:"Der Parameter prev_calculated im Funktionsaufruf enthält den von OnCalculate() beimvorherigen AufrufzurückgegebenenWert ".
 
mktr8591:
Aus der Hilfe:"Der Parameter prev_calculated beim Funktionsaufruf enthält den von OnCalculate() beimvorherigen AufrufzurückgegebenenWert ."

Ja, es steht viel in der Hilfe, aber es ist nicht immer klar, leider (nicht um den Entwicklern eins auszuwischen), man muss lernen, lernen, lernen. Aber dieser Zweig existiert, weil manchmal Dinge entdeckt werden, die weder mit der Hilfe noch mit dem gesunden Menschenverstand übereinstimmen, A100 ist unser Held, weil es auch dorthin geht, wo niemand von alleine hinaufsteigen würde)).

 
Сергей Таболин:

1. Vielen Dank an alle - ich habe meine Kenntnisse über Indikatoren ein wenig erweitert ))))

Andrew, wenn jemand deine Ideen nicht versteht (mich eingeschlossen), bedeutet das nur eines: DU zeichnest das Bild nicht richtig! Oder besser gesagt, Sie tun es so, dass viele Menschen es nicht verstehen ...

die wahrheit ist wichtiger. leider ist sie nicht immer für alle klar.

 

Andrey Dik:

gibt 0 zurück und besagt damit, dass wir noch nichts gezählt haben und prev_calc beim nächsten Takt nicht um 1 erhöht wird.

Dann sollte return(rates_total) prev_calc um rates_total erhöhen?

 
Andrey Dik:

gibt den Wert 0 zurück, was bedeutet, dass wir noch nichts berechnet haben und dass der Wert von prev kalk im nächsten Takt nicht um 1 steigen wird.

er selbst legt sich auf die Berechnung fest und beschwert sich, dass er sich auf sie festlegt )

 
Andrey Dik:

können wir es uns leisten, einen neuen Balken nur einmal und nicht bei jedem Tick zu berechnen.

wir können uns das nicht leisten, weil das Terminal keine historischen Daten online auf der "höheren TF" generieren wird

Im Allgemeinen sind hier einige Annahmen erforderlich:

- entweder wir konstruieren die OHLC innerhalb des Indikators selbst

- oder das Terminal erstellt die OHLC für uns selbst


Wenn letzteres der Fall ist, sollten wir bedenken, dass das Terminal überhaupt nicht weiß, wie die TFs interagieren, wer ein Vielfaches von was ist und was bei dem Ereignis"neuer Balken" passiert aber wir sollten es dem Terminal überlassen, die notwendige TF zu erstellen


Probieren Sie diesen Code in Ihrem zweiten Indikator aus:

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
   double buff [];
   if(prev_calculated == 0)
   {
      if (iBars (Symbol (), OldTF) != BarsCalculated (Handle))
      {
         Print ("Индикатор на периоде ", OldTF, " ещё не рассчитан");
         return 0;
      }
   }
   else
   {
      if (rates_total == prev_calculated)
      {
         if(CopyBuffer (Handle, 0, 0, 1, buff)<0) return 0;
         return rates_total;
      }
   }

   ulong t = GetMicrosecondCount ();

...... далее без изменений
 
Andrei Trukhanovich:

selbst die Berechnung zurücksetzt und sich beschwert, dass sie zurückgesetzt wird)

Andrei, führen Sie bitte den Code aus... Aber fang du nicht damit an, ich kann dich nicht bekämpfen.

 
Igor Makanu:

können wir uns nicht leisten, da das Terminal auf der "älteren TF" keine historischen Daten online generieren wird.

Im Allgemeinen sind hier einige Annahmen erforderlich:

- Entweder wir konstruieren die OHLC innerhalb des Indikators selbst

- oder das Terminal baut OHLC selbst auf


Wenn letzteres der Fall ist, dann sollten wir bedenken, dass das Terminal überhaupt nicht weiß, wie die TF interagiert, wer ein Vielfaches von was ist und was bei dem Ereignis"neuer Balken" passiert


Probieren Sie diesen Code in Ihrem zweiten Indikator aus:

Ihr Code wird bei jedem Tick Berechnungen anstellen, das ist für mich uninteressant, ich werde ihn nicht einmal ausführen. Ich muss die Berechnung nur EINMAL für jeden Balken durchführen, für alle verwendeten Indikatoren, nicht für jeden Tick aller verwendeten Indikatoren.

 
Andrey Dik:

Wenn Ihr Code bei jedem Tick Berechnungen durchführt, bin ich nicht interessiert, ich werde ihn nicht einmal ausführen. Ich muss die Berechnung nur EINMAL für jeden Balken durchführen, für alle verwendeten Indikatoren, nicht für jeden Tick aller verwendeten Indikatoren.

Mein Code wird "tick by tick" nur Ihr Indikator #1, wo Sie geschrieben haben:

 if (rates_total == prev_calculated) return rates_total;

ermöglicht es dem Terminal, den "höheren Zeitrahmen" selbständig zu erstellen.

Für mich ist das "billiger" als eine komplette Neuberechnung des Indikators № 1, die in Ihrem Code bei der Synchronisierung der Historie mit dem "älteren TF

 
Andrey Dik:

Andrei, würdest du den Code bitte ausführen... Aber fang du nicht damit an, ich kann dich nicht bekämpfen.

Ersetzen Sie

if (SeriesInfoInteger (Symbol (), OldTF, SERIES_SYNCHRONIZED))
   {
      if (iBars (Symbol (), OldTF) != BarsCalculated (Handle))
      {
        Print ("Индикатор на периоде ", OldTF, " ещё не рассчитан");
        return 0;
      }
   }
   else 
   {
     Print ("Период ", OldTF, " не синхронизирован.");
     return 0;
   }

zu

if (SeriesInfoInteger (Symbol (), OldTF, SERIES_SYNCHRONIZED))
   {
      if (iBars (Symbol (), OldTF) != BarsCalculated (Handle))
      {
        Print ("Индикатор на периоде ", OldTF, " ещё не рассчитан");
        return prev_calculated;
      }
   }
   else 
   {
     Print ("Период ", OldTF, " не синхронизирован.");
     return prev_calculated;
   }

und testen Sie es.

Grund der Beschwerde: