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

 

Um discurso útil de zelo...

E conhecendo o recurso e o potencial dos participantes, proponho provocatoriamente medir a velocidade e a "incoerência" dos tiques dentro:

1) Sovnig

2) escrita cíclica com uma freqüência de 1 milissegundo

3) induzido

4) um receptor DDE de terceiros.

Para os adeptos neófitos - como eu, também será útil.

;)

 

No final da noite:

Arquivos anexados:
experts.zip  1 kb
 

Gostaria de acrescentar meus próprios dois centavos:

O desempenho dos Expert Advisors com o código indicador inteiramente colocado na EA é muitas vezes cerca de três vezes mais rápido do que o de suas contrapartes que chamam indicadores personalizados. Isto é verdade para as variantes com cálculos de indicadores muito pesados. Se estes cálculos forem muito leves, não haverá diferença. O indicador EMA tem cálculo primitivo demais para utilizá-lo em tais medições. Em alguns dos meus artigos recentes neste site até apresentei uma variante do Expert Advisor com um cálculo indicador muito pesado do JMA. A variante sem chamadas indicadoras é três vezes mais rápida.

Pessoalmente não tenho nenhum desejo de provar nada a ninguém; apenas tiro minhas próprias conclusões, que vi com meus próprios olhos e não uma única vez; embora, é claro, eu não faça este tipo de coisas para sempre, e pode muito bem ser que as últimas construções do MT4 tenham feito este quadro parecer de alguma forma diferente. E mesmo no MT5 no início era absolutamente a mesma coisa. Mas eu não acompanho tais detalhes e, portanto, não posso afirmar que seja o mesmo agora.

 

GODZILLA:

Em alguns dos meus artigos recentes neste site até coloquei uma variante do Consultor Especialista com um cálculo indicador muito pesado do JMA. A variante com código sem chamadas indicadoras funciona três vezes mais rápido.

Aqui? A conclusão é simples, há 3 possibilidades:

1. o código sem chamadas indicadoras é escrito de forma incorreta, o que é improvável.

2. o indicador é escrito de forma ineficaz.

3. os números apresentados não refletem a realidade.

 
GODZILLA:

Gostaria de acrescentar meus próprios dois centavos:

O desempenho dos Expert Advisors com o código indicador inteiramente colocado na EA é muitas vezes cerca de três vezes mais rápido do que o de suas contrapartes que chamam indicadores personalizados. Isto é verdade para as variantes com cálculos de indicadores muito pesados. Se estes cálculos forem muito leves, não haverá diferença. O indicador EMA tem cálculo primitivo demais para utilizá-lo em tais medições. Em alguns dos meus artigos recentes neste site até apresentei uma variante do Expert Advisor com um cálculo indicador muito pesado do JMA. A variante com o código sem chamadas indicadoras é três vezes mais rápida.

Pessoalmente não tenho nenhum desejo de provar nada a ninguém; apenas tiro minhas próprias conclusões, que vi com meus próprios olhos e não uma única vez; embora, é claro, eu não faça este tipo de coisas para sempre, e pode muito bem ser que as últimas construções do MT4 tenham feito este quadro parecer de alguma forma diferente. E mesmo no MT5 no início era absolutamente a mesma coisa. Mas eu não acompanho tais detalhes e, portanto, não posso afirmar que seja o mesmo agora.


Não seja ridículo. Você simplesmente ainda não aprendeu a escrever indicadores.

Depois de tal heresia:

//---- ЭМУЛЯЦИЯ ИНДИКАТОРНЫХ БУФЕРОВ
  int NewSize = iBars(symbol, timeframe);
  //----  Проверка на смену нулевого бара
  if(ArraySize(Ind_Buffer0) < NewSize)
    {
      //---- Установить прямое направление индексирования в массиве 
      ArraySetAsSeries(Ind_Buffer0, false);
      ArraySetAsSeries(Ind_Buffer1, false);
      ArraySetAsSeries(Ind_Buffer2, false);
      //---- Изменить размер эмулируемых индикаторных буферов 
      ArrayResize(Ind_Buffer0, NewSize); 
      ArrayResize(Ind_Buffer1, NewSize); 
      ArrayResize(Ind_Buffer2, NewSize); 
      //---- Установить обратное направление индексирования в массиве 
      ArraySetAsSeries(Ind_Buffer0, true);
      ArraySetAsSeries(Ind_Buffer1, true);
      ArraySetAsSeries(Ind_Buffer2, true); 
    } 
//----

você poderia ter se abstido completamente de sua opinião nesta linha.

 

Falácia de debunking #1: você pode fazer sem o IndicatorCounted()

Um indicador com ele:

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Red

extern double Alpha = 0.9;

double EMA[];

int init()
{
   SetIndexBuffer(0, EMA);
   return(0);
}

int start()
{
   int toCount = MathMin(Bars - 1, Bars - IndicatorCounted());
   if (toCount == Bars - 1) EMA[Bars - 1] = Open[Bars - 1];
   for(int i = toCount - 1; i >= 0; i--)
   {
      EMA[i] = (1 - Alpha)*Open[i] + Alpha*EMA[i + 1];
   }
   return(0);
}

Sem ele, com base no princípio de hrenfx

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Yellow

extern double Alpha = 0.9;

double EMABuffer[];

double GetPrice( int Shift )
{
  return(Open[Shift]);
}

double EMA;

int init()
{
   EMA = GetPrice(Bars - 1);

   SetIndexBuffer(0, EMABuffer);
   return(0);
}

double GetEMA()
{
   static int PrevTime = 0;

   if (PrevTime == Time[0])
      return(EMA);

   int i = iBarShift(Symbol(), Period(), PrevTime) - 1;

   PrevTime = Time[0];
   while (i >= 0)
   {
      EMA = EMA * Alpha + (1 - Alpha) * GetPrice(i);
      EMABuffer[i] = EMA;
      i--;
   }
   return(EMA);
}

void start()
{
  GetEMA();
}

Em seguida, aplicamos os índices ao gráfico e imitamos a perda de conexão enquanto o autômato está em funcionamento. Resultado:


 

Sim, eu também pesquisei um pouco sobre o tema. É claro que é realmente uma besteira brincar com as besteiras dos desenvolvedores da plataforma, mas o que quer que seja.

Você converteu minha EA em um indicador. Como você, eu tinha certeza há 24 horas que o indicador de Expert Advisor e o indicador de EA simples devem mostrar os mesmos resultados, porque ambos são acionados no tick. Mas elas são acionadas de forma diferente. O primeiro tique após o aparecimento da conexão não é o mesmo para a EA e para o indicador extraído da EA. Você mesmo pode verificá-lo.

A foto acima mostra que a EA (não o indicador da EA) é comparada ao iCustom após a interrupção da conexão. A falha de comunicação não apresenta nenhum problema.

 

Presumo que no primeiro tique após uma quebra de conexão, o indicador não aciona imediatamente. Para ser mais exato, o indicador aguarda que a função IndicatorCounted() seja executada. Mas esta função pode ser executada (dependendo da conexão) até vários segundos. Isto é, aqui está o esquema:

  1. Primeiro tique após uma falha de conexão.
  2. O indicador já começou.
  3. IndicatorCounted() é executado (parece que logo após o indicador ser iniciado, mesmo que o IndicatorCounted() não esteja presente no corpo do indicador) por algum tempo.
  4. Após receber o resultado, o ambiente comercial é atualizado.
  5. E o indicador começa a executar seu código como se fosse iniciado não no primeiro tick, mas no último tick antes do resultado do IndicatorCounted().

P.S. Teste no build 226.

 
Acontece que para a confiabilidade absoluta do EAs "tudo em um" devemos fazer uma chamada inicial do indicador Vazio e RefreshRates() logo no início da função. Isto garantirá o carregamento do histórico (após o intervalo) e a execução da EA no primeiro tick, correspondendo ao histórico já carregado.
 
hrenfx:
Acontece que para a confiabilidade absoluta do EAs "tudo em um" devemos fazer uma chamada inicial do indicador Vazio e RefreshRates() logo no início da função. Isto garantirá o carregamento do histórico (após o intervalo) e a execução da EA no primeiro tick, correspondendo ao histórico já carregado.


E você pode postar a pesquisa e verificar este palpite?

hmmm... Se assim for, e dá uma garantia de carga, então é uma opção muito boa.

Vi uma linha ForexTools onde não havia solução para o problema da troca do histórico no momento de iniciar o terminal e o Expert Advisor.


Razão: