Probando 'CopyTicks' - página 39

 
 
fxsaber:

No debe ser lento ni depender del servidor de comercio.

Velocidad de entrega: el terminal almacena 4096 últimos ticks para cada símbolo en la memoria caché para un acceso rápido (para los símbolos con la estadística en marcha - 65536 ticks), las peticiones a estos datos son más rápidas. Cuando se solicitan los ticks de la sesión de negociación actual fuera de la caché, CopyTicks() accede a los ticks ya almacenados en la memoria del terminal, estas peticiones tardan más en ejecutarse. Las más lentas son las peticiones de ticks para otros días, porque en este caso los datos se leen del disco.

Si los terminales están en el mismo disco, tienes razón.

¿Ha realizado varias pruebas? ¿Experimenta constantemente retrasos en un determinado servidor? Por si acaso el disco estaba ocupado con alguna otra operación en el momento de la prueba...

 
Alexey Kozitsyn:

Si los terminales están en la misma unidad, tienes razón.

¿Ha realizado varias pruebas? ¿La latencia es constante en un servidor concreto? Por si acaso la unidad estaba ocupada con alguna otra operación en el momento de la prueba...

Es 100% reproducible. El terminal es el mismo.

 

¿Cómo obtener ticks en el indicador OnDeinit? Quiero obtener ticks, que ya existen en los archivos tkc y que se dan casi al instante. Pero, ¿cómo determinar qué garrapatas hay y cuáles no?

Detrás de todo el atractivo aparente de la simplicidad de CopyTicks, en realidad hay trampas ocultas, que son imposibles de evitar debido a la funcionalidad limitada por el bien de este atractivo exterior de nuevo.

 
fxsaber:

¿Cómo obtener ticks en el indicador OnDeinit? Quiero obtener ticks, que ya existen en los archivos tkc y que se dan casi al instante. Pero, ¿cómo determinar qué garrapatas hay y cuáles no?

Detrás de todo el atractivo aparente de la simplicidad de CopyTicks, en realidad hay trampas ocultas, que son imposibles de evitar debido a la funcionalidad limitada por el bien de este atractivo exterior de nuevo.

¿Por qué debemos obtener los ticks en OnDeinit()?
 
Alexey Kozitsyn:
¿Por qué obtener ticks en OnDeinit()?

Es necesario crear un símbolo personalizado y escribir en él todo el historial de ticks convertidos (desde una fecha determinada) que ya existe en los archivos tkc. Las garrapatas, que no están en la máquina, no son interesantes. Por lo tanto, el indicador no debería frenar en esta tarea. Sin embargo, CopyTicks no permite recibir ticks de esa manera.

 
Tratando de obtener ticks en otro símbolo en OnInit
#include <Trade\Trade.mqh>

bool OpenPos( const string Symb )
{
  static CTrade Trade;
  
  return(Trade.Buy(1, Symb));
}

void OnInit()
{
  Sleep(3600 * 1000);    
  
  OpenPos("NZDUSD"); // Заставляем Агент получить тики по чужому символу

  MqlTick Ticks[];
  
  Print(CopyTicks("NZDUSD", Ticks, COPY_TICKS_INFO, 0, 5)); // 0
  
  ArrayPrint(Ticks);
}


Resultado

MetaTester 5 started on 127.0.0.1:3000
initialization finished
login (build 1653)
template file tester.tpl added. 2398 bytes loaded
38520 bytes of account info loaded
1482 bytes of tester parameters loaded
188 bytes of input parameters loaded
3456 bytes of symbols list loaded
expert file added: Experts\Test4.ex5. 44667 bytes loaded
initial deposit 10000000.00 USD, leverage 1:500
successfully initialized
48 Kb of total initialization data received
Intel Core i7-2700 K  @ 3.50 GHz, 16301 MB
EURUSD: symbol to be synchronized
EURUSD: symbol synchronized, 3464 bytes of symbol info received
EURUSD: history synchronization started
EURUSD: load 27 bytes of history data to synchronize in 0:00:00.000
EURUSD: history synchronized from 2016.01.04 to 2017.10.11
EURUSD: ticks synchronization started
EURUSD: load 34 bytes of tick data to synchronize in 0:00:00.000
EURUSD: history ticks synchronized from 2017.04.03 to 2017.10.10
EURUSD,M1: history cache allocated for 667542 bars and contains 651824 bars from 2016.01.04 00:00 to 2017.09.29 23:59
EURUSD,M1: history begins from 2016.01.04 00:00
EURUSD,M1 (MetaQuotes-Demo): generating based on real ticks
EURUSD,M1: testing of Experts\Test4.ex5 from 2017.10.01 00:00 to 2017.10.11 00:00 started
EURUSD : real ticks begin from 2017.04.03 00:00:00
EURUSD : 2017.10.01 00:00 - 2017.10.11 00:00  last prices absent for 7 whole days, bars built by bid prices
NZDUSD: symbol to be synchronized
NZDUSD: symbol synchronized, 3464 bytes of symbol info received
NZDUSD: history synchronization started
NZDUSD: load 27 bytes of history data to synchronize in 0:00:00.000
NZDUSD: history synchronized from 2016.01.04 to 2017.10.11
NZDUSD: ticks synchronization started
NZDUSD: load 34 bytes of tick data to synchronize in 0:00:00.000
NZDUSD: history ticks synchronized from 2017.10.02 to 2017.10.10
2017.10.01 01:00:00   instant buy 1.00 NZDUSD at 0.72043 (0.72017 / 0.72043)
2017.10.01 01:00:00   deal #2 buy 1.00 NZDUSD at 0.72043 done (based on order #2)
2017.10.01 01:00:00   deal performed [#2 buy 1.00 NZDUSD at 0.72043]
2017.10.01 01:00:00   order performed buy 1.00 at 0.72043 [#2 buy 1.00 NZDUSD at 0.72043]
2017.10.01 01:00:00   CTrade::OrderSend: instant buy 1.00 NZDUSD at 0.72043 [done at 0.72043]
2017.10.01 01:00:00   true
2017.10.01 01:00:00   0
NZDUSD : real ticks begin from 2017.10.02 00:00:00
NZDUSD : 2017.10.01 00:00 - 2017.10.11 00:00  last prices absent for 7 whole days, bars built by bid prices


Es decir, no hay datos de garrapatas al principio en el personaje de otra persona. Y los ticks se generan en la base de datos cuando aparece OnTick. ¿Está diseñado así o deberían estar disponibles los ticks para los personajes alienígenas, así como para el símbolo principal de la prueba?

 
¿Qué significa esta cita de la Documentación?

Примечание

La función CopyTicksRange() está diseñada para solicitar ticks de un rango estrictamente especificado, por ejemplo, para un día concreto del historial. Mientras que CopyTicks()permite especificar sólo la fecha de inicio, por ejemplo - para obtener todos los ticks desde el principio del mes hasta el momento actual.

Документация по MQL5: Доступ к таймсериям и индикаторам / CopyTicksRange
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyTicksRange
  • www.mql5.com
[out]  Cтатический или динамический массив MqlTick для приема тиков. Если в статический массив не вмещаются все тики из запрошенного интервала времени, то будет получено столько тиков, сколько помещается в массив. При этом функция сгенерирует ошибку ERR_HISTORY_SMALL_BUFFER (4407) . ERR_NOT_ENOUGH_MEMORY – не хватает памяти для получения...
 

CopyTicks sólo funciona con los caracteres incluidos en la Revisión del Mercado. Y esto siempre fue lógico antes de la llegada de los símbolos personalizados.

Los símbolos personalizados tienen un enorme campo de aplicación y no siempre son necesarios en la vigilancia del mercado. Sin embargo, a veces es necesario obtener parte del historial de garrapatas mediante CopyTicks.

Por lo tanto, desactive el retorno de error de CopyTicks para los símbolos personalizados si el personalizado no está seleccionado en Market Watch.

 
En el caso de los caracteres personalizados, para averiguar el número total de ticks, hay que utilizar CopyTicksRange(Symb, Ticks) ( más esto) y observar el tamaño del array. Pero esto es un gran desperdicio.