Fibonacci Number

Responder
Avatar de Usuario
Rafa7
Mensajes: 4473
Registrado: 17 Dic 2009 21:36
Contactar:

Fibonacci Number

Mensaje por Rafa7 » 04 Oct 2015 00:06

Sres foristas,



Voy a compartir con vosotros un indicador que he programado con el nombre FibonacciNumber.
FibonacciNumber[n] devuelve es el n-ésimo número de Fibonacci.

Está programado con el lenguaje de ProReaTime, pero como es muy fácil el código, fácilmente lo podéis implementar en otros lenguajes que conozcáis.

En este hilo pienso mostraros un ejemplo de un sistema de trading optimizado con parámetros de Fibonacci.

Importantísimo: El indicador FibonacciNumber, en ProRealTime, no podrá funcionar si antes no habéis implementado el indicador Power. El indicador Power lo podéis implementar con las indicaciones de este enlace: Potencias en ProRealTime. Para los que programais en otros lenguajes, no es necesario que programéis el indicador Power si vuestro leguaje admite la potenciación (Power[base, exponente] = base^exponente).



Saludos.
Última edición por Rafa7 el 04 Oct 2015 10:16, editado 10 veces en total.


¡Jesús es el Rey de Reyes y el Señor de Señores!
https://loquepermanece.blogspot.com

Avatar de Usuario
Rafa7
Mensajes: 4473
Registrado: 17 Dic 2009 21:36
Contactar:

Re: Fibonacci Number

Mensaje por Rafa7 » 04 Oct 2015 00:16

Sres. foristas.



Os adjunto las definiciones del indicador FibonacciNumber.
n.png
Parámetro "n"
NFibo.png
Indicador "FibonacciNumber"
Este es el código:

Código: Seleccionar todo

//Programado por Rafa7, forista de x-trader.net
//parámetros:
//   n = número entero > 0
//Objetivo: retornar el n-ésimo nº de Fibonacci.
if calculado = 0 then
   calculado = 1
   n = n + 1
   raiz5 = Sqrt(5)
   aureo = (1 + raiz5) / 2
   aux1 = call Power[aureo, n]
   aux2 = call Power[1 - aureo, n]
   FibonacciNumber = round((aux1 - aux2) / raiz5)
endif
return FibonacciNumber as "%Fibonnacci Number"
El "if calculado = 0" es para evitar que el cálculo se realize en cada vela, ya que el resultado siempre sería el mismo.
El "n = n + 1", es una instrucción que se ejecuta una sola vez (gracias al "IF calculado = 0") y es para evitar la repetición del uno. Sin la instrucción "n = n + 1" FibonacciNumber funcionaría perfectamente, solo que el uno lo repetiría (1, 1, 2, 3, 5, 8, ...) y lo que pretendo es el 1 no se repita (1, 2, 3, 5, 8, ...)

La serie (1, 1, 2, 3, 5, 8, ...) es la sucesión de Fibonnacci. Y la serie (1, 2, 3, 5, 8, ...) son los números de Fibonacci.
Lo que pretendo es que FibonacciNumber[n] no retorne el n-ésimo elemento de la sucesión de Fibonacci, sino el n-ésimo número de Fibonacci.

Estos son los retornos:
FibonacciNumber[1] = 1
FibonacciNumber[2] = 2
FibonacciNumber[3] = 3
FibonacciNumber[4] = 5
FibonacciNumber[5] = 8
FibonacciNumber[6] = 13
FibonacciNumber[7] = 21
FibonacciNumber[8] = 34
Etc...



Saludos.
Última edición por Rafa7 el 05 Oct 2015 23:05, editado 9 veces en total.


¡Jesús es el Rey de Reyes y el Señor de Señores!
https://loquepermanece.blogspot.com

Avatar de Usuario
Rafa7
Mensajes: 4473
Registrado: 17 Dic 2009 21:36
Contactar:

Re: Fibonacci Number

Mensaje por Rafa7 » 04 Oct 2015 00:37

Sres. foristas,



Os comparto una aplicación práctica de los números de Fibonacci. Supongamos que tenemos programado operar en largos los cruces entre media móvil exponencial corta y media móvíl exponencial larga.
Este podría ser el código:

Código: Seleccionar todo

DEFPARAM NoCashUpdate=True
DEFPARAM CumulateOrders=False
corta = ExponentialAverage[n](close)
larga = ExponentialAverage[m](close)
entrada = (corta crosses over larga)
salida = (corta crosses under larga)

REM Entrada largos
IF (NOT LongOnMarket and entrada) THEN
   BUY 1 SHARES AT MARKET nextbaropen
ENDIF

REM Salida largos
IF (LongOnMarket AND salida) THEN
   SELL AT market NEXTBAROPEN
ENDIF
Donde n es el periodo de la media corta, y m el periodo de la media larga.

Supongamos que queremos optimizar n y m pero solo nos interesa que sean números de Fibonacci.

La solución es muy sencilla: Solo tenemos que añadir estás dos instrucciones al principio:
n = call FibonacciNumber[n]
m = call FibonacciNumber[m]

De esta manera, en lugar de operar con periodos n y m, operariamos con el n-ésimo número de Fibonacci y con el m-ésimo número de Fibonacci.

El codigo, en este ejemplo, quedaría así:

Código: Seleccionar todo

DEFPARAM NoCashUpdate=True
DEFPARAM CumulateOrders=False
n = call FibonacciNumber[n]
m = call FibonacciNumber[m]
corta = ExponentialAverage[n](close)
larga = ExponentialAverage[m](close)
entrada = (corta crosses over larga)
salida = (corta crosses under larga)

REM Entrada largos
IF (NOT LongOnMarket and entrada) THEN
   BUY 1 SHARES AT MARKET nextbaropen
ENDIF

REM Salida largos
IF (LongOnMarket AND salida) THEN
   SELL AT market NEXTBAROPEN
ENDIF
Luego, el resultado de la optimización se tiene que interpretar. Por ejemplo, si la optimización nos dice que el cruce entre 4 y 7 es el mejor, tenemos que interpretar que se trata del cuarto y séptimo números de Fibonacci, o sea, 5 y 21.

Y, al optimizar, ¿cómo hacemos variar n y m? Bueno, si no nos interesa valores superiores a 300, basta que los hagamos variar entre 1 y 12, ya que el doceavo número de Fibonacci es 233, y el treceavo número de Fibonacci es 377, el cual, es mayor que 300.



Saludos.
Última edición por Rafa7 el 04 Oct 2015 10:26, editado 4 veces en total.


¡Jesús es el Rey de Reyes y el Señor de Señores!
https://loquepermanece.blogspot.com

Avatar de Usuario
Rafa7
Mensajes: 4473
Registrado: 17 Dic 2009 21:36
Contactar:

Re: Fibonacci Number

Mensaje por Rafa7 » 04 Oct 2015 00:46

Sres. Foristas.



¿Qué ventajas tiene optimizar con números de Fibonacci?
Las ventajas son:
1.- Es una buena medida que nos ayuda a no sobreoptimizar.
2.- Reducimos el número de iteraciones en las optimizaciones (por ejemplo si no nos interesan mas de 300 periodos, es suficiente indicar al optimizado que variamos los periodos entre 1 y 12, con el consiguiente ahorro de CPU.

Otra alternativa a los números de Fibonacci, para procurar no exponernos a la sobreoptimización, es usar periodos múltiplos de 5 o de 10, o de 20, etc ...



Saludos.
Última edición por Rafa7 el 04 Oct 2015 09:47, editado 1 vez en total.


¡Jesús es el Rey de Reyes y el Señor de Señores!
https://loquepermanece.blogspot.com

Avatar de Usuario
Rafa7
Mensajes: 4473
Registrado: 17 Dic 2009 21:36
Contactar:

Re: Fibonacci Number

Mensaje por Rafa7 » 04 Oct 2015 09:19

Sres, foristas,



El cálculo del indicador FibonacciNumber que he programado, está basado en la fórmula explícita de los números de la sucesión de Fibonacci, de Édouard Lucas, reconocido matemático francés del siglo XIX:
Número n-ésimo de la sucesión de Fibonacci = (númeroÁureo^n - (númeroÁureo - 1)^n) / 5^0,5
Siendo númeroAúreo = (1 + 5^0,5) / 2.

https://es.wikipedia.org/wiki/Sucesión_de_Fibonacci

Pero como quería los números de Fibonacci (sin repetir el 1), empleé esta otra fórmula:
Número n-ésimo de Fibonacci = (númeroÁureo^(n + 1) - (númeroÁureo - 1)^(n + 1)) / 5^0,5

(De ahí la instrucción n = n + 1)



Saludos.


¡Jesús es el Rey de Reyes y el Señor de Señores!
https://loquepermanece.blogspot.com

Rango Starr
Mensajes: 3111
Registrado: 22 Dic 2014 10:49

Re: Fibonacci Number

Mensaje por Rango Starr » 05 Oct 2015 11:29

Rafa,

Gracias por el curre.

Saludos



Avatar de Usuario
Rafa7
Mensajes: 4473
Registrado: 17 Dic 2009 21:36
Contactar:

Re: Fibonacci Number

Mensaje por Rafa7 » 05 Oct 2015 23:13

Rango Starr escribió:Rafa,

Gracias por el curre.

Saludos
Gracias Rango.



Poco a poco voy aprendiendo nuevos trucos.
Cuando diseñé el Power, ya estaba pensando en el FibonacciNumber como posible aplicación.
Supongo que el FibonacciNumber será interesante para los incondicionales del Fibonacci (entre los cuales no me encuentro).



Saludos.


¡Jesús es el Rey de Reyes y el Señor de Señores!
https://loquepermanece.blogspot.com

Avatar de Usuario
X-Trader
Administrador
Mensajes: 10658
Registrado: 06 Sep 2004 10:18
Contactar:

Re: Fibonacci Number

Mensaje por X-Trader » 07 Oct 2015 18:14

Hola Rafa7, muy interesante el aporte, podría ser una buena manera de simplificar mucho las optimizaciones de estrategias basadas en medias móviles.

Ahora la pregunta que yo me hago... ¿por qué no trabajas con Metatrader para que podamos jugar con tus cacharritos :-D?

Saludos,
X-Trader


"Los sistemas de trading pueden funcionar en ciertas condiciones de mercado todo el tiempo, en todas las condiciones de mercado en algún momento del tiempo, pero nunca en todas las condiciones de mercado todo el tiempo."

Avatar de Usuario
Rafa7
Mensajes: 4473
Registrado: 17 Dic 2009 21:36
Contactar:

Re: Fibonacci Number

Mensaje por Rafa7 » 07 Oct 2015 21:56

X-Trader escribió:Hola Rafa7, muy interesante el aporte, podría ser una buena manera de simplificar mucho las optimizaciones de estrategias basadas en medias móviles.
Gracias, X-Trader.



Podría simplificar optimizaciones de muchos indicadores. Compartí una forma de optimizar periodos de medias móviles, a modo de ejemplo, para mostrar que se podría hacer con otros indicadores.
X-Trader escribió: Ahora la pregunta que yo me hago... ¿por qué no trabajas con Metatrader para que podamos jugar con tus cacharritos :-D?
De profesión soy analista-programador, así que para mi es muy fácil aprender un lenguaje u otro.
Tengo entendido que Metatrader se usa en Forex, pero yo, por ahora, solo opero en bolsa. ¿Metratader se usa también en bolsa? ¿Es gratuito? ¿se pueden obtener datos gratuitos de la bolsa española en timeframe diario para Metatrader aunque sea a fin de día?, etc ... Me falta informarme sobre metratader. Cuando pueda me miraré metratader, a ver si puede ser interesante para mí.



Saludos.


¡Jesús es el Rey de Reyes y el Señor de Señores!
https://loquepermanece.blogspot.com

Avatar de Usuario
X-Trader
Administrador
Mensajes: 10658
Registrado: 06 Sep 2004 10:18
Contactar:

Re: Fibonacci Number

Mensaje por X-Trader » 08 Oct 2015 10:37

Rafa7 escribió:
X-Trader escribió:Ahora la pregunta que yo me hago... ¿por qué no trabajas con Metatrader para que podamos jugar con tus cacharritos :-D?
De profesión soy analista-programador, así que para mi es muy fácil aprender un lenguaje u otro.
Tengo entendido que Metatrader se usa en Forex, pero yo, por ahora, solo opero en bolsa. ¿Metratader se usa también en bolsa? ¿Es gratuito? ¿se pueden obtener datos gratuitos de la bolsa española en timeframe diario para Metatrader aunque sea a fin de día?, etc ... Me falta informarme sobre metratader. Cuando pueda me miraré metratader, a ver si puede ser interesante para mí.

Saludos.
Pues sí, aunque depende del broker, no de la plataforma. Algunos brokers como Hanseatic o ClickTrade ofrecen CFDs sobre acciones españolas, europeas, estadounidenses, etc. por lo que cuentas con el histórico diario completo de la mayoría de ellas así como datos en tiempo real que replican prácticamente al 100% el comportamiento del subyacente. Hale, ya no tienes excusa ;).

Además MQL es muy similar a C++, no te costará mucho aprenderlo :P.

Saludos,
X-Trader


"Los sistemas de trading pueden funcionar en ciertas condiciones de mercado todo el tiempo, en todas las condiciones de mercado en algún momento del tiempo, pero nunca en todas las condiciones de mercado todo el tiempo."


Responder

Volver a “Indicadores”