Asesores Expertos: Ask Bid Ticks

 

Ask Bid Ticks:

"AskBidTicks" es una solución de datos de tick en tiempo real y alta precisión para el análisis de microestructura.

Exporta precios tick a tick a un fichero csv. Trabaja con la hora local del ordenador.

A continuación se muestra un ejemplo de salida csv delimitado por tabuladores con las marcas de tiempo en milisegundos:

salida

Autor: Erdem Sen

 
Automated-Trading:

Ask Bid Ticks:

Autor: Erdem Sen

Interesante, ¿Cómo se podría utilizar en backtesting? ¿Alguna idea?
 
Hola, puede usted equivalente en Bar M5 M15 H1 H4
 
vanvolxem:
Hola, puede usted equivalente en Bar M5 M15 H1 H4
Lo siento, no lo he entendido, ¿podría ser más específico?
 

Hola,

Hora Símbolo OPEM CERRAR PH PB

2013.01.04 04:55 EURGBP 0.81065 0.81078 0.81086 0.81065 172

2013.01.04 05:00 EURGBP 0.81079 0.81046 0.81080 0.81044 90

2013.01.04 05:05 EURGBP 0.81047 0.81044 0.81056 0.81044 89

2013.01.04 05:10 EURGBP 0.81043 0.81059 0.81059 0.81033 111

2013.01.04 05:15 EURGBP 0.81057 0.81052 0.81059 0.81048 78

2013.01.04 05:20 EURGBP 0.81051 0.81065 0.81071 0.81050 124

2013.01.04 05:25 EURGBP 0.81067 0.81066 0.81070 0.81060 243

2013.01.04 05:30 EURGBP 0.81067 0.81076 0.81080 0.81063 108


 
vanvolxem:

Hola,

Hora Símbolo OPEM CERRAR PH PB

2013.01.04 04:55 EURGBP 0.81065 0.81078 0.81086 0.81065 172

2013.01.04 05:00 EURGBP 0.81079 0.81046 0.81080 0.81044 90



La mejor manera de obtener datos periódicos (según yo) es utilizar MT4 historia, u puede descargar y exportar (a Excel) los datos históricos. pero si u quiere un reedit de este código para los datos periódicos, creo que esto va a trabajar para u:

//+------------------------------------------------------------------+
//|PeriodicRealTimeDataStream.mq5
//| Copyright 2013, MetaQuotes Software Corp. |
//| http://www.mql5.com
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"

datetime t1;
double   arro[1],arrh[1],arrl[1],arrc[1];
string   T,O,H,L,C;
long     arrv[1],V;

//+------------------------------------------------------------------+
void OnTick()
  {  

   t1 = (datetime)SeriesInfoInteger(_Symbol,_Period,SERIES_LASTBAR_DATE);
   static datetime  t0 = t1;
//--- obtener valores para el gráfico especificado 
   if (t0!=t1)
      {  
         //--- copiar valores a matrices
         CopyOpen(_Symbol,_Period,0,1,arro);
         CopyHigh(_Symbol,_Period,0,1,arrh);
         CopyLow(_Symbol,_Period,0,1,arrl);
         CopyClose(_Symbol,_Period,0,1,arrc);
         CopyTickVolume(_Symbol,_Period,0,1,arrv);
         //--
         T=TimeToString(t1,TIME_DATE|TIME_MINUTES);
         O=DoubleToString(arro[0],_Digits);
         H=DoubleToString(arrh[0],_Digits);
         L=DoubleToString(arrl[0],_Digits);
         C=DoubleToString(arrc[0],_Digits);
         V=arrv[0];
         //--- salida de los valores
         printf("%s  %s  %s  %s  %s  %s  %d",T,_Symbol,O,H,L,C,V);
         //--- vuelve a poner la hora
         t0=t1;     
      }
//---
  }
//+------------------------------------------------------------------+

si desea exportar csv, puede utilizar las funciones de archivo y variables como en el código principal

 
¿Qué pasa con los ticks que se pierden? ¿añades algo en el archivo TXT para ellos? si no lo haces entonces no estás ". . . almacena todos los datos tick-by-tick de los precios ask y bid en un archivo txt" .
 
RaptorUK:
¿Qué pasa con los ticks que se pierden? ¿añades algo en el archivo TXT para ellos? si no lo haces entonces no estás ". . . almacena todos los datos tick-by-tick de los precios ask y bid en un archivo txt" .

Tienes razón en que existe la posibilidad de que falten cotizaciones debido a la forma en que se maneja el evento NewTick, pero el código es lo suficientemente rápido como para hacer que esta posibilidad sea muy pequeña (casi cero). si los ticks que faltan ocurren más de lo que pensaba (que puede afectar a la significancia del análisis), entonces Ontick() tiene un error, no mi código.

y sobre la frase ". . . almacena todos los datos tick-by-tick de los precios de compra y venta en un archivo txt.", me di cuenta hace mucho tiempo y lo cambie :) ya no hay "todos", pero en el foro sigue igual - lo siento no tengo la capacidad de cambiarlo, me gusta reeditar los comentarios, pero es imposible para esa frase :(

 
erdogenes:

Tienes razón en que hay una posibilidad de que falten cotizaciones debido a la forma en que se maneja el evento NewTick, pero el código es lo suficientemente rápido como para hacer que esta posibilidad sea muy pequeña (casi cero). si faltan ticks más de lo que pensaba (que puede afectar a la significación del análisis), entonces Ontick() tiene un error, no mi código.

y sobre la frase ". . . almacena todos los datos tick-by-tick de los precios de compra y venta en un archivo txt.", me di cuenta hace mucho tiempo y lo cambié :) ya no hay "todos", pero en el foro sigue igual - lo siento, no tengo la capacidad de cambiarlo, me gusta reeditar los comentarios, pero es imposible para esa frase :(

No es un bug, simplemente es como funciona... si OnTick() se está ejecutando cuando llega un nuevo tick el nuevo tick se ignora....

Nuevo tick

El evento NewTick se genera si hay nuevas cotizaciones, es procesado por OnTick() de los Asesores Expertos adjuntos. En caso de que la función OnTick para la cotización anterior esté siendo procesada cuando se recibe una nueva cotización, la nueva cotización será ignorada por un Asesor Experto, porque el evento correspondiente no se pondrá en cola.

Todas las nuevas cotizaciones que se reciban mientras se ejecuta el programa se ignorarán hasta que se complete la función OnTick(). Después de eso la función se ejecutará sólo después de que se reciba una nueva cotización.

. . . ¿ha hecho pruebas para ver cuántos ticks se suele perder?

 
RaptorUK:

No es un error, es sólo cómo funciona ... si OnTick() se está ejecutando cuando llega un nuevo tick el nuevo tick es ignorado ....

Estoy confundido, por lo que usted piensa que es la forma de newtick manejo y yo también:)

erdogenes:

Tienes razón hay posibilidad de que falten comillas por la forma de manejar el evento NewTick

puede que lo hayas entendido mal: si la falta de ticks tiene un efecto significativo en el análisis entonces ontick está buggeado, no es normal (porque es el manejador de eventos "new tick", si no puede manejar lo suficiente está buggeado) pero no creo que no pueda manejar no creo que esté buggeado.

RaptorUK:

. . . ¿has probado a ver cuantos ticks te saltas normalmente?

Yo no se de ticks perdidos, yo obtengo lo que el programa obtiene, como puedo calcularlo? o se puede calcular de alguna manera?, no puedo saber cuantos ticks pierde Ontick en un dia (no estoy desarrollando mql5). No puedo hablar por MetaQuotes. No tengo acceso directo a un servidor de trading para comparar los feeds. No puedo calcularlo para un programa, no se cambiará cuando el programa sea mío, sólo puedo hablar estadísticamente.

Para usted, he editado un ejemplo con el procesamiento de datos HF. Obtengo la tasa de llegadas de ticks en el mismo milisegundo con las tasas interbancarias 27.01.2011- el programa para el cálculo es Gretl, los códigos se pueden utilizar y los datos se envían por PM (no puedo compartir los datos públicamente lo siento). el resultado es ~ 0.003 (es la tasa de llegadas en el mismo milisegundo y fue un día activo).

Supongamos que los datos se manejan en MT5 y (absurdamente) que faltan todos (~0.003). Entonces, ¿una señal que se remuestrea aleatoriamente con una tasa de ~0.003, pierde alguna significancia? mi respuesta es no. ya usamos remuestreo con tasas más altas en el análisis.

Claro que era sólo hipotética, y no de un corredor, pero espero que usted entienda mi punto. Y de nuevo, yo no tengo la capacidad de obtener el número real de garrapatas que faltan.

Y una cosa más: si es la política de "no cola" del manejador de eventos NewTick lo que causa los ticks perdidos (y lo es), entonces creo que el número de los perdidos puede depender de la velocidad de su hardware, también. Entonces no se puede calcular como un valor estándar.

(Reedito el comentario: Arreglé el código que te envié, estaba buggeado, el resultado real es ~0.003 el código está adjunto)

Archivos adjuntos:
codes.zip  1 kb
 
erdogenes:

Estoy confundido, así que usted piensa que es la forma de newtick manejo y yo también:)

puede que lo hayas entendido mal: si la falta de ticks tiene un efecto significativo en el análisis entonces ontick tiene un bug, no es normal (porque es el manejador de eventos "new tick", si no puede manejarlo lo suficiente tiene un bug) pero no creo que no pueda manejarlo no creo que tenga un bug.

Lo de los ticks perdidos no lo se, obtengo lo que obtiene el programa, ¿como puedo calcularlo? o ¿se puede calcular de alguna manera?, no puedo saber cuantos ticks pierde Ontick en un dia (no estoy desarrollando mql5).

Si puedes... puedes contar los ticks tal y como los ves para la barra actual y comprobar el valor del volumen de ticks para la barra actual, cuando tu conteo y el volumen de ticks no coinciden entonces has perdido uno o más ticks....