Compras cuando cumple condicion
Forums › ProRealTime foro Español › Soporte ProOrder › Compras cuando cumple condicion
- This topic has 3 replies, 2 voices, and was last updated 3 months ago by mamees.
-
-
08/14/2024 at 12:00 PM #236391
Tengo el siguiente codigo:
DEFPARAM CumulateOrders = False // Acumulación de posiciones desactivada
Minimorelevante=0
posicionMinRel=0
for i=0 to 251
if i>=3 then
minRel = (low[i] < low[i-3]) AND (low[i] < low[i-2]) AND (low[i] < low[i-1]) AND (low[i] < low[i+1]) AND (low[i] < low[i+2]) AND (low[i] < low[i+3])
if minRel then
Minimorelevante=1
posicionMinRel=i
endif
endif
nextif Minimorelevante then
BUY 1 SHARES AT MARKET
endifY no quiero que compre en la vela actual, sino en la vela que cumple la condición, es decir, en la vela posicionMinRel.
Como puedo hacerlo? Aporto grafico.
En el grafico, donde tengo las flechas rosas, es un indicador que cree en su momento y indica los minimos donde quiero hacer las compras.
Muchas gracias.
Un saludo.
08/14/2024 at 1:15 PM #236398Buenas!
ten encuenta que según tu código estás buscando un mínimo relevante. según tu condición de mínimo relevante se verifica en la tercera vela después de haber alcanzado el mínimo, hasta entonces no.
Por este motivo tienes que esperar 3 velas hasta que se cumpla la condición de mínimo relevante. Si ahora le añades la orden de compra, como no lo hace hasta la apertura de la vela siguiente pues te encuentras con que han pasado 4 velas desde que se dio ese mínimo relevante…
Por otro lado, quizás, mejor que un bucle podrías utilizar esto:123456minRel = (low[3] < low) AND (low[3] < low[1]) AND (low[3] < low[2]) AND (low[3] < low[4]) AND (low[3] < low[5]) AND (low[3] < low[6])if minRel thendrawarrowup(barindex[3],low[3]-tr)coloured("red")endifreturnSe trata de un indicador que marca los mínimos relevantes según tus requisitos.
Por otro lado, el sistema comprará en la 4 vela:123456789DEFPARAM CumulateOrders = False // Acumulación de posiciones desactivadaminRel = (low[3] < low) AND (low[3] < low[1]) AND (low[3] < low[2]) AND (low[3] < low[4]) AND (low[3] < low[5]) AND (low[3] < low[6])if not onmarket and minRel thenbuy 1 contract at marketset stop %loss 2set target %profit 2endifUna opción para garantizar que entras al precio del mínimo relevante es lanzar una orden de tipo límite que te asegure la entrada a partir de la tercera vela siempre y cuando el precio toque el mínimo relevante:
1234567891011121314DEFPARAM CumulateOrders = False // Acumulación de posiciones desactivadaminRel = (low[3] < low) AND (low[3] < low[1]) AND (low[3] < low[2]) AND (low[3] < low[4]) AND (low[3] < low[5]) AND (low[3] < low[6])if not onmarket thenif minRel thenprecio=low[3]endifbuy 1 contract at precio limitset stop %loss 2set target %profit 2elseprecio=0 //Reiniciar el precio para la orden límiteendifEn fin, que puedes trastear con los códigos que te he pasado para sacar un sistema que se ajuste a lo que buscas…
08/16/2024 at 10:29 AM #236428He puesto al final este codigo y hace que lo que quiero, lo que no entiendo es porque solo hace 1 compra, te señalo donde deberia hacer la 2a compra.
Lo que busco en este backtest, es que una vez identifico que es el minimo relevante (3 minimos a su izquierda mas elevados y a su derecha), que la vela que pierde ese minimo y lo recupere, se haga la compra.
Lo he conseguido pero solo me hace 1, quiero saber que me falta para que cada vez que cumpla, haga la compra.
DEFPARAM CumulateOrders = false // Acumulación de posiciones desactivada
compra=0
minimorelevante=0
for i=4 to 251
minRel = (low[i] < low[i-3]) AND (low[i] < low[i-2]) AND (low[i] < low[i-1]) AND (low[i] < low[i+1]) AND (low[i] < low[i+2]) AND (low[i] < low[i+3])
if minRel then
minimorelevante=low[i]
break
endif
nextif low<minimorelevante and close>minimorelevante then
compra=1
endifif compra then
BUY 1 SHARES AT MARKET
endif// Contador para la venta
if longonmarket then
contadorVela = contadorVela + 1
endif// Venta después de 2 velas
if contadorVela >= 2 then
SELL AT MARKET
endifMuchas gracias,
08/16/2024 at 10:35 AM #236430Lo he solucionado, era por la venta.
DEFPARAM CumulateOrders = false // Acumulación de posiciones desactivada
compra=0
minimorelevante=0
for i=4 to 251
minRel = (low[i] < low[i-3]) AND (low[i] < low[i-2]) AND (low[i] < low[i-1]) AND (low[i] < low[i+1]) AND (low[i] < low[i+2]) AND (low[i] < low[i+3])
if minRel then
minimorelevante=low[i]
break
endif
nextif low<minimorelevante and close>minimorelevante then
compra=1
endifif compra then
BUY 1 SHARES AT MARKET
endifif longonmarket and close < minimorelevante then
SELL AT MARKET
endif -
AuthorPosts
Find exclusive trading pro-tools on