Hola a todos,
Es mi primer mensaje en el foro, disculpas si la pregunta es muy obvia:
Me gustaría programar un trading automático que haga lo siguiente:
- Calcule el máximo del primer minuto de la sesión en USA (15:30 horario España – 9:30 horario USA).
- Compre una cantidad de acciones determinada por un dinero (en el caso que pongo 1000$) mediante una orden STOP LIMIT, donde STOP será el máximo de la vela del primer minuto y LIMIT será el 0’3% por encima
- Coloque automáticamente un StopLoss al 1% por abajo y un TakeProfit al 1% por arriba.
Lo quier hacer cuando se produzca un gap bajista, aprovechar esa primera tendencia del mercado a corregir e intentar tapar el gap.
Esto es lo que he hecho yo, pero no me hace caso:
// Definición de los parámetros del código
DEFPARAM CumulateOrders = False // Acumulación de posiciones desactivada
If time = 093000 THEN
IF NOT ONMARKET AND CLOSE<=high*1.003 THEN
BUY 1000 CASH AT high STOP
ENDIF
// Stops y targets
SET STOP %LOSS 1
SET TARGET %PROFIT 1
ENDIF
¿Alguien me puede ayudar? Gracias de antemano
La hora debe ser CET (o UTC+1), no US EST, es decir, 153000, no 093000.
El primer minuto se devuelve usando OPENTIME, ya que TIME es cuando comienza la vela 093000.
¿El GAP tiene que ocurrir también en el primer minuto?
// Definición de los parámetros del código
DEFPARAM CumulateOrders = False // Acumulación de posiciones desactivada
If OPENTIME = 153000 THEN
IF NOT ONMARKET AND CLOSE<=high*1.003 THEN
BUY 1000 CASH AT high STOP
ENDIF
// Stops y targets
SET STOP %LOSS 1
SET TARGET %PROFIT 1
ENDIF
Hola Roberto (no sé como citarte para que lo veas),
Gracias por responder.
El Gap ocurre porque el día anterior cierra a un precio y hoy abre a un precio inferior (meto en una lista los valores que abren con gap, y el trading automático lo ejecutaría sobre todos los valores de esta lista).
Edito mi primer mensaje cambiando lo de TIME por OPENTIME
Hola
Podría ser algo así (definiendo el gaplimit)
DEFPARAM CumulateOrders = False
gap = (open - close[1])/close[1]*100
gaplimit = -0.35
IF NOT ONMARKET AND gap < gaplimit and OPENTIME = 153000 THEN
BUY 1000 CASH AT high STOP
ENDIF
// Stops y targets
SET STOP %LOSS 1
SET TARGET %PROFIT 1
Hola Roberto e Iván
Me gustaría citaros sin incluir vuestro mensaje, para que podáis ver mi post, pero no lo consigo…
Con este código que pongo me compra entre 15:30h y 16:00h siempre que se encuentre un nuevo máximo.
DEFPARAM CumulateOrders = FALSE
ONCE HH = higH
IF OpenTime >= 153000 AND OpenTime <= 160000 THEN
IF OpenTime = 153000 THEN
HH = high
ENDIF
IF NOT ONMARKET THEN
BUY 1000 CASH AT HH STOP
ENDIF
SET STOP %LOSS 1
SET TARGET %PROFIT 1
ENDIF
Me gustaría que comprara UNA ÚNICA VEZ, se superara el máximo de la sesión, o no.
Y por último, me gustaría que cuando comprara en lugar de ejecutar una orden STOP, fuera una orden STOP LIMIT.
Gracias
No te preocupes, no hace falta que me cites, solo somos 3 y de todos modos leo todos los posts, aunque no respondo a todos.
Puedes comprar LIMIT cuando el precio actual sea superior al precio de entrada, es decir, HH:
DEFPARAM CumulateOrders = FALSE
ONCE HH = 0
IF OnMarket THEN
HH = 0
ENDIF
IF OpenTime >= 153000 AND OpenTime <= 160000 THEN
IF OpenTime = 153000 THEN
HH = high
ENDIF
IF NOT ONMARKET AND HH <> 0 AND close > HH THEN
BUY 1000 CASH AT HH LIMIT
ENDIF
SET STOP %LOSS 1
SET TARGET %PROFIT 1
ENDIF
Hola,
He conseguido mejoras relevantes en mi código. Sólo me compra una única vez.
He notado lo siguiente, y mando fotos para explicarme mejor:
– Me compra en el máximo del primer minuto, si la vela siguiente supera ese máximo; poniendo SL y TP al 1% (foto adjunta 1: GB_compra1.jpg)
– No me compra en el máximo del primer minuto, si la vela siguiente no lo supera. Aunque sí lo superaría en unos minutos después (foto adjunta 2: GB_compra2.jpg)
El comportamiento que tiene mi código en el primer caso es el correcto.
En el segundo caso, me gustaría que siguiera intentando comprar en los minutos sucesivos (al menos los 10 primeros minutos). Luego ya, con el arreón de apertura del mercado más apaciguado, podría ir mirando manualmente a qué valor entrar.
A continuación muestro el código que tengo, a ver si me podéis echar una mano a solucionar el segundo caso:
DEFPARAM CumulateOrders = FALSE
ONCE HH = 0
IF OpenTime >= 153000 AND OpenTime <= 160000 THEN
IF OpenTime = 153000 THEN
HH = high
ENDIF
IF NOT ONMARKET AND HH<>0 THEN
BUY 1000 CASH AT HH STOP
SET STOP %LOSS 1
SET TARGET %PROFIT 1
HH=0
ENDIF
ENDIF
Muchas gracias de antemano, un saludo,
Hola !!
Casi lo tengo !!
En ProBackTest me funciona sin problemas el siguiente código
Ahora, siempre compra en el máximo de la primera vela de minuto (da igual si la siguiente vela marca un nuevo máximo o no):
DEFPARAM CumulateOrders = FALSE
ONCE HH = 0
IF OpenTime >= 153000 AND OpenTime <= 160000 THEN
IF OpenTime = 153000 THEN
HH = high
ENDIF
// SI EL MÁXIMO DE LA VELA DEL MINUTO 1 SUPERA HH, HH VALE 0
IF high>HH THEN
HH=0
ENDIF
IF NOT ONMARKET AND HH<>0 THEN
BUY 2500 CASH AT HH STOP
SET STOP %LOSS 1
SET TARGET %PROFIT 1
ENDIF
ENDIF
Pero cuando voy a ProOrden AutoTrading (de momento en PaperTrading porque lo quiero probar bien antes), sólo me funciona si el segundo minuto no establece un nuevo máximo.
Y no entiendo muy bien por qué…. Ya conseguí que sólo comprara una vez reseteando HH a 0 y así no entra en el IF del mercado.
Sé que es una tontería lo que me falta, pero no consigo dar con ella.
¿Alguien me ayuda? Estaría muy agradecido 🙂
Un aludo,
Si entiendo correctamente, ¿quieres comprar como MÁXIMO el primer minuto de la sesión de USA?
¿Pero se puede comprar sólo en el segundo minuto o incluso después?
Hola Roberto,
Quiero comprar a partir del minuto 15:31 – segunda vela (puede ser en 15:31h – segunda vela, 15:32h – tercera vela,… hasta 16:00h porque la volatilidad en USA ya baja bastante a partir de las 16:00h).
Y el precio al que quiero comprar es el máximo de la primera vela (lo recojo donde digo;
IF OpenTime = 153000 THEN
HH = high
ENDIF
Ya lo ideal sería comprar con orden STOP LIMIT, pero de momento no me corre prisa solucionar ese problema
Tu escribiste “Pero cuando voy a ProOrden AutoTrading (de momento en PaperTrading porque lo quiero probar bien antes), sólo me funciona si el segundo minuto no establece un nuevo máximo“, pero en el código pones estas líneas para impedir la entrada cuando haya un nuevo Máximo.
Simplemente quítatelos:
IF high>HH THEN
HH=0
ENDIF
Este código me funciona correctamente, sin embargo NO ingresa si se logra un nuevo máximo después de la barra inicial de las 15:30:
DEFPARAM CumulateOrders = FALSE
ONCE HH = 0
IF OpenTime >= 153000 AND OpenTime <= 160000 THEN
IF OpenTime = 153000 THEN
HH = high
ENDIF
// SI EL MÁXIMO DE LA VELA DEL MINUTO 1 SUPERA HH, HH VALE 0
IF high>HH THEN
HH=0
ENDIF
IF NOT ONMARKET AND HH<>0 THEN
BUY 2500 CASH AT HH STOP
SET STOP %LOSS 1
SET TARGET %PROFIT 1
ENDIF
ENDIF