[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 184

 

Boa tarde!

Preciso encontrar o valor do último ponto de uma série parabólica passada. Digamos este aqui:

Eu escrevi uma função para encontrá-la:

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);}}
  }}

Isto é, ele recalcula cada valor de Parabólico, a partir da barra atual. Assim que a condição de diminuição/aumento gradual dos valores é violada, a função retorna o valor naquela barra que "quebrou" a tendência. Entretanto, se houvesse um salto de 1 barra, como este:


A função "não o vê".

Favor aconselhar como reescrever a função? Talvez haja uma solução pronta?

 
Heroix:

Boa tarde!

Preciso encontrar o valor do último ponto de uma série parabólica passada. Digamos este aqui:

Eu escrevi uma função para encontrá-la:

Isto é, ele recalcula cada valor de Parabólico, a partir da barra atual. Assim que a condição de diminuição/aumento gradual dos valores é violada, a função retorna o valor naquela barra que "quebrou" a tendência. Entretanto, se houvesse um salto de 1 barra, como este:


A função "não o vê".

Por favor, aconselhe como reescrever a função? Talvez haja uma solução pronta?

Você também tem que olhar para a posição em relação ao preço.
 
Zhunko:
Você também tem que olhar para a posição em relação ao preço.

Isto é, comparar não apenas o indicador em si, mas também a posição de seus valores em i em relação ao valor do preço em i, digamos...
 

Confira este assessor para ver se há algo interessante https://www.mql5.com/ru/code/10649

 
As pessoas me dizem porque if(OPN<CLS && (CLS-OPN)>=50*Point) não está procurando por????
 
nlp2311:

Pergunta.

Por que a condição não vai

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

...

Em vez de

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

fazer assim

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

Afixe aqui a parte do código onde esta condição está presente. Talvez haja um erro no laço. Publicar o código no fórum utilizando o SRC.

 
paladin80:

Tente isto ao invés de

assim.

Afixe aqui a parte do código onde esta condição está presente. Talvez haja um erro no laço. No fórum, poste o código usando o SRC.


Tried.... não funciona.

Coloquei parênteses de maneiras diferentes, torcidos como pude... Já não posso mais!!!!!!!!!!!))))

É por isso que estou perguntando COMO posso fazer isso sem distorções):?

Parece que este canalha MT4 não vê pips por condição se (.....) de todo...(

Além disso, eu escrevi separadamente um indicador para manter esta condição... Não posso(...):

Por que é assim?

 
nlp2311:

Aqui está.... bastardo(((!!!!

já com raiva...


O que você verificou?
 

Olá, escrevi um indicador com dois MACDs diferentes na mesma janela e na mesma escala.

Agora preciso passar por todas as barras SEEN novamente e encontrar o tempo em que a segunda linha de sinal indicador (laranja) na barra ZERO será igual à primeira linha de sinal (vermelha).

Alguém pode me ajudar a descobrir isso?


Код 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:

E o que é igual a um estol?


Aha!!! Está na tela da EA principal): 30 pips............................((((((((((((((((((((

Ainda assim, e se (....) eu puder passar por este balalaika, minha condição MT4?):

Razão: