Problemi riscontrati durante il back testing e non si riesce a trovare la causa principale! - pagina 3

 

iHighest() restituisce la barra tra i periodi a sinistra o a destra di 'i'?

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

Inoltre, si prega di fare riferimento anche al mio post precedente proprio davanti a questo post.

 

Caro JollyDragon,

Felice che tu veda che l'indicatore ricalcola.

Il codice Fisher è sempre lo stesso, è facile da identificare.

Il codice si limita a reinserire un dato, come fanno molti indicatori con qualche mezzo, (memorizzano il valore passato dei dati sulla barra 1 2 3), questo indicatore non lo fa, ecco perché ricalcola:

 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:

iHighest() restituisce la barra tra i periodi a sinistra o a destra di 'i'?


A sinistra
 

ffoorr,GumRai, grazie.

Anche se il codice memorizza i dati di bar1, puoi vedere che non ricalcola le barre a sinistra di bar0.

Quindi sono ancora confuso su cosa ha causato il ridisegno, dato che non c'è nessun codice per ricalcolare le barre prima di bar0.

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;
     }
 

Non sappiamo quale valore viene dato al limite.

Vi consiglio vivamente di cliccare con il tasto destro del mouse su questo indicatore e di spostarlo nel cestino!

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

Supponendo che Fish1 sia una variabile globale o statica e che l'ultima barra sia ricalcolata

A Fish1 viene dato un valore basato sui dati di Bar[0] quando i==0

Poi quando la barra[1] viene ricalcolata, il valore per Fish1, creato in bar[0] viene usato per creare un valore per la barra[1]

Non so cosa voglia fare l'indicatore, ma qualsiasi indicatore che utilizza i dati relativi a una barra e poi li utilizza in una barra precedente è un cattivo indicatore.

 
GumRai:

Non sappiamo che valore viene dato al limite.

Si prega di fare riferimento al post 20 dove è stato allegato l'intero file dell'indicatore. Sotto è stato incollato di nuovo.

File allegati:
solarjoy.mq4(6.11 KB) cancellare
GumRai:

Quindi, quando la barra[1] viene ricalcolata, il valore per Fish1, creato nella barra[0] viene utilizzato per creare un valore per la barra[1]

Non so cosa voglia fare l'indicatore, ma qualsiasi indicatore che usa i dati relativi a una barra e poi li usa in una barra precedente è un cattivo indicatore.

Potete vedere che 'i' cambia da 'limit-1' a '0' cioè da sinistra a destra per il calcolo delle barre.

Quindi il valore di Fish1 calcolato in bar[1] è usato per creare un valore per bar[0]. Perché la pensi al contrario?

Quindi non credo che questo indicatore sia un cattivo indicatore secondo la mia comprensione del codice.

Comunque, ho finalmente osservato il ridisegno e approva che sia quel tipo di cattivo indicatore.

Tuttavia, ho bisogno di sapere come correggere il codice per prevenire il ridisegno come auto-miglioramento.

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

Questo fisher non ridipinge, sembra buono, confronta con solar_joy, il segnale è in ritardo di una barra, ma è lo stesso indicatore.

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

Il problema non sono gli indicatori, sono perfetti, è il mercato che cambia sempre, non è mai lo stesso.

Un indicatore che dà un segnale perfetto in un mercato di tendenza, darà solo un falso segnale in un altro mercato.

Bisognerà sempre filtrare i segnali di un buon oscillatore, sia usando StopLoss e TakeProfit,

Sia che si utilizzi un indicatore di tendenza.


Penso che l'indicatore Fisher funzioni, è solo in ritardo di una barra, ricalcola, non ridipinge, questo ridipinge, mettilo in un EA nel tester, e vedrai:

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

 
jollydragon:

Quindi il valore di Fish1 calcolato in bar[1] viene usato per creare un valore per bar[0]. Perché la pensi al contrario?

Ok, mi sembra giusto, ma il tuo codice a cui ho fatto riferimento non includeva alcun calcolo per il limite e non avevo intenzione di guardare indietro per 3 pagine per vedere se era incluso altrove.

Quindi questo indicatore non ricalcola per la barra[1] ad ogni tick.

Ma ancora

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

permetterà calcoli diversi sulla prima esecuzione su barre chiuse rispetto a quello che fa sulla barra corrente.

Quello che farà al primo tick di una nuova barra è

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

Sui tick successivi della stessa barra calcolerà

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

Che è una sorta di composizione

 

Questo è negoziabile, il solar_joy/fischer dà un segnale una barra prima, rispetto ad un fisher non ricalcolato,

Quindi prendi il segnale sulla barra 1 e 2, e vai a vedere se il segnale è ancora lì sulla barra 2 e 3.

Se il segnale è svanito allora chiudete l'ordine.

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

Questo fisher non ridipinge, sembra buono, confronta con solar_joy, il segnale è in ritardo di una barra, ma è lo stesso indicatore.

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

Penso che l'indicatore fisher funzioni, è solo una barra in ritardo, ricalcola, non ridipinge, questo ridipinge, mettilo in un EA nel tester, e vedrai:

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


Caro ffoorr, non posso aprire le pagine e non posso accedere al sito, www.forex-tsd.com. Forse la mia configurazione internet ha qualche problema.

Per favore, concentriamoci sul mio codice. Sono solo circa 10 righe di codice per il contenuto principale.

Tuttavia, è ancora così difficile per noi trovare la causa principale della riverniciatura delle barre storiche.