Entornos de Inteligencia Artificial para Trading y Simulando Ticks

A estas alturas, si has estado intentando diseñar modelos de machine learning  o inteligencia artificial para hacer trading, ya te habrás dado cuenta de que la cosa no es tan fácil como normalizar unos cuantos datos históricos de Forex o Bolsa, meterlos en una red neuronal y esperar que tu output tipo {mantener, comprar, vender} te salga lo suficiente bien balanceado como para que la red negocie por ti.

De hecho, en el pasado, mi experiencia es que arquitecturas como XGBOOST daban mejores predicciones con datos suavizados con medias móviles de 2 o 3 muestras que perceptrones o LSTMs.

Todo depende del tiempo que uno tiene disponible. Si es poco, como en mi caso, lo mejor es ir primero a los más seguro y luego ir refinando el trabajo para poder, con la mayor brevedad posible, aprobar o descartar una metodología. Lo de «la mayor brevedad» es un concepto bastante relativo.

En mi caso, la mayor brevedad han sido unos cinco años de trabajo intenso más un esfuerzo financiero relevante. En mi caso, como ya he comentado en otras entradas, he estudiado casi todas las técnicas de trading, las he probado, validado; una tras otra, durante años. Tanto el trading manual como el trading algorítmico. Es decir, que no solo he estudiado trading o pagado por aprender, sino que además he tenido que investigar mucho sobre algoritmos, estructuras, lenguajes, estadística (incluyendo un master en Ciencia de Datos), probabilidad, machine learning, inteligencia artificial y otras materias relevantes.

En ese sentido, se puede decir que me he hecho una idea genérica relativamente amplia del asunto. Escribo este rollo, no para ponerme medallas, sino para que quien lea este texto entienda que el trading no es llegar y triunfar. En el mejor de los casos hacen falta entre 3 o 5 años para empezar a entenderlo y puede que la tasa de fracaso sea del 95%. Esto es, que de cada 100 personas que intentan hacer trading, solo 5 conseguiran cubrir costes y un porcentaje menor ganar algo. Y no solo depende de lo buena que sea la técnica utilizada, el 80% de los factores van a ser ajenos al dominio de una técnica de trading determinada. De hecho, no me pongo medallas porque no enseño mis técnicas gratuitamente nunca. Tengo por ahí una mención a un seminario de 5 días de trading por 12000 euros por si alguien tiene curiosidad por saber qué principios y técnicas utilizo.

Lo que voy a mostrar ahora es una implementación personalizada de un proveedor de datos virtual; que es más sencillo de programar que un canal de comunicación con mi broker, de forma que puedo hacer simulaciones y estudios exactamente igual que si estuviera conectado, pero con mucho menos esfuerzo. Con bastante esfuerzo, pero con mucho menos.

A estas alturas ya funciona razonablemente bien, es un borrador del final, pero ya tiene suficiente complejidad para que valga la pena como ejemplo. Me he programado un broker virtual también, porque me gusta la modularidad. Este broker puede recibir datos de distintas fuentes. Para ello, uso una interfazclase abstracta (depende del lenguaje) que define unos métodos y propiedades iguales, sea cual sea la fuente de datos.

Una de las fuentes de datos que utilizo son ficheros csv en formato tick (date, ask, bid). Estos los he convertido en OHLC para Ask y OHLC para bid en marcos temporales de 1-minuto y 5-minutos. Para mí es suficiente, pero si alguien quiere más granularidad y exactitud, puede usar directamente los datos ask-bid, o hacer un muestreo a 30-segundos, 10-segundos, etc. para los datos tick. Para que se entienda mejor, tengo:

  1. Un único csv con todos los datos OHLC en el marco temporal de 5-minutos entre 2003 y 2019. Este fichero se utiliza para dibujar la gráfica OHLC, entrenar un modelo estadístico o lo que sea.
  2. Un fichero por año de datos OHLC en el marco temporal de 1-minuto. Este fichero se utiliza para extraer los ticks que tendrán lugar hasta que la siguiente barra OHLC se tenga que dibujar. Son como los datos que nos van llegando del broker en tiempo real y muestran cómo va cambiando el precio del instrumento.

Como observación, estuve decidiendo si utilizar datos tick ASK/BID, pero me pareció que tanta precisión no era necesaria y que iba a utilizar un generador de ruído para calcular el spread mediante un generador de números aleatorios con una distribución T de student o bien promediando High-Low de mi muestra histórica. Pero eso es otra historia. Recordemos que compramos a precio Ask, pero vendemos a precio Bid. La comisión por operación también tiene que tenerse en cuenta, por ejemplo.

Vamos a plantear el sistema:

Datos históricos en 5 minutos
(última fila, núm. filas=n)
(AMD = año-mes-día)

Datos en «tiempo real» en 1 minuto
(todos los ticks desde que cierra la vela histórica hasta que abre la siguiente).
Date Open High Low Close
AMD 08:00:00 On Hn Ln Cn

Tengamos en cuenta que la vela de 8:00 en el TF de 5m contiene todos los precios entre las 8:00 y las 8H 4' 59''.

Por lo que las señales en tiempo real tienen que empezar a las 8H 5' 00''.

Date Open High Low Close
AMD 08:05:00  O1 H1  L1  C
AMD 08:06:00 O2 H2  L2  C
AMD 08:07:00 O3 H3  L3  C
AMD 08:08:00 O4 H4  L4  C
08:09:00 O5 H5  L5  C

Empecemos con el código:

# Como está orientado a csv, entonces no voy a incluir información sobre conexiones mediante sockets, puertos, ejecutables, etc...
# Definimos una clase abstracta que sirva de interfaz para el resto que vengan.
 
class Provider_abstract():
 
    def __init__(self):
        raise NotImplementedError
 
    def getRTPricesNext(self):
        raise NotImplementedError
 
    def getHistPricesNext(self):
        raise NotImplementedError
 
    def setTickDataPath(self):
        raise NotImplementedError
 
    def setHistoricalFile(self):
        raise NotImplementedError

Los métodos tendrán las siguientes funciones:

  • getRTPricesNext: Devuelve el dataframe con los ticks.
  • getHistPricesNext: Devuelve un histórico de precios.
  • setTickDataPath: El directorio donde están los datos tick.
  • setHistoricalFile: La ruta al fichero con los datos históricos.

Y ahora procedemos a la implementación, veamos el código completo primero.

from gym_gspfx.gspProviders.provider import Provider_abstract
import pandas as pd
 
# Reads TF data and generates tick data from the same or other data source.
# For instance, reads 5m data nd generates ticks from 1m data.
 
class Provider(Provider_abstract):
 
    def __init__(self, historical_file, tick_data_path, start_row=0, number_of_samples=300, \
                 tick_file_prefix="EURUSD_1M_"):
 
        self.min_year=None
        self.max_year=None
        self.__historical_file = ""
        self.__tick_data_path = ""
        self.setHistoricalFile(historical_file)
        self.setTickDataPath(tick_data_path)
        self.current_start_row_index = None
        self.number_of_samples = number_of_samples
        self.next_future_start_row = start_row
        self.last_closed_row = None
        self.next_future_row_to_deliver_index = 0
        self.next_two_future_rows_to_deliver = None
        self.__tick_data_files = {"EMPTY": None}
        self.tick_file_prefix=tick_file_prefix
 
 
    def setHistoricalFile(self,fileName):
        self.__historical_file = pd.read_csv(fileName, parse_dates=["date"]).set_index("date")
 
    def setTickDataPath(self, tick_data_path):
        self.__tick_data_path=tick_data_path
 
 
    def getHistPricesNext(self):
        self.current_start_row_index = self.next_future_row_to_deliver_index
        self.next_future_row_to_deliver_index += 1
 
        __df = self.__historical_file.iloc[self.current_start_row_index:self.current_start_row_index + self.number_of_samples]
 
        self.last_closed_row = __df.tail(1)
 
        self.next_two_future_rows_to_deliver = pd.DataFrame( \
            self.__historical_file.iloc[self.current_start_row_index + self.number_of_samples:\
                                        self.next_future_row_to_deliver_index + self.number_of_samples + 1])
        return __df.copy()
 
 
    def getRTPricesNext(self):
 
        if self.last_closed_row is None:
            return None
 
        if "EMPTY" in self.__tick_data_files.keys() and self.__historical_file.shape[0]>0:
            del self.__tick_data_files["EMPTY"]
 
        self.min_year = self.last_closed_row.index.year.values[0]
        self.max_year = self.next_two_future_rows_to_deliver.head(1).index.year.values[0]
 
        if self.max_year not in self.__tick_data_files.keys():
            self.__tick_data_files[self.max_year] = \
                pd.read_csv(self.__tick_data_path + "EURUSD_1M_" + str(self.max_year) + ".csv", parse_dates=["date"])
 
            if self.min_year in self.__tick_data_files.keys() and self.min_year != self.max_year:
                del self.__tick_data_files[self.min_year]
 
        initial_date = self.next_two_future_rows_to_deliver.head(1).index.values[0]
        end_date = self.next_two_future_rows_to_deliver.tail(1).index.values[0]
 
        __df = self.__tick_data_files[self.max_year]
        __df = __df[(__df["date"] >= initial_date) & (__df["date"] < end_date)]
 
        return __df.copy()

El método __init__ se encarga de parametrizar los valores iniciales de la clase, como la fila del histórico desde el que se comenzará a extraer datos, el número de filas del histórico que se extraerán. También se han de definir al instanciar la clase la ruta completa al fichero de históricos y la carpeta donde están los ficheros de ticks.

Los ficheros de ticks los guardo en un diccionario conforme los necesito por motivos prácticos. He optado por usar ficheros de 1m, pero podría tener otra estructura y he preferido prever la posibilidad de tener que utilizar ficheros de tick múltiples. Todo ello se define en el constructor, junto con atributos que serán utilizados por la clase.

 def __init__(self, historical_file, tick_data_path, start_row=0, number_of_samples=300, \
                 tick_file_prefix="EURUSD_1M_"):
 
        self.min_year=None
        self.max_year=None
        self.__historical_file = ""
        self.__tick_data_path = ""
        self.setHistoricalFile(historical_file)
        self.setTickDataPath(tick_data_path)
        self.current_start_row_index = None
        self.number_of_samples = number_of_samples
        self.next_future_start_row = start_row
        self.last_closed_row = None
        self.next_future_row_to_deliver_index = 0
        self.next_two_future_rows_to_deliver = None
        self.__tick_data_files = {"EMPTY": None}
        self.tick_file_prefix=tick_file_prefix

Tras ello, los métodos que cargan el fichero de históricos y configuran la ruta de los ficheros de ticks.
Nótese que utilizo la librería de pandas y que asumo que los datos vienen ya ordenados por fecha, ascendente.

    def setHistoricalFile(self,fileName):
        self.__historical_file = pd.read_csv(fileName, parse_dates=["date"]).set_index("date")
 
   def setTickDataPath(self, tick_data_path):
       self.__tick_data_path=tick_data_path

Cada vez que queremos avanzar 1 vela, tenemos que llamara a este procedimiento.
El procedimiento devuelve un DataFrame con el número de filas indicado en el constructor o modificado en el atributo number_of_samples.
Cada vez que se le llama, avanza 1 fila.

    def getHistPricesNext(self):
        self.current_start_row_index = self.next_future_row_to_deliver_index
        self.next_future_row_to_deliver_index += 1
 
        __df = self.__historical_file.iloc[self.current_start_row_index:self.current_start_row_index + self.number_of_samples]
 
        self.last_closed_row = __df.tail(1)
 
        self.next_two_future_rows_to_deliver = pd.DataFrame( \
            self.__historical_file.iloc[self.current_start_row_index + self.number_of_samples:\
                                        self.next_future_row_to_deliver_index + self.number_of_samples + 1])
        return __df.copy()

Por útlimo, tenemos el método que nos devuelve todos los ticks que se producirán desde el cierre de la última vela de los históricos hasta justo antes de la apertura del siguiente.

   def getRTPricesNext(self):
 
        if self.last_closed_row is None:
            return None
 
        if "EMPTY" in self.__tick_data_files.keys() and self.__historical_file.shape[0]>0:
            del self.__tick_data_files["EMPTY"]
 
        self.min_year = self.last_closed_row.index.year.values[0]
        self.max_year = self.next_two_future_rows_to_deliver.head(1).index.year.values[0]
 
        if self.max_year not in self.__tick_data_files.keys():
            self.__tick_data_files[self.max_year] = \
                pd.read_csv(self.__tick_data_path + "EURUSD_1M_" + str(self.max_year) + ".csv", parse_dates=["date"])
 
            if self.min_year in self.__tick_data_files.keys() and self.min_year != self.max_year:
                del self.__tick_data_files[self.min_year]
 
        initial_date = self.next_two_future_rows_to_deliver.head(1).index.values[0]
        end_date = self.next_two_future_rows_to_deliver.tail(1).index.values[0]
 
        __df = self.__tick_data_files[self.max_year]
        __df = __df[(__df["date"] >= initial_date) & (__df["date"] < end_date)]
 
        return __df.copy()

Estudiando el código anterior se puede hacer una idea de cómo realizar un proveedor de ticks y datos financieros personalizado, así como adaptarlo a las necesidades propias. Una aplicación puede ser un simulador de trading por ejemplo. Yo lo uso para mis proyectos de inteligencia artificial, de manera que no necesito estar conectado a ningún proveedor de precios online para simular series temporales y mercados financieros.

En la siguiente imagen se muestra cómo usar la clase creada con un ejemplo real.

Generador de datos históricos y tick en Python

Y si volvemos a ejecutar los métodos, obtenemos la vela siguiente con sus históricos y los ticks correspondientes.

Si alguien no conoce la librería Pandas y no entiende alguna de las expresiones del código, se pueden consultar en la documentación oficial, en el siguiente enlace: http://pandas.pydata.org/pandas-docs/stable/

Y preguntados:

  • ¿Cómo puede obtenerse algo negociando si no es desarrollando una técnica para acertar las suficientes veces como para cubrir los costes de los fallos?
  • ¿Cómo puede mantenerse un negocio sin conocer el riesgo asociado y una buena gestión financiera y de riesgos conforme?
  • ¿cómo podría un cerebro humano ser mejor calculando aspectos técnicos y numéricos que una compleja computadora?

Cómo cambiar precios de un marco temporal a otro con Python

En esta entrada voy a explicar cómo conseguir precios en formato tick y transformarlos en cualquier otro marco temporal. En concreto, vamos a coger un fichero de precios tick a tick y lo convertiremos en un fichero OHLC de 5 minutos. Podríamos convertirlo en cualquier otro formato, como 10 segundos o 1 día.

No voy a hacer publicidad de programas de software. Hay muchas maneras de conseguir datos. Por ejemplo, podemos exportar de nuestro cliente de trading los datos que va recibiendo del servidor. Pero en este caso, vamos a usar un gran servicio del broker Dukascopy que permite descargar ficheros de datos de múltiples fuentes gratis.

Para descargarlos, hay que ir a la web https://www.dukascopy.com/swiss/spanish/marketwatch/historical/ y elegir un instrumento. Una vez elegido podemos ya seleccionar los datos a descargar. Hay programas que lo hacen de forma automática, solo tienes que buscar en Internet para encontrar alguno gratis, que los hay.

En mi caso, me he descargado todos los datos tick a tick del par de divisas EURUSD entre 2003 y 2019 en formato CSV. Esto son unos 13Gb de tamaño. Las columnas que me interesan son: [«date»,»ask»,»bid»]. El tamaño es inmanejable, así que en principio, para echarle un vistazo, se puede usar la librería de Python llamada daske que tiene una especie de Pandas.DataFrame con algunas de las funciones de pandas y soporta ficheros enormes, distribuidos, etc…

Pero, en general, daske, no me vale para lo que quiero hacer, así que lo que voy a hacer en primer lugar es convertir el fichero único CSV de 13GB en unos más pequeños, porque si no colapsaré la memoria de mi equipo al procesar tanta información.

Pandas puede convertir en trozos un fichero más grande, así que he escrito este código para reducir el tamaño individual de cada archivo en bloques de 5E6 filas:

import pandas as pd
 
def process(chunk,count):
    prefix = chunk.iloc[0].date.split(" ")[0]
    chunk.to_csv(prefix + "_EURUSDTICK_" + str(count) + ".csv",index=False)
 
count=0
chunksize = 5 * 10 ** 6 
for chunk in pd.read_csv(r"./sample_data/TICK_EURUSD.csv",header=-1, chunksize=chunksize):
    count=count+1
    chunk.columns = ["date","ask","bid","volume","zero"]
    chunk=chunk[["date","ask","bid"]]
    process(chunk, count)

Tras el proceso, se me han generado unos 60 ficheros más pequeños.

Aún así, la columna date está en formato texto, tipo «2016.05.01 1:23:04.092», con lo que necesitaré formatearla a un tipo fecha. Para ello, voy a cargar cada uno de los ficheros y le aplicaré una función de conversión en el campo fecha.

afiles = [f for f in os.listdir("./sample_data") if ".csv" in f]
 
for file in afiles:
    print (file)
    df = pd.read_csv(file)
    df["date"]=df["date"].apply(lambda x:datetime.datetime.strptime(x,'%Y.%m.%d %H:%M:%S.%f'))
    df.to_csv(file)

Una vez reescritos o sobreescritos los csv parciales con la columna corregida, pasamos a cambiar el muestreo. Voy a preparar mis datos para convertir los ficheros de ticks en ficheros de 5m.

Como tenemos los precios Ask y Bid, nos interesa tener OHLC con ambos, para determinar cuál es el rango aplicable en compra y cuál en venta. Además, podemos calcular spreads de diferentes maneras. Veamos un ejemplo con uno de los ficheros generados cualquiera. Para que funcione, la columna date la tenemos que convertir en el índice del DataFrame.

processed = "./sample_data/2015.02.05_EURUSDTICK_41.csv"
df = pd.read_csv(processed)
df_5m_ohlc = df[["date","ask","bid"]].set_index("date").resample('5Min').ohlc()

Y tendríamos finalmente ya los datos convertidos de formato tick a format OHLC. Veamos el formato de los ficheros, cómo eran originalmente y cómo quedan al final.

Antes:

Después:

La utilidad de estos procesos es notablemente alta para la simulación de estrategias basadas en análisis técnico, ya que nos permite estudiar el marco temporal de referencia a la vez que generar los ticks, precios y spreads de forma exacta.

Principios de negociación armónica. Desde Leonardo hasta Scott.

Efecto Marea en sesiones de trading

En la entrada titulada «Extensiones de Fibonacci, incertidumbre y refuerzo«, se describe la serie descubierta por Leonardo de Pisa, más conocido por Fibonacci. Pero, ¿por qué estudiar una mera serie exponencial puramente matemática para negociar las variaciones de precios que sufren los activos?

Si vives en Europa y trabajas, tu horario de trabajo coincide con el horario de apertura de los principales mercados financieros. O mejor dicho con el solapamiento de Reino Unido, Europa y Estados Unidos. Si ignoramos los picos de la sesión Asiática, es entre las 10:00AM y las 17:00PM CET cuando vale la pena operar las principales divisas (euro, dólar, yen…). En estos casos, la actividad de trading, si operas intradía, la realizas justo en los horarios de finalización y cierre de los principales mercados financieros; por lo que la mayor parte de la actividad financiera ya ha sido realizada y los operadores se retiran.

A priori se podría pensar que esto supone un estancamiento de las negociaciones y una consolidación de los precios hasta la siguiente sesión, un cese de los movimientos de precios. Pero lo que se observa es que se produce un retroceso de los precios paulatino, continúa la actividad. En términos prácticos, si la tendencia intra-día era ascendente, de repente ésta se invierte muchas veces de forma drástica; por lo que si se opera pensando en términos de tendencia, en estas horas suelen observar movimientos contrarios.

En cuanto a mí, mis estrategias funcionaban como un reloj durante la sesión, pero no eran tan fiables al final de las sesiones, dado que en una hora determinada  el momento se invertía y tenía que replantear toda la estructura de precios e invalidar la preliminar, necesitando cerrar operaciones y abrir nuevas en sentido contrario.

Anteriormente había estudiado y puesto en práctica las obras de L.A. Little sobre la determinación de tendencias y de Bob Volman sobre estructuras de precios; intercambiando incluso algún e-mail con éste último. Por ese motivo, recordando algunas de las referencias de mi amigo y trader Carlos Valverde a Richard Demille Wyckoff, en referencia al perfeccionamiento de la teoría de ondas de Ralph Nelson Elliott; empecé un estudio del sistema de Wickoff. Fuera por su caracterización más categórica, fuera por otro motivo; al igual que me sucedió con la teoría de Elliott cuando estaba en la facultad de Empresariales, no encontré de mi gusto la forma de analizar los mercados. El libro «Trades About to Happen», de David H. Weis sobre el método Wickoff fue el último que leí sobre el tema, el cual por otro lado describía un sistema de trading bastante parecido al que yo ya seguía en ese momento.

Al tener una forma de pensar muy numérica, mis sistemas deben de ser reproducibles mediante codificación algorítmica para que les dé validez. El sistema actual que utilizo tiene menos de un pip de margen de error; esto es, lo cierro si el precio excede en un solo pip mi nivel de entrada. Esto significa que la entrada es extremadamente precisa o se invalida. Veamos un ejemplo:

Compra con stop loss y take profit.

Si quisiera comprar en el nivel de la línea horizontal verde, el stop loss lo pondría donde está la línea roja (justo abajo) y el take profit en un punto superior. En el ejemplo la línea azul. Si no consigo realizar mis operaciones sin que el stop loss no se active, entonces no utilizaría esa técnica hasta perfeccionarla más y poder operar con niveles muy bajos de stop loss.

Análisis armónico de precios

Como comencé a explicar en el artículo mencionado, «Extensiones de Fibonacci, incertidumbre y refuerzo«, las ratios primaras de fibonacci son las siguientes:

  • 1  (\(\frac{N}{N}\) )
  • 0 (\(N-N\) o \(\frac{0}{N}\))
  • 1.618 (\(\phi\) o «ratio de oro»), división de dos números consecutivos de la serie de Fibonacci (\(\frac{N_i}{N_{i-1}}\))
  • 0.618, inversa de \(\phi\), resultado de dividir dos números consecutivos a la inversa (\(\frac{N_{i-1}}{N_i}\)).
  • 0.382 (\(0.618^2\))
  • 0.786 (\(\sqrt{0.618}\))
  • 1.27 (\(\sqrt{1.618}\))
  • 2.24 (\(1.618 + \frac{1}{1.618}\)) o \(\phi +\frac{1}{\phi}\)
  • 2.618 (\(\frac{N_i}{N_{i-2}}\))

Otros números complementarios y auxiliares se utilizan en cáculo armónico, incluyendo:

  • 3.14 o número Pi.
  • 0.5 (\(\frac{N}{2}\)). Nótese que \(\phi +\frac{1}{\phi}\) es equivalente a \(\sqrt{0.5*10}\).

Para aplicar las ratios de Fibonacci y los complementarios necesitamos al menos cuatro puntos al los que llamamos A, B, C y D.

Puntos AB=CD, retroceso y expansión de Fibonacci.

Las ratios se miden en función de la diferencia de precios o alturas de los cuatro puntos entre ellos. Lo importante no es la longitud de las líneas que los unen, sino la diferencia de altura.

En el caso de la imagen anterior, los puntos serían los siguientes:

  • AB = 1 o 100% del intervalo de precios de referencia.
  • AC = 0.618 o un retroceso del 61.8% respecto a la longitud recorrida entre AB.
  • CD = 1 de expansión o una distancia igual a AB que ha sido recorrida desde el punto C hasta el punto D.

Así pues, los números inferiores a 1 son retrocesos y los superiores a 1 son extensiones. Y todas estas ratios hacen referencia a un segmento llamado AB, que representa la altura o diferencia de precios entre un nivel de precios A y otro B.

Este patrón AB = CD, en el que tras un retroceso C, luego se produce una expansión de la misma longitud que el segmento AB es muy frecuente. Existen diferentes formas de determinar cuándo un patrón AB=CD va a comenzar o terminar, no obstante lo importante es entender el concepto subyacente más que cómo asignar correctamente un punto A en una gráfica, cosa que se aprende de forma natural al estudiar gráficas.

Aplicación de la teoría de negociación armónica

De los números de armónicos presentados anteriormente, los más importantes son 0.618, 0.786, 1.27 y 1.618. El resto de números se suelen usar para complementar las extensiones y retrocesos del segmento AB calculados en base a los cuatro números anteriores. Por ejemplo, si la extensión 1.27 de AB coincide con la extensión 2.24 de BC en el punto D, tenemos una confluencia de ratios que otorga mayor significación a ese nivel de precios.

Donde concurren estos niveles se espera que haya reacciones importantes en los precios, en concreto, se estudian los patrones que definen qué niveles de precios van a ser puntos probables de retorno del precio. Dicho de otra manera, se sabe que esos niveles producen que el precio deje de avanzar y retorne hacia su origen cuando llega a los mismos. Este hecho se estudia, determinando qué relación hay entre los segmentos ABCD, y a veces otro principal llamado X; así como otros segmentos secundarios que pueden incluso ser A,B,C,D,a,b,c,d,X, etc…

El punto de partida es comprender que ABCD para AC=0.618 suele corresponder con AD = 1.618 y que AC=0.786 suele corresponder con AD=1.27, por lo que en función de los retrocesos iniciales, las expansiones suelen tener unas magnitudes proporcionales. Retrocesos de tan solo 0.382 suelen corresponderse con expansiones extremas que pueden fácilmente llegar a 2.618 o 3.14.

A efectos prácticos, si entramos en una operación por el motivo que sea y vemos que ese nivel corresponde con un retroceso en el nivel 0.786, es prudente tomar beneficios en el nivel 1.27 como mucho y esperar a ver qué sucede para decidir seguir en el mercado, entrar o salir.

Scott M. Cartney, el negociador armónico

De la decena aproximada de libros que he leído de trading con Fibonacci, sin duda el libro «The Harmonic Trader», escrito por Scott M. Cartney es el punto de partida; incluso el texto suficiente para entender los pormenores de la negociación armónica. Sus otros tres libros de la serie «Harmonic Trading» son más avanzados y no suplen la información de este primero, imprescindible.

El resto de libros que he leído sobre trading de alta probabilidad, trading con Fibonacci no me han valido para nada y por ese motivo desaconsejo la lectura de otros textos sobre este tema, de no ser que se haya antes completado la lectura de la obra de Scott M. Cartney en cuanto a negociación armónica.

Por si queda la duda, la siguiente gráfica de 5 minutos de GBPUSD del viernes pasado ilustra perfectamente los principios mencionados en el artículo.

En primer lugar, los dos retrocesos que sufre el precio mientras desciende, se detienen al llegar al área del 0.618.

Si calculamos las expansiones que sufren los precios tras romper el primer nivel de soportes, calculando el segmento principal XA = 1 y las proyecciones desde C hacia abajo, en relación a la longitud de XA, podemos observar cómo también se respetan los niveles de Fibonacci y cómo se crea un fuerte soporte en el nivel 1.618; tal como era de esperar tras una secuencia de retrocesos hasta 0.618. Además, el nivel D, en el que el precio sufre un brusco retroceso corresponde con la conclusión del patrón XA=CD (equivalente al principio de AB=CD, cuando solo hay 4 puntos).

Como conclusión, la negociación armónica de precios no es sencilla. En este artículo presento principios de la misma, no una estrategia de negociación basada en armónicos. Si ya cuentas con una estrategia propia, el análisis de armónicos puede ayudarte en gran medida para entender cuándo te encuentras en soporte y cuándo te encuentras en resistencia, así como para entender si la oferta o demanda tienen probabilidades de estar exhaustas, en contra de lo que intuitivamente la gráfica de precios o tus indicadores te están mostrando.

La forma de comprender el trading basado en series de Fibonacci es mediante el análisis de patrones armónicos, un tema más avanzado a la vez que imprescindible para poder empezar a aplicar el análisis armónico de precios a una estrategia de trading determinada. En la siguiente imagen se observa la estructura de un patrón tipo Gartley 222, en el cual, si se dan las condiciones favorables y se forma la estructura descrita, se vende en el punto D.

Patrón Gartley 222

Son los patrones los que nos ayudan a interpretar el estado general de la estructura de los precios. En mi caso, la estructura de la sesión diaria, en la de un inversor, la estructura de precios de los últimos años; pues si tienen una cosa es que los patrones técnicos son válidos para cualquier marco temporal. De hecho cuando empecé a practicarlo, lo hice con gráficas de 1 minuto, pues los patrones técnicos son totalmente fractales.

En la imagen siguiente comparto un análisis de armónicos realizados sobre un simulador de trading, que utilizo a menudo, con datos reales de EURUSD.

Análisis de armónicos de precios en EURUSD H1.

Extensiones de Fibonacci, incertidumbre y refuerzo

El efecto de la incertidumbre.

Si hay una sensación frustrante para el trader es lo evasiva que parece la obtención de una ganancia, la sensación de tener ahí mismo la posibilidad de enriquecerse, de estar casi a punto de conseguir un notable beneficio, comprobando una tras otra vez cómo es posible hacerlo; pero sin embargo cuando se está operando, esta ganancia es esquiva, tiene la sensación de que el mercado está contra él. Una y otra vez ve cómo justo después de cerrar una operación que parecía perdedora, el mercado cambia para ver cómo si hubiera esperado un minuto más, se hubiera convertido en una ganancia. O cómo tras cerrar una operación ganadora con un beneficio modesto, el mercado se dispara favorablemente, viendo cómo se ha desvanecido un gran beneficio por haber salido un minuto antes de tiempo.

A veces, el trader simplemente acumula pérdida tras pérdida; frustrado mientras contempla como otros operadores acumulan ganancias semana tras semana. En el lado opuesto, las experiencias derivadas de ganancias excesivamente grandes producen efectos similares a las de pérdidas. En ambos casos, el miedo y el ego desmedido requieren un acondicionamiento posterior para que el trader recupere su capacidad de análisis y gestión.

Si bien, operar con un apalancamiento mínimo es un buen punto de partida para evitar posiciones muy elevadas; la situación más corriente es una mera acumulación de pérdidas crecientes hasta que la cuenta se fulmina, el trader se frustra y finalmente decide dejar de operar y abandona la oportunidad de fraguar una carrera en el mundo de las finanzas.

La incertidumbre es la causa principal de la frustración y del desasosiego del trader. Sin embargo, hay múltiples formas de paliar esta situación, entre otras:

  1. Desarrollar una estrategia probada antes de operar.
  2. Comenzar sin exposición, ir aumentando gradualmente la exposición y el riesgo.
  3. Utilizar herramientas técnicas y datos históricos para reducir la incertidumbre y visualizar múltiples veces los datos para descubrir cada vez más detalles relevantes, oportunidades y riesgos.

Extensiones de Fibonacci

Las series de Fibonacci son series con crecimiento exponencial útiles para la gestión de grandes magnitudes.  Observemos esta gráfica de precios.

SGD/JPY

A las 15:00 el cruce del dólar de Singapur con el Yen japonés comienza un rally de 35 pips que finaliza a las 16:35. Tras el rally, el instrumento prosigue con un período de acumulación de unos 60 minutos. A las 18:00 una vela bajista rompe el soporte del rango de acumulación, que he dibujado en forma de un cuadrado.

Supongamos que tenemos un motivo para pensar que en esta estructura de precios, esa vela roja de las 18:00 supone un signo de entrada de venta en corto. Supongamos que vendemos en ese punto.

¿Qué beneficio mínimo podemos esperar de esa operación? Dejemos el riesgo aparte. Pensemos solo en cuál es el punto de alta probabilidad que nos maximiza la esperanza de beneficio. Dados los miles de distintos marcos temporales en los que la negociación ocurre a lo largo de todo el planeta y dados los millones de operadores, mecánicos y humanos; es razonable pensar que los movimientos de los precios son armónicos. Y dada la cantidad ilimitada de escalas de tiempo y de recursos; también podemos pensar que existe un número exponencialmente creciente de fuerzas que mueven los mercados en cada escala de tiempo y precio. Y que para que haya un equilibrio de mercado, también podemos suponer que existe una relación directa entre el marco temporal y la amplitud de las operaciones que ocurren en dichos marcos temporales.

A partir de estos principios se desarrolló el trading armónico, los patrones armónicos y las herramientas armónicas como los niveles de Fibonacci en trading.

Calculando la sucesión de Fibonacci.

La serie de Fibonacci está definida mediante la siguiente función:

\(F_0=0\)
\(F_1=1\)
\(F_n=F_{n-1} + F_n, \forall n, n>1\)

De esta manera, los primeros números de la serie de Fibonacci son:
\(0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610\)

En trading utilizamos esta serie para aproximar el efecto de la expansión armónica que sufren los cambios en los mercados y para anticiparnos a las mismas. En mi caso es una herramienta auxiliar, muy útil por otro lado cuando la utilizo, aunque lo cierto es que no es mi estrategia general, por cuestión de mis propias preferencias.

Las series de Fibonacci tienen su aplicación con magnitudes relativamente grandes. Con magnitudes menores de 100 tiene poco sentido y aplicación. Tanto de la serie en sí como de ratios generados con los números de la misma, obtenemos coeficientes para aplicar en nuestro trading.

Serie Fibonacci Ratio_1 (Ni/Ni+1) Ratio_2 (Ni/Ni+2) Ratio_3 (Ni/Ni+3)
0 Dividimos cada número por el posterior. Dividimos cada número por el segundo posterior. Dividimos cada número por el tercero posterior.
1 1.0000 0.5000 0.3333
1 0.5000 0.3333 0.2000
2 0.6667 0.4000 0.2500
3 0.6000 0.3750 0.2308
5 0.6250 0.3846 0.2381
8 0.6154 0.3810 0.2353
13 0.6190 0.3824 0.2364
21 0.6176 0.3818 0.2360
34 0.6182 0.3820 0.2361
55 0.6180 0.3819 0.2361
89 0.6181 0.3820 0.2361
144 0.6180 0.3820 0.2361
233 0.6180 0.3820 0.2361
377 0.6180 0.3820 0.2361
610 0.6180 0.3820 N/A
987 0.6180 N/A N/A
1597 N/A N/A N/A

Veamos 4 ratios elementales:

  • 0 o 0%
  • 1 o 100%
  • 0.618 o 61.8%
  • 1.618 o 161.8%

1.1618 se obtiene dividiendo un número de la serie por el número anterior, por ejemplo:
\(377\div233=1.618025751\)

Extensión de Fibonacci del rango.

Usando las ratios y porcentajes indicados, dibujamos una expansión de los movimientos que ocurrieron en el rango marcado:

SGD/JPY. Expansión de Fibonacci sobre rango.

Para ello determinamos la escala que queremos operar. En este caso, la escala del movimiento que va desde el punto 1 al punto 2. Sabemos que hay operadores que vendieron en 1 y que dejaron de hacerlo cuando se llegó al punto 2. Vamos a esperarnos a que vuelvan a vender y captar los beneficios de quienes estén comprando en ese mismo rango.

En el punto 3 observamos que las ventas vuelven a aparecer. De esa manera, marcamos el 3 como el inicio de la expansión, marcando con líneas horizontales cuando el precio avanza 0.618, 1, 1.618 y 0 veces el rango absoluto entre los puntos 1 y 2 (el 0 se da cuando el precio retrocede de nuevo hasta el punto de partida inicial).

Y podemos observar cómo cuando el precio alcanza cada uno de esos niveles de expansión exponencial siempre sucede algo, no es un nivel que el precio suela atravesar a la primera. En esos puntos se concluyen operaciones. Son niveles que nos sirven para poder elaborar estrategias y reducir la incertidumbre de la que hablamos.

Con un estudio sistemático de cientos de gráficas podemos determinar niveles y técnicas de rentabilización de esos niveles.

El Refuerzo

Si tras desarrollar una estrategia, la ponemos en práctica con éxito en simulación, luego en demo y luego en real progresivamente, crearemos un refuerzo positivo; lo suficiente fuerte como para ayudarnos a pensar racionalmente y mantenernos conscientes durante todo el tiempo, adquiriendo madurez y seguridad. Lo suficientemente moderado para no sufrir efectos traumáticos positivos o negativos que nos hagan perder los papeles.

Es importante hacer la transición a mercados reales siempre operando con la cantidad mínima permitida, de forma que perder o ganar no nos afecte financieramente. En Fórex abrir operaciones en M5 de 0.01 lotes supone ganar o perder unos pocos céntimos. Y así, progresivamente, ir aumentando muy despacio las cuantías, semana tras semana hasta la cantidad óptima de nuestra estrategia de riesgo/beneficio.

En inversiones, la estrategia perfectamente definida y seguida a rajatabla, la práctica intensiva y la exposición gradual son elementos necesarios. Y no son los únicos, de hecho.

Trading sin Stop-Loss a pérdida

No hablamos de stop-loss de emergencia

Siempre es necesario establecer un stop-loss de emergencia; un nivel crítico en el que las operaciones se cierren solas en caso de un evento catastrófico. En el momento que perdemos el control de las operaciones y el mercado sufre un shock que nos pueda arruinar, debemos de tener un mecanismo que cierre todo en un nivel aceptable de pérdida.

Las variaciones de precios en mercados financieros no siguen una distribución normal, por lo que los valores atípicos superan con creces las dos desviaciones estándar típicas de VAR. Esto, sumado con que las variaciones extremas suelen agruparse en sucesos consecutivos, requieren sin duda un nivel global de stop-loss con independencia del estado del mercado. Parte fundamental del trading es establecer siempre dicho nivel máximo de pérdida y ajustar el marco temporal y el tamaño de cada posición para que dicho nivel solo se alcance cuando sucedan eventos inesperados que pongan en riesgo la cuenta de trading y las ganancias hasta la fecha.

Así pues, no voy a hablar del necesario estudio y definición de los niveles de riesgo financiero que deben incorporarse a cualquier sistema de trading o negocio, al punto en el que un negocio ruinoso debe clausurarse para evitar que arrastre a toda la empresa consigo.

No hablamos estrictamente de stop-loss a ganancia

Hay otro tipo de stop-loss que resulta muy conveniente y permite asegurar ganancias. Se trata de una técnica complementaria al aumento y descenso incremental del tamaño de la posición.

Existen varias formas de implementar esta estrategia. Una técnica consiste en abrir más de una posición por operación. Se establecen varios niveles de beneficio. Cuando se alcanza el primer nivel, se cierra una de las posiciones y se asigna inmediatamente un stop-loss a las siguientes a nivel del umbral de rentabilidad de cada posición, de manera que si el precio se vuelve en contra, se cierren todas a la vez y la operación tenga un beneficio positivo.

Este tipo de estrategia también es interesante si, por ejemplo, queremos asegurar un ingreso mínimo al inicio de la sesión para que compense pérdidas en operaciones con mayor riesgo conforme avance el día.

Hablamos principalmente del stop-loss a pérdida

Stop-loss a pérdida es un término que se me acaba de ocurrir para nombrar el tipo de stop-loss al que me refiero. Básicamente es aceptar un nivel inicial de stop-loss que acarree una pérdida inferior al nivel de emergencia como resultado posible de una operación.

Es decir, que permitamos que una operación sea cerrada por un único stop-loss en pérdida sin que el motivo sea que ha habido un evento anormal e inesperado que ha superado el nivel máximo de pérdida global que estamos dispuestos a asumir en nuestra cuenta.

Observemos la siguiente gráfica diaria del para euro-dólar.

La operativa tradicional en los libros de trading sería abrir una operación, establecer un nivel de toma de beneficio (take profit) y uno de pérdidas (stop loss). Supongamos que decidimos comprar en el punto 1 y establecer los niveles de TP y SL según el siguiente diagrama:

Al introducir una orden de compra en el momento 1, sucede que el precio empieza a bajar, en vez de a subir como esperábamos. Al llegar al nivel SL antes de que haya alcanzado el nivel predefinido de toma de beneficios (SL), la operación se cierra con una pérdida en el punto 2.

El principio no es malo, como normalmente acertamos más que fallamos, con unos niveles más o menos equivalentes de SL/TP tenemos una ganancia promedio. Si perdemos más que ganamos, tenemos que cambiar las ratios, de manera que el saldo final sea positivo igualmente.

Incorporamos operaciones de cobertura

Las operaciones de cobertura, hedging en inglés, consisten en posiciones únicamente destinadas a reducir el riesgo. Es muy importante entender este concepto: su función es mitigar el riesgo, no producir beneficios.

En contra de la literatura tradicional, yo opino que la diversificación en trading ha de limitarse a lo mínimo. Dos o tres instrumentos no correlacionados deberían de ser más que suficientes para tener una cartera equilibrada para un trader. Incluso, para un especulador, scalper en inglés, no profesional a muy corto plazo opino que un instrumento, dos a lo  sumo, tendrían que ser más que suficientes.

Uno de los motivos es que para poder operar con éxito hay que estar completamente conectado con el mercado y el activo. Tiene que existir una conexión intelectual total con el mercado, de manera que seamos conscientes de todo lo que está ocurriendo. Esto requiere un nivel de concentración, atención y estructuras mentales muy profundos. Algo que no podemos conseguir si vamos cambiando continuamente de instrumento o mercado, si tenemos distracciones ambientales o un mal estado emocional o cansancio mental. Algo imposible si no se tiene, además, la práctica suficiente producto de años de exposición a los mercados. Algo que no se puede obtener en unas pocas semanas, meses o en un entorno no favorable a la concentración total en el trading.

Como peces en el agua

Me gusta plantearme las sesiones de trading como un día en la piscina. Lo primero que hago es ponerme cómodo en todos los sentidos. Si me apetece un té me lo preparo y me lo llevo a la mesa. Si me apetece tener música o una película, me pongo un segundo equipo específicamente para eso. Buena iluminación, habitación bien ventilada. A veces me puede apetecer tener Facebook o la guitarra a mano. Quiero poder hacer todo lo que desee hacer mientras opero y poder decidir no hacerlo por voluntad propia, no porque no me sea posible hacerlo.

Cuando el espacio de trading está preparado, preparo la plataforma de trading, reviso el mercado y me quedo con uno o dos instrumentos para operar con ellos. Normalmente uno solo.

Tras ello empiezo a analizar ese instrumento hasta que consigo vislumbrar perfectamente qué acciones voy a tomar en función de cómo varíe su precio en cada momento. Y cuando el precio alcanza lo niveles adecuados puedo entrar en el mercado sin stop-loss o con stop-loss. Veamos qué sucede cuando no uso stop-loss.

Lo primero es revisar los acontecimientos esperados relevantes dentro del marco temporal en el que voy a operar. Como normalmente opero gráficas de 1, 5 o 15 minutos; cualquier noticia de alto impacto es relevante para mi operativa. Así que para operar precios no puedo tener ninguna noticia pendiente en menos de una o dos horas. Podría operar noticias, pero aquí estamos hablando de operar un instrumento, no una noticia.

Supongamos que entro en largo y el precio va en mi contra. En vez de usar un stop-loss y cerrar con pérdida, planteo la operación como una operación en la que tengo que ganar sin importar adónde vaya el precio. Esto suena bastante bien y no sin motivo. Existe un 100% de posibilidades de que el precio vaya en la dirección en la que me he planteado ganar.

La filosofía del stop-loss es que mi operación es ganadora si el precio va en una dirección y pierde si va en la otra. En un evento aleatorio esto es que tengo un 50% de posibilidades de acertar. Pero si uso mi nueva estrategia, mis aspiraciones son tener un 100% de probabilidad de ganar; que por mucho que me aleje de dicha probabilidad, siempre es mejor que partir del 50% y alejarme lo mismo.

En trading existe el concepto de ventaja, edge en inglés. Es similar a la ventaja en una carrera. Gana el que aventaja al resto aunque sea por una décima de segundo. Cuando elaboramos sistemas intentamos encontrar una ventaja para explotarla. En un nivel superior de ejecución, la técnica y el método tienen que dejar paso al concepto, a la realización en la que el cuerpo y la mente se adaptan automáticamente al entorno sin una técnica exacta predefinida e inmutable derivada de un proceso activamente analítico.

En las artes marciales chinas esta filosofía es muy evidente. Nombres como «El Rey del Cielo Sostiene la Pagoda» definen técnicas de lucha concretas. Mucho más directo, en el estilo Wing Chun se aprende desde la primera forma Siu Nim Tao (pequeña ideaque los fundamentos del kung-fu según ese estilo son, entre otros movimientos defensivos taan-sao, fuk-sao, bong-sao  u ofensivos como Jung Kuen.

Lo relevante es que más importante que esos movimientos está la idea de línea central, de manera que el luchador puede iniciar un movimiento de brazo ofensivo tipo Jung Kuen (un puñetazo directo), el cual se transforma de forma natural en un movimiento defensivo como bong-sao si el oponente de defiende.

El Gran Maestro Yip Man ejecutando puñetazo y bloqueo.

El practicante lanza puñetazo directo (foto izquierda)  y lo transorma en técnica defensiva (foto derecha) para contrarrestar acción ofensiva de su oponente. Todo ocurre en décimas de segundo en las cuales, de forma intuitiva, el luchador se adapta automáticamente a la situación.

Análogamente, el trading requiere ese tipo de evolución y preparación, donde estamos alineados con el mercado. En la cultura china el Ying y el Yang no existen por contraposición, sino que coexisten en un equilibrio. Igualmente la idea de cobertura implica la coexistencia de fuerzas ascendentes y descendentes en el mercado, no excluyentes unas de otras; de manera que si el trader está inmerso en el mercado puede aprovechar todas para avanzar al igual que un barco de vela aprovecha el viento ajustando las velas según cambia el mismo.

Cobertura de riesgo

Si operamos con cobertura, cuando una operación sale mal nuestra aspiración ya no será cerrarla con un stop-loss aunque no estemos en una situación de emergencia, sino de reducir el riesgo y la pérdida asociados a la misma, a ser posible a cero. Asimismo nos mantendremos centrados en el mercado para aprovechar al máximo las oportunidades que ofrece.

Revisemos la operación anterior con cobertura de riesgo.

Abrimos orden de compra en punto 1.oc, tras lo que vemos que el precio no va hacia donde pensábamos. En el punto 2.ov detectamos que el precio no va a seguir hacia nuestro nivel de TP (la línea verde), entonces vendemos 1.5 veces la cantidad con la que entramos la orden de compra. Para poder hacer esto no entramos con una posición total en 1.0c, sino con 1/4 de la posición que usábamos cuando hacíamos stop-loss.

En el nivel 2.c, la venta tiene un beneficio del doble de la pérdida que soportamos por la compra en 1.oc. Además es un nivel de toma de beneficios para la venta que realizamos, así que cerramos la operación de cobertura. Aunque cerráramos la operación con la compra en negativo, al haber ingresado ya el doble de lo que llevamos de pérdida, el saldo sería positivo en este nivel tan bajo. Lo haríamos si no viéramos posibilidades de que el precio suba, pero supongamos que sí las vemos en este caso.

Decidimos no incrementar la posición aunque pensamos que el precio va a subir. Podríamos incrementar la posición ya que nuestro tamaño es 1/4 de lo que estamos dispuestos a operar en una sola operación. Para simplificar no lo hacemos.

Tras el cierre de 2.c, el precio va subiendo hasta nuestro nivel de beneficio y cerramos con el beneficio esperado más el importe de la cobertura en el mejor escenario posible.

A nivel psicológico y emocional, una vez adquiridas las destrezas para operar con cobertura, en mi opinión es positivo considerar la opción siempre que sea posible, pues no tiene solo un efecto positivo financieramente, sino que nos mantiene más inmersos en el mercado y requiere que comprendamos mejor su funcionamiento.

El uso de stop-loss también tiene la ventaja de ser más simple y obligarnos a buscar los mejores niveles de precio posibles, mientras que la estrategia de cobertura asume que no hay entrada óptima, sino gestión de la operación óptima. En función de la volatilidad y estabilidad del mercado un stop-loss puede ser más peligroso que una cobertura también en tanto que sea más o menos fácil asegurarnos cuáles van a ser los niveles de oscilación de los precios.

Pero, como hemos visto, hay siempre que darle la vuelta a todos los conceptos y buscar la ventaja yendo un poco más allá de los límites establecidos y conocidos.

Una Lección de Trading con Fibonacci

Al menos que yo sepa, no existe en todas las publicaciones que hay en lengua española algo similar a lo que voy a explicar en esta entrada. He empezado enfocando el artículo hacia Fibonacci, pero podría tener cualquier otro enfoque para explicar lo mismo.

Cuando ofreces algo de forma gratuita siempre se desprecia. A las pocas personas a las que les he explicado gratis este asunto no les ha calado, pero supongo que eso también es porque el receptor de esa información no estaba listo para recibirla en ese momento. Luego miramos atrás y nos damos cuenta lo cerca que estuvimos y cómo no lo vimos.

El trading con fibonacci es parte del trading armónico o trading fractal. Yo suelo llamarle trading fractal porque engloba no solo la parte de la armónicos, sino también su propagación en múltiples escalas.

La mayoría de traders que yo conozco no saben hacer trading puramente técnico porque son incapaces de hacerlo en frecuencias temporales de pocos minutos. Existe un límite temporal, pero no está definido en sí por la escala de tiempo, sino por la liquidez instantánea de un mercado. No puedes comprar o vender más de lo que la oferta y la demanda en un momento dado te permiten, nada más.

Hablo, claro, sin tener en cuenta el precio de las operaciones que en mercados donde se negocia la volatilidad, como la bolsa o el mercado de divisas, es necesario operar una volatilidad que dé un rendimiento superior al coste de la operación más el diferencial que haya entre precio de venta y de compra.

El mercado que yo opero, Forex, empieza a ser rentable desde las gráficas de 1 minuto, aunque es mejor operar a partir de 5 minutos como mínimo para reducir la proporción coste-beneficio a un nivel más razonable. Cuando opero opciones binarias no me importa el margen temporal, pues la volatilidad ya no es un factor a tener en cuenta. No obstante, actualmente el mercado de binarias es demasiado complejo como para que sea atractivo, por lo que me voy a centrar exclusivamente en Forex.

Lo primero que vamos a hacer es localizar una vela que tenga un tamaño superior al de las velas próximas. Usaré cualquier par de Forex en cualquier marco temporal en tanto que la acción del precio sea favorable para operar. En general, cuando hay velas consecutivas del mismo tipo (bajistas o alcistas) se han de considerar como un solo movimiento, por lo que no se operarán de forma individual, sino en conjunto. Esto influye en el tiempo esperado para que la operación concluya. Por ejemplo, si operamos un grupo de 4 velas bajistas consecutivas de 5 minutos, estamos operando realmente en el marco temporal de 20 minutos. Si fueran 5 velas diarias, en el marco temporal de 1 semana. Si operamos la gráfica de 70 ticks pues lo mismo, ya que estas técnicas son universales en cuanto a tipo de gráficas y marcos temporales. Es pues crucial determinar bien el setup o estructura de precios que vamos a negociar para estimar el tiempo aproximado de finalización y la volatilidad que vamos a soportar.

Operar Fibonacci por niveles es una lotería. Así que vamos a buscar algo más. Nos vamos a centrar en los niveles 62,8 y 50. Y vamos a mirar al pasado reciente para comprobar si en alguno de esos niveles, el precio reaccionó de forma notable.

Si el precio, en general, iba como Pepe por su casa en un nivel determinado, entonces lo vamos a ignorar, pero si vemos que el precio era rechazado y obligado a volver en dirección contraria habitualmente, entonces lo consideraremos un punto de entrada de alta probabilidad. Ésa es la diferencia entre operar como si jugáramos a la ruleta rusa o como si fuéramos traders de verdad.

Es importante no operar durante la emisión de noticias macroeconómicas porque esta técnica no funciona entre los minutos previos y posteriores a las mismas. También es recomendable usar niveles de stop loss para salir de las operaciones si hemos calculado mal la entrada, pues no hacerlo puede producir un nivel de pérdida importante o incluso la bancarrota en una sola operación.

A continuación voy a lanzar mi plataforma de trading y a capturar una o dos operaciones como ejemplo. Invito a quien lea este artículo a que realice este ejercicio con datos históricos y revise muchas gráficas hasta que dé con las mejores condiciones para aplicarlo. El uso de niveles de Fibonacci, así como del de Ichimuko son realmente muletas temporales hasta que uno empieza a entender el mercado, momento en el cual ya no son necesarios nunca más.

En la imagen siguiente, he marcado algunos niveles donde existe una notable resistencia a que el precio traspase dichas líneas.

Estos niveles son buenos candidatos para operar Fibonacci al haber sido puntos de inflexión en el pasado.

Vamos a centrar ahora mismo la operación a una vela solo. Para ello tenemos que trazar el nivel de Fibonacci adecuado. Si miramos la gráfica, la última vela cerrada es verde, pero tiene una mecha bastante larga arriba, por lo que el precio podemos decir que ha sido rechazado desde ese nivel.

Pues bien, voy a trazar los niveles tomando como referencia la vela que considere que es la que está proporcionando el momento al precio actual. En este caso, considero que el precio está reaccionando a una resistencia, por lo que el momento es bajista, así que voy a buscar el rango bajista en el que debería de operar.

Al estar reaccionando el precio de arria hacia abajo, la acción es sobre una resistencia, por lo que tenemos que reflejar el momento bajista y sus niveles.

Ante la típica pregunta de cómo definir los niveles de Fibonacci, cualquier rango es válido, así que marco uno que considero que puede resolverse en una magnitud de tiempo del orden de la unidad de vela, es decir por debajo de 10 veces ese orden por decir algo.

Veamos desde más cerca la situación:

La acción del precio muestra cómo la vela ha rebotado en el nivel 38.2 hasta por debajo del 23.6. La resistencia más cercana es el nivel 23.6 y el soporte más cercano el 0%.

Dado que el precio ya ha testeado el nivel 38.2 de Fibonacci, es de esperar a que, si estamos operando a la baja, el siguiente máximo sea más bajo que el anterior y el siguiente mínimo también lo sea. Así que vamos a entrar cerca del nivel 23.6 y salir cerca del siguiente nivel inferior de Fibonacci, el 0%.

Aunque es probable que se vuelva a testear el nivel 23.6, ya que este tutorial es estático, voy a introducir una orden de venta en el sistema y ver qué sucede. Ahora mismo ignoro qué sucederá, por lo que es posible que tenga que ampliar el artículo si el precio rompe el SL.

Como el precio sigue en resistencia, vendemos a pesar de que puede subir un poco aún antes de bajar hasta el siguiente soporte.

La venta está ya abierta, el SL está situado por encima del nivel máximo que debería de servir de resistencia actual. Si el precio sobrepasa dicho nivel es que la estructura sobre la que operamos no se estaba desarrollando en este momento y debemos salir inmediatamente.

La reacción del precio parece favorable, al estar formándose una resistencia en el nivel de Fibonacci.

Observamos cómo el precio, en efecto sube hasta el nivel 23.6 y empieza a completar el momento bajista. No hay que esperar hasta justo el nivel exacto de salida, es mejor salir unos pips por arriba para asegurarse la operación. Esperaremos a que baje un poco más para salir. En este caso, dado que estoy escribiendo un tutorial, salgo cuando el precio ha recorrido más del 80%-90% del rango. Es muy posible que complete en una o dos velas máximo el nivel, pero no quiero arriesgarme y tener que alargar innecesariamente el artículo; pues es mucho más claro explicar cómo operar en una vela que interpretar subsiguientes reacciones del precio.

Ya casi en el nivel 0 de Fibonacci, cerramos la venta tras haber el precio recorrido un nivel casi por completo.

Siempre es bueno asegurar beneficios conforme se opera, pues el tiempo necesario que puede suponer no cerrar un poco antes puede ser mucho mayor que el porcentaje de beneficio a recibir a cambio de dicha espera. En este caso, la vela finalmente cerró en contra de la operación, por lo que al haber cerrado un poco antes nos salvó de una situación bastante comprometida.

La vela cerró con un patrón alcista, por lo que el momento ha cambiado de repente y ahora es incierto cuándo el momento bajista se retomará.

Como conclusión, decir que el trading no es tan obvio como a veces se explica, pero que siempre es lógico y sus principios son claros y sencillos de entender.

En este ejercicio se detalla con bastante precisión la motivación detrás de cada paso dado para definir una estructura de negociación, el retroceso de Fibonacci, y cómo se opera para asegurar siempre la negociación dentro de los máximos niveles de probabilidad posibles mediante la búsqueda de una serie de convergencias técnicas.

El autor de este artículo ofrece a quien lo desee tutoriales de trading privados en primera persona bajo presupuesto o por horas sueltas. El coste aproximado para cubrir la materia y entender los puntos básicos rondaría los 12,000€ (doce mil) dadas dos semanas de sesiones de unas 5 horas cada día para una persona ya iniciada en el análisis técnico.

Si tienes interés por aprender más sobre el mismo, puedes enviar un mensaje mediante el formulario de contacto o dejar un comentario. Como el trading no es adecuado para la mayoría de personas, solo se atiende a solicitantes que tengan un nivel de conocimientos o experiencia equivalentes a un grado en Administración de Empresas, Medicina, Filosofía o Magisterio y excelente gramática. No se requiere titulación, solo es un nivel cultural y capacidades de aprendizaje y comprensión de referencia. Si tienes un nivel equivalente pero con muy buen expediente en Psicología, Ingeniería Superior, Matemáticas, Física, Estadística o similar tienes más bastantes posibilidades que el resto.

En cualquier caso, las probabilidades de aprender con éxito trading son inferiores al 10%-20% en promedio, conllevan del orden de un año de preparación casi en solitario y suponen una inversión de tiempo y dinero notables. Los resultados dependen en gran medida del individuo y de su buena gestión monetaria y psicológica.