blog Trading para Dummies
Operativa con sistemas de trading robustos

Volumen Horario Mercados en Python. Tercer Trimestre 2016 +82%

Son tiempos difíciles para mi proyecto de especulación en divisas y CFDs de materias primas pero al mal tiempo buena cara, si uno ha hecho sus deberes sabe que el escenario actual entra dentro de lo posible y de lo probable cuando la exposición al mercado es a tan largo plazo. 

 

Entraremos en profundidad más adelante pero puedo adelantar que no es nada fácil aguantar un caída de más del 30% (desde el máximo valor de mi cuenta de hace unos meses a la situación actual), la otra cara de la moneda es que espero rentabilidades anuales superiores al 30%. El Drawdown extremo pasa factura desde un punto de vista psicológico aunque no es sólo cosa mía, fondos profesionales con filosofía de especulación afin están sufriendo también una mala racha:

 

Es mi voluntad en estas entradas de mi blog empezar a compartir código Python con pequeñas utilidades que puedan servir a alguno de los lectores de este blog. El primer requisito es que están desarrolladas para trabajar con el broker OANDA, pero siguiendo la lógica del código se puede extrapolar a cualquier broker con API disponible (como Interactive Brokers).  Al ser la primera vez que cuelgo código Python quiero mencionar que su nombre no viene tal como señala su símbolo por el gusto de su creador por las serpientes, sino por el grupo cómico británico Monty Python. Es la razón de la imagen, uno de sus más famosos sketchs lo podéis ver aquí. ("No one expects the Spanish Inquisition")

 

En esta ocasión presento un estudio del volumen horario de los pares de divisas más importantes en Forex  y así mostrar en qué franja horaria el volumen negociado es mayor (en ticks), este ejercicio se puede llevar a cabo con cualquier instrumento negociado por el broker. Es elección del trader si prefiere operar en horario con bajo volumen o como en mi caso cuando el volumen es importante ya que marca el curso de las futuras tendencias de los mercados:

 

# -*- coding: utf-8 -*-
"""
Created on Sun Jul 24 12:06:15 2016

@author: dario_corral

Con esta funcion queremos sacar el volumen historico para ver su comportamiento
durante las horas del dia, asi podemos saber cual es la mejor hora de
apertura
"""

import pandas as pd
import oandapy
import numpy as np

import matplotlib.pyplot as plt


pd.set_option('display.notebook_repr_html', False)
pd.set_option('display.max_columns', 20)
pd.set_option('display.max_rows', 20)

oanda = oandapy.API(environment="live", access_token=
"[Aqui va el token otorgado por OANDA para la funcion API]")



def vol_horas(instr,num_dias):
    """Muestra el volumen horario del instrumento especificado.
    'instr' = 'EUR_USD', 'XAG_USD'...
    num_dias = Numero de dias estudio. El valor maximo es 208 días"""
    
    num_horas = num_dias * 24
    #Sacamos la informacion horaria de volumen
    instr_dict = oanda.get_history(
    instrument = instr,
    candleFormat ="midpoint",
    granularity ="H1",
    count=num_horas)
    
    #Lo convertimos en DataFrame de Dict
    instr_H = pd.DataFrame.from_dict(instr_dict).join(pd.DataFrame.
    from_dict(instr_dict['candles'])).drop('candles', axis=1)
    
    #Borramos la matriz dict
    del instr_dict
    
    #Borramos las columnas que no interesan
    instr_H = instr_H.drop(['instrument','closeMid','granularity','highMid',
              'lowMid','openMid'],1)
    
    #Nos quedamos solo con las velas completas
    instr_H = instr_H.loc [instr_H ['complete'] == True]
    
    #Borramos la columna 'complete'
    instr_H = instr_H.drop('complete',1)

    #Convertimo en datatime la columna tiempo
    instr_H ['time'] = pd.to_datetime(instr_H ['time'])
    
    #Convertimos la columna de tiempo en Index
    instr_H.index = instr_H ['time']

    #Añadimos la columna hora
    instr_H ['hora']= instr_H.index.hour
    
    #Convertimos la columna de tiempo en Index
    instr_H.index = instr_H ['time']
    
    #Eliminamos la columna 'time'
    instr_H = instr_H.drop('time',1)
    
    #Adaptamos la hora a nuestro uso horario    
    instr_H ['hora'] = instr_H ['hora'] +2

    #Calculamos la hora promedio y añadimos columna    
    hora_volmedio = instr_H.groupby('hora').agg(np.mean)
    
    hora_vol = pd.Series(hora_volmedio ['volume'])
    
    #Configuramos el grafico
    ax = hora_vol.plot(kind='bar', title ="Volumen_hora %s" \
    % instr,figsize=(14,8),legend=True, fontsize=12)
    ax.set_xlabel("Hora_UTC/GMT + 2",fontsize=12)
    ax.set_ylabel("Volumen_medio_Ticks",fontsize=12)
    
    return plt.show()  



if __name__ == "__main__":
    instr = input("Mercado >")
    num_dias = input("Numero dias >")

    vol_horas(instr,num_dias)     

 

Se puede grabar en cualquier fichero con extensión '.py' y ejecutarlo en un terminal de Windows, Mac o Linux a través del comando:

  • python [nombre del archivo].py

. Es importante tener instalados previamente los modulos que aparecen en las primeras líneas del código: 

  • Pandas, numpy y matplotlib vienen en el paquete Anaconda
  • Oandapy se puede instalar desde aquí

 

Ahora lo único que nos pide el script es meter el nombre de mercado (terminología OANDA: 'EUR_USD', 'GBP_USD', 'USD_CHF', 'USD_JPY' ) y los días del pasado que queremos analizar el volumen horario en ticks. Analizamos algunos ejemplos de los últimos 60 días (en hora española, GMT +2):

 

Durante la apertura de Londres (7 - 9h hora española) el volumen negociado va creciendo hasta hacer pico con el comienzo de la jornada bursátil en USA, aproximandamente durante la franja horaria 14 - 16h en España. Incluso el par del Yen japonés que tiene bastante actividad durante la madrugada presenta un mayor volumen de ticks durante el horario de apertura de Londres-Nueva York, también es cuando llegan las noticias económicas más importantes que mueven los mercados.

A razón de un comentario añado el volumen medio horario con el CFD de los futuros del S&P500:

Espero que le podáis sacar utilidad, en próximas entradas colgaré más scripts con funciones útiles.

Volviendo a los resultados de mi cuenta de trading presento los ratios más importantes actualizados a 30 de Septiembre:

 

CAGR (Rent.%AnualComp.) 23,12%
Max.Drawdown % 32,65%
CALMAR (CAGR/Max.Drawd.) 0,71
Year to Date %  2,46%
Fecha inicio 19/11/12
Fecha Fin 30/9/16

 

El ratio CALMAR ha caido por debajo del umbral de 1 lo cual refleja la dificultad por la que pasan mis estategias en el entorno actual.

 

La gráfica actualizada (se puede ver también en la parte derecha de este blog junto al enlace a Myfxbook):

 

Esperamos a que lleguen mejores tiempos ya que los mercados han estado en lateral muchos meses y es posible que pronto veamos movimientos importantes o más de lo mismo durante más tiempo pero una cosa es segura: Cuanto más tiempo estén en lateral, más fuerte será la ruptura (Gann).

 

Buen trading!

Darío Corral

@dario_corral_

 

 

 

 

  1. #1

    Gaspar

    Espero que cuelgues mas código porque me estoy auto-enseñando python y java, y esto me sirve ;)

    Saludos

  2. #2

    Darío Corral

    en respuesta a Gaspar
    Ver mensaje de Gaspar

    Sin problema Gaspar, me alegra que te sea útil.

    Saludos

  3. #3

    Nega16

    Muchas gracias Dario
    muy interesante tu informacion

  4. #4

    Nega16

    coinciden ese aumento de volumen con mi horario de trading y fiabilidad de las operaciones

    mas o menos es asi, se opera bien de 8 a 11 de la mañana

    se opera bien de 14 a 16 horas, principalmente porque no hay noticias tampoco

    a partir delas 16 horas , hay que marcar las noticias importantes del dia, no se puede operar sin esa información

    y a partir de las 17 horas suelo dejar de operar

    veo que coincide totalmente con tu grafica de volumen

    un saludo

  5. #5

    Nega16

    en respuesta a Nega16
    Ver mensaje de Nega16

    Hay que hacer notar, que se opera bien, con volumen creciendo una hora antes de la apertura europea, y una hora y media antes de la americana.
    En eso se tiene gran ventaja en el forex , con los que operan mercados de acciones, sobre todo en America, por las previsibles noticias fuertes que empiezan a caer a la media hora de la cotizacion

  6. #6

    Darío Corral

    en respuesta a Nega16
    Ver mensaje de Nega16

    Gracias por tus comentarios Nega,

    He añadido al post la misma información con el CFD de los futuros del S&P500, como puedes ver sigue manteniendo la forma de volumen en 'U' (apertura - cierre) o 'W' si contamos con la apertura de europa también. No es el volumen de los contratos negociados de futuros en el mercado regulado ya que los CFDs son OTC pero debe ser una aproximación lo suficientemente confiable.

    Recuerdo que es el volumen medio horario de "ticks" de los últimos 60 días, con el código que he dado se puede coger el volumen medio horario hasta 5.000 días.

    Mañana tenemos el "Nonfarm payrolls" americano y tal como está de caliente la libra veremos que pasa.

    Saludos

Autor del blog
  • Darío Corral

    Licenciado en Administración y Dirección de Empresas y apasionado de los mercados. Trader de Forex y CFDs. Ver el perfil de Darío Corral en LinkedIn

Envía tu consulta