Fibonacci Number
Fibonacci Number
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.
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.
Re: Fibonacci Number
Sres. foristas.
Os adjunto las definiciones del indicador FibonacciNumber.
Este es el código:
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.
Os adjunto las definiciones del 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 "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.
Re: Fibonacci Number
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:
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í:
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.
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
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
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.
Re: Fibonacci Number
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.
¿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.
Re: Fibonacci Number
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.
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.
-
- Mensajes: 3842
- Registrado: 22 Dic 2014 10:49
Re: Fibonacci Number
.
Última edición por Rango Starr el 18 May 2021 11:21, editado 1 vez en total.
un ciclo y otro ciclo, son un biciclo...
si añadimos otro ciclo, entonces tendremos "un triciclo"... famoso trio catalan de humor de los 90....
..y nada mas...
si añadimos otro ciclo, entonces tendremos "un triciclo"... famoso trio catalan de humor de los 90....
..y nada mas...
Re: Fibonacci Number
Gracias Rango.Rango Starr escribió:Rafa,
Gracias por el curre.
Saludos
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.
Re: Fibonacci Number
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
?
Saludos,
X-Trader
Ahora la pregunta que yo me hago... ¿por qué no trabajas con Metatrader para que podamos jugar con tus cacharritos

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."
Re: Fibonacci Number
Gracias, X-Trader.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.
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.
De profesión soy analista-programador, así que para mi es muy fácil aprender un lenguaje u otro.X-Trader escribió: Ahora la pregunta que yo me hago... ¿por qué no trabajas con Metatrader para que podamos jugar con tus cacharritos?
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.
Re: Fibonacci Number
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 excusaRafa7 escribió:De profesión soy analista-programador, así que para mi es muy fácil aprender un lenguaje u otro.X-Trader escribió:Ahora la pregunta que yo me hago... ¿por qué no trabajas con Metatrader para que podamos jugar con tus cacharritos?
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.

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

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."
Si te ha gustado este hilo del Foro, ¡compártelo en redes!