Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 784

 
Aleksey Vyazmikin:

Por favor, ajude-me a inventar uma função.

Tenho uma TF actual e uma TF estimada, a função deve devolver a diferença entre as duas TFs em quaisquer combinações, se a medição fosse em barras

Cálculo TF 15 15 15 60 60 60 240 240 240
TF actual 15 5 1 15 5 1 60 15 5
Diferença em Nbar 1 3 15 4 12 60 4 16 48

Como implementar isto correctamente?


Fi-lo desta forma.

int TFk()
{
   int K=0;
   K=TF_transfer(TF)/TF_transfer(Period());
//   Print(TF_transfer(TF),"   ",TF_transfer(Period()));
//Print (K);
   if   (K<1)return(1);
   else      return(K);
}


int TF_transfer(ENUM_TIMEFRAMES tf)
  {
   if (tf==PERIOD_CURRENT) return(0);
   if (tf==PERIOD_M1) return(1);
   if (tf==PERIOD_M5) return(5);
   if (tf==PERIOD_M15) return(15);
   if (tf==PERIOD_M30) return(30);
   if (tf==PERIOD_H1) return(60);
   if (tf==PERIOD_H4) return(240);
   if (tf==PERIOD_D1) return(1440);
   if (tf==PERIOD_W1) return(10080);
   if (tf==PERIOD_MN1) return(43200);  
   if (tf==PERIOD_M2) return(2);
   if (tf==PERIOD_M3) return(3);
   if (tf==PERIOD_M4) return(4);
   if (tf==PERIOD_M6) return(6);
   if (tf==PERIOD_M10) return(10);
   if (tf==PERIOD_M12) return(12);
   if (tf==PERIOD_H2) return(120);
   if (tf==PERIOD_H3) return(180);  
   if (tf==PERIOD_M6) return(360);
   if (tf==PERIOD_H8) return(480);
   if (tf==PERIOD_H12) return(720);
   return(1);
  }

O problema é que eu preciso desta felicidade para o indicador, mas ele não quer inicializar-se correctamente e a este código

int OnInit()
  {
   Print ("K=",TFk()," Период=",Period());

return(INIT_SUCCEEDED); }

Reage desta forma:

2017.09.22 14:23:27.742 donchian_channel_prognoz_MTF (Eu Splice,M5) K=3 Período=5

2017.09.22 14:23:27.776 donchian_channel_prognoz_MTF (Eu Splice,M5) test

2017.09.22 14:23:27.790 donchian_channel_prognoz_MTF (Eu Splice,M15) K=1 Período=15

O mais confuso é que imprime um teste que já está no corpo da OnCalculate!

if(BarsCalculated(handle)<0) {Print ("test");return(0);}

A primeira vez o prazo foi definido correctamente, mas a segunda vez não foi...

Não sei o que é tão estranho...

Embora eu saiba, é a chamada de indicador do indicador. a correr em círculos...
 
Aleksey Vyazmikin:

Fi-lo desta forma

O problema é que eu preciso desta felicidade para o indicador, mas é estranho e não quer inicializar correctamente, em resposta a este código

Reage desta forma:

2017.09.22 14:23:27.742 donchian_channel_prognoz_MTF (Eu Splice,M5) K=3 Período=5

2017.09.22 14:23:27.776 donchian_channel_prognoz_MTF (Eu Splice,M5) test

2017.09.22 14:23:27.790 donchian_channel_prognoz_MTF (Eu Splice,M15) K=1 Período=15

O mais confuso é que imprime um teste que já está no corpo da OnCalculate!

A primeira vez o prazo foi definido correctamente, mas a segunda vez não foi...

Não sei o que são estas maravilhas.

Embora eu saiba, é chamar o indicador a partir do indicador. a correr em círculos...

Porque é que tenho de passar por todo esse trabalho?

Isso não é mais fácil?

K = PeriodSeconds(TF)/PeriodSeconds(Period());
 
Alexey Viktorov:

O que se passa com todas as reviravoltas?

Não seria isso mais fácil?


Portanto, o fio é para principiantes, é por isso que não sabia desta possibilidade, obrigado por o ter apontado.

 

Pode dizer-me qual é a funçãoiBarShift mais fiável com duas TFs neste momento?

Tenho uma tarefa para encontrar, por exemplo, numa barra de minutos o valor indicador do TF superior, por exemplo, M15. Os prazos podem ser quaisquer, o que complica a solução.

Durante uma hora TF, fiz através da estrutura, mas se é M15, então aqui estou confuso...

 
Aleksey Vyazmikin:

Pode dizer-me qual é a função iBarShift mais fiável com duas TFs neste momento?

Tenho uma tarefa para encontrar, por exemplo, numa barra de minutos o valor indicador do TF superior, por exemplo, M15. Os prazos podem ser quaisquer, o que complica a solução.

Durante uma hora TF, fiz através da estrutura, mas se é M15, aqui estou confuso...

Rodar este guião:Procurar na barra mais próxima

 
Vladimir Karputov:

Rodar este guião:Procurar na barra mais próxima


Obrigado.

 
Aleksey Vyazmikin:

Portanto, o fio é para principiantes, por isso não sabia desta característica, obrigado pela dica.

Aleksey, mql4 tem-no há muito tempo.


Aleksey Vyazmikin:

Pode dizer-me qual é a função iBarShift mais fiável com duas TFs neste momento?

Tenho uma tarefa para encontrar, por exemplo, numa barra de minutos o valor indicador do TF superior, por exemplo, M15. Os prazos podem ser quaisquer, o que complica a solução.

Durante uma hora TF, fiz através da estrutura, mas se é M15, estou confuso aqui...

Neste caso, deve tentar esquecer a numeração das barras como era em mql4. Em mql5 tudo é quase resolvido por tempo de bar. Numa pitada, pode usar a função Bars().

int  Bars(
   string           symbol_name,     // имя символа
   ENUM_TIMEFRAMES  timeframe,       // период
   datetime         start_time,      // с какой даты
   datetime         stop_time        // по какую дату
   );
Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
  • www.mql5.com
Доступ к таймсериям и индикаторам / Bars - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Viktorov:
Alexei, o mql4 já o tem há muito tempo.

Aparentemente, isto mostra que também não conheço bem o mql4, que nunca reclamei...

Alexey Viktorov:

E, neste caso, tente esquecer a numeração dos bares como era em mql4. Em mql5 tudo é quase resolvido por tempo de bar. Numa pitada, tente usar a função Bars().

Tem a certeza sobre o arredondamento?

Suponha que a hora no m1 é 14:44, mas preciso das 14:30 (primeira barra de M15).

 
Aleksey Vyazmikin:

Aparentemente, isto mostra que também não conheço muito bem o mql4, que nunca reclamei...

Tem a certeza sobre o arredondamento?

Digamos que a hora no m1 é 14:44 e eu preciso de obter uma hora de 14:30 (primeira barra de m15).

Isto é algo fora de uma série diferente. O que precisa de obter às 14:44 do período de bar M15 de 14:30? Pegue na função Copy**** nela coloque PERÍODO_M15 e hora 14:44 veja o que obtém. E quando o resultado não for o que se espera, então as perguntas serão diferentes.

 
Alexey Viktorov:

É algo de outra série. O que precisa de obter às 14:44 do período de bar M15 de 14:30? Pegue na função Copy**** nela coloque PERÍODO_M15 e hora 14:44 veja o que obtém. E quando o resultado não for o que se espera, então as perguntas serão diferentes.


Sim, era nessa direcção que eu estava a trabalhar. Em suma, fui ajudado. Obrigado, também.