Die Probleme wurden bei den Backtests festgestellt und die Ursache kann nicht gefunden werden! - Seite 3

 

Gibt iHighest() den Balken unter der Periode links oder rechts von 'i' zurück?

 MaxH = High[iHighest(NULL,0,MODE_HIGH,period,i)];

Außerdem verweisen Sie bitte auf meinen vorherigen Beitrag direkt vor diesem Beitrag.

 

Lieber JollyDragon,

ich freue mich, dass Sie sehen, dass der Indikator neu berechnet wird.

Die Fischer-Code ist immer das gleiche, es ist leicht zu identifizieren.

der Code nur neu zu injizieren, ein Daten, wie viele Indikator tut durch einige Mittel, (sie speichern Vergangenheit Wert ot Daten auf bar 1 2 3), dieser Indikator nicht tun, dass, warum es neu zu berechnen:

 for(i=limit-1; i>=0; i--)
     {
      MaxH = High[iHighest(NULL,0,MODE_HIGH,Solar_period,i)];
      MinL = Low[iLowest(NULL,0,MODE_LOW,Solar_period,i)];
      price = (High[i]+Low[i])/2;
      Value = 0.33*2*((price-MinL)/(MaxH-MinL)-0.5) + 0.67*Value1;
      Value=MathMin(MathMax(Value,-0.999),0.999);
      ExtBuffer0[i]=0.5*MathLog((1+Value)/(1-Value))+0.5*Fish1;
      Value1=Value;
      Fish1=ExtBuffer0[i];
     
      if(ExtBuffer0[i]>0) ExtBuffer1[i]=Solar_limit;
      else ExtBuffer1[i]=-Solar_limit;
     }
 
jollydragon:

Gibt iHighest() den Balken unter der Periode links oder rechts von 'i' zurück?


Auf der linken Seite
 

ffoorr,GumRai, ich danke Ihnen.

Obwohl der Code die Daten von bar1 speichert, kann man sehen, dass er die Balken links von bar0 nicht neu berechnet.

Also bin ich immer noch verwirrt, was die Neuzeichnung verursacht, da es keinen Code gibt, um die Balken vor bar0 neu zu berechnen.

for(i=limit-1; i>=0; i--)
     {
      MaxH = High[iHighest(NULL,0,MODE_HIGH,period,i)];
      MinL = Low[iLowest(NULL,0,MODE_LOW,period,i)];
      price = (High[i]+Low[i])/2;
      Value = 0.33*2*((price-MinL)/(MaxH-MinL)-0.5) + 0.67*Value1;
      Value=MathMin(MathMax(Value,-0.999),0.999);
      ExtBuffer0[i]=0.5*MathLog((1+Value)/(1-Value))+0.5*Fish1;
      Value1=Value;
      Fish1=ExtBuffer0[i];
      if(ExtBuffer0[i]>0) ExtBuffer1[i]=10;
      else ExtBuffer1[i]=-10;
     }
 

Wir wissen nicht, welchen Wert der Grenzwert hat.

Ich empfehle dringend, dass Sie mit der rechten Maustaste auf diesen Indikator klicken und ihn in den Papierkorb verschieben!

      ExtBuffer0[i]=0.5*MathLog((1+Value)/(1-Value))+0.5*Fish1;
      Value1=Value;
      Fish1=ExtBuffer0[i];

Angenommen, Fish1 ist eine globale oder statische Variable und der letzte Balken wird neu berechnet

Fish1 erhält einen Wert, der auf den Bar[0]-Daten basiert, wenn i==0

Wenn dann der Balken[1] neu berechnet wird, wird der Wert für Fish1, der in Balken[0] erstellt wurde, verwendet, um einen Wert für Balken[1] zu erstellen.

Ich weiß nicht, wofür der Indikator gedacht ist, aber jeder Indikator, der Daten aus einem Balken i verwendet und diese dann in einem früheren Balken einsetzt, ist ein schlechter Indikator.

 
GumRai:

Wir wissen nicht, welchen Wert der Grenzwert hat.

Siehe Beitrag 20, in dem die gesamte Indikator-Datei angehängt wurde. Unten wurde wieder eingefügt.

Angehängte Dateien:
solarjoy.mq4(6.11 KB) löschen
GumRai:

Wenn Bar[1] neu berechnet wird, wird der Wert für Fish1, der in Bar[0] erstellt wurde, verwendet, um einen Wert für Bar[1] zu erstellen.

Ich weiß nicht, wofür der Indikator gedacht ist, aber jeder Indikator, der Daten aus einem Balken verwendet und diese dann in einem früheren Balken einsetzt, ist ein schlechter Indikator.

Wie Sie sehen können, ändert sich "i" von "limit-1" zu "0", d. h. von links nach rechts für die Berechnung der Balken.

So wird der Wert von Fish1, der in bar[1] berechnet wurde, verwendet, um einen Wert für bar[0] zu erstellen. Warum glauben Sie, dass das Gegenteil der Fall ist?

Daher glaube ich nicht, dass dieser Indikator nach meinem Verständnis des Codes ein schlechter Indikator ist.

Wie auch immer, ich habe schließlich die Neuzeichnung beobachtet und es bestätigt, dass es diese Art von schlechten Indikator ist.

Ich muss jedoch wissen, wie ich den Code korrigieren kann, um das Re-Drawing als Selbstverbesserung zu verhindern.

for(i=limit-1; i>=0; i--)
     { 
       ...
      }
 

Diese eine Fischer nicht neu streichen, es sieht gut aus, vergleichen Sie mit solar_joy, das Signal ist eine Bars spät, aber es ist der gleiche Indikator.

https://www.forex-tsd.com/metatrader-4/474-fisher-14.html#post214965

Das Problem ist nicht die Indikatoren, sie sind perfekt, es ist der Markt, die immer ändern, es ist nie das gleiche.

Ein Indikator, der in einem Trendmarkt ein perfektes Signal gibt, wird in einem anderen Markt nur ein falsches Signal geben.

Man wird immer die Signale von guten Oszillatoren filtern müssen, egal ob mit StopLoss und TakeProfit,

egal, ob man einen Trendindikator verwendet.


Ich denke, der Fischer-Indikator funktionieren, es ist nur ein bar zu spät, es neu zu berechnen, es nicht neu zu malen, diese eine neu zu malen, setzen Sie es in einem EA in den Tester, und Sie werden sehen:

https://www.forex-tsd.com/ideas-suggestions/25934-bulletproof-11.html#post351354

 
jollydragon:

Der in bar[1] berechnete Wert von Fish1 wird also verwendet, um einen Wert für bar[0] zu erzeugen. Warum glauben Sie, dass das Gegenteil der Fall ist?

Ok fair genug, aber Sie Code, den ich verwiesen hat keine Berechnungen für Limit und ich war nicht zu suchen zurück über 3 Seiten, um zu sehen, wenn es anderswo enthalten war.

Also dieser Indikator nicht neu berechnen für bar[1] auf jeden Tick.

Aber dennoch

 ExtBuffer0[i]=0.5*MathLog((1+Value)/(1-Value))+0.5*Fish1;
 Fish1=ExtBuffer0[i];

ermöglicht beim ersten Durchlauf bei geschlossenen Balken andere Berechnungen als beim aktuellen Balken.

Der Indikator führt beim ersten Tick eines neuen Balkens folgende Berechnungen durch

ExtBuffer0[0]=0.5*MathLog((1+Value)/(1-Value))+0.5*ExtBuffer0[1];

Bei den folgenden Ticks desselben Balkens berechnet es

ExtBuffer0[0]=0.5*MathLog((1+Value)/(1-Value))+0.5*ExtBuffer0[0];

Dies ist eine Art von Aufsummierung

 

Dies ist handelbar, die solar_joy/fischer geben ein Signal ein bar früher, im Vergleich zu einem nicht neu berechnet Fischer,

Nehmen Sie dann das Signal von Balken 1 und 2 und sehen Sie nach, ob das Signal in Balken 2 und 3 noch vorhanden ist.

Wenn das Signal verblasst ist, schließen Sie den Auftrag.

  if(Joy2 <= EA_Limit && Joy1 >= EA_Limit)  open_order( OP_BUY); 
 if( (Joy3 <= EA_Limit && Joy2 >= EA_Limit)== false ) close_order( OP_BUY); 
 
ffoorr:

Diese eine Fischer nicht neu streichen, es sieht gut aus, vergleichen Sie mit solar_joy, das Signal ist eine Bars spät, aber es ist der gleiche Indikator.

https://www.forex-tsd.com/metatrader-4/474-fisher-14.html#post214965

Ich denke, die Fischer-Indikator zu tun, es ist nur ein bar zu spät, es neu zu berechnen, es nicht neu zu malen, diese eine neu zu malen, setzen Sie es in einem EA in den Tester, und Sie werden sehen:

https://www.forex-tsd.com/ideas-suggestions/25934-bulletproof-11.html#post351354


Lieber ffoorr, ich kann die Seiten nicht öffnen und kann nicht auf die Website zugreifen, www.forex-tsd.com. Vielleicht hat meine Internetkonfiguration ein Problem.

Konzentrieren wir uns bitte auf meinen Code. Es sind nur etwa 10 Zeilen Code für den Hauptinhalt.

Es ist jedoch immer noch sehr schwierig für uns, die Ursache für das erneute Malen der historischen Balken zu finden.

Grund der Beschwerde: