[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. No puedo ir a ningún sitio sin ti - 4. - página 537

 
Pacman:

Hola a todos.

Ayúdame a conseguir el código correcto.

Cuando se cumple la primera condición Oferta > Línea_2, se pierde la segunda condición RSI<30, es decir, la línea del indicador RSI supera el valor 30.

¿Cómo enlazar correctamente dos condiciones?

Si alguien ha visto una implementación de este tipo, por favor, que me dé un enlace.

La forma más fácil y efectiva es buscar en CodaBase la palabra "RSI" en los EAs ya implementados.
 
Quiero repetir mi pregunta. Tengo un indicador (el indicador superior de la imagen) que da SOLO estas señales.
Necesito transformar estas señales en una señal "sólida" (indicador inferior en la imagen).
¡Ayuda si sabes cómo hacerlo!

P.D.

El indicador MACD en la imagen sólo se utiliza para ilustrar mi problema.



Tengo una respuesta de TaraasBY (por lo que muchas gracias):

Se llena el buffer del indicador, en caso de que no haya ningún valor en él, con el valor anterior (no vacío):

if (gda_BUF1[pos] == EMPTY_VALUE) 
    {
        if (gda_BUF1[pos+1] != EMPTY_VALUE) gda_BUF1[pos] = gda_BUF1[pos+1];
       
    }


Pero no me funciona.¿Cómo enlazar ExtMapBuffer1[i] y ExtMapBuffer1[pos]?

Quiero repetir ese indicador de MACD sólo por ejemplo! ¿Cómo repetir la construcción mencionada en él?

#property indicator_separate_window
#property indicator_minimum -1.5
#property indicator_maximum 1.5
#property indicator_buffers 1
#property indicator_color1 Aqua
#property  indicator_width1  2
#property indicator_level1 0.0
//--- buffers
double ExtMapBuffer1[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0,ExtMapBuffer1);
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
     int counted_bars=IndicatorCounted(),
       limit;  
       
    if(counted_bars>0)
      counted_bars--;
   
      limit=Bars-counted_bars;
//----
   for(int i=0;i<limit;i++)
   
      if((iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i+2)<iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i+2))&&
         (iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i+1)>iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i+1)))
       {
        ExtMapBuffer1[i]=1;
       }
      else
       {
        
       
       
      if((iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i+2)>iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i+2))&&
         (iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i+1)<iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i+1)))
       {
        ExtMapBuffer1[i]=-1;
       }
      else
       {
        ExtMapBuffer1[i]=0;
       }
      }
      
 
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
MK07:

¿Cómo conecto ExtMapBuffer1[i] y ExtMapBuffer1[pos]?

Aquí está el código del indicador. Quiero repetir que el indicador MACD es sólo para el ejemplo, ¿cómo puedo repetir la estructura mencionada en él?

Así (aplicado al MACD):

int start()
  {
     int counted_bars=IndicatorCounted(),
       limit;  
     static int li_preSignal = 0;
    if(counted_bars>0)
      counted_bars--;
   
      limit=Bars-counted_bars;
//----
   for(int i=0;i<limit;i++)
   
      if((iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i+2)<iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i+2))&&
         (iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i+1)>iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i+1)))
       {
        ExtMapBuffer1[i]=1;
        li_preSignal = 1;
       }
      else
       {
        
       
       
      if((iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i+2)>iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i+2))&&
         (iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i+1)<iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i+1)))
       {
        ExtMapBuffer1[i]=-1;
        li_preSignal = -1;
       }
      else {ExtMapBuffer1[i] = li_preSignal;}
      }
      
 
//----
   return(0);
  }
 
TarasBY:
La forma más fácil y efectiva es buscar en CodaBase la palabra "RSI" en los EAs ya implementados.

Gracias, seguiré buscando.
 
TarasBY:

Así que (aplicado al MACD):

Gracias, funciona, pero sólo una barra después. ¿Hay algo más que puedas hacer?

 
TarasBY:

Así que (aplicado al MACD):

Tu versión anterior con ExtMapBuffer1[pos] tiene más sentido para mí y parece ser más universal.
 
MK07:

Gracias, funciona, pero sólo una barra después. ¿Hay algo más que puedas hacer?

Prueba esto.

Archivos adjuntos:
 

Vinin
:


No se ha encontrado ninguna intersección estocástica (me refiero al código)

// Обращение к функции техн.индикат.
   
   M_1=iStochastic(NULL,0,Kperiod,Dperiod,Slowing,MODE_SMMA,Price_field,MODE_MAIN,  1);
   M_2=iStochastic(NULL,0,Kperiod,Dperiod,Slowing,MODE_SMMA,Price_field,MODE_MAIN,  2);
   S_1=iStochastic(NULL,0,Kperiod,Dperiod,Slowing,MODE_SMMA,Price_field,MODE_SIGNAL,1);
   S_2=iStochastic(NULL,0,Kperiod,Dperiod,Slowing,MODE_SMMA,Price_field,MODE_SIGNAL,2);

                        // Анализ ситуации
   
   if (M_2 < S_2 && M_1==S_1)                    // Условие откр. Buy и закр. Sell 
     {
      if (Total>0)
        {
        Close_Order_S(Ticket,Ans,Lts); 
        }
      
        Ticket = Open_Order_B(StopLoss,Lts); 
                                                                         
     } 
   if (M_2 > S_2 && M_1==S_1)                    // Условие откр. Sell и закр. Buy        
     {  
      if (Total>0)
        {
        Close_Order_B(Ticket,Ans,Lts);   
        }                           
      
        Ticket = Open_Order_S(StopLoss,Lts); 
 
granit77:

Inténtalo de esta manera.




Gracias, ha funcionado.
 
Equilibrium:



¿Dónde está la intersección?

Leer sobre la comparación de números reales

Razón de la queja: