Quando faz sentido manter parte do código do robô em um indicador? - página 23

 
Vinin:

O valor da EMA na interrupção da comunicação é tomado incorretamente. É considerado como o último calculado. Mas isto é incorreto. Como resultado, a função funcionará incorretamente não em n barras, mas em um número muito maior de barras. Se os valores forem salvos, é claro

Aparentemente, eles não entraram no código. Comentado:

// Комментирую для такого случая. Крайний известный M1-бар был в 14:00.
// Произошел разрыв связи на 10 минут после чего происходит вызов start.
void start()
{
  EMA = GetEMA();
  
  return;  
}

double GetEMA()
{
  static int PrevTime = 0;
  
  if (PrevTime == Time[0]) // Выпонится, когда история за крайние 10 минут подгрузится.
                           // Если истории не было, например, сутки, то может произойти ошибка.
                           // Но мы говорим про РЕАЛ, т.е. адекватность человека.
                           // Т.к. если нет связи сутки, советник оставлять нельзя.
    return(EMA);

  int i = iBarShift(Symbol(), Period(), PrevTime) - 1; // Здесь мы получим номер бара в 14:01.

  PrevTime = Time[0]; // запомним текущее время 14:10
  
// Производим расчет текущего EMA с учетом полученных 10 баров.
  while (i >= 0)
  {
    EMA = EMA * Alpha + (1 - Alpha) * GetPrice(i);
    
    i--;
  }
  
  return(EMA);
} 
 
Quando eu disse erro e adequação, não quis dizer que isto se aplica apenas ao caso "tudo em um", mas também ao caso "com indicador".
 
hrenfx:
Quando eu disse erro e adequação, eu quis dizer a aplicabilidade disto não apenas ao caso "tudo em um", mas também ao caso "com indicador".


A conversa não funciona, aparentemente alguém não quer ouvir um pouco de crítica.

Podemos concluir que este ramo é inútil

 
Vinin:


Não estou tendo uma conversa, aparentemente alguém não quer ouvir um pouco de crítica.

Poder-se-ia concluir que este fio é inútil

Olhe, não há necessidade de questionar. Eu até comentei o seu código. O que não se deve gostar? Você acha que o exemplo de um intervalo de 10 minutos causa um erro? Deixei isso bem claro. Você está dizendo que há um erro, então você vê onde ele está. Então não seja preguiçoso, apenas mostre-me onde está. Você já o identificou.

P.S. Você é a segunda pessoa a empatar. E não diga que eu não entendo. Mostre-me claramente onde está o erro. Se eu estiver errado, eu admito. Isso não me servirá de nada.

 
hrenfx:

Não há necessidade de ser evasivo. Eu até comentei o seu código. O que não se deve gostar? Você acha que o exemplo de 10 minutos de intervalo que lhe dei causa um erro? Fui muito específico de minha parte. Você está dizendo que há um erro, então você vê onde ele está. Então não seja preguiçoso, apenas mostre-me onde está. Você já o identificou.

P.S. Você é a segunda pessoa a empatar. E não diga que eu não entendo. Mostre-me claramente onde está o erro. Se eu estiver errado, eu admito. Isso não me servirá de nada.


Alguém simplesmente não quer pensar. Eu não posso fazê-los e não quero fazê-lo.
 
Vinin:

Apenas alguém não quer pensar. Eu não posso forçá-los e não quero forçá-los.


Porra, ninguém elaborou. Água novamente. Várias pessoas (conheço muito bem o MT4+MQL4) me dizem que meu código funcionará com um erro, mas não posso dar um exemplo-argumento específico (já o pedi várias vezes). E isto em um código de apenas 10 linhas.

Por que você não coloca o código Integer e meu código em uma linha separada e pergunta aos programadores da MQL4 o que está errado no código? E você, como moderador, certifica-se de que não haja inundação. Neste caso, o código não é sequer encontrado.

Penso que será útil para a comunidade MQL4.

 
hrenfx:

Olhe, não há necessidade de questionar. Eu até comentei com você sobre o código. O que não se deve gostar?

O preço virá primeiro. Então as barras virão. Quando as barras chegarem, elas já terão sido "mais ou menos" processadas, mas na verdade não foram contabilizadas porque não estavam presentes quando foram processadas.

Esta é a segunda vez que eu digo isto.

 
TheXpert:

O preço virá primeiro. Então as barras virão. Quando as barras chegarem, elas serão "mais ou menos" processadas, mas na verdade não serão consideradas porque não estavam disponíveis no momento do processamento.

Sim, o preço chegará primeiro, mas a condição se (PrevTime == Tempo[0]) será acionada o tempo todo até que haja uma nova barra

Você entende que se uma nova barra chegar, sem nenhuma paginação nos últimos 10 minutos, a EA com o indicador receberá valores de EMA errados antes da paginação do histórico. Como resultado, a EA fará qualquer coisa.
 
hrenfx:


Caramba, ninguém elaborou sobre isso. Água novamente. Várias pessoas (MT4+MQL4 sabem muito bem) me dizem que meu código funcionará com erros, mas não podem dar um exemplo-argumento específico (eu o pedi várias vezes). E isto em um código de apenas 10 linhas.

Talvez você pudesse colocar o código Integer e meu código em uma linha separada e perguntar aos programadores da MQL4 o que está errado no código. E você, como moderador, certifica-se de que não haja inundação. Neste caso, o código não é sequer encontrado.

Penso que será útil para a comunidade MQL4.


Eu forneci a lógica para um algoritmo viável. Não funcionou. Sinto muito não ter conseguido passar.
 
hrenfx:
Sim, o preço virá primeiro, mas até que haja uma nova barra, a condição se (PrevTime == Tempo[0]) será acionada o tempo todo.
Não, o preço será em um novo bar. Isto pode ser visto claramente quando o terminal é ligado. No início, a barra parece um ponto.