¿Cuándo tiene sentido mantener parte del código del robot en un indicador? - página 33

 

Un discurso zelo útil...

Y conociendo el recurso y el potencial de los participantes, propongo provocativamente medir la velocidad y la "inglotabilidad" de los tics en:

1) Sovnig

2) guión cíclico con una frecuencia de 1 milisegundo

3) inducido

4) un receptor DDE de terceros.

Para los adeptos neófitos, como yo, también será útil.

;)

 

Al final de la noche:

Archivos adjuntos:
experts.zip  1 kb
 

Me gustaría añadir mi propio punto de vista:

El rendimiento de los Asesores Expertos con el código del indicador completamente colocado en el EA suele ser unas tres veces más rápido que el de sus homólogos que llaman a indicadores personalizados. Esto es cierto para las variantes con cálculos de indicadores muy pesados. Si estos cálculos son muy ligeros, no habrá diferencia. El indicador EMA tiene un cálculo demasiado primitivo como para utilizarlo en este tipo de mediciones. En algunos de mis artículos recientes en este sitio incluso presenté una variante del Asesor Experto con un indicador muy pesado de cálculo del JMA. La variante con el código sin llamadas al indicador es tres veces más rápida.

Personalmente, no quiero demostrar nada a nadie; sólo saco mis propias conclusiones, que he visto con mis propios ojos y no una vez; aunque, por supuesto, no me dedico a este tipo de cosas siempre, y bien puede ser que las últimas builds de MT4 hayan hecho que esta imagen se vea de alguna manera diferente. E incluso en MT5 al principio era absolutamente lo mismo. Pero no llevo la cuenta de esos detalles y, por tanto, no puedo afirmar que ahora sea igual.

 

GODZILLA:

En algunos de mis artículos recientes en este sitio incluso he publicado una variante del Asesor Experto con un indicador muy pesado cálculo de JMA. La variante con código sin llamadas al indicador funciona tres veces más rápido.

¿Aquí? La conclusión es sencilla, hay 3 posibilidades:

1. el código sin llamadas al indicador está escrito incorrectamente, lo cual es poco probable.

2. el indicador está escrito de forma ineficaz.

3. Las cifras mostradas no reflejan la realidad.

 
GODZILLA:

Me gustaría añadir mi propio punto de vista:

El rendimiento de los Asesores Expertos con el código del indicador enteramente colocado en el Asesor Experto suele ser unas tres veces más rápido que el de sus homólogos que llaman a indicadores personalizados. Esto es cierto para las variantes con cálculos de indicadores muy pesados. Si estos cálculos son muy ligeros, no habrá diferencia. El indicador EMA tiene un cálculo demasiado primitivo como para utilizarlo en este tipo de mediciones. En algunos de mis artículos recientes en este sitio incluso presenté una variante del Asesor Experto con un indicador muy pesado de cálculo del JMA. La variante sin llamadas al indicador es tres veces más rápida.

Personalmente no quiero demostrar nada a nadie, sólo saco mis propias conclusiones, que he visto con mis propios ojos y no una vez; aunque, por supuesto, no me dedico a este tipo de cosas siempre, y bien puede ser que las últimas builds de MT4 hayan hecho que esta imagen se vea de alguna manera diferente. E incluso en MT5 al principio era absolutamente lo mismo. Pero no llevo la cuenta de esos detalles y, por tanto, no puedo afirmar que ahora sea igual.


No seas ridículo. Es que aún no has aprendido a escribir indicadores.

Después de tal herejía:

//---- ЭМУЛЯЦИЯ ИНДИКАТОРНЫХ БУФЕРОВ
  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); 
    } 
//----

podrías haberte abstenido por completo de opinar en este hilo.

 

Falacia de desacreditación #1: se puede prescindir de IndicatorCounted()

Un indicador con él:

#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);
}

Sin ella, por el principio 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();
}

A continuación, aplicamos los índices al gráfico y emulamos la pérdida de conexión mientras el autómata está en marcha. Resultado:


 

Sí, yo también investigué un poco el tema. Claro que es una auténtica mierda meterse con las chorradas de los desarrolladores de la plataforma, pero da igual.

Has convertido mi EA en un indicador. Al igual que tú, hace 24 horas estaba seguro de que el indicador de Expert Advisor y el indicador de EA simple debían mostrar los mismos resultados, porque ambos se activan por tick. Pero se desencadenan de forma diferente. El primer tick después de la aparición de la conexión no es el mismo para el EA que para el indicador extraído del EA. Puede comprobarlo usted mismo.

La captura de pantalla anterior muestra que el EA (no el indicador del EA) se compara con iCustom después de la ruptura de la conexión. La ruptura de la comunicación va sin problemas allí.

 

Supongo que en el primer tick después de una interrupción de la conexión, el indicador no se activa inmediatamente. Para ser más exactos, el indicador espera a que se ejecute la función IndicatorCounted(). Pero esta función puede ejecutarse (dependiendo de la conexión) hasta varios segundos. Es decir, este es el esquema:

  1. Primer tick después de un fallo de conexión.
  2. El indicador se ha puesto en marcha.
  3. IndicatorCounted() se ejecuta (parece que justo después de que se inicie el indicador, incluso si IndicatorCounted() no está presente en el cuerpo del indicador) durante algún tiempo.
  4. Una vez recibido el resultado, se actualiza el entorno comercial.
  5. Y el indicador comienza a ejecutar su código como si se iniciara no en el primer tick, sino en el último tick antes del resultado de IndicatorCounted().

P.D. Probando en la compilación 226.

 
Resulta que para la fiabilidad absoluta de los EAs "todo en uno" debemos hacer una llamada de inicio del indicador Empty y RefreshRates() al principio de la función. Esto garantizará la carga de la historia (después de la pausa) y la ejecución del EA en el primer tick, correspondiente a la historia ya cargada.
 
hrenfx:
Resulta que para la fiabilidad absoluta de los EAs "todo en uno" debemos hacer una llamada de inicio del indicador Empty y RefreshRates() al principio de la función. Esto garantizará la carga de la historia (después de la pausa) y la ejecución del EA en el primer tick, correspondiente a la historia ya cargada.


¿Y puedes publicar la investigación y las comprobaciones de esta suposición?

hmmm... Si es así, y da garantía de carga, es una muy buena opción.

He visto un hilo de ForexTools en el que no se solucionaba el problema de intercambiar el historial en el momento de iniciar el terminal y el Asesor Experto.


Razón de la queja: