English Русский 中文 Deutsch 日本語 Português 한국어 Français Italiano Türkçe
Matemáticas del mercado: beneficios, pérdidas, costes

Matemáticas del mercado: beneficios, pérdidas, costes

MetaTrader 5Ejemplos | 23 noviembre 2022, 17:13
704 0
Evgeniy Ilin
Evgeniy Ilin

Apartados

Introducción

Durante mucho tiempo, al trabajar con asesores, intentaba no prestar atención a lo que indicaban los valores en los cálculos de pérdidas y beneficio. Lo importante en este punto es que, para escribir asesores, no es obligatorio profundizar al máximo en la esencia de la cuestión. ¿Y por qué hacerlo cuando MQL5 e incluso MQL4 ya contienen toda la funcionalidad necesaria para los cálculos? En realidad, la pregunta es retórica. No obstante, tras cierto tiempo y después de recorrer un determinado camino, surgen inevitablemente preguntas, porque comenzamos a notar detalles que antes nos parecían irrelevantes. Y eso implica inevitablemente darse cuenta de que, en cierta forma, estamos actuando a ciegas. Esta es una cara de la moneda. La otra cara de la moneda es el hecho de que, después de interesarme por el tema y empezar a buscar información en Internet, si encontraba algo en la red, era, en primer lugar, algo aislado y sin estructura, y en segundo lugar, sentía que no contenía más del veinte por ciento de la información que me gustaría obtener. Tras considerar todo esto, decidí corregir la falta. La lectura del presente artículo permitirá al lector acceder a un modelo matemático completo y funcional, así como aprender a entender y calcular correctamente todo lo relacionado con las órdenes.

Fórmulas para calcular el beneficio o las pérdidas de las órdenes

Para construir un buen sistema comercial, primero deberemos entender cómo se calcula el beneficio o las pérdidas de cada orden. Casi todo el mundo está familiarizado con estos factores, porque hay que gestionar el dinero de alguna manera. Algunos lo hacen a tientas, otros a ojo, pero en casi todos los asesores se implementa el cálculo adecuado de todos los valores necesarios.

Aquí debemos señalar que escribir asesores disciplina nuestro pensamiento y nos obliga a averiguar qué se calcula y cómo se calcula, y eso no tiene precio. Ahora vayamos al grano. Merece la pena comenzar con la idea más simple: cómo se calcula el beneficio de una orden. Personalmente, siempre he sabido que el cálculo del beneficio es bastante complejo en su esencia, pero se construye sobre la base de algunas consideraciones sencillas. Para entender esto con mayor facilidad, deberemos aceptar que el spread no existe, al igual que el swap o las comisiones, y creo que, de entrada, mucha gente ni siquiera tiene en cuenta estos valores. Obviamente, MQL5 incorpora funciones como OrderCalcProfit y posiblemente otras, pero en este artículo queremos repasar lo básico para que todos puedan entender qué se calcula y cómo se calcula. Semejante meticulosidad puede resultar desconcertante, pero es un error fatal que cometen muchos tráders al no prestar atención a cosas como el spread, la comisión y el swap. Cada uno de estos valores influye en el beneficio o las pérdidas de forma diferente. En nuestros cálculos, tendremos en cuenta todo y mostraremos cómo pequeñas cosas como ésta pueden servirnos de ayuda. Beneficio y pérdidas de las órdenes, excluyendo los spreads, las comisiones y los swaps:

  • PrBuy = Lot * TickValue * [ ( PE - PS )/Point ] — beneficio para una orden de compra
  • PrSell = Lot * TickValue * [ ( PS - PE )/Point ] — beneficio para una orden de venta
  • Point — tamaño del cambio de precio mínimo posible en el instrumento seleccionado
  • TickValue — valor del beneficio para una posición rentable en un movimiento de precio de "1" Point
  • PE — precio de cierre de una transacción (Bid)
  • PS — precio de apertura de una transacción (Bid)

Valores como Point y TickValue se definen en MQL5 como variables predefinidas o están disponibles como parte de la funcionalidad incorporada retornada por funciones como SymbolInfoDouble y otras similares. En general, el lector deberá acostumbrarse a que en mis artículos me referiré a MQL5 de una u otra forma, porque analizando cómo está construido MQL5, o al menos algunas de sus funciones, podremos llegar al fondo del asunto y aprender algo que eventualmente nos ayudará a profundizar en el tema.

Ahora, le propongo ampliar un poco nuestra comprensión de esta fórmula. Como ya sabrá, al abrir una orden Buy, esta se abre al precio Ask, mientras que al abrir una orden Sell, esta se abre al precio Bid. Y viceversa: al cerrar una orden Buy, esta se cierra al precio Bid, mientras que al cerrar una orden Sell, esta se cierra al precio Ask. Vamos a reescribir las fórmulas para reflejar las nuevas correcciones:

  • PrBuy = Lot * TickValue * [ ( Bid2 – Ask1 )/Point ] — beneficio para una orden de compra
  • PrSell = Lot * TickValue * [ ( Bid1 – Ask2 )/Point ] — beneficio para una orden de venta
  • Bid1 — precio de apertura de una transacción Sell
  • Ask1 — precio de apertura de una transacción Buy
  • Bid2 — precio de cierre de una transacción Buy
  • Ask2 — precio de cierre de una transacción Sell

Creo que será más cómodo ofrecer un recorte de las especificaciones que contenga la mayoría de los datos que necesitaremos más adelante:

required data

Estos son algunos de los datos que necesitaremos para los cálculos. El resto de los datos se podrán obtener utilizando las diversas funciones incorporadas en MQL5. Como ejemplo, usaremos USDJPY. Claro que no necesitaremos obligatoriamente las especificaciones para escribir código, pero entender dónde se muestran estos datos nos será muy útil.

Vayamos a pasar a la comisión. La comisión de las órdenes puede calcularse de varias maneras, pero todas las formas principales se reducen a un porcentaje de los lotes con los que comerciamos. Existen otras formas de cargar comisiones a las transacciones, pero no las discutiremos aquí, no las necesitamos. Vamos a ver dos posibles escenarios para el cálculo de esta comisión: será más que suficiente. Si tomamos como base el swap, podemos aprender de los ejemplos de swap otro método común de cálculo que también puede aplicarse a la comisión: en puntos.

En consecuencia, con la comisión y con el swap tendremos dos métodos aparentemente diferentes, pero como veremos, estos métodos son simplemente una forma cómoda de percibir el mismo método de "imposición", incluyendo el spread. Vamos a escribir dos fórmulas para calcular la comisión:

  1. Comission = Lot * TickValue * ComissionPoints
  2. Comission = Lot * ContractSize * BidAlpha * ComissionPercent/100

Aquí vemos que aparece la nueva magnitud "ContractSize", que también está implementada en MQL5 como una función incorporada que recibe información del servidor comercial. Este valor es uno de los más importantes y se encuentra en absolutamente todos los cálculos de pérdidas y beneficio, aunque de forma implícita, para simplificar los cálculos al programador. Podemos ver la validez de dichas simplificaciones desde el punto de vista del trabajo de un programador, pero en nuestro caso, analizaremos el qué, el dónde y el por qué. Veremos el porqué de esta necesidad al final del artículo. Además, hemos introducido una variable adicional, BidAlpha, cuyo significado también explicaremos un poco más tarde. Asimismo, aparecerán los siguientes valores, que se indican en las especificaciones de la herramienta:

  • ComissionPoints – comisión en puntos
  • ComissionPercent – comisión como porcentaje del tamaño del contrato
El multiplicador BidAlpha será necesario para convertir el swap en unidades de la divisa básica en el swap en unidades de nuestro balance. Aquí tenemos cuatro escenarios:
  1. BidAlpha = 1 (en caso de que la divisa básica sea la misma que la divisa del depósito)
  2. BidAlpha = Bid (del instrumento seleccionado)
  3. BidAlpha = Bid (del tipo de cambio correspondiente, donde la divisa básica del instrumento seleccionado es la misma que la del instrumento de transición y la segunda divisa es la misma que la divisa de depósito)
  4. BidAlpha = 1/Ask (el tipo de cambio correspondiente cuando la divisa básica del instrumento seleccionado es la misma que la segunda divisa del instrumento de transición y la divisa básica es la misma que nuestra divisa de depósito)

De hecho, si el tamaño del contrato se aplica a una pareja como USDCHF, está claro que la divisa básica de la pareja seleccionada será USD. Supongamos que tenemos un depósito en USD, entonces la divisa convertible se convierte en USDUSD y por lo tanto su tipo de cambio será siempre igual a uno. El segundo caso es aún más sencillo. Por ejemplo, tenemos EURUSD, que es también el tipo de conversión, por lo que su Bid será el valor que estamos buscando. El tercer caso podría ser como sigue. Nuestra divisa, por ejemplo, es EURNZD. Entonces resulta que tenemos que encontrar el tipo de conversión de EUR y USD. Este tipo de cambio EURUSD, y el Bid de este tipo de cambio, es lo que necesitamos. En el cuarto caso, las cosas resultan un poco más complicadas. Por ejemplo, hemos elegido el instrumento CHFJPY. Está claro que la pareja de transición es USDCHF, ya que CHFUSD no está en el mercado de divisas. Obviamente, podemos crear nuestra propia herramienta sintética y trabajar con CHFUSD, entonces podremos utilizar la opción anterior. Pero lo que realmente debemos hacer es simplemente invertir este instrumento, entonces su tipo de cambio se convertirá en "1/Ask" del incómodo tipo actual. En esencia, con esta acción estamos creando esta herramienta sintética, solo que sin enfatizarla. Si hoy vamos a abordar este tipo de material, debemos explicarlo antes de principio a fin. Lo mismo se aplica a los swaps. Hay más preguntas que se puede hacer nuestro cerebro. Por ejemplo, ¿qué tipo de cambio deberemos utilizar en la divisa de transición, Bid, Ask o, a pesar de todo, Mid? Dentro del presente enfoque, esta es una cuestión irresoluble. Poco a poco, a medida que desarrollemos la idea, daremos con el enfoque adecuado y rellenaremos todos los espacios en blanco. Ahora vamos a definir, al menos de forma superficial, el marco de las mejoras. Para ello, deberemos escribir al menos una primera aproximación de la fórmula general de pérdidas y beneficio, teniendo en cuenta todas las opciones de "imposición" como el spread, el swap, la comisión.

Para calcular los swaps, obtendremos fórmulas similares:

  1. Swap = Lot * TickValue * SwapPoints * SwapCount(StartTime,EndTime)
  2. Swap = Lot * ContractSize * BidAlpha * SwapPercent/100 * SwapCount(StartTime,EndTime)

Las fórmulas son muy similares. La única diferencia es la presencia de un multiplicador como función SwapCount. Esperamos que el lector nos permita cierta libertad terminológica. Decimos «función» porque los swaps no se cobran inmediatamente y el importe depende de cuándo se abra y se cierre la orden. Obviamente, en una aproximación bastante basta, podríamos escribir lo siguiente en lugar de este multiplicador:

  • SimpleCount = MathFloor( (EndTime -StartTime) / ( 24 * 60 * 60 ) )

Si asumimos que EndTime y StartTime son del tipo datetime, entonces su diferencia será igual al número de segundos entre los puntos de apertura y cierre de la orden. El swap se cobra una vez al día, por lo que bastará con dividir esta cantidad por el número de segundos en un periodo de 24 horas. De esta forma, podremos obtener una primera impresión sobre cómo evaluar el swap de las posiciones. Aunque, obviamente, esta fórmula es errónea, estrictamente hablando, responde a la pregunta sobre qué es esta función y qué retorna, y puede ofrecer al menos una idea de cómo se calcula el swap (al menos aproximadamente). La función retorna el importe de los swaps cobrados durante la vida de la posición. Del mismo modo, la comisión en las especificaciones será uno de los dos valores posibles para el swap, con la indicación obligatoria del método de cálculo:

  • SwapPoints – swap por un rollover durante la noche en puntos
  • SwapPercent – swap por un rollover como porcentaje del tamaño del contrato

Mientras que en el caso de la comisión, las fórmulas resultan más sencillas y no requieren elaboración, en el caso del swap, las cosas son mucho más complicadas. Hablaremos de las sutilezas y matices de estas simplificaciones más adelante. En primer lugar, vamos a ofrecer a las fórmulas de pérdidas y beneficio, excluyendo las comisiones y los swaps, un aspecto más normal:

  • PrBuy = Lot * TickValue * [ ( Bid2 – (Bid1+S1*Point) )/Point ] — beneficio de la orden de compra
  • PrSell = Lot * TickValue * [ ( Bid1 – (Bid2+S2*Point) )/Point ] — beneficio de la orden de venta
  • S1 — spread al abrir una orden de compra
  • S2 — spread al cerrar una orden de venta

Queda claro que Ask incluye tanto el spread como el Bid. Vamos a separar el beneficio o las pérdidas de la orden derivados del spread, como un sumando separado:

  • PrBuy = Lot * TickValue * [ ( Bid2 – Bid1)/Point ] + ( - Lot * TickValue * S1 ) — beneficio de la orden de compra
  • PrSell = Lot * TickValue * [ ( Bid1 – Bid2)/Point ] + ( - Lot * TickValue * S2 ) — beneficio de la orden de venta

Podemos ver que en ambas fórmulas se ha separado un sumando, que es la parte que nos cobra el bróker. Obviamente, no se trata de la cantidad total, pero al menos ahora podemos ver con mayor claridad lo que estamos obteniendo y lo que se lleva el bróker. Nótese que en el primer caso, nuestro "impuesto" sobre el spread depende solo del valor del spread cuando abrimos una posición "Buy", y en el segundo, cuando cerramos una posición "Sell". Resulta que estamos dando al bróker parte de nuestro beneficio, representado por el spread, siempre justo en el momento de la compra. De hecho, si profundizamos en el proceso comercial de Fórex, quedará claro que la apertura de una posición Buy y el cierre de una posición Sell son equivalentes, como confirman nuestras fórmulas. En este caso:

  • S1 — spread en puntos al abrir cualquier posición
  • S2 — spread en puntos al cerrar cualquier posición

Estos valores son justamente los números que podemos ver en la ventana de Observación de Mercado si deseamos visualizar el spread. La función SymbolInfoInteger correspondiente en MQL5 retorna exactamente los mismos valores con los parámetros de entrada correspondientes, que no vamos a describir aquí, porque todos ellos se pueden encontrar en la guía de ayuda de MQL5. En la guía de ayuda podrá encontrar ejemplos, así como todo lo necesario. En este caso, nuestro cometido es crear un modelo de cálculo matemático cómodo y vinculado al lenguaje MQL5, para que las fórmulas mencionadas puedan ser codificadas directamente en cualquier asesor experto o cualquier otro código MQL5 útil. Vamos a escribir nuestra suma, que ahora se parecerá tanto a un swap, como a una comisión:

  • SpreadBuy = - Lot * TickValue * S1
  • SpreadSell = - Lot * TickValue * S2

El spread en la apertura y el cierre

Para respetar el funcionamiento clásico, el spread se calcula en el punto de acción Buy, pero ahora le mostraremos por qué esto es incorrecto. Tras realizar muchos estudios del mercado, el punto de movimiento de precios más predecible también resultó ser "0:00". Este es el punto de transición de un día a otro. Si observamos este punto con atención, veremos más o menos lo mismo en todas las parejas de divisas: un salto a la baja del tipo de cambio. Este salto se debe al aumento del spread en este punto. A dicho salto, le sigue otro igual. ¿Qué es el spread? El spread es la diferencia entre Bid y Ask. Este desfase, según la visión clásica, es consecuencia de la profundidad de mercado. Si la profundidad de mercado está saturada de órdenes límite, el spread tenderá a cero, y si los jugadores abandonan el mercado, el spread aumentará. Podríamos llamar a esto la «desintegración» de la profundidad de mercado. Incluso desde la primera impresión, podemos decir que Bid no es lo principal. Resulta que Ask y Bid son iguales en su base. Esto resulta fácil de entender si, por ejemplo, a partir de "EURUSD" podemos construir un instrumento espejo USDEUR, y entonces Bid se convertirá en Ask, y viceversa, Ask se convertirá en Bid. En pocas palabras, simplemente le daremos la vuelta a la profundidad de mercado.

Normalmente, la línea de Ask no se muestra en el gráfico, pero sería conveniente hacerlo:

bid & ask

Podemos observar que, a medida que aumenta el periodo del gráfico, Bid y Ask comienzan a fusionarse. Tal vez partiendo de estas consideraciones, ningún terminal muestra ambas líneas, aunque, a mi juicio personal, es una opción necesaria. Sin embargo, saber que estos valores existen y que difieren del gráfico en general no resulta tan importante, porque estas cosas todavía se pueden utilizar en un asesor. Aquí no hemos dibujado Mid, pero seguramente todo el mundo se dará cuenta de que esta línea se encuentra exactamente a medio camino entre Bid y Ask. Está claro que, para periodos altos, la diferencia de estos valores resulta prácticamente irrelevante, y ni siquiera será necesario considerar la presencia de Ask, pero de hecho lo es. Estos detalles son esenciales.

Teniendo en cuenta estas consideraciones, ahora podemos asegurar con absoluta certeza que el centro de la profundidad de mercado supone una invariante al darse tales transformaciones. Este valor puede calcularse como vemos a continuación:

  • Mid = (Ask + Bid) / 2

Dada tal representación, usando la última fórmula, podemos entender que:

  • Bid = Mid * 2 – Ask
  • Ask = Mid * 2 - Bid

Y así sucesivamente:

  • Bid = Mid * 2 – (Bid + S*Point) = Mid – (S*Point)/2
  • Ask = Mid * 2 – (Ask - S*Point) = Mid + (S*Point)/2

Ahora podemos sustituir estas expresiones en las fórmulas originales para calcular el beneficio o las pérdidas de las órdenes. Era importante conseguir estas expresiones exactas, porque queremos mostrarle algo que no ha entendido antes. Resulta que lo que un bróker le cobra en realidad depende no solo del punto de compra, sino de los puntos de entrada y salida, de cualquier posición. Vamos a ver ya en qué se convierten nuestras fórmulas cuando insertamos las nuevas definiciones ampliadas. Tras realizar las inserciones correspondientes, todo esto se convertirá en lo siguiente:

  • PrBuy = Lot * TickValue * [ ( (Mid2 – (S2*Point)/2) – (Mid1 + (S1*Point)/2) ) )/Point ]
  • PrSell = Lot * TickValue * [ ( (Mid1 – (S1*Point)/2) – (Mid2 + (S2*Point)/2) ) )/Point ]

Después de efectuar las conversiones oportunas, veremos que:

  • PrBuy = Lot * TickValue * [ (Mid2 – Mid1)/Point ] - Lot * TickValue * (  S1/2 + S2/2  )
  • PrSell = Lot * TickValue * [ (Mid1 – Mid2)/Point ] - Lot * TickValue * (  S1/2 + S2/2  )

Teniendo en cuenta, por supuesto, que:

  • Bid1 = Mid1 – (S1*Point)/2
  • Bid2 = Mid2 – (S2*Point)/2
  • Ask1 = Mid1 + (S1*Point)/2
  • Ask2 = Mid2 + (S2*Point)/2

Y, por supuesto, comprendiendo que:

  • Mid1 es el centro de la profundidad de mercado en la apertura de cualquier posición
  • Mid2 es el centro de la profundidad de mercado al cerrar cualquier posición

Por comodidad, marcaremos el sumando negativo, que representa las pérdidas de los spreads, como sigue:

  • Spread = -Lot * TickValue * (  (S1*Point)/2 + (S2*Point)/2  )

El sumando, que representa el beneficio o las pérdidas excluyendo el spread, la comisión del swap, por ejemplo, será el siguiente:

  • ProfitIdealBuy = Lot * TickValue * [ (Mid2 – Mid1)/Point ]
  • ProfitIdealSell = Lot * TickValue * [ (Mid1 – Mid2)/Point ]

Ahora podemos escribir fórmulas prácticas que tengan en cuenta todas las pérdidas de los spreads, las comisiones y los swaps. Comencemos con la expresión prototipo. Como base, tomaremos las últimas fórmulas para el beneficio o las pérdidas de una orden teniendo en cuenta únicamente el spread:

  • TotalProfitBuy = ProfitIdealBuy + (Spread + Comission + Swap)
  • TotalProfitSell= ProfitIdealSell + (Spread + Comission + Swap)

Para ser justos, deberíamos haber escrito esta fórmula al principio, pero, a nuestro juicio, resulta más apropiada aquí. No obstante, en casi todas partes hay alguna sombría magnitud TickValue. La cuestión principal es cómo se calcula y cómo se puede aplicar la misma magnitud para los cálculos en diferentes puntos temporales. Por «puntos temporales», entendemos las entradas y salidas de las posiciones. Muchos ya entenderán que este valor es dinámico, y además es diferente para cada instrumento comercial. Si no descomponemos esta magnitud en sus componentes, obtendremos errores cada vez mayores cuanto más lejos se encuentren nuestros "objetivos". Vamos a reformular esto en un lenguaje más claro: en otras palabras, las fórmulas resultantes son solo una aproximación. Existe una fórmula perfectamente precisa que carece de estas desventajas. Su límite son precisamente los coeficientes anteriormente obtenidos. Podemos describir los propios límites así:

  • Lim[ dP -> 0 ] ( PrBuy(Mid1, Mid1+dP… ) ) = TotalProfitBuy(Mid1, Mid1+dP…)
  • Lim[ dP -> 0 ] ( PrSell(Mid1, Mid1+dP… ) ) = TotalProfitSEll(Mid1, Mid1+dP…)
  • Mid1+dP = Mid2 — el nuevo precio se obtiene a partir del precio anterior más delta, que tiende a cero
  • TotalProfitBuy = TotalProfitBuy(P1,P2… ) — tal y como hemos definido, el beneficio o las pérdidas suponen una función de las magnitudes Mid y muchas otras
  • TotalProfitSell = TotalProfitSell(P1,P2… ) — de forma análoga

En general, para una comprensión general de la situación, los límites equivalentes pueden crearse de muchas maneras y, en general, producirlos no es algo obligatorio. En nuestro caso, bastará con uno, para que quede claro.

Como resulta, al parecer tenemos algunas fórmulas que incluso funcionan, pero los límites de aplicabilidad resultan harto provisionales. A continuación, procederemos a derivar las fórmulas originales, que ofrecen como consecuencia fórmulas aproximadas similares. Si no conocemos los componentes básicos con los que se construyen el beneficio o las pérdidas, jamás obtendremos estas fórmulas. A su vez, dichas fórmulas nos ayudarán no solo a encontrar ratios perfectamente precisos para el cálculo de las pérdidas y el beneficio, sino también a utilizar esto para encontrar desequilibrios en los procesos del mercado que luego podrán dar beneficios que permanecen ocultos incluso en cosas tan pequeñas.

El método más preciso para calcular las pérdidas y el beneficio de las órdenes

Para entender cómo se construyen estas fórmulas, deberemos analizar su base. Es decir, deberemos entender qué es Buy y qué es Sell. Pero para empezar, tenemos que recordar que comprar es en realidad un proceso en el que cambiamos nuestro dinero por algún tipo de mercancía. ¿Y por qué no puede esa mercancía otra divisa? Al fin y al cabo, las divisas simbolizan la capacidad de poseer una determinada mercancía. Por consiguiente, queda claro que la venta será el proceso inverso de cambio de la segunda divisa por la primera. Sin embargo, si omitimos todas estas convenciones, resultará que comprar y vender son acciones equivalentes que consisten en cambiar una divisa por otra: la única diferencia será qué divisa damos y cuál recibimos a cambio.

Si buscamos información sobre estos cálculos, encontraremos algunas convenciones extrañas que personalmente no entiendo desde hace tiempo, porque no tienen ninguna base. Como aficionado a la tecnología con bastante experiencia en el estudio de diferentes materiales técnicos, he identificado dos verdades muy simples para mí. Si el material no está claro y le despierta dudas al respecto, entonces:

  • Quien ha escrito este material no lo entiende del todo por sí mismo, por lo que será necesario convencerle de lo contrario de cualquier forma posible (normalmente usando afirmaciones antilógicas)
  • Los detalles se omiten deliberadamente para ocultarle a usted información innecesaria

Para profundizar en esta idea, hemos creado una ilustración gráfica que le ayudará a entenderla. En esta, mostraremos el proceso de apertura y cierre de dos tipos de órdenes de mercado:

buy & sell

A nuestro juicio, la sección de los spreads ahora quedará más clara, bueno y este apartado también. En general, se trata de una imagen general que resulta relevante para todo el artículo, pero en este bloque será la más útil.

Por supuesto, estamos seguros de que hay cálculos correctos en la literatura especializada, pero obviamente será más difícil encontrar esta información que averiguar lo que falta por nuestra cuenta. Esta convención indica que (digamos) al comprar EURUSD, por ejemplo, estamos comprando EUR y vendiendo USD. Vamos a escribir esto:

  • EUR = Lot * ContractSize
  • USD = - Ask1 * Lot * ContractSize = - (Bid1 + S1*Point) * Lot * ContractSize

En este caso, resulta que cuando compramos, obtenemos una cantidad positiva de la divisa básica y una cantidad negativa de la segunda divisa. Supongo que no seré el único en pensar que esto es un completo disparate. Tras pensar en ello, llegamos a la conclusión de que estas son las proporciones correctas, pero se presentan de una forma no del todo accesible a nuestra percepción. Mejor aún... Para comprar euros, necesitaremos otra divisa USD que tendremos que tomar de nuestro balance, de un préstamo de un bróker o de una mezcla de ambos. En otras palabras, primero tomaremos USD de algún tipo de almacén común. Esta será la cantidad que estamos pidiendo prestada, por así decirlo. Resulta que:

  • USD1 = Ask1 * Lot * ContractSize = (Bid1 + S1*Point) * Lot * ContractSize — esto lo tomamos prestado
  • EUR1 = Lot * ContractSize — esto es lo que compramos con fondos prestados al tipo de cambio Ask en el momento de la compra

El valor negativo aparecerá más tarde. De hecho, no puede estar aquí en este momento. El valor negativo aparecerá cuando cerremos nuestra posición. Por consiguiente, si la posición está abierta, deberíamos cerrarla. Resulta que necesitaremos realizar la acción Sell usando el mismo lote. Si nos ceñimos a las consideraciones estándar:

  • EUR2 =  Lot * ContractSize
  • USD2 = Bid2 * Lot * ContractSize

Resulta que ya estamos vendiendo EUR y comprando USD. Con respecto a nuestras transformaciones, resulta que tomaremos esos EUR por los que intercambiamos los fondos prestados de nosotros mismos y los volveremos a cambiar a la divisa prestada. Obtendremos el beneficio o las pérdidas restando los fondos prestados a los fondos recibidos:

  • Profit_EUR = EUR1 – EUR2 = 0
  • Profit_USD = USD2 – USD1 = Bid2 * Lot * ContractSize - (Bid1 + S1*Point) * Lot * ContractSize = Lot * ContractSize * ( Bid2 – Bid1 – S1*Point)

Resulta que los euros desaparecerán y solo quedarán los dólares. Si nuestro depósito está en dólares, no necesitaremos convertir la divisa resultante a la divisa del depósito, ya que son iguales. La fórmula es muy similar a la utilizada al principio, salvo que, una vez más, no se consideran las comisiones y el swap, porque se contabilizan por separado. Ahora vamos a reescribir un poco la expresión:

  • Profit_USD = Lot * (ContractSize*Point) * [ ( Bid2 – Bid1 – S1*Point) / Point ]

Aquí simplemente dividiremos y luego multiplicaremos el lado derecho por Point y obtendremos nuestra fórmula original. La misma fórmula se puede obtener usando solo el sistema original de convenciones por el que vendemos y compramos al mismo tiempo en cualquier acción. En este caso, todo lo que se pide prestado recibirá un signo menos que simbolizará que debemos, mientras que lo que compramos lo dejaremos con un signo más. En un sistema de convenciones así, no necesitaremos considerar qué estamos cambiando a qué y desde dónde. Vamos a hacer lo mismo, solo que usando este enfoque:

  • EUR1 = Lot * ContractSize
  • USD1 = - Ask1 * Lot * ContractSize = - (Bid1 + S1*Point) * Lot * ContractSize

Esto es una compra. Acción primera.

  • EUR2 = - Lot * ContractSize
  • USD2 = Bid1 * Lot * ContractSize

Esto es una venta, acción segunda.

Más adelante lo simplificaremos, porque no debemos pensar en qué restar a qué y cómo, simplemente se sumarán todos los euros por separado y todos los dólares por separado. La divisa básica desaparecerá de todos modos, solo quedará la segunda divisa. Vamos a realizar la suma y asegurarnos de que las fórmulas son idénticas a las anteriores:

  • Profit_EUR = EUR1 + EUR2 = 0
  • Profit_USD = USD1 + USD2 = - (Bid1 + S1*Point) * Lot * ContractSize + Bid2 * Lot * ContractSize = Lot * ContractSize * ( Bid2 – Bid1 – S1*Point)

Resulta que el beneficio de cualquier instrumento cuenta únicamente en la segunda divisa (no en la divisa básica), y la divisa básica siempre desaparecerá en un ciclo completo de apertura y cierre. Naturalmente, en las ventas, todo se dará al revés. Para mayor exhaustividad, vamos a escribir todo esto. Ahora venderemos EURUSD y cerraremos esta posición efectuando una operación "Buy":

  • EUR1 =  - Lot * ContractSize
  • USD1 = Bid1 * Lot * ContractSize

Esto es una venta. Acción primera.

  • EUR2 = Lot * ContractSize
  • USD2 = - (Bid2 + S2*Point) * Lot * ContractSize

Esto es una compra, acción segunda.

Ahora sumaremos todos los valores exactamente de la misma manera:

  • Profit_EUR = EUR1 + EUR2 = 0
  • Profit_USD = USD1 + USD2 = Bid1 * Lot * ContractSize - (Bid2 + S2*Point) * Lot * ContractSize = Lot * ContractSize * ( Bid1 – Bid2 – S2*Point)

Como podemos ver, la fórmula solo difiere en que se han intercambiado Bid1 y Bid2. Y, obviamente, el spread se toma en el punto de cierre de la posición, porque el punto de cierre es el punto de compra. Hasta ahora, todo se ha ajustado estrictamente a las fórmulas originales. Debemos destacar aparte que ahora sabemos qué es TickValue, al menos en el caso de que la segunda divisa (no básica) de nuestro instrumento sea la misma que nuestra divisa de depósito. Vamos a escribir cuál es este valor:

  • TickValue = ContractSize * Point

No obstante, una vez más, este valor solo resulta adecuado para los instrumentos en los que la divisa de los beneficios es la divisa de nuestro depósito. ¿Y si, por ejemplo, utilizamos un tipo de cambio cruzado como AUDNZD? Lo importante aquí no es el instrumento en sí, sino que este valor se calcula siempre en relación con la divisa de nuestro depósito, y lo obtenemos del servidor comercial. No obstante, si usamos esta fórmula en relación con el tipo de cambio cruzado, obviamente funcionará, pero no nos dará la respuesta en la divisa de nuestro depósito, sino en la segunda divisa del instrumento. Para realizar la conversión a la divisa del depósito, deberemos multiplicar este valor por un determinado coeficiente, que será esencialmente el tipo de conversión del que hablamos en el bloque anterior.

  • TickValueCross = ContractSize * Point * BidAlphaCross

El tipo de cambio de transición se calcula fácilmente:

  1. Miramos cuál es la segunda divisa del instrumento (no la divisa básica)
  2. Buscamos un instrumento que contenga esta divisa y la divisa de nuestro depósito
  3. Cambiamos al tipo de cambio correspondiente
  4. De ser necesario, convertimos el instrumento (tipo de cambio inverso)

Por ejemplo, si trabajamos con EURCHF y tenemos el depósito en USD, tendremos el beneficio inicial en CHF, por lo que podemos tomar el instrumento USDCHF y su tipo de cambio. Resulta que tenemos que cambiar CHF a USD, luego resultará que tenemos que comprar USD por CHF. Pero como CHF = PBid * USD, entonces USD = (1/PAsk) * CHF y en consecuencia:

  • BidAlphaCross = 1/PAsk

Segundo ejemplo: tomaremos uno ligeramente diferente. Por ejemplo, si trabajamos con AUDNZD y obtenemos el beneficio en NZD, entonces podremos tomar el tipo de cambio NZDUSD y como USD = PBid * NZD, en este caso:

  • BidAlphaCross = PBid

Vamos a analizar esto. La conversión de CHF a USD significa "+USD ; -CHF", es decir, perdemos una divisa y ganamos otra. Esto implicará comprar en USD y vender en USDCHF al precio PAsk, lo que en realidad significa justo lo siguiente: “USD = (1/PAsk) * CHF”. Una forma más sencilla de verlo es que deberíamos obtener un poco menos de USD al comprar de lo que habríamos obtenido si el bróker no se hubiera llevado absolutamente nada de nuestra operación de cambio. Lo cual significa que si dividimos por más PAsk, obtendremos un valor menor que 1/P.

En el segundo caso, ocurre lo contrario. La conversión de NZD a USD implica que "+USD ; -NZD", lo cual significará vender al tipo de cambio NZDUSD al precio PBid. Bien, vamos a escribir una relación similar para el intercambio "USD = PBid * NZD". Exactamente el mismo intercambio se hace a un tipo de cambio ligeramente peor, y este será "PBid". Todo coincide, todo resulta transparente y claro. No olvidemos que el tipo de cambio principal e ideal es "PMid", del que ya hemos hablado. Teniendo esto en cuenta, resulta fácil ver que el spread no es más que el porcentaje que el bróker nos cobra como divisa de cambio. Por consiguiente, cada operación, tanto si se trata de apertura como de cierre de una posición, irá acompañada de una imposición por parte del bróker en el cambio de divisas, denominada spread. El resto de dicha imposición se contendrá en la comisión y el spread.

Solo si la divisa de beneficio es la misma que nuestra divisa de depósito, no se requerirá ningún tipo de conversión y este coeficiente será igual a uno, por lo que desaparecerá en el caso de las principales parejas de divisas, y hará que el tamaño del tick sea fijo para todas esas parejas. Además, al igual que en el caso anterior, se puede dar el caso de que nuestro instrumento comercial sea también un tipo de cambio de transición y no debamos buscarlo entre otros instrumentos.

Con el nuevo valor BidAlphaCross en su lugar, reescribiremos las fórmulas de pérdidas y beneficio para las órdenes excluyendo la comisión y el swap:

  • BuyProfit = BidAlphaCross * Lot * ContractSize * ( Bid2 – Bid1 – S1*Point)
  • SellProfit = BidAlphaCross * Lot * ContractSize * ( Bid1 – Bid2 – S2*Point)

Considerando que:

  • Bid1 = Mid1 – (S1*Point)/2
  • Bid2 = Mid2 – (S2*Point)/2

Luego reescribiremos las fórmulas de una forma más clara sustituyendo allí las relaciones para Mid:

  • BuyProfit = BidAlphaCross * Lot * ContractSize * ( Mid2 – (S2*Point)/2 – Mid1 + (S1*Point)/2 – S1*Point)
  • SellProfit = BidAlphaCross * Lot * ContractSize * ( Mid1 – (S1*Point)/2 – Mid2 + (S2*Point)/2 – S2*Point)

Vamos a simplificar todo esto:

  • BuyProfit = Lot * BidAlphaCross * ContractSize * Point * [ ( Mid2 – Mid1 )/ Point  - ( S1/2 + S2/2 ) ]
  • SellProfit = Lot * BidAlphaCross * ContractSize * Point * [ ( Mid1 – Mid2 )/ Point  - ( S1/2 + S2/2 ) ]

Hagámoslo aún más simple:

  • BuyProfit = Lot * TickValueCross * [ ( Mid2 – Mid1 )/ Point ] - Lot * TickValueCross * ( S1/2 + S2/2 )
  • SellProfit = Lot * TickValueCross * [ ( Mid1 – Mid2 )/ Point ] - Lot * TickValueCross * ( S1/2 + S2/2 )

Ahora todo parece más fácil y claro. Hemos quitado deliberadamente el sumando relativo al spread para dejar claro que ese es el valor que se nos cobra sin importar el tiempo que lleve colocada nuestra orden o posición.

La función de cálculo exacto del swap

Ya solo tenemos que aclarar las fórmulas de los swaps. Recordemos las fórmulas que obtuvimos al principio del artículo:

  • Swap = Lot * TickValue * SwapPoints * SwapCount(StartTime,EndTime)
  • Swap = Lot * ContractSize * BidAlpha * SwapPercent/100 * SwapCount(StartTime,EndTime)

En el último bloque, aprendimos que TickValue no es un valor único y se calcula de forma diferente para las distintas parejas de divisas. Determinamos que:

  • TickValue = ContractSize * Point

Pero esto solo funciona para las parejas en las que la divisa del beneficio es la misma que la del depósito. En casos más complejos, utilizaremos este valor:

  • TickValueCross = ContractSize * Point * BidAlphaCross

donde BidAlphaCross también tiene un valor distinto que depende de la divisa del depósito y del instrumento elegido. Todo esto lo hemos definido arriba, solo lo estamos recordando. Basándonos en esto, deberemos reescribir la primera versión de la fórmula, sustituyendo la constante estándar:

  • Swap = Lot * TickValueCross * SwapPoints * SwapCount(StartTime,EndTime)

Pero esta fórmula está lejos de ser perfecta. El motivo es que, a diferencia de la comisión o el spread, un swap se puede cobrar tantas veces como se quiera mientras la posición esté abierta. El valor TickValueCross por sí mismo resulta insuficiente para describir el swap total de los tipos cruzados, porque resulta que el valor es ligeramente distinto en cada punto de cobro del swap ya que el valor BidAlphaCross cambia. Vamos a escribir las fórmulas completas para calcular los swaps de las dos opciones de "imposición":

  1. Swap = SUMM(1 … D) { Lot * (SwapPoints * K[i]) * TickValueCross[i] } — suma de todos los swaps cobrados en puntos, para cada punto cruzado 0:00
  2. Swap = SUMM(1 … D) { Lot * ContractSize * BidAlpha[i] * (SwapPercent/100 * K[i]) * } — en porcentaje

Arrays para la suma:

  • K[i] = 1 o 3 — si el coeficiente es "3", significará que ese fue el día de cobro del swap triple
  • TickValueCross[i] — array de tamaños de ticks en los puntos de cobro del swap
  • BidAlpha[i] — array de tipos de cambio de corrección en los puntos de cobro del swap

Veamos un ejemplo de cálculo de un swap para una orden aleatoria. Para ello, introduciremos breves anotaciones:

  • TickValueCross[i] = T[i]
  • BidAlpha[i] = B[i]
  • K[i] = K[i]

Ahora representaremos gráficamente cómo vamos a sumar los swaps:

swap calculation


Ya hemos desglosado todos los ejemplos posibles sobre el cálculo de las pérdidas y el beneficio de las órdenes.

Parte práctica

En esta sección, pondremos a prueba nuestro modelo matemático. Concretamente, prestaremos especial atención al cálculo del beneficio o las pérdidas excluyendo las comisiones y los swaps. Si recuerda, más arriba, se formulaba una pregunta legítima: ¿en qué momento debemos calcular TickValueCross si estamos contando el beneficio de los tipos cruzados? Este punto supone el único momento de incertidumbre en todo el modelo que vamos a probar. Para ello, primero deberemos implementar toda la funcionalidad necesaria para calcular el beneficio o las pérdidas de cualquier orden utilizando nuestro modelo matemático, probar luego este en el simulador de estrategias y comparar después nuestros cálculos con los datos reales de las órdenes de la historia de transacciones. El objetivo final es validar nuestro modelo matemático y, paralelamente, compararlo con una función de referencia MQL5, como OrderCalcProfit.

Para evaluar todo esto, deberemos introducir cuatro valores:

  1. Real — beneficio de una orden de la historia
  2. BasicCalculated — el mismo beneficio, solo que calculado en el momento de la apertura de una orden usando la función OrderCalcProfit
  3. CalculatedStart — beneficio calculado en el momento de la apertura de una orden usando nuestro modelo matemático
  4. CalculatedEnd — beneficio calculado en el momento del cierre una orden usando nuestro modelo matemático

A este respecto, surgen tres tipos de desviación media del valor del beneficio:

  1. AverageDeviationCalculatedMQL = Summ(0..n-1) [ 100 * MathAbs(BasicCalculated - Real)/MathAbs(Real) ]  / n : desviación relativa del beneficio según el código MQL5
  2. AverageDeviationCalculatedStart = Summ(0.. n-1 ) [  100 * MathAbs(CalculatedStartReal)/MathAbs(Real) ] / n : desviación relativa del beneficio según nuestro código cuando se abre la orden
  3. AverageDeviationCalculatedEnd =  Summ(0.. n-1 ) [  100 * MathAbs(CalculatedEnd Real)/MathAbs(Real) ] / n : desviación relativa del beneficio según nuestro código cuando se cierra la orden

Bien, y de forma similar a ello, podemos introducir tres tipos de desviación máxima:

  1. MaxDeviationCalculatedMQL = Max(0.. n-1 ) [ (100 * MathAbs(BasicCalculated - Real)/MathAbs(Real))  ] - desviación relativa del beneficio según el código MQL5
  2. MaxDeviationCalculatedStart =  Max(0.. n-1 ) [  (100 * MathAbs(CalculatedStart Real)/MathAbs(Real)) ]  - desviación relativa del beneficio según nuestro código al abrir una orden
  3. MaxDeviationCalculatedEnd =  Max(0.. n-1 ) [  (100 * MathAbs(CalculatedEnd Real)/MathAbs(Real)) ]  - desviación relativa del beneficio según nuestro código cuando se cierra una orden

Donde:

  • Summ(0..n-1) — suma de todas las desviaciones relativas de todas las órdenes "n"
  • Max(0..n-1) — desviación máxima relativa de todas las órdenes "n"

Implementando estos cálculos en el código de un asesor aleatorio, podremos probar nuestro modelo matemático. Empezaremos por aplicar nuestra fórmula del beneficio. Lo hemos hecho así:

double CalculateProfitTheoretical(string symbol, double lot,double OpenPrice,double ClosePrice,bool bDirection)
   {
   //PrBuy = Lot * TickValueCross * [ ( Bid2 - Ask1 )/Point ]
   //PrSell = Lot * TickValueCross * [ ( Bid1 - Ask2 )/Point ]
   if ( bDirection )
      {
      return lot * TickValueCross(symbol) * ( (ClosePrice-OpenPrice)/SymbolInfoDouble(symbol,SYMBOL_POINT) );
      }
   else
      {
      return lot * TickValueCross(symbol) * ( (OpenPrice-ClosePrice)/SymbolInfoDouble(symbol,SYMBOL_POINT) );
      }   
   }

Aquí tenemos dos fórmulas en una: a la vez para la compra y para la venta. El marcador "bDirection" es el responsable de ello. Precisamente en color verde se destaca la función adicional que calcula este nuestro tamaño de tick. La implementaremos así:

double TickValueCross(string symbol,int prefixcount=0)
   {
   if ( SymbolValue(symbol) == SymbolBasic() )
      {
      return TickValue(symbol);
      }
   else
      {
      MqlTick last_tick;
      int total=SymbolsTotal(false);//symbols in Market Watch
      for(int i=0;i<total;i++) Symbols[i]=SymbolName(i,false);
      string crossinstrument=FindCrossInstrument(symbol);
      if ( crossinstrument != "" )
         {
         SymbolInfoTick(crossinstrument,last_tick);
         string firstVAL=StringSubstr(crossinstrument,prefixcount,3);
         string secondVAL=StringSubstr(crossinstrument,prefixcount+3,3);
         if ( secondVAL==SymbolBasic() && firstVAL == SymbolValue(symbol) )
            {
             return TickValue(symbol) * last_tick.bid;
            }
         if ( firstVAL==SymbolBasic() && secondVAL == SymbolValue(symbol) )
            {
            return TickValue(symbol) * 1.0/last_tick.ask;
            }         
         }
      else return TickValue(symbol);  
      }
   return 0.0;   
   }

Dentro también hay dos implementaciones para los casos siguientes:

  1. La divisa del beneficio del instrumento es la misma que la de nuestro depósito
  2. Todos los demás casos (buscamos el tipo de cambio de transición)

Dentro del segundo escenario, también existe una ramificación en dos casos:

  • La divisa del depósito está en la parte superior del tipo de cambio de transición
  • La divisa del depósito está en la parte inferior del tipo de cambio de transición

Todo ello en estricta conformidad con el modelo matemático. Para poner en práctica estas últimas ramificaciones, primero deberemos encontrar el instrumento necesario para calcular el tipo de cambio de transición:

string FindCrossInstrument(string symbol,int prefixcount=0)
   {
   string firstVAL;
   string secondVAL;
   for(int i=0;i<ArraySize(Symbols);i++)
      {
      firstVAL=StringSubstr(Symbols[i],prefixcount,3);
      secondVAL=StringSubstr(Symbols[i],prefixcount+3,3);
      if ( secondVAL==SymbolBasic() && firstVAL == SymbolValue(symbol) )
         {
         return Symbols[i];
         }
      if ( firstVAL==SymbolBasic() && secondVAL == SymbolValue(symbol) )
         {
         return Symbols[i];
         }      
      }
   return "";
   }

Para ello, deberemos saber "extraer" la divisa básica del nombre del instrumento:

string SymbolValue(string symbol,int prefixcount=0)
   {
   return StringSubstr(symbol,prefixcount+3,3);
   }

Y también obtener la divisa de beneficio usando la función MQL5 incorporada:

string SymbolBasic()
   {
   return AccountInfoString(ACCOUNT_CURRENCY);
   }

Asimismo, deberemos compara todo esto con las divisas en todos los símbolos del Market Watch hasta encontrar la primera coincidencia. Ahora podemos usar esta funcionalidad en el momento de apertura y cierre de las órdenes. Si el lector así lo desea, podrá consultar el resto del código en el código fuente que hemos adjuntado al artículo. Asimismo, hemos añadido el cálculo de las desviaciones una vez finalizado el backtest; estos se escriben en el registro del terminal. También hemos probado las veintiocho principales parejas de divisas y tipos de cambio cruzado, y hemos introducido los resultados en un recuadro para poder así evaluar el rendimiento de nuestro modelo matemático y compararlo con la implementación de MQL5. Los resultados se dividen en tres bloques condicionales. Los dos primeros tendrán el aspecto siguiente:

1 & 2 blocks

Como podemos ver, para las cuatro primeras parejas de divisas tanto la implementación de MQL5 como la nuestra funcionan perfectamente sin ningún error, todo porque la divisa de beneficio coincide con la de depósito: en general, no resulta sorprendente. A continuación, viene un bloque de tres parejas de divisas cuya divisa básica es la misma que la divisa de beneficio. En este caso, la implementación de MQL5 funciona mejor. No obstante, ya podemos ver que el error de cálculo en la apertura de la orden es mucho mayor que el mismo error en el cierre de la misma, lo cual indica de forma indirecta que el cálculo sí debería realizarse en el cierre de la orden. Veamos el resto de parejas de divisas:

block 3

Aquí, como podemos ver, nuestra funcionalidad no resulta inferior a la funcionalidad básica de MQL5 y, además, absolutamente en todas partes se puede ver que los cálculos de cierre de posición son mucho más precisos, absolutamente siempre. Lo único que escapa a nuestro entendimiento es la causa de los ceros en la primera línea del segundo bloque. Podría haber muchos motivos para ello, pero, por alguna razón, no parece que estén en nuestro modelo, aunque podríamos estar equivocados. En cuanto a la comprobación de las fórmulas de las comisiones y los swaps, no parece que esto resulte necesario; las fórmulas inspiran confianza, ya que no tienen nada especialmente complicado.

Conclusión

La conclusión es que hemos elaborado un modelo matemático totalmente desde cero, guiándonos únicamente por retazos de información. El modelo contiene todo lo necesario para calcular las órdenes de las principales parejas de divisas y tipos de cambio cruzados. Hemos probado el modelo en el simulador de estrategias y está listo para su uso inmediato en cualquier asesor, indicador o script útil. De hecho, la aplicabilidad de este modelo resulta mucho más amplia que el cálculo del beneficio, las pérdidas o los costes, pero ese es un tema para otro artículo. Podrá encontrar toda la funcionalidad necesaria, así como ejemplos de su uso en el asesor de investigación usado para elaborar el recuadro. El asesor se adjuntará al artículo. Podrá ejecutarlo usted mismo y comparar los resultados con el recuadro. Lo más importante es que, en nuestra opinión, hemos recopilado un "libro de metodología" sencillo, lógico y razonado al estilo soviético que, una vez abierto, permite recordar qué, dónde, desde dónde y por qué en cualquier momento.



Traducción del ruso hecha por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/ru/articles/10211

Archivos adjuntos |
Aprendizaje automático y Data Science (Parte 06). Redes neuronales (Parte 02): arquitectura de la redes neuronales con conexión directa Aprendizaje automático y Data Science (Parte 06). Redes neuronales (Parte 02): arquitectura de la redes neuronales con conexión directa
En el artículo anterior, comenzamos a estudiar las redes neuronales con conexión directa, pero hay algunas cosas que quedaron sin resolver. Una de ellas es el diseño de la arquitectura. Por ello, en el presente artículo, veremos cómo diseñar una red neuronal flexible, teniendo en cuenta los datos de entrada, el número de capas ocultas y los nodos de cada red.
Redes neuronales: así de sencillo (Parte 25): Practicando el Transfer Learning Redes neuronales: así de sencillo (Parte 25): Practicando el Transfer Learning
En los últimos dos artículos, hemos creado una herramienta que nos permite crear y editar modelos de redes neuronales. Ahora es el momento de evaluar el uso potencial de la tecnología de Transfer Learning en ejemplos prácticos.
Indicador técnico de preparación propia Indicador técnico de preparación propia
En este artículo, analizaremos algunos algoritmos que nos permitirán crear nuestro propio indicador técnico. Asimismo, veremos cómo, con unos supuestos iniciales muy sencillos, podremos obtener resultados bastante complejos e interesantes.
Algoritmos de optimización de la población Algoritmos de optimización de la población
Artículo de introducción a los algoritmos de optimización (AO). Clasificación. En el artículo, intentaremos crear un banco de pruebas (un conjunto de funciones) que servirá en el futuro para comparar los AO entre sí, e incluso, quizás, para identificar el algoritmo más universal de todos los ampliamente conocidos.