Question sur l'indicateur

 

Bonjour à tous,

J'étais en train d'apprendre quelques sujets généraux sur les tableaux à partir d'un indicateur de base de code qui a iFractals avec une grande aide de gourous dans les forums.


De toute façon

J'ai été incapable d'ajouter des opérateurs conditionnels ou des opérations logiques pour ajouter une fonction d' addition à l'indicateur.

//+------------------------------------------------------------------+
//|                                   
//+------------------------------------------------------------------+


#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Red
#property indicator_color2 Blue
#property indicator_color3 White

//---- buffers
double v1[1000];
double v2[1000];
double v3[1000];
double val1;
double val2;
double val3;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
//----
   IndicatorBuffers(3);

   SetIndexArrow(0, 111);
   SetIndexStyle(0,DRAW_ARROW,STYLE_DOT,1,Blue);
   SetIndexBuffer(0, v1);
   SetIndexLabel(0,"Resistance");
   

   SetIndexArrow(1, 111);
   SetIndexStyle(1,DRAW_ARROW,STYLE_DOT,1,Red);
   SetIndexBuffer(1, v2);
   SetIndexLabel(1,"Support");
  
   
   SetIndexArrow(2, 111);
   SetIndexStyle(2,DRAW_ARROW,STYLE_DOT,1,White);
   SetIndexBuffer(2, v3);
   SetIndexLabel(2,"High A");
   
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
    
   double   faster = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1), //MODE_MAIN
            slower = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1); //MODE_SIGNAL
           
            
   int i=Bars;
//----
  
    for(i=Bars; i>=0; i--)
     {
      val1=iFractals(NULL, 0, MODE_UPPER,i);
      if (val1 > 0)
         {        
          v1[i]=High[i]; 
                         
          Print ("v1[", i, "]= ", v1[i], " if");
          }    
               
      else          
         {
         //v1[i]=v1[i+1];
         //Print ("v1[", i, "]= ", v1[i], " else");
         }
      
      val2=iFractals(NULL, 0, MODE_LOWER,i);
      if (val2 > 0)
         {
          v2[i]=Low[i];
          
          Print ("v2[", i, "]= ", v2[i], " if");
         }
          
      else          
         {
         //v2[i]=v2[i+1]; 
         //Print ("v2[", i, "]= ", v2[i], " else");         
         }
      }

   
     
//----
   return(0);
  }
//+------------------------------------------------------------------+

J'ai essayé d'insérer if(faster > slower) dans différentes zones du code juste pour jouer avec l'idée. Normalement, ces idées devraient fonctionner dans un EA mais pas dans un indicateur.

IE if(v1 > 0 && faster > slower)

mais cela fait disparaître l'indicateur.

Beaucoup d'autres combinaisons qui, selon moi, devraient produire l'indicateur souhaité if(autres conditions) etc. etc.
Toutes ne produisent aucune sortie d'instruction d'impression.

Quel est le point qui me manque ici ?

Merci de me conseiller.
Merci





 

double v1[1000];
double v2[1000];
double v3[1000];<------ leave out the '1000' initialization for indicator buffers, as they don't require 

 
diostar:


Eh bien, j'ai fait cela au début, mais ensuite je n'ai pas pu imprimer les valeurs du tampon, ce que je voulais faire

Attendez, laissez-moi reformuler ceci :

Si je ne déclare pas le nombre d'éléments dans le tampon, alors l'indicateur fonctionnera comme avec v1[i]=High[i]
Mais Print (v1[i]) ; ne sortira pas parce que d'après ce que je peux dire, il n'y a aucun moyen d'imprimer des valeurs de tableau non déclarées si le nombre d'éléments n'a pas été déclaré, donc il imprimera toujours 0

Donc si je ne le déclare pas globalement, alors l'indicateur fonctionne, cependant le if(faster>slower) fait toujours disparaître l'indicateur, ET je ne peux pas non plus imprimer les valeurs.

Si je le déclare et que je le réinitialise à nouveau avec v1[i]=High[i], je peux imprimer, mais tout ajout tel que && faster > slower fait disparaître l'indicateur.

Je ne comprends pas bien pourquoi.

Merci
 

J'ai pris votre code, j'ai enlevé les valeurs des déclarations de tampon et ça marche très bien . . .

2011.09.27 13:04:03 Agent86V2 GBPUSD,H1 : v2[4]= 1.5913 if
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1 : v1[8]= 1.5962 if
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1 : v2[11]= 1.5948 if
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1 : v1[15]= 1.5992 if
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1 : v1[18]= 1.5996 if
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1 : v2[20]= 1.5919 if
27.09.2011 13:04:03 Agent86V2 GBPUSD,H1 : v2[27]= 1.5954 if


 
RaptorUK:

J'ai pris votre code, j'ai enlevé les valeurs des déclarations des tampons et ça marche très bien....

2011.09.27 13:04:03 Agent86V2 GBPUSD,H1 : v2[4]= 1.5913 if <----High

------> en ce moment Fractals inconsistent High est plus bas que prev Low <---------

2011.09.27 13:04:03 Agent86V2 GBPUSD,H1 : v1[8]= 1.5962 if <----Low

2011.09.27 13:04:03 Agent86V2 GBPUSD,H1 : v2[11]= 1.5948 if<----High

------> en ce moment Fractals inconsistent High est plus bas que prev Low <---------

2011.09.27 13:04:03 Agent86V2 GBPUSD,H1 : v1[15]= 1.5992 if<----Low

2011.09.27 13:04:03 Agent86V2 GBPUSD,H1 : v1[18]= 1.5996 if<----High

------> en ce moment alternent des fractales cohérentes <---------

2011.09.27 13:04:03 Agent86V2 GBPUSD,H1 : v2[20]= 1.5919 if <----Low
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1 : v2[27]= 1.5954 if <----High


Intéressant, merci pour le résultat Agent86V2. Les fractales sont en effet un de ces moyens intrigants mais qui peuvent être rentables pour trader.

 
RaptorUK:

J'ai pris votre code, j'ai enlevé les valeurs de la déclaration des tampons et ça marche très bien...

2011.09.27 13:04:03 Agent86V2 GBPUSD,H1 : v2[4]= 1.5913 if
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1 : v1[8]= 1.5962 if
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1 : v2[11]= 1.5948 if
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1 : v1[15]= 1.5992 if
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1 : v1[18]= 1.5996 if
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1 : v2[20]= 1.5919 if
27.09.2011 13:04:03 Agent86V2 GBPUSD,H1 : v2[27]= 1.5954 if


Je peux également imprimer le code sans produire de valeurs nulles, ce qui n'était pas le cas dans l'autre fil.
Je suis désolé, mais je ne comprends pas. Je pensais avoir compris, mais il semble que quelque chose m'échappe encore.

int start()
   {
   double test[];
   
   test[39] = 45.6;
   Print("test[39]= ",test[39] );
   

      return(0);
   }
Vous m'avez demandé de déclarer comme ci-dessus :

Et vous avez cité ce sujet :

Quand tu as lu le livre sur les tableaux, as-tu vu où il est dit ceci ?

"Lors de la déclaration d'un tableau, le type de données, le nom du tableau et le nombre d'éléments de chaque dimension doivent être spécifiés :"

Donc, d'une part, je ne peux pas imprimer le tableau comme dans ce script sans déclarer d'abord le double test[40] ; comme vous l'avez demandé, mais maintenant il semble que je puisse aussi imprimer sans déclaration.

Il semble donc que je puisse imprimer les valeurs dans le tampon indépendamment de la déclaration.

Cependant, je ne peux pas ajouter de conditions supplémentaires qui produiraient normalement le résultat souhaité, comme if(faster > slower) ou && faster > slower.
Il peut s'agir d'EMA n'importe quoi, je veux juste comprendre pourquoi cela ne fonctionne pas.
Il fait disparaître les sommets de l'indicateur et la sortie d'impression v1 cesse de s'imprimer. Je m'attendais à ce qu'il s'aligne sur la condition et imprime la sortie.

J'ai essayé d'ajouter des blocs de code supplémentaires pour cela aussi avec les mêmes résultats.

Merci
 

J'ai aussi écrit ceci...

RaptorUK:

Les indicateurs de tampons sont des tableaux spéciaux... Ne confondez pas les tableaux et les tampons, ils sont similaires mais différents.

Dans le code original v1[] et v2[] sont des tampons, dans votre dernier code ce sont des tableaux, lorsque vous déclarez un tableau vous devez lui donner une taille, par exemple, v1[50] a 50 éléments de v1[0] à v1[49]. La mémoire tampon se redimensionne automatiquement lorsqu'il y a plus d'éléments nécessaires et les valeurs se déplacent automatiquement dans la mémoire tampon. Considérez la barre en cours de formation, la barre 0, lorsque cette barre se termine, la valeur de l'indicateur associée à cette barre doit se déplacer vers l'index 1... ceci est fait automatiquement avec les tampons... si vous voulez faire quelque chose de similaire avec des tableaux, vous pouvez le faire, mais vous devez le coder vous-même.

 
Agent86:

Cependant, je ne peux pas ajouter de conditions supplémentaires qui produiraient normalement le résultat souhaité, comme if(faster > slower) ou && faster > slower.
Cela peut être EMA n'importe quoi, je veux juste comprendre pourquoi cela ne fonctionne pas.
Il fait disparaître les sommets de l'indicateur et la sortie v1 print cesse de s'imprimer. Je m'attendais à ce qu'il s'aligne sur la condition et imprime la sortie.

J'ai essayé d'ajouter des blocs de code supplémentaires pour cela aussi avec les mêmes résultats.

Merci

Montrez votre code, ce qui ne fonctionne pas... Je n'utilise pas d'indicateurs techniques... jamais, donc ne supposez pas que je sais ce que vous voulez dire avec les EMA, etc ;-) vous devez me montrer votre code.
 
RaptorUK:

J'ai aussi écrit ceci...

RaptorUK:

Les indicateurs de tampons sont des tableaux spéciaux... Ne confondez pas les tableaux et les tampons, ils sont similaires mais différents.

Dans le code original v1[] et v2[] sont des tampons, dans votre dernier code ce sont des tableaux, lorsque vous déclarez un tableau vous devez lui donner une taille, par exemple, v1[50] a 50 éléments de v1[0] à v1[49]. La mémoire tampon se redimensionne automatiquement lorsqu'il y a plus d'éléments nécessaires et les valeurs se déplacent automatiquement dans la mémoire tampon. Considérez la barre en cours de formation, la barre 0, lorsque cette barre se termine une valeur d'indicateur associée à cette barre doit se déplacer vers l'index 1 ... ceci est fait automatiquement avec les tampons ... si vous voulez faire quelque chose de similaire avec des tableaux, vous pouvez, mais vous devez le coder vous-même.

Vrai. "Semblable mais différent". Je ne vois pas d'autres façons de dire mieux que ça.
 
Ok, similaire mais différent, j'ai compris, j'avais initialement de gros problèmes pour imprimer v1[i] à n'importe quel moment dans le code, mais maintenant il semble imprimer comme je l'attendais à l'origine.
J'ai seulement créé une boucle secondaire parce que je n'arrivais pas à imprimer dans la première boucle de l'indicateur, mais maintenant ça s'imprime.
Quoi qu'il en soit, je ne vais pas revenir sur ce point, je pense l'avoir compris.

Donc, le code qui ne fonctionnera pas est celui des exemples montrés ici :

//+------------------------------------------------------------------+
//|                                   
//+------------------------------------------------------------------+


#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Red
#property indicator_color2 Blue
#property indicator_color3 White

//---- buffers
double v1[];
double v2[];
double v3[];
double val1;
double val2;
double val3;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
//----
   IndicatorBuffers(3);

   SetIndexArrow(0, 111);
   SetIndexStyle(0,DRAW_ARROW,STYLE_DOT,1,Blue);
   SetIndexBuffer(0, v1);
   SetIndexLabel(0,"Resistance");
   

   SetIndexArrow(1, 111);
   SetIndexStyle(1,DRAW_ARROW,STYLE_DOT,1,Red);
   SetIndexBuffer(1, v2);
   SetIndexLabel(1,"Support");
  
   
   SetIndexArrow(2, 111);
   SetIndexStyle(2,DRAW_ARROW,STYLE_DOT,1,White);
   SetIndexBuffer(2, v3);
   SetIndexLabel(2,"High A");
   
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
    
   double   faster = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1), //MODE_MAIN
            slower = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1); //MODE_SIGNAL
           
            
   int i=Bars;
//----
  
    for(i=Bars; i>=0; i--)
     {
      val1=iFractals(NULL, 0, MODE_UPPER,i);
      if (val1 > 0 && faster > slower) 
         // I think I need to add some more comparisons for the Low[i] also
         // the comparison works but shows indicator when faster < slower too.
         // adding additional code blocks instead of above and including the part below and inserting this instead 
         //                                               if(faster>slower)
         //                                                     {
         //                                                      v1[i]=High[i];
         //                                                     }
         //                                                      causes indicator to disappear
         
         {                             
          v1[i]=High[i]; 
                         
          Print ("v1[", i, "]= ", v1[i], " if");
          }    
               
      else          
         {
         //v1[i]=v1[i+1];
         //Print ("v1[", i, "]= ", v1[i], " else");
         }
      
      val2=iFractals(NULL, 0, MODE_LOWER,i);
      if (val2 > 0)
         {
          v2[i]=Low[i];
          
          Print ("v2[", i, "]= ", v2[i], " if");
         }
          
      else          
         {
         //v2[i]=v2[i+1]; 
         //Print ("v2[", i, "]= ", v2[i], " else");         
         }
      }

   
     
//----
   return(0);
  }
//+------------------------------------------------------------------+

Merci

 
Agent86:

Le code qui ne fonctionnera pas est donc celui des exemples montrés ici :

Merci

Je peux vous dire quel est votre problème ou vous donner des indices.... ... des indices d'abord, si tu veux que je te le dise, dis-le et je te le dirai... .

A l'intérieur de la boucle, for(i=Bars ; i>=0 ; i--) . . . quelles sont les valeurs pour faster et slower?