Ticks, Volumen y Precio

Foro genérico sobre programas relacionados con el trading: gráficos, ejecución de órdenes, automatización, etc.
Avatar de Usuario
cls
Mensajes: 1336
Registrado: 24 May 2007 18:46
Contactar:

Ticks, Volumen y Precio

Mensaje por cls »

Hola,

Tengo en mente construir un indicador que me diga el volumen que corresponde a cada tick, pero sin tener que trabajar en gráficos de tick. Si trabajo con barras de 15min y escojo una con un rango de por ejemplo 40 ticks, quiero saber qué volumen parcial - del volumen total de la barra - corresponde a cada uno de esos 40 ticks.
Aplicado a todas las barras de un sesión me permitirá tener un market profile de la sesión.

La idea es descubrir los precios exactos significativos, donde se han enfrentado la oferta y la demanda, para fijar soportes, resistencias, targets, stops, ...

Combinado con los soportes/ resistencias que pueden dibujarse a partir del precio (y que no tienen por qué coincidir con los del volumen que comento) se pueden obtener zonas interesantes para negociar.


El problema es cómo sacar por programa los ticks en charts de minutos.

¿ Sabéis de algún software que me dé información de ticks en gráficos de minutos ?

S2
Spirit
Mensajes: 4739
Registrado: 12 Jun 2008 19:49

Mensaje por Spirit »

Contar Ticks es fácil. Por ejemplo en MQL4 para MetaTrader:

Defines e inicializas variables:

Código: Seleccionar todo

datetime lastTimeOpenBar=0;
datetime secondsPeriod=0;
int countTicks=0;
Ahora inicializas los segundos del periodo y la fecha/hora de apertura de la última vela.

Código: Seleccionar todo

int init(){
   secondsPeriod = Time[0] - Time[1];
   lastTimeOpenBar= Time[0];
   return(0);
}
Ahora cuentas ticks y los escribes al cierre de cada vela

Código: Seleccionar todo

int start(){
   countTicks++;
   if (Time[0] >= lastTimeOpenBar + secondsPeriod){
      Print("Fecha/Hora: ",Time[1]," - Ticks: ",countTicks);
      lastTimeOpenBar= Time[0];
      countTicks=0;
   }
   return(0);
  }
La Fecha/hora la escribe sin formato pero eso es sencillo de cambiar. Puedes escribir todo en un archivo csv. Sólo es cuestión de que le des vueltas. Es muy sencillo.
smassax
Mensajes: 217
Registrado: 04 Oct 2004 15:40

Mensaje por smassax »

si con el ninja le pones q se ejecute a cada tick en lugar d solo a final d barra, y luego vas acumulando los close, no te sirve??
Avatar de Usuario
cls
Mensajes: 1336
Registrado: 24 May 2007 18:46
Contactar:

Mensaje por cls »

smassax escribió:si con el ninja le pones q se ejecute a cada tick en lugar d solo a final d barra, y luego vas acumulando los close, no te sirve??
smassax, eso sólo serviría a partir del instante en que estoy conectado recibiendo tiempo real, y sólo para los activos que estuviera recibiendo.

La idea es poder construir el histórico de cualquier activo y en cualquier momento. Extraer las "zonas calientes" en las últimas n-sesiones y operar con ellas en la sesión de hoy.

Spirit, creo que lo que comentas es parecido. Sólo funcionaría mientras estuviera conectado.

S2
Spirit
Mensajes: 4739
Registrado: 12 Jun 2008 19:49

Mensaje por Spirit »

Puedes ejecutarlo como prueba de estrategia y te escribiría lo mismo sobre el histórico. Lo malo es que MT los ticks los calcula por interpolación o algo así, no tira de histórico.

Pero lo que tu quieres tb se puede conseguir con una simple hoja excel sobre un histórico de ticks.

Otra alternativa, dependiendo de lo que sepas de programación, puedes volcar los datos sobre MySQL y hacer un pequeño programita. Lo de volcar los datos a MySQL en realidad no es necesario ya que se pueden leer de cualquier archivo pero yo siempre prefiero tenerlos en una Base de Datos a cualquier otro formato, más que nada para poder ejecutar consultas SQL.

Avatar de Usuario
cls
Mensajes: 1336
Registrado: 24 May 2007 18:46
Contactar:

Mensaje por cls »

ahora estoy viendo dónde guarda el ninja los datos. Es en un fichero mdb.

Abriéndolo en el MSVisualStudio (no he podido con el Access) veo que hay una tabla que guarda toda la información de las barras. Cada registro es una hora y hay un campo en el registro llamado bars que tiene formato binario. Supongo que ese campo bars contiene toda la información durante esa hora. Pero no hay manera de leerlo desde la interfaz del VisualStudio.

Por si alguien quiere probar, el fichero está en Mis Documentos/ NinjaTrader / db / NinjaTrader.mdb
La tabla se llama nt_barsintraday.

¿Alguna idea de cómo leer el campo binario éste?

S2

PD: Spirit, también podría hacer lo que dices. Construir un programa a medida para leer un fichero con los ticks. Pero preferiría implementarlo todo en el ninja.
Avatar de Usuario
bolsa1
Mensajes: 1347
Registrado: 13 May 2008 09:53
Ubicación: Gallaecia

Mensaje por bolsa1 »

Ahora no puedo extenderme, que me voy, pero te dejo el apunte...

La solución sería una segunda línea temporal (en el Ninja), con el método Add(). Puedes trabajar con una línea primaria de 15 minutos, y una segunda de 1 tick.

Esta noche me extiendo, si hace falta.

Saludos!
"Mercaderes e industriales no deben ser admitidos a la ciudadanía; porque su género de vida es abyecto y contrario a la virtud."

Aristóteles.
Avatar de Usuario
cls
Mensajes: 1336
Registrado: 24 May 2007 18:46
Contactar:

Mensaje por cls »

bolsa1 escribió:Ahora no puedo extenderme, que me voy, pero te dejo el apunte...

La solución sería una segunda línea temporal (en el Ninja), con el método Add(). Puedes trabajar con una línea primaria de 15 minutos, y una segunda de 1 tick.

Esta noche me extiendo, si hace falta.

Saludos!
Gracias bolsa1, pero eso sólo funciona en estrategias. No en indicadores.
Ya sé que el objetivo final de todo esto es montar una estrategia, pero antes quiero analizar a fondo el indicador.

S2
Avatar de Usuario
bolsa1
Mensajes: 1347
Registrado: 13 May 2008 09:53
Ubicación: Gallaecia

Mensaje por bolsa1 »

Tienes razón!

Si me había pasado lo mismo a mí, ahora que me acuerdo...

Bars.TickCount

Cuenta los ticks de la barra actual... a ver si te sirve... por lo menos para hacer la media con el volumen...
"Mercaderes e industriales no deben ser admitidos a la ciudadanía; porque su género de vida es abyecto y contrario a la virtud."

Aristóteles.
Avatar de Usuario
cls
Mensajes: 1336
Registrado: 24 May 2007 18:46
Contactar:

Mensaje por cls »

bolsa1 escribió:Tienes razón!

Si me había pasado lo mismo a mí, ahora que me acuerdo...

Bars.TickCount

Cuenta los ticks de la barra actual... a ver si te sirve... por lo menos para hacer la media con el volumen...
Eso no me va a servir. Gracias de todos modos. Necesito el volumen exacto para cada tick de la barra. El promedio no me va a servir.

Le estoy metiendo mano al fichero vía SQL. Parece ser que todos los ticks de una hora están en un array de bytes. Ya voy sacando números (aunque no sé qué significan). Ahora me crearé un activo nuevo y lo cargaré con unos pocos ticks nada más, y a chequer los valores del array. A ver si consigo identificar las longitudes y demás historias.

Si consigo algo ya iré posteando.

Por cierto, que esto igual te viene bien para tu sistema de la campana.
Imagina candlesticks que en vez de ser sólo rojas o verdes, están coloreadas como un gradiente en función del volumen. Y operar sólo en esas zonas de máximo volumen.

Saludos
Avatar de Usuario
bolsa1
Mensajes: 1347
Registrado: 13 May 2008 09:53
Ubicación: Gallaecia

Mensaje por bolsa1 »

Yo te sigo dando la brasa...

¿y si pones calculateonbarclose=false , y vas chequeando con una variable si el Bars.TickCount ha cambiado, y si lo ha hecho anotas la diferencia de volumen?

En teoría... tendrías el volumen del tick, ¿no? (Se me acaba de ocurrir, no lo he probado, y no sé si es viable... porque no sé si te dará el volumen correcto...)

P.D.: Si que me sería muy útil. :D :D :D
"Mercaderes e industriales no deben ser admitidos a la ciudadanía; porque su género de vida es abyecto y contrario a la virtud."

Aristóteles.
Avatar de Usuario
cls
Mensajes: 1336
Registrado: 24 May 2007 18:46
Contactar:

Mensaje por cls »

Conseguido jejeje. :-D :-D :-D

Al final no ha podido ser vía SQL. El array de bytes aquél era indescifrable.

En cambio, utilizando las clases del core del ninja y con unas pocas líneas de código se puede acceder a todas las barras de cualquier instrumento y timeframe. (Esto es algo que ya se podía hacer de manera estándar en estrategias, pero no en indicadores).

El procedimiento está pensado para trabajar con el histórico (si lo quiero en tiempo real ya tengo las estrategias que permiten multi-instrumentos y multi-timeframe).

Consiste en leer de una sola vez TODAS las barras del instrumento y timeframe que se quiera. Esto puede tardar un poco si quieres leer todas las barras de 1 tick que corresponden a 1 mes del mini-sp.

Una vez cargado el array con todos los ticks ya puedes manejarlo para hacer lo que quieras con él: sacar máximos/mínimos de volumen, construir un market profile, etc.
(este es un ejemplo de un market profile para el ninja http://fin-alg.com/tpoandvolumechart.html . Lo único que cuesta pasta, y está cerrado por lo que no se puede emplear en estrategias. Pero ahora sería posible de programar y de incluir en estrategias. Pienso. :roll: ).

Bueno, pues dejo el código por si a alguien más le interesa.

Saludos.

PD: bolsa1, lo que comentas sólo valdría en tiempo real. Es lo que decían smassax y spirit. Pero no serviría para análisis de históricos.
Adjuntos
MultiTimeFrame01.zip
(1.96 KiB) Descargado 132 veces
juand
Mensajes: 4
Registrado: 31 Oct 2008 22:44

Mensaje por juand »

cls escribió:Conseguido jejeje. :-D :-D :-D

Al final no ha podido ser vía SQL. El array de bytes aquél era indescifrable.

En cambio, utilizando las clases del core del ninja y con unas pocas líneas de código se puede acceder a todas las barras de cualquier instrumento y timeframe. (Esto es algo que ya se podía hacer de manera estándar en estrategias, pero no en indicadores).

El procedimiento está pensado para trabajar con el histórico (si lo quiero en tiempo real ya tengo las estrategias que permiten multi-instrumentos y multi-timeframe).

Consiste en leer de una sola vez TODAS las barras del instrumento y timeframe que se quiera. Esto puede tardar un poco si quieres leer todas las barras de 1 tick que corresponden a 1 mes del mini-sp.

Una vez cargado el array con todos los ticks ya puedes manejarlo para hacer lo que quieras con él: sacar máximos/mínimos de volumen, construir un market profile, etc.
(este es un ejemplo de un market profile para el ninja http://fin-alg.com/tpoandvolumechart.html . Lo único que cuesta pasta, y está cerrado por lo que no se puede emplear en estrategias. Pero ahora sería posible de programar y de incluir en estrategias. Pienso. :roll: ).

Bueno, pues dejo el código por si a alguien más le interesa.

Saludos.

PD: bolsa1, lo que comentas sólo valdría en tiempo real. Es lo que decían smassax y spirit. Pero no serviría para análisis de históricos.
Buenas, yo utilizo VisualChart desde hace tiempo y en la versión 4 (también en la 5) incluian un Market Profile (Volume Distribution en las opciones de VisualChart).

Yo no lo utilizo pero si os sirve, podeis verlo en la imagen. Inicialmente creo que solo muestra un dia o dos pero se puede cambiar en las opciones.

Saludosss
Adjuntos
Market Profile
Market Profile
Avatar de Usuario
cls
Mensajes: 1336
Registrado: 24 May 2007 18:46
Contactar:

Mensaje por cls »

Esa es la idea, juand, programar una herramienta parecida. Todas las plataformas que ofrecen un market profile lo hacen con el código cerrado y no se puede aprovechar para estrategias automáticas, sólo para trading discrecional.

Este es un ejemplo muy básico de lo que puede hacerse. No es un market profile propiamente dicho, sino un Volume profile (sólo información de volumen).

Imagen

Es un chart horario con dos sesiones, del 14-ago y 15-ago del stoxx.
El diagrama azul es el volume profile del 14-ago. Cada línea representa el volumen negociado para ese precio. El precio más negociado el 14-ago fue el 3.368 con un volumen total de 41.139 contratos.

Teniendo ese diagrama a la vista antes de que empiece la sesión del día 15 puede saberse de un vistazo la estructura de negociación de la sesión anterior y buscar puntos de entrada con antelación.

(La información está sacada del histórico y estando off-line - de hecho el instrumento cargado VCTICK no existe. Muchas plataformas ofrecen indicadores parecidos pero sólo funcionan on-line y no sobre histórico, sólo con los datos cargados durante la sesión on-line).
Adjuntos
mp01.gif
Avatar de Usuario
polxx
Mensajes: 847
Registrado: 09 Dic 2005 10:25
Ubicación: Albacete

Mensaje por polxx »

Todo eso en visual chart es mas facil, creo. Tanto en indicadores como sistemas, tiempo real o bakctesting, al crear un indicador o sistema con plataforma visual, en el campo SERIES, se incluye el valor que queramos en ticks.

Yo lo que tengo en mente es algo diferente.
Se ponen graficos de 1 minuto, que son los que me gustan a mi.
Y sobre ese grafico, se añade abajo un indicador que analice los graficos de 1 tick y que tenga en cuenta lo siguiente:
De las ultimas 10.000 barras de 1 tics, por ejemplo, que porcentaje de barras ha tenido un volumen mayor a 50 contratos.

Por ejemplo si hay 200 barras de tic con volumen superior a 50 contratos y 9800 con volumen menor, tenemos que el 2% de las operaciones realizadas corresponde a manos fuertes. Y digo 2% de operaciones, no 2% de volumen negociado, que seria otra cosa.

Con eso podemos saber la presencia o ausencia de manos fuertes, luego ya habria que ver el indicador con graficos de 1 minuto y ver si se puede deducir algo o no.
El camino equivocado es INVENTAR un SISTEMA ganador. El camino correcto es DESCUBRIR que hace el PRECIO, para adelantarse a el, y con eso poder hacer un sistema ganador.
Si te ha gustado este hilo del Foro, ¡compártelo en redes!


Responder

Volver a “Software”