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
next
if Minimorelevante then
BUY 1 SHARES AT MARKET
endif
Y 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.
Buenas!
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:
minRel = (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 then
drawarrowup(barindex[3],low[3]-tr)coloured("red")
endif
return
Se trata de un indicador que marca los mínimos relevantes según tus requisitos.
Por otro lado, el sistema comprará en la 4 vela:
DEFPARAM CumulateOrders = False // Acumulación de posiciones desactivada
minRel = (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 then
buy 1 contract at market
set stop %loss 2
set target %profit 2
endif
Una 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:
DEFPARAM CumulateOrders = False // Acumulación de posiciones desactivada
minRel = (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 then
if minRel then
precio=low[3]
endif
buy 1 contract at precio limit
set stop %loss 2
set target %profit 2
else
precio=0 //Reiniciar el precio para la orden límite
endif
En fin, que puedes trastear con los códigos que te he pasado para sacar un sistema que se ajuste a lo que buscas…
He 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
next
if low<minimorelevante and close>minimorelevante then
compra=1
endif
if 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
endif
Muchas gracias,
Lo 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
next
if low<minimorelevante and close>minimorelevante then
compra=1
endif
if compra then
BUY 1 SHARES AT MARKET
endif
if longonmarket and close < minimorelevante then
SELL AT MARKET
endif