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

 
Aleksey Vyazmikin:

Já fiz uma verificação por mim próprio, mas esta verificação serve para contornar o erro desta função, a ajuda não diz nada sobre a necessidade de uma verificação, o que significa que ela deve ser incorporada.

E depois, está a falar de verificação de indicadores, enquanto eu estou a usar Barras para calcular a hora correcta de início da barra, pois o iBarShift está na minha mente e só é adequado para forex, onde não há falhas frequentes com o histórico devido à compensação e sessões de negociação não para o dia inteiro.

E onde está a sua validação? E porquê introduzir alguma variável se ( ao bater o histórico ou alterar o histórico) basta recalcular completamente o indicador. Isto é normalmente feito de "0" a "rates_total-1".

 
Vladimir Karputov:

E onde está o seu cheque? E porque é que introduziria uma variável se apenas precisasse de recalcular completamente o indicador (ao trocar o histórico ou alterar o histórico). Normalmente, isto é feito de "0" a "taxas_total-1".

O meu problema não tem nada a ver com a paginação de indicadores ou histórico. Aqui está um pedaço de código

      datetime         StartDt=iTime(Symbol(),PERIOD_CURRENT,Bars(Symbol(),PERIOD_CURRENT,iTime(Symbol(),TF_iDeltaP,0),iTime(Symbol(),PERIOD_CURRENT,0))-1);
      datetime         StopDt=iTime(Symbol(),PERIOD_CURRENT,1); //Берем прошлый бар, что б не было расхождений между реалом и тестером при задержки на реальных данных

      int BarsGo=Bars(Symbol(),PERIOD_CURRENT,StartDt,StopDt);
      if(StartDt>StopDt)BarsGo=0;
      if(StartDt==StopDt)BarsGo=1;
      if (BarsGo>0)
        {
                //Полный расчет с вычислениями - копирование массивов цен и прочие тяжелые функции
        }
      else
        {
                //Упрощенный расчет с присвоением эмпирических значений переменным
        }
O problema ocorre quando se abre uma nova barra em geral, quando a data de início da barra é superior ao deslocamento de 1 barra a partir da barra zero na actual TF.
 
Aleksey Vyazmikin:

Isto não é uma defesa, mas um obstáculo à detecção de um erro no código!

Além disso, não é de todo lógico devolver o número 2 se as datas coincidirem - qual é o raciocínio aqui?

A hora de início de um bar em FORTS pode não coincidir e isto leva a erros nos cálculos, por exemplo, um bar abre não às 14:00 mas às 14:05 - eu também sofri com ele.

Talvez o programador tenha começado a trabalhar da forma como a documentação diz, mas mais tarde decidiu que seria melhor devolver 'entre' em vez de 'de' e 'para' as datas indicadas, mas a documentação não corrigiu esta descrição. Na verdade, não é muito necessário.

Eu nem sequer tenho uma demonstração em FORTS. Não o posso verificar.

 
Alexey Viktorov:

Talvez o tenham feito originalmente como descrito na documentação, mas depois decidiram que seria melhor devolver "entre" datas em vez de "de" e "até" datas, mas a descrição na documentação não foi corrigida. Mas eles não corrigiram a descrição.

Eu nem sequer tenho uma demonstração em FORTS. Não posso verificar.

Como pode ser desnecessário, não consigo adivinhar, e se for um erro, que será corrigido mais tarde, o código não voltará a funcionar, e eu procurarei um erro durante muito tempo... Mas a Artem decidiu que não é um erro e não escreveu nada em essência....

Parece que na conta de demonstração da MQ as pessoas ligam-se à FORTS...

 
Aleksey Vyazmikin:

Como pode não ser, não consigo adivinhar, e se for um erro, que será corrigido mais tarde, então o código não voltará a funcionar, e estarei à procura de um erro durante um tempo crítico... Mas a Artem decidiu que não é um erro e não escreveu nada em essência....

Parece que as pessoas estão a ligar-se à FORTS numa conta de demonstração da MQ...

Bem, se agora for suficientemente cuidadoso e não conseguir enganar-se na hora de início e de fim, então não há nada a temer. Deixe-os governar.

 
Aleksey Vyazmikin:

Não tenho qualquer problema com o indicador ou com a paginação do histórico. Aqui está um pedaço de código

O problema ocorre quando se abre uma nova barra em geral, quando a data de início da barra é mais do que 1 barra deslocada da barra zero na actual TF.
datetime StartDt=iTime(Symbol(),PERIOD_CURRENT,Bars(Symbol(),PERIOD_CURRENT,iTime(Symbol(),TF_iDeltaP,0),iTime(Symbol(),PERIOD_CURRENT,0))-1);
datetime StopDt=iTime(Symbol(),PERIOD_CURRENT,1); //Берем прошлый бар, что б не было расхождений между реалом и тестером при задержки на реальных данных

Não há verificação sobre o que iTime(), Bars() devolvem

Deveria tê-lo feito. Devia mesmo tê-lo feito. Veja na ajuda - o que é que o iTime() e Bars() devolvem ? E o que é que diz nas notas?

 
Alexey Viktorov:

Bem, se tiver cuidado suficiente agora que não pode errar a hora de início e a hora de fim, não há nada a temer. Deixe-os governar.

Apenas não gosto de me sentar e esperar passivamente, e fui proibido de perguntar especificamente aos criadores sobre o assunto - a pergunta era originalmente para eles.

 
Artyom Trishkin:

Não há verificações sobre o que iTime(), Bars() devolvem

Bem, deveria. Deveria mesmo. Procure na ajuda - o que é que o iTime() e Bars() devolvem? E o que é que diz nas notas?

Será suficiente fazer estas verificações uma vez em código, ou devem ser feitas depois/antes de cada chamada de função?

Que tipo de verificações são sugeridas, para o bar/histórico actual? Qual é a melhor maneira de as fazer?

 

Como encontro a razão para esta mensagem?

2019.01.24 21:32:01.570 i-Regr4_05i (Si-3.19,M1)        indicator is too slow, 3011 ms. rewrite the indicator, please
 
Aleksey Vyazmikin:

Será suficiente fazer estas verificações uma vez no código, ou devem ser feitas depois/antes de cada chamada de função?

Que tipo de verificações se propõe fazer, para o bar/história actual? Qual é a melhor maneira de as fazer?

Não sabe como verificar o valor de retorno para zero? E não sabe como sair da OnCalculate() com um retorno de zero? Já tentou procurar informação num website?

  1. Obter o valor necessário da função
  2. Verificar se é zero
    1. Se for zero, então devolva 0;
    2. Se não for zero, então para o passo 3
  3. Trabalhar com este valor
Nunca pensei ensinar o básico da lógica a um homem com uma classificação superior a 13 mil...
Razão: