Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 278

 
mila.com:

Não consigo sair com meus ciclopes e digitar corretamente seu indicador.

Seu script retorna zero em todas as configurações. É suposto devolver um três, porque agora a diferença entre a primeira e a terceira barra é de 0,005.

Talvez eu não tenha sido claro. Quero colocar isto no laço.


double ma_etalon=iMA(NULL,0,...,i+1);

double ma_curr;

int shift;

for(shift=2;shift<5;shift++) {

    ma_curr=iMA(NULL,0,...,i+shift);

    if (ma_etalon-ma_curr<0.005) break; // ах ты чёрт, значение близко

}

if (shift==5) {

   // цикл досчитал до конца, то есть все значение довольно далеко
   // ... развернись плечо ...

}

 
mila.com:

Obrigado, mas algo não está certo.


0,005 é medido em quê? (deve ser multiplicado por _Ponto)
 

Obrigado a todos por sua ajuda, funcionou )

 
mila.com:

Obrigado a todos por sua ajuda, funcionou )

Estava pensando, você precisava de um destes?

 double prevMA=0,currMA=0;
 for(int i=1;i<=5;i++) {
  if(i==1) currMA=iMA(Symbol(),0,14,0,MODE_EMA,PRICE_CLOSE,i);
  prevMA=iMA(Symbol(),0,14,0,MODE_EMA,PRICE_CLOSE,i);
  if(MathAbs(prevMA-currMA)>0.0005) {
   // сюда пишем в буфер
   break;
  }
 }
 
Vitaly Muzichenko:

Só me pergunto se havia necessidade de tal coisa...

Sim, e como você encaixa este projeto no laço principal do indicador?

 
Vladimir Pastushak:

Eu lhe disse claramente que ao seguir você coloca 0 em vez de levar

Marque esta opção.


Funciona!!! :)))).... Muito obrigado por nos aturarem, perdedores)))))) Muito obrigado!)

 

Boa tarde.

Você pode informar como o iCustom pode ser usado para obter um valor indicador em outro período de tempo com um turno?

Isto é, estou trabalhando na M5, quero obter o valor indicador da M15, e quero obter o valor da vela anterior na M15.

int start() 
{ 
  HistBar = History;
  int i,counted_bars = IndicatorCounted();
  if (counted_bars < 0) return (-1);
  if (counted_bars > 0) counted_bars--;
  int limit = MathMin(Bars-counted_bars,HistBar+100);

  for(i=limit; i>=0; i--)
   {  
   int HT1,HT2; 
        if (_Period == PERIOD_M1)  
            {HT1 = PERIOD_M5;
            HT2 = PERIOD_M15;}
        else
           {
           if (_Period == PERIOD_M5)  
            {HT1 = PERIOD_M15;
            HT2 = PERIOD_M30;}
           else
              {
              if (_Period == PERIOD_M15)  
               {HT1 = PERIOD_M30;
               HT2 = PERIOD_H1;}
               }
            }
   //MFI
   long Volume_0_0 = iVolume(NULL,0,i);
   long Volume_0_1 = iVolume(NULL,0,i+1);
   double BWMFI_0_0 = iBWMFI(NULL,0,i);
   double BWMFI_0_1 = iBWMFI(NULL,0,i+1);

   ///////// вопрос как тут указать правильно
   long Volume_1_0 = iVolume(NULL,HT1,i);
   long Volume_1_1 = iVolume(NULL,HT1,i+1);
   double BWMFI_1_0 = iBWMFI(NULL,HT1,i);
   double BWMFI_1_1 = iBWMFI(NULL,HT1,i+1);
   ....
}
 
LSM:

Boa tarde.

Você pode aconselhar como o iCustom pode ser usado para obter um valor indicador em outro período de tempo com um turno?

Estou trabalhando na M5, quero obter o valor indicador da M15, e quero obter o valor da vela anterior na M15.

É suficiente ler cuidadosamente a documentação

double  iCustom(
   string       symbol,           // имя символа
   int          timeframe,        // таймфрейм
   string       name,             // папка/имя_пользовательского индикатора
   ...                            // список входных параметров индикатора
   int          mode,             // источник данных
   int          shift             // сдвиг
   );
 
Alexey Viktorov:

Basta ler atentamente a documentação

Editei minha pergunta, acrescentei o código. Há um loop em andamento. Não está claro o que eu recebo quando isso acontece em loop.
 
LSM:
Eu editei minha pergunta e acrescentei o código. Há um loop em andamento. Não está claro o que vou conseguir quando isso acontecer em um loop.

Responderei minha própria pergunta, caso alguém precise dela).

   
   !!!!
   int y = iBarShift(NULL,HT1,Time[i]);
   
   long Volume_1_0 = iVolume(NULL,HT1,y);
   long Volume_1_1 = iVolume(NULL,HT1,y+1);
   double BWMFI_1_0 = iBWMFI(NULL,HT1,y);
   double BWMFI_1_1 = iBWMFI(NULL,HT1,y+1);
Razão: