Probando 'CopyTicks' - página 20

 

Cuando no es cero Desde dentro CopyTicks está buscando (probablemente búsqueda binaria) lugar para empezar - índice en la base interna.

Por favor, añada una función que devuelva el índice en la base de datos por tiempo. Entonces, esta tarea se podrá resolver de forma óptima

fxsaber:
¿Cuál es el algoritmo óptimo (más rápido) para obtener los ticks de_tiempo a_tiempo?
 

Por una buena razón, el tema "¿Qué es una garrapata?" ha sido eliminado. Daré algunas de mis respuestas a partir de la historia sobreviviente

В парадигме MT тик - это то, что пришло от биржи. Единица стрима(-ов). Поэтому два подряд идущих тика могут полностью совпадать (MqlTick), но при этом не обозначать одно и то же событие. Помимо MqlTick-данных есть еще номер тика, который не показывается в MT. И есть MT-нюанс с тиками, когда сама история тиков переписывается задним числом из-за нескольких источников получения тиков.

dos ticks seguidos (que provocan un evento Tick/Calculate) pueden ser idénticos en la estructura MqlTick (todos los precios y volúmenes y el tiempo y las banderas son iguales), pero en realidad son diferentes. Bid/Ask es siempre un múltiplo de TickSize. Last (no en la bolsa) puede no ser un múltiplo de TickSize. TickSize puede ser muchas veces mayor que Point (mira RTS, por ejemplo). Así que no es del todo correcto hablar de Punto en este caso.

Puede ser útil. SymbolInfoTick es una función no sincronizada. Esto significa que puede devolver diferentes ticks en diferentes lugares de OnTick. Además, aunque llame a SymbolInfoTick al principio de OnTick, el tick resultante no será el iniciador del evento Tick para el que se activa OnTick. Los campos de su estructura MqlTick no serán iguales al tick procedente de la bolsa, ya que estos campos son sintetizados por el propio terminal y son iguales a los valores de Marketwatch.

 
¿Por qué los tipos INFO en el probador de divisas no son los mismos que los tipos ALL?
 
Ejecución del Asesor Experto en el Probador de Estrategias
void OnTick()
{
  static bool FirstRun = true;
  
  if (FirstRun)
  {
    MqlTick Ticks[1];
    
    if (SymbolInfoTick(_Symbol, Ticks[0]))  
      Print(CopyTicks(_Symbol, Ticks, COPY_TICKS_ALL, Ticks[0].time_msc + 1)); // Сколько тиков со временем больше последнего
    FirstRun = false;
  }
}

Resultado

2016.10.15 13:23:57.689 2016.10.12 00:00:16   1

Debería devolver cero, pero devuelve uno. Ticks[] no cambia. ¡Bicho!

 
fxsaber:
Lanzamiento de un Asesor Experto en el Probador de Estrategias
void OnTick()
{
  static bool FirstRun = true;
  
  if (FirstRun)
  {
    MqlTick Ticks[1];
    
    if (SymbolInfoTick(_Symbol, Ticks[0]))  
      Print(CopyTicks(_Symbol, Ticks, COPY_TICKS_ALL, Ticks[0].time_msc + 1)); // Сколько тиков со временем больше последнего
    FirstRun = false;
  }
}

Resultado

2016.10.15 13:23:57.689 2016.10.12 00:00:16   1

Debería devolver cero, pero devuelve uno. En este caso, Ticks[] no cambia. ¡Bicho!

¿Podría ser el fin de semana?

De la ayuda. CopyTicks La función obtiene el ticks_array de los ticks acumulados por el terminal durante la sesión de trabajo actual.

 
Alexey Volchanskiy:

¿Podría ser el fin de semana?

Del archivo de ayuda. CopyTicks La función obtiene los ticks acumulados por el terminal durante la sesión de trabajo actual en la matriz ticks_array.

Hay un error en el probador.
 

Problema de rendimiento de CopyTicks.

Robo

Network 'xxx': authorized on RoboForexEU-MetaTrader 5 through Europe #1 (ping: 56.66 ms)

BCS

Network 'xxx': authorized on BCS-MetaTrader5 through Access Server #2 (ping: 45.53 ms)



Se trata de datos de indicadores de garrapatas. En ambos casos hay 2-3 mil garrapatas cargadas. Pero en los robots es más de un orden de magnitud más rápido.

En el mercado de divisas se observaron las mismas velocidades durante el día - el mercado era más ágil entonces. Copitix parece estar frenando una vigilancia activa del mercado.

El único gráfico y el único indicador en ambos casos. Y kopitix seguro que ya tenía las cotizaciones subidas en la base/caché.

 

1) ¿las pilas estaban en ambos?

2) ¿los ticks de comercio/información estaban separados en sus hilos originales? Los hilos complejos requieren un recálculo y la emisión simple

3) ¿cuál era la petición real?

4) ¿en cuántas consultas se validaron los resultados? Se han seguido y se han cumplido exactamente las normas de la prueba: contabilización del arranque en frío, descarte de los valores atípicos, repetibilidad de los resultados por serie, código de reproducción.

En general, los resultados numéricos deben ir precedidos de un código exacto para que cualquiera pueda repetirlos. De lo contrario, no tiene sentido discutirlo.

 
Renat Fatkhullin:

1) ¿las pilas estaban en ambos?

2) ¿los ticks de comercio/información estaban separados en sus hilos originales? Los hilos complejos requieren un recálculo y la emisión simple

3) ¿cuál era la petición real?

4) ¿en cuántas consultas se validaron los resultados? Se han seguido y se han cumplido exactamente las normas de la prueba: contabilización del arranque en frío, descarte de los valores atípicos, repetibilidad de los resultados por serie, código de reproducción.

En general, los resultados numéricos deben ir precedidos de un código exacto para que cualquiera pueda repetirlos. Si no, no tiene sentido discutirlo.

Te he dado un enlace con el código exacto.

  1. No había vasos.
  2. Sólo los de tipo INFO.
  3. COPY_TICKS_INFO con desde > 0.
  4. Vea el indicador en el enlace en funcionamiento. La repetibilidad es completa. Se excluye el arranque en frío. Emisiones similares.
 

Lo comprobaremos.

Pero sobre la falta de un vaso en uno de los servidores, hay grandes dudas. No importa que el bombo no esté renderizado. Si un símbolo lo tiene, sus datos están siempre presentes y un algoritmo de emisión más complejo funciona cuando se solicitan ticks.