PereParticipant
Veteran
Buenos días.
He hecho un indicador para entrar y salir, pero no me acaba de funcionar.
Está basado en el Inverse Fisher Transform aplicado al RSI. Según Prorealtime, genera una orden de compra cuando la curva cruza al alza 50 y vende cuando cruza a la baja 80.
En cortos, vende cuando cruza a la baja 50 y compra cuando cruza al alza 20.
He hecho el siguiente código:
Ind=RSI[n](Close)
x = 0.1 * (Ind – 50)
y = (EXP (2 * x) – 1) / (EXP (2 * x) + 1)
z = 50 * (y + 1)
IF z CROSSES OVER 50 THEN
a=1
ENDIF
IF z CROSSES UNDER 80 THEN
b=1
a=0
ELSE
b=0
ENDIF
IF z CROSSES UNDER 50 THEN
c=-1
b=1
ENDIF
IF z CROSSES OVER 20 THEN
d=-1
c=0
ELSE
d=0
ENDIF
RETURN a AS “Entrada largos”, b AS “Salida largos”, c AS “Entrada cortos”, d AS “Salida cortos”
pero no funciona correctamente. Alguien sabe dónde está el error?
PereParticipant
Veteran
Parece que lo he solucionado bastante bien, aunque se puede mejorar. Me complicaba bastante la vida. Por si le puede ser de utilidad a alguien, ahí ve el código corregido:
REM Inverse Fisher Transform aplicado al RSI
REM Parámetros: n = períodos del RSI
//n = 9
Ind=RSI[n](Close)
x = 0.1 * (Ind - 50)
y = (EXP (2 * x) - 1) / (EXP (2 * x) + 1)
z = 50 * (y + 1)
IF z CROSSES OVER 50 THEN
a=1
ELSIF z CROSSES OVER 80 THEN
a=1
ELSIF z CROSSES UNDER 80 THEN
a=0
ENDIF
IF z CROSSES UNDER 50 THEN
a=-1
ELSIF z CROSSES UNDER 20 THEN
a=-1
ELSIF z CROSSES OVER 20 THEN
a=0
ENDIF
RETURN a AS "Entrada-Salida", 0 AS "cero"
Petrus muchas gracias por compartir su solución. Friendly.
PereParticipant
Veteran
Como ya dije que se podía mejorar, aquí tenéis el código un poco más pulidito. Me olvidaba decir que las dos salidas hay que ponerlas en histograma, verde para largos y rojo para cortos. También hay que añadir la variable n, aunque el valor por defecto de 9 funciona bastante bien.
REM Inverse Fisher Transform aplicado al RSI
REM Parámetros: n = período para el cálculo del RSI
//n = 9
Ind=RSI[n](Close)
x = 0.1 * (Ind - 50)
y = (EXP (2 * x) - 1) / (EXP (2 * x) + 1)
z = 50 * (y + 1)
IF z CROSSES OVER 50 THEN
a=1
ELSIF z CROSSES OVER 80 THEN
a=1
ELSIF z CROSSES UNDER 80 THEN
a=0
ENDIF
IF z CROSSES UNDER 50 THEN
a=0
ENDIF
IF z CROSSES UNDER 50 THEN
b=-1
ELSIF z CROSSES UNDER 20 THEN
b=-1
ELSIF z CROSSES OVER 20 THEN
b=0
ENDIF
IF z CROSSES OVER 50 THEN
b=0
ENDIF
RETURN a AS "Largos", b AS "Cortos", 0 AS "cero"
Bien hecho. Este es un indicador puede publicar en la “Library”, estoy seguro de que será de interés para algunas personas en busca de señales de intraday trading.
Soy principiante y novato, estoy iniciandome y, pretendo utilizar dos medias, una corta y otra larga para aplicar el siguiente desarrollo….
SOS: necesito que me lo ordeneis y completeis… (estoy bloqueao).
_______________________________________
REM Inverse Fisher Transform aplicado al RSI
REM Parámetros: n = período para el cálculo del RSI
//n = 9
Ind=RSI[9](Close)
x = 0.1 * (Ind – 50)
y = (EXP (2 * x) – 1) / (EXP (2 * x) + 1)
z = 50 * (y + 1)
ELSIF z CROSSES UNDER 80 THEN //a=0
IF z CROSSES UNDER 50 THEN //a=0
IF z CROSSES UNDER 50 THEN //b=-1
ELSIF z CROSSES UNDER 20 THEN //b=-1
BUY 1 SHARES AT MARKET
ENDIF
IF z CROSSES OVER 50 THEN //a=1
ELSIF z CROSSES OVER 80 THEN //a=1
ELSIF z CROSSES OVER 20 THEN //b=0
IF z CROSSES OVER 50 THEN //b=0
SELLSHORT 1 SHARES AT MARKET
ENDIF
//RETURN a AS “Largos”, b AS “Cortos”, 0 AS “cero”
_________________________________
Parece que hay conceptos que ProRalTime no acepta…
Muchas gracias por la atencion
PereParticipant
Veteran
Hola Parquecesped.
Hay varios fallos de programación en ese texto, donde evidentemente PRT dará error.
Antes que corregirlo, y suponiendo que quieres hacer lo que yo hice hace ya tiempo, te paso el código que programé. Pon el indicador “Señal” en forma de histograma, dale color verde y rojo y te dará los diferentes niveles de entradas y salidas.
REM Inverse Fisher Transform aplicado al RSI: FisherSIRSI2
REM Parámetros: n = períodos para el cálculo del RSI
n = 9
Ind=RSI[n](Close)
x = 0.1 * (Ind - 50)
y = (EXP (2 * x) - 1) / (EXP (2 * x) + 1)
z = 50 * (y + 1)
IF z CROSSES UNDER 50 THEN
a=0
ELSIF z CROSSES OVER 85 THEN
a=2
ELSIF z CROSSES OVER 99 THEN
a=3
ELSIF z CROSSES UNDER 99 THEN
a=2
ELSIF z CROSSES UNDER 85 THEN
a=1
ELSIF z CROSSES OVER 50 THEN
a=0
ELSIF z CROSSES UNDER 15 THEN
a=-2
ELSIF z CROSSES UNDER 1 THEN
a=-3
ELSIF z CROSSES OVER 1 THEN
a=-2
ELSIF z CROSSES OVER 15 THEN
a=-1
ELSIF z CROSSES OVER 50 THEN
a=0
ENDIF
RETURN a AS "Señal"
PereParticipant
Veteran
Has mezclado mal la programación para hacer un indicador con la programación para realizar trading automático. No te aconsejo de que empieces a operar con el trading automático antes de comprender bien cómo funciona todo, a no ser que lo quieras para hacer backtests. Si es así, tienes que cambiar los diferentes conceptos: primero establece los diferentes indicadores, y luego haz la parte de Proorder con esos indicadores. Si quieres te doy un ejemplo con sistemas simples del tipo medias, y luego tú lo adaptas al indicador anterior:
// Definición de los parámetros del código
DEFPARAM CumulateOrders = False // Acumulación de posiciones desactivada
REM Stop loss
sl=50
//Variables
sl=10
p=5
MyEMA=ExponentialAverage[p](close)
IF close CROSSES OVER MyEMA THEN
k=1
ELSIF close CROSSES UNDER MyEMA THEN
k=-1
ENDIF
// Condiciones para entrada de posiciones largas
IF k=1 THEN
BUY 1 CONTRACT AT MARKET
ENDIF
// Condiciones de salida de posiciones largas
IF k=-1 THEN
SELL AT MARKET
ENDIF
// Condiciones de entrada de posiciones cortas
IF k=-1 THEN
SELLSHORT 1 CONTRACT AT MARKET
ENDIF
// Condiciones de salida de posiciones cortas
IF k=1 THEN
EXITSHORT AT MARKET
ENDIF
// Stops y objetivos
SET STOP pLOSS sl
Agradezco tu atencion. Estoy siguiendo tu guion y practicando backtests.
Te agraderia algunas instruccions basicas sobre como optimizar, lo que no se debe de hacer y, si es posible los pasos a seguir… (la peticion te la hace un estudiante sexagenario..).
Agradezo la estupenda labor que estais desarrollando.
Quedo a vuestra disposicion
Saludos y Feliz Navidad
PereParticipant
Veteran
Pues de sexagenario (casi septuagenario) a sexagenario, no te puedo recomendar en general lo que debes hacer, depende de lo que tengas en mente. Lo único que te puedo recomendar es estudiar mucho, aprender a programar con el Probuilder (hay un PDF por ahí, aunque le faltan muchas cosas, busca en Google), muchas pruebas con backtests (bájate el PDF Probacktest y Proorder), y sobre todo no hagas trading en real (siempre en demo) hasta después de 1,5-2 años de haber empezado. Si tienes alguna duda concreta, pregunta e intentaré ayudarte. Pero lo más importante, bájate esos tres documentos y estudia.