Probando 'CopyTicks' - página 25

 
¿O tal vez lo torturó? :)
 
prostotrader:
¿O tal vez lo torturó? :)

Lo es. Se pone muy mal. Tengo que reconocerlo: sí que entra en estado de estupor, pero rara vez.

He escrito un bonito indicador de tick. Soy demasiado perezoso para depurar fallos raros.

 
fxsaber:

Lo es. Se pone muy mal. Tengo que reconocerlo: sí que entra en estado de estupor, pero rara vez.

He escrito un bonito indicador de tick. Me da pereza depurar los fallos raros.

¿Conseguir encajar todas las garrapatas uniformemente en la vela en tiempo real cada vez?

Añadido:

En el modo COPY_TICKS_TRADE con comprobación de volumen.

 
Alexey Kozitsyn:

¿Conseguir encajar todas las garrapatas uniformemente en la vela en tiempo real cada vez?

Añadido:

En el modo COPY_TICKS_TRADE con comprobación de volumen.

Yo tengo uno ligeramente diferente. Como "no tiene contrapartidas" y bla, bla, bla.

No lo creo para el rendimiento, ya que se promete que mejorará significativamente en la próxima build.

 
fxsaber:

Yo tengo uno ligeramente diferente. Como "sin parangón" y bla, bla, bla.

No creo que sea así por el rendimiento, ya que se promete que mejorará significativamente en la próxima compilación.

No se trata de rendimiento... Hay situaciones como ésta, por ejemplo ahora:

El indicador recoge los ticks y calcula el volumen por ellos. Luego compara este volumen con el volumen[].

Y hay errores en varias situaciones:

A veces, el volumen de la primera vela del día se calcula de forma incorrecta (no coincide con el de comprobación);

A veces el volumen por ticks se calcula correctamente pero el volumen devuelve un valor incorrecto. 3;

3. a veces el volumen por ticks se calcula incorrectamente, mientras que el volumen devuelve un valor incorrecto;

Lo más interesante es que si se producen los errores 1, 2 o 3 en el historial, después de recompilar el indicador el error no desaparece. Y en caso de conexión a otro servidor desaparece.

En resumen, los milagros aún no han terminado.

Si este post será leído por los desarrolladores y quieren entender - por favor, dirigir a "Service Desk", voy a proporcionar todas las fuentes.

 
Renat Fatkhullin:

Así es como debe probar CopyTicks:

MqlTick ExtArr[2048];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   ulong from   =(TimeTradeServer()-1200)*1000;
   ulong ticks  =GetMicrosecondCount();
   int   records=CopyTicks(_Symbol,ExtArr,COPY_TICKS_INFO,from,2048);

   ticks=GetMicrosecondCount()-ticks;
   Print("Time: ",ticks," msc for ",records," records");
  }

Aquí está la salida en microsegundos: 95 microsegundos por muestra de 2048 ticks de INFO para los últimos 20 minutos

2016.10.18 14:15:38.673 TEST (USDCHF,M1)        Time: 95 msc for 1206 records
Esto es radicalmente diferente de las decenas de milisegundos que usted afirmó. Eso es porque no has medido los CopyTicks.

Frenar tras el cierre del mercado

MqlTick ExtArr[2048];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart()
  {
   ulong from   =(TimeCurrent()-1200)*1000;
   ulong ticks  =GetMicrosecondCount();
   int   records=CopyTicks(_Symbol,ExtArr,COPY_TICKS_INFO,from,2048);

   ticks=GetMicrosecondCount()-ticks;
   Print("Time: ",ticks," msc for ",records," records");
  }

Resultado

2016.10.29 00:31:10.952 Test (GBPUSD,M1)        Time: 85 msc for 1333 records
2016.10.29 00:31:05.435 Test (EURCHF,M1)        Time: 15283 msc for 874 records
2016.10.29 00:31:03.960 Test (EURCHF,M1)        Time: 11629 msc for 874 records
2016.10.29 00:31:02.128 Test (EURCHF,M1)        Time: 10127 msc for 874 records
2016.10.29 00:31:00.332 Test (EURCHF,M1)        Time: 7318 msc for 874 records

2016.10.29 00:30:52.049 Test (EURUSD,M1)        Time: 51 msc for 862 records

Puede parecer que esto es sólo en el EURCHF. Pero en cuanto empezamos a bombear las cotizaciones del EURUSD. En cuanto el script comienza a ejecutarse durante decenas de ms en EURSD. Esta ralentización ha comenzado tras el cierre del mercado. Todo fue mucho más rápido antes del cierre del mercado.

 

Queridos desarrolladores El problema con CopyTicks(), y en particular la sincronización de volúmenes en una vela (apilando todos los volúmenes de ticks de una vela en una vela y comparándolo con el volumen[] de esa vela). Continúa.

Ahora tenemos de nuevo 2 errores:

1. Error estable de control de volumen en una vela de apertura (10,00). Pruebo en RTS, SBRF, Si (todos a -12,16). ¡Error en cada uno de estos símbolos!

2. Si por alguna razón hay un error de control de volumen en la vela después de las 10.00 en tiempo real, el mismo error ocurre en el historial. Sin embargo... Si cambias el servidor, el error en el historial desaparece.

 

Ejemplo del post anterior (sobre el error 2):

2016.10.31 12:13:43.699 (Si-12.16,M1)   VolumeControl: Контроль свечи 2016.10.31 10:05 пройден! Контрольная сумма = 3480 (1353+2127)
2016.10.31 12:13:43.699 (Si-12.16,M1)   VolumeControl: Контроль свечи 2016.10.31 10:06 пройден! Контрольная сумма = 4103 (2236+1867)
2016.10.31 12:13:43.699 (Si-12.16,M1)   VolumeControl: ОШИБКА на свече 2016.10.31 10:07! Сумма объемов на покупку = 1074, сумма объемов на продажу = 3917, контрольная сумма (покупки+продажи) = 5009
2016.10.31 12:13:43.699 (Si-12.16,M1)   VolumeControl: Контроль свечи 2016.10.31 10:08 пройден! Контрольная сумма = 3121 (1479+1642)
2016.10.31 12:13:43.699 (Si-12.16,M1)   VolumeControl: Контроль свечи 2016.10.31 10:09 пройден! Контрольная сумма = 3760 (1046+2714)

Esto es antes del cambio de servidor. Y aquí está el registro después del cambio de servidor:

2016.10.31 12:18:12.109 (Si-12.16,M1)   VolumeControl: Контроль свечи 2016.10.31 10:05 пройден! Контрольная сумма = 3480 (1353+2127)
2016.10.31 12:18:12.109 (Si-12.16,M1)   VolumeControl: Контроль свечи 2016.10.31 10:06 пройден! Контрольная сумма = 4103 (2236+1867)
2016.10.31 12:18:12.109 (Si-12.16,M1)   VolumeControl: Контроль свечи 2016.10.31 10:07 пройден! Контрольная сумма = 5009 (1082+3927)
2016.10.31 12:18:12.109 (Si-12.16,M1)   VolumeControl: Контроль свечи 2016.10.31 10:08 пройден! Контрольная сумма = 3121 (1479+1642)
2016.10.31 12:18:12.110 (Si-12.16,M1)   VolumeControl: Контроль свечи 2016.10.31 10:09 пройден! Контрольная сумма = 3760 (1046+2714)

Aquí está, ¡la "FRONTERA" localizada! Yo mismo no dibujo aquí el control, los valores entre paréntesis no se ajustan, no lo necesito. Pero hay un error, ¡y se puede arreglar cambiando el servidor!

Este es el registro del control de la historia (cuando se inicia el indicador / haciendo clic en el botón "refrescar").

 

Y ahora comentarios sobre el error nº 1.

Algún tiempo después de la apertura del mercado (ya han pasado unos 40 minutos). Con el recálculo completo del indicador - ¡no hay error de control de la vela a las 10.00! Incluso sin cambiar el servidor. Es como si alguien hubiera subido un historial adicional al servidor.

 

Otra observación sobre el error #2:

Если по какой-то причине возникает ошибка контроля объемов на свече после 10.00 в реальном времени, то эта же ошибка возникает и на истории. Однако! Если изменить сервер - ошибка на истории пропадает. 

Parece que los ticks que se recibieron previamente de forma local se almacenan en la memoria caché de la máquina y sólo se sobrescriben después de un cambio de servidor. Eso estaría bien, pero en caso de que se recibieran en su totalidad. Pero resulta que los errores en la historia se acumulan. Y la única manera de deshacerse de ellos es cambiar el servidor de comercio (al menos yo sé que sólo esta manera).
Razón de la queja: