Des problèmes ont été découverts lors des tests de rétroaction et nous n'arrivons pas à trouver la cause fondamentale ! - page 3

 

Est-ce que iHighest() retourne la barre parmi les périodes à gauche ou à droite de 'i' ?

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

En outre, veuillez également vous référer à mon message précédent, juste en face de celui-ci.

 

Cher JollyDragon,

Heureux que vous voyez que l'indicateur re-calculer.

Le code fisher est toujours le même, il est facile à identifier.

Le code ne fait que réinjecter une donnée, comme beaucoup d'indicateurs le font par certains moyens, (ils stockent la valeur passée des données sur la barre 1 2 3), cet indicateur ne fait pas cela, c'est pourquoi il re-calcule :

 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:

Est-ce que iHighest() retourne la barre parmi les périodes à gauche ou à droite de 'i' ?


A gauche
 

ffoorr,GumRai, merci.

Bien que le code stocke les données de la barre 1, vous pouvez voir qu'il ne recalcule pas les barres à gauche de la barre 0.

Je ne sais donc toujours pas ce qui a provoqué le re-dessin, car il n'y a pas de code pour recalculer les barres avant la barre 0.

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

Nous ne savons pas quelle valeur est donnée à la limite.

Je vous suggère fortement de faire un clic droit sur cet indicateur et de le mettre à la poubelle !

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

En supposant que Fish1 est une variable globale ou statique et que la dernière barre est recalculée

Fish1 reçoit une valeur basée sur les données de la barre[0] lorsque i==0

Ensuite, lorsque la barre [1] est recalculée, la valeur de Fish1, créée en barre [0] est utilisée pour créer une valeur pour la barre [1].

Je ne sais pas ce que l'indicateur est censé faire, mais tout indicateur qui utilise des données relatives à une barre et les utilise ensuite dans une barre antérieure est un mauvais indicateur.

 
GumRai:

Nous ne savons pas quelle valeur est donnée à la limite.

Veuillez vous référer au post 20 où le fichier complet de l'indicateur a été joint. Le fichier ci-dessous a été recollé.

Fichiers attachés :
solarjoy.mq4(6.11 KB) supprimer
GumRai:

Ensuite, lorsque la barre [1] est recalculée, la valeur de Fish1, créée dans la barre [0] est utilisée pour créer une valeur pour la barre [1].

Je ne sais pas ce que l'indicateur est censé faire, mais tout indicateur qui utilise des données relatives à une barre et les utilise ensuite dans une barre antérieure est un mauvais indicateur.

Vous pouvez voir que 'i' change de 'limit-1' à '0', c'est-à-dire de gauche à droite pour le calcul des barres.

Donc la valeur de Fish1 calculée dans la barre [1] est utilisée pour créer une valeur pour la barre [0]. Pourquoi pensez-vous le contraire ?

Par conséquent, je ne pense pas que cet indicateur soit ce genre de mauvais indicateur selon ma compréhension du code.

Quoi qu'il en soit, j'ai finalement observé le redessin et il approuve que c'est ce genre de mauvais indicateur.

Cependant, j'ai besoin de savoir comment corriger le code pour empêcher le re-drawing comme auto-amélioration.

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

Celui-ci n'est pas repeint, il a l'air bien, comparez avec solar_joy, le signal a une barre de retard, mais c'est le même indicateur.

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

Le problème n'est pas les indicateurs, ils sont parfaits, c'est le marché qui change tout le temps, ce n'est jamais le même.

Un indicateur qui donne un signal parfait dans un marché de tendance, ne donnera qu'un faux signal dans un autre marché.

On devra toujours filtrer les signaux d'un bon oscillateur, soit en utilisant le StopLoss et le TakeProfit,

Que l'on utilise un indicateur de tendance ou non.


Je pense que l'indicateur fisher fonctionne, c'est juste une barre en retard, il recalcule, il ne repeint pas, celui-ci repeint, mettez le dans un EA dans le testeur, et vous verrez :

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

 
jollydragon:

Ainsi, la valeur de Fish1 calculée dans la barre [1] est utilisée pour créer une valeur pour la barre [0]. Pourquoi pensez-vous au contraire ?

D'accord, mais le code auquel j'ai fait référence n'incluait pas de calculs pour la limite et je n'allais pas revenir sur 3 pages pour voir si c'était inclus ailleurs.

Donc cet indicateur ne recalcule pas la barre [1] à chaque tick.

Mais quand même

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

permettra des calculs différents sur la première exécution des barres fermées par rapport à ce qu'il fait sur la barre actuelle.

Ce qu'il fera au premier tick d'une nouvelle barre est le suivant

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

Sur les ticks suivants de la même barre, il calculera

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

Ce qui est une sorte de composition

 

Ceci est tradable, le solar_joy/fischer donne un signal une barre plus tôt, comparé à un fisher non recalculé,

Alors prenez le signal sur les barres 1 et 2, et allez voir si le signal est toujours là sur les barres 2 et 3.

Si le signal s'est estompé, fermez l'ordre.

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

Celui-ci n'est pas repeint, il a l'air bien, comparez avec solar_joy, le signal a une barre de retard, mais c'est le même indicateur.

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

Je pense que l'indicateur fisher fonctionne, c'est juste une barre de retard, il recalcule, il ne repeint pas, celui-ci repeint, mettez-le dans un EA dans le testeur, et vous verrez :

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


Cher ffoorr, je ne peux pas ouvrir les pages et ne peux pas accéder au site, www.forex-tsd.com. Peut-être que ma configuration internet a un problème.

S'il vous plaît, concentrons-nous sur mon code. Il n'y a que 10 lignes de code pour le contenu principal.

Cependant, il est toujours aussi difficile pour nous de trouver la cause première du changement de couleur des barres historiques.