[¡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 184

 

¡Buenas tardes!

Necesito encontrar el valor del último punto de una serie parabólica pasada. Digamos que este:

He escrito una función para encontrarlo:

double FindLastLevel ()                             
 {double Level; int i;
  for (i=0; Level==0; i++) 
  {double SAR0=iSAR(Symbol(),Period(), Step, Maximum, i),
          SAR1=iSAR(Symbol(),Period(), Step, Maximum, i+1),
          SAR2=iSAR(Symbol(),Period(), Step, Maximum, i+2);

   if (SAR0>SAR1){if(SAR1<SAR2){Level=SAR2; return (Level);}}
   if (SAR0<SAR1){if(SAR1>SAR2){Level=SAR2;return (Level);}}
  }}

Es decir, recalcula cada valor de la Parabólica, a partir de la barra actual. En cuanto se viola la condición de disminución/incremento gradual de los valores, la función devuelve el valor de esa barra que "rompió" la tendencia. Sin embargo, si hubiera un salto de 1 barra, como éste:


La función "no la ve".

Por favor, aconseja cómo reescribir la función? ¿Quizás haya una solución preparada?

 
Heroix:

¡Buenas tardes!

Necesito encontrar el valor del último punto de una serie parabólica pasada. Digamos que este:

He escrito una función para encontrarlo:

Es decir, recalcula cada valor de la Parabólica, a partir de la barra actual. En cuanto se viola la condición de disminución/incremento gradual de los valores, la función devuelve el valor de esa barra que "rompió" la tendencia. Sin embargo, si hubiera un salto de 1 barra, como éste:


La función "no la ve".

Por favor, aconseja cómo reescribir la función? ¿Quizás haya una solución lista?

También hay que mirar la posición en relación con el precio.
 
Zhunko:
También hay que mirar la posición en relación con el precio.

Es decir, comparar no sólo el indicador en sí, sino también la posición de sus valores en i en relación con el valor del precio en i, digamos...
 

Consulta este asesor para ver si hay algo interesante https://www.mql5.com/ru/code/10649

 
La gente me dice por qué if(OPN<CLS && (CLS-OPN)>=50*Point) no busca????
 
nlp2311:

Pregunta.

Por qué la condición no va

if(Close_1>Open_1 && ( Close_1-Open_1)>=30*Punto) buffer[i]=High_1;

...

En lugar de

if(Close_1>Open_1 && ( Close_1-Open_1)>=30*Point) buffer[i]=High_1;

hazlo así

if (Close_1>Open_1)
{  if (Close_1-Open_1>=30*Point) buffer[i]=High_1;
}

Publica aquí la parte del código donde se da esta condición. Quizá haya un error en el bucle. Publica el código en el foro utilizando el SRC.

 
paladin80:

Pruebe esto en lugar de

así.

Publica aquí la parte del código donde se da esta condición. Quizá haya un error en el bucle. En el foro, publique el código usando SRC.


Intentado.... no funciona.

He puesto paréntesis de diferentes maneras, retorcidas como pude... Ya no puedo!!!!!!!!!!!))))

Por eso pregunto CÓMO puedo hacerlo sin distorsiones):?

Parece que este MT4 creep no ve pips por condición if(.....) en absoluto...((

Es más, escribí por separado un indicador para mantener esta condición... No puedo(...):

¿Por qué es así?

 
nlp2311:

Aquí está.... ¡¡¡¡bastardo(((!!!!

ya está enfadado...


¿Qué has comprobado?
 

Hola, escribí un indicador con dos MACDs diferentes en la misma ventana y a la misma escala.

Ahora tengo que volver a recorrer todas las barras VISTAS y encontrar el momento en que la segunda línea de señal del indicador (naranja) en la barra CERO será igual a la primera línea de señal (roja).

¿Alguien puede ayudarme a resolverlo?


Код 2
-----

#property indicator_separate_window
#property indicator_buffers 6
#property indicator_color1 Lime
#property indicator_color2 Red
#property indicator_color5 Aqua
#property indicator_color6 DarkOrange
#property  indicator_width1  2
#property  indicator_width5  2


//--- buffers
double Macd1Buffer[];
double Signal1Buffer[];
double Macd2Buffer[];
double Signal2Buffer[];
double Macd3Buffer[];
double Signa13Buffer[];

//--- for one bar
datetime last;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_NONE);
   SetIndexBuffer(0,Macd1Buffer);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,Signal1Buffer);
   SetIndexStyle(2,DRAW_NONE);
   SetIndexBuffer(2,Macd2Buffer);
   SetIndexStyle(3,DRAW_NONE);
   SetIndexBuffer(3,Signal2Buffer);
   SetIndexStyle(4,DRAW_NONE);
   SetIndexBuffer(4,Macd3Buffer);
   SetIndexStyle(5,DRAW_LINE);
   SetIndexBuffer(5,Signa13Buffer);
   
   
   IndicatorDigits(Digits);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
    if(last>=Time[0]) return;
  
    double max_M1=-0.01,min_M1=0.01,
           max_M2=-0.01,min_M2=0.01,
           max_S1=-0.01,min_S1=0.01,
           max_S2=-0.01,min_S2=0.01,
           max1=-0.01,min1=0.01,
           max2=-0.01,min2=0.01,
           max3,
           M,
           Dmax_3,
           D_sig,
           D_sig_Last=1.0;
  
  
   int j=0;                                             
       
    while(j<WindowBarsPerChart()-1)
{          
//----
   for(int i=0;i<=j;i++)
       
      { 
           Macd1Buffer[i]=iMACD(0,PERIOD_H1,6,12,5,PRICE_CLOSE,MODE_MAIN,i+1);          // основная линия 1-ого MACD        
           Macd2Buffer[i]=iMACD(0,PERIOD_H1,12,26,9,PRICE_CLOSE,MODE_MAIN,i+1);         // основная линия 2-ого MACD
           
              max_M1=MathMax(Macd1Buffer[i],max_M1);
              min_M1=MathMin(Macd1Buffer[i],min_M1);
           
              max_M2=MathMax(Macd2Buffer[i],max_M2);
              min_M2=MathMin(Macd2Buffer[i],min_M2); 
     
           Signal1Buffer[i]=iMACD(0,PERIOD_H1,6,12,5,PRICE_CLOSE,MODE_SIGNAL,i+1);      // сигнальная линия 1-ого MACD   
           Signal2Buffer[i]=iMACD(0,PERIOD_H1,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i+1);     // сигнальная линия 2-ого MACD
              
              max_S1=MathMax(Signal1Buffer[i],max_S1);
              min_S1=MathMin(Signal1Buffer[i],min_S1);
           
              max_S2=MathMax(Signal2Buffer[i],max_S2);
              min_S2=MathMin(Signal2Buffer[i],min_S2); 
    
              max1=MathMax(max_M1,max_S1);                                              // максимум 1-ого MACD
              min1=MathMin(min_M1,min_S1);                                              // минимум 1-ого MACD
           
              max2=MathMax(max_M2,max_S2);                                              // максимум 2-ого MACD
              min2=MathMin(min_M2,min_S2);                                              // минимум 2-ого MACD
      }   
        
           M=(max1-min1)/(max2-min2);                                                   // соотношение диапазонов max-min 1-ого и 2-ого MACD  
           max3=max2*M;                                                                 // max 3-его MACD,т.е."нового" 2-ого MACD
           Dmax_3=max1-max3;                                                            // смещение 3-ого MACD относительно 1-ого MACD
            
           
    for( i=0;i<=j;i++)
       
      {       
         Macd3Buffer[0]=Macd2Buffer[0]*M+Dmax_3;                                        // приведение диапазона max-min 2-ого MACD к диапазону 1-ого MACD,
                                                                                        // т.е.подучаем 3-ий MACD и совмещаем max и min 3-его MACD с                                                                                    // max и min 1-ого MACD                                                                                                                                       
         Signa13Buffer[0]=Signal2Buffer[0]*M+Dmax_3;                                    // max и min 1-ого MACD                                            
      }  
      
      
         D_sig=MathAbs(Signal1Buffer[0]-Signa13Buffer[0]);                              // разница между сигнальными линиями 1-ого и 3-ого MACD на
                                                                                        // нулевом баре
 if(Signa13Buffer[0]==Signal1Buffer[0])
      
        break;          
             
              D_sig_Last=D_sig; 
              
         
         j++;
         
}             
     
      Comment( "\n"," Баров = ",WindowBarsPerChart()-1, 
               "\n"," Macd1Buffer = ",DoubleToStr(Macd1Buffer[0],4),
               "\n"," Signal1Buffer = ",DoubleToStr(Signal1Buffer[0],4),
               "\n"," Macd3Buffer = ",DoubleToStr(Macd3Buffer[0],4),
               "\n"," Signa13Buffer = ",DoubleToStr(Signa13Buffer[0],4),
               "\n"," D_sig = ",DoubleToStr(D_sig,4));
               
               
               
               
               
               
//----
   last=Time[0];
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
Vinin:

¿Y a qué equivale el nivel de la escala?


¡¡¡Aha!!! Está en la pantalla del EA principal): 30 pips............................((((((((((((((((((((

Aún así, ¿qué pasa si(....) puedo correr a través de este balalaika, mi condición de MT4?):