Pregunta sobre el indicador - página 2

 
1 para Verdadero, o 0 para Falso ¿verdad?

Mañana lo pensaré un poco más y veré si puedo resolver esto.
 
Agent86:
1 para Verdadero, o 0 para Falso, ¿correcto? <---- esto es correcto, PERO

Lo pensaré un poco más mañana, y veré si puedo resolver esto.


Reino Unido se refiere más a sus valores de MACD .
 
más rápido y más lento son dobles, no bool... trabajan a través del bucle desde su valor inicial y tal vez 3 iteraciones, por lo que para los valores de Bares, Bares-1, Bares-2... ¿cuáles son los valores de más rápido y más lento?
 
//+------------------------------------------------------------------+
//|                                   
//+------------------------------------------------------------------+


#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()
  {
   
   int i=Bars;
   
   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        
  
    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");
          Print ("i=",i, " faster=", faster);
          Print ("i=",i, " slower=",slower);
          }    
               
      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);
  }
//+------------------------------------------------------------------+




2011.09.28 16:43:30 sup_res EURUSD,M5: i=411 faster=-0.0005

2011.09.28 16:43:30 sup_res EURUSD,M5: v1[411]= 1.3522 si
2011.09.28 16:43:30 sup_res EURUSD,M5: v2[414]= 1.3495 if
2011.09.28 16:43:30 sup_res EURUSD,M5: i=414 slower=-0.0007
2011.09.28 16:43:30 sup_res EURUSD,M5: i=414 más rápido=-0.0005
2011.09.28 16:43:30 sup_res EURUSD,M5: v1[414]= 1.3527 si
2011.09.28 16:43:30 sup_res EURUSD,M5: i=417 más lento=-0.0007
2011.09.28 16:43:30 sup_res EURUSD,M5: i=417 más rápido=-0.0005
2011.09.28 16:43:30 sup_res EURUSD,M5: v1[417]= 1.3528 si
2011.09.28 16:43:30 sup_res EURUSD,M5: v2[419]= 1.3506 if
2011.09.28 16:43:30 sup_res EURUSD,M5: i=420 slower=-0.0007
2011.09.28 16:43:30 sup_res EURUSD,M5: i=420 más rápido=-0.0005
2011.09.28 16:43:30 sup_res EURUSD,M5: v1[420]= 1.3523 si
2011.09.28 16:43:30 sup_res EURUSD,M5: i=426 más lento=-0.0007
2011.09.28 16:43:30 sup_res EURUSD,M5: i=426 más rápido=-0.0005
2011.09.28 16:43:30 sup_res EURUSD,M5: v1[426]= 1.3522 si
2011.09.28 16:43:30 sup_res EURUSD,M5: v2[429]= 1.3481 if


Imprime esto cuando se ejecuta el indicador

Pero el mismo código para un EA no imprime la matriz

2011.09.28 16:43:48 2011.01.02 18:42 Agent86_5min EURUSD,M5: i=227 faster=-0.0015
2011.09.28 16:43:48 2011.01.02 18:42 Agente86_5min EURUSD,M5: v1[227]= 0 si
2011.09.28 16:43:48 2011.01.02 18:42 Agent86_5min EURUSD,M5: v2[230]= 0 if
2011.09.28 16:43:48 2011.01.02 18:42 Agent86_5min EURUSD,M5: i=232 slower=-0.0013
2011.09.28 16:43:48 2011.01.02 18:42 Agent86_5min EURUSD,M5: i=232 más rápido=-0.0015
2011.09.28 16:43:48 2011.01.02 18:42 Agente86_5min EURUSD,M5: v1[232]= 0 si
2011.09.28 16:43:47 2011.01.02 18:28 Agent86_5min EURUSD,M5: i=825 faster=-0.0015
2011.09.28 16:43:47 2011.01.02 18:28 Agent86_5min EURUSD,M5: v1[825]= 0 if
2011.09.28 16:43:47 2011.01.02 18:28 Agent86_5min EURUSD,M5: i=829 slower=-0.0008
2011.09.28 16:43:47 2011.01.02 18:28 Agent86_5min EURUSD,M5: i=829 más rápido=-0.0015
2011.09.28 16:43:47 2011.01.02 18:28 Agent86_5min EURUSD,M5: v1[829]= 0 si
2011.09.28 16:43:47 2011.01.02 18:28 Agent86_5min EURUSD,M5: i=832 slower=-0.0008
2011.09.28 16:43:47 2011.01.02 18:28 Agent86_5min EURUSD,M5: i=832 faster=-0.0015
2011.09.28 16:43:47 2011.01.02 18:28 Agente86_5min EURUSD,M5: v1[832]= 0 si
2011.09.28 16:43:46 2011.01.02 18:13 Agent86_5min EURUSD,M5: i=240 faster=-0.0011
2011.09.28 16:43:46 2011.01.02 18:13 Agent86_5min EURUSD,M5: v1[240]= 0 if
2011.09.28 16:43:46 2011.01.02 18:13 Agent86_5min EURUSD,M5: v2[241]= 0 if
2011.09.28 16:43:46 2011.01.02 18:13 Agent86_5min EURUSD,M5: v2[245]= 0 if
2011.09.28 16:43:46 2011.01.02 18:13 Agent86_5min EURUSD,M5: i=245 slower=-0.0003
2011.09.28 16:43:46 2011.01.02 18:13 Agent86_5min EURUSD,M5: i=245 más rápido=-0.0011
2011.09.28 16:43:46 2011.01.02 18:13 Agente86_5min EURUSD,M5: v1[245]= 0 si
2011.09.28 16:43:46 2011.01.02 18:13 Agent86_5min EURUSD,M5: v2[249]= 0 if


No sé por qué vuelve a recurrir a no imprimir el array de nuevo, porque es exactamente el mismo código que el indicador
En fin, por ahora trabajaré en el indicador.

Los valores parecen ser varios desde números fraccionarios de 4 dígitos hasta números fraccionarios negativos de 4 dígitos

Si cambio el desplazamiento iMACD a i, entonces más rápido y más lento = 0 todo el tiempo

 
Agent86:

Intenté insertar if(faster > slower) en varias áreas del código sólo para jugar con la idea. Normalmente, estas ideas funcionarían en un EA pero no en un indicador

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

pero esto hace que el indicador desaparezca.

Pruebe este cambio
//   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        
  
    for(i=Bars-1; i>=0; i--)
     {
   double   faster = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i), //MODE_MAIN
            slower = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i); //MODE_SIGNAL        
 
Agent86:


No sé por qué se recurre a no imprimir el array de nuevo, porque es el mismo código exacto que el indicador


No se pueden utilizar los buffers de los indicadores en un EA. . esto lo explica : https://www.mql5.com/en/articles/1456

más rápido y más lento son los mismos valores durante todo el bucle y los valores cambiantes de i, ¿es lo que quieres y necesitas?

 
RaptorUK:

No se pueden utilizar los buffers de los indicadores en un EA. . esto lo explica : https://www.mql5.com/en/articles/1456

más rápido y más lento son los mismos valores durante todo el bucle y los valores cambiantes de i, ¿es lo que quieres y necesitas?


Ok gracias por el enlace. Me había olvidado de esto. Es mucha información para que yo recuerde. Hándicap de noobiness LOL.

Así que de todos modos, yo estaba tratando de hacer los fractales altos sólo se forman cuando otra condición se produce como cruces iMACD, o cruces EMA o algunos otros cruces de indicadores.
Para que los fractales sólo se muestren en el indicador cuando se cumplan todas las condiciones.
Luego trabajaría en los fractales bajos con condiciones similares también.

Es probable que intente añadir condiciones aún más complejas también sólo para aprender a hacerlo. Quiero decir que puede que no sea iFractals, sino algún otro indicador con varias condiciones acopladas a otros indicadores también.

El diseño es un gran problema para mí porque no tengo experiencia así que no he visto muchas de las tácticas o teorías utilizadas en el código general. Así que sólo puedo aprender leyendo los códigos de otras personas por ahora para ver cómo funcionan y tratar de entender lo que han hecho y aprender de ello.

De todas formas seguiré trabajando en ello, gracias
 
WHRoeder:
Pruebe este cambio
Hmmm interesante

Así que la variable tiene que ser declarada dentro del bucle también.


Bien, ahora será divertido jugar con esto, gracias a todos

 

Prefiero instanciar una sola vez, todas las vrbs del bucle, fuera del bucle, primero. Si las declaras dentro del bucle, para cada iteración, el compilador crea una nueva variable. aunque parezcan iguales, en realidad no lo son.

 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        
  
    for(i=Bars-1; i>=0; i--)
     {
            faster = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i), //MODE_MAIN
            slower = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i); //MODE_SIGNAL 
 
diostar:
Yo prefiero instanciar una sola vez, todas las vrbs del bucle, fuera del bucle, primero. Si las declaras dentro del bucle, para cada iteración, el compilador crea una nueva variable. aunque parezcan iguales, en realidad no lo son.
¿Exactamente cómo has llegado a esa conclusión y cuál es la diferencia funcional?