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:
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!