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

 

Veuillez vous référer à la capture d'écran ci-dessous après le test à rebours.

3 questions sur les choses étranges sont aussi montrées dans l'image.

J'ai lu l'utilisation d'iCustom et j'ai vérifié mon EA et mon indicateur encore et encore, mais je n'ai finalement pas trouvé la cause fondamentale.

Veuillez m'aider d'urgence et merci beaucoup !

(*. Vous pouvez cliquer sur la capture d'écran pour l'ouvrir et l'agrandir afin de voir les questions plus clairement)

Voici les codes critiques pour l'indicateur "Reverse" (les autres codes ont été remplacés par "..." pour que les codes critiques soient clairs) :

int OnInit()
  {
   IndicatorBuffers(8);
   ....
   SetIndexBuffer(6,ExtBuffer1);
   ....
  }

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[])
  {
   ...
   ...

   for(i=limit-1; i>=0; i--)
     {
      ...
      Value=...;
      ExtBuffer0[i]=MathLog((1+Value)/(1-Value));
      if(ExtBuffer0[i]>0) ExtBuffer1[i]=10;
      else ExtBuffer1[i]=-10;
     }

   ...
   ...
  }

Voici les codes critiques dans l'EA pour utiliser l'indicateur (les autres codes ont été remplacés par "..." pour que les codes critiques soient clairs) :

...
...

void Reverse()
  {
   Joy1=iCustom(Symbol(),0,"Reverse",6,1);
   Joy2=iCustom(Symbol(),0,"Reverse",6,2);
  }

void openPosition()
  {
   ...
   if(Joy2<=-10 && Joy1>=10) 
    {
    r=OrderSend(Symbol(),OP_BUY,lotSize,Ask,slippage,0,0,TradeComment,MAGIC,0,clrMediumBlue);
    ...
    }
   else if(Joy2>=10&& Joy1<=-10) 
    {
    r=OrderSend(Symbol(),OP_SELL,lotSize,Bid,slippage,0,0,TradeComment,MAGIC,0,clrMediumVioletRed);
    ...
    }
   ...
   }
void closePosition()
  {
   ...
    if(openType==OP_BUY && Joy2>=10 && Joy1<=-10)
     for(i=OrdersTotal();i>=1; i--)
         if(OrderSelect(i-1,SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==MAGIC)
           {
            r=OrderClose(OrderTicket(),OrderLots(),Bid,slippage,clrDodgerBlue);
            ...
            }
   else if(openType==OP_SELL && Joy2<=-10 && Joy1>=10) 
    for(i=OrdersTotal();i>=1; i--)
         if(OrderSelect(i-1,SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==MAGIC)
           {
            r=OrderClose(OrderTicket(),OrderLots(),Ask,slippage,clrDeepPink);
            ...
            }
   ...  
  }
void OnTick()
  {
   ...
   Reverse();
   openPosition();
   closePosition(); 

}

 

Maintenant, je recrée le fichier indicateur et le problème du dessin de la ligne jaune a été résolu.

Cependant, les deux autres problèmes n'ont toujours pas été résolus. Merci de m'aider !

 

Le problème vient probablement de votre indicateur

 if(ExtBuffer0[i]>= 0) ExtBuffer1[i]=10;
      else ExtBuffer1[i]=-10;

vérifiez également votre EmptyValue

 
ffoorr:

Le problème vient probablement de votre indicateur

Vérifiez aussi votre EmptyValue

Cher ffoorr, il ne devrait pas y avoir de valeur vide comme vous pouvez le voir avec la ligne jaune.

 

et si, si(ExtBuffer0[i]==0)

en suivant ce qui est dans votre SetIndexEmptyValue, vous auriez un trou, un rien,

La ligne ne serait pas imprimée avant les deux prochaines données.


Sinon vérifiez l'index de votre indicateur, il semblerait que le signal ait une barre de retard.

Sinon, personne ne peut savoir sans voir le code de l'indicateur.


Utilisez-vous un indicateur fisher ?

 

Cher ffoorr, merci beaucoup pour votre aide. Mais j'ai vérifié l'indicateur avec les codes et je peux confirmer qu'il n'y a pas de valeur vide.

J'ai réinstallé tick story et MT4, le problème est toujours là. Donc je continue à vérifier.

 

jollydragon

s'il n'y a pas de SetindicatorEmptyValue, alors la valeur vide est EMPTY_VALUE

alors si vous codez if( ExtBuffer1[i]!= 10 ) Open_Order()

si ExtBuffer1[i] est == EMPTY_VALUE , vous aurez une commande.


Mais je ne peux pas non plus savoir si c'est la cause du problème.

 

Cher ffoorr, j'ai ajouté des codes pour montrer les données deExtBuffer1[i] siExtBuffer1 n'est pas 10 ou -10. Finalement je n'ai rien obtenu et cela prouve queExtBuffer1 est 10 ou -10 pour chaque barre.

J'ai aussi mis à jour l'indicateur à seulement 2 buffers avec 2 lignes. Vous pouvez voir 1 en blanc et 1 en jaune. J'utilise les données de la ligne jaune dans mon EA.

Veuillez vous référer aux données ci-dessous, vous pouvez voir que lorsque l'ordre change, cela est dû au fait que les données de la ligne jaune changent. Le '1' ci-dessous signifie les données de la ligne jaune de la barre juste avant l'ouverture ou la fermeture de l'ordre, le '2' signifie les données de la ligne jaune de la barre avant le '1'. C'est également la façon dont je gère l'ouverture et la fermeture des ordres.

J'ai également vérifié le code de l'indicateur encore et encore, donc je peux confirmer que l'indicateur est calculé sur la base des barres qui le précèdent et qu'il ne s'agit donc pas d'un indicateur Fisher.

Cependant, vous pouvez voir que les changements d'ordres ne correspondent toujours pas à la ligne jaune (signal).

C'est vraiment étrange ! Quelle peut être la cause profonde de ce problème ? Qui peut m'aider et je vous en serai très reconnaissant ?

2013.04.30 04:00:00:    1: -10.0, 2:  10.0-error:       0

2013.04.30 08:30:01:    1:  10.0, 2: -10.0-error:       0

2013.04.30 08:30:02:    1:  10.0, 2: -10.0-error:       0

2013.04.30 09:30:00:    1: -10.0, 2:  10.0-error:       0

2013.04.30 09:30:00:    1: -10.0, 2:  10.0-error:       0

2013.04.30 16:30:00:    1:  10.0, 2: -10.0-error:       0

2013.04.30 16:30:00:    1:  10.0, 2: -10.0-error:       0

2013.05.01 18:00:00:    1: -10.0, 2:  10.0-error:       0

2013.05.01 18:00:00:    1: -10.0, 2:  10.0-error:       0

2013.05.01 22:00:00:    1:  10.0, 2: -10.0-error:       0

2013.05.01 22:00:00:    1:  10.0, 2: -10.0-error:       0

2013.05.01 22:30:00:    1: -10.0, 2:  10.0-error:       0

2013.05.01 22:30:00:    1: -10.0, 2:  10.0-error:       0

2013.05.02 15:30:00:    1:  10.0, 2: -10.0-error:       0

2013.05.02 15:30:00:    1:  10.0, 2: -10.0-error:       0

2013.05.02 16:03:26:    1:  10.0, 2:  10.0-error:       0

 
Oh, mon Dieu. Je n'ai toujours pas d'idée avec ça. Qu'est-ce qui ne va pas ?
 
jollydragon: Oh, mon Dieu. Je n'ai toujours pas d'idée avec ça. Qu'est-ce qui ne va pas ?
  1. Comment le saurions-nous ? Vous n'avez pas posté tout le code (pas d'indicateur, pas de iCustom, pas de boucles).
  2. Vous dites que l'indicateur a toujours un 10, mais la (première) image montre des écarts. Nous n'avons aucune idée de l'endroit où se trouvait votre curseur. Était-il au-dessus de l'écart ?
  3. Vous n'en avez aucune idée car vous n'avez aucune information. Ajoutez des instructions d'impression avant et à l'intérieur de if incluant des valeurs de variables et retrouvez-le.
 

Dears, en fait j'ai soustrait les codes critiques pour vous pour gagner votre temps.

Cependant, votre aide est très appréciée et je joins ici les fichiers de l'EA et de l'indicateur.

Veuillez noter que les noms de fichiers ont changé automatiquement après avoir été attachés. Il y a une lettre aléatoire insérée entre 2 mots. Dans mon ordinateur, ce sont "Trade Joy" et "Solar Joy".

Dans l'attente de la solution :-)

Dossiers :
tradebjoy.mq4  12 kb
trademjoy.ex4  17 kb
solarxjoy.mq4  7 kb
solarcjoy.ex4  8 kb