El backtest practicamente lo tengo finalizado y cuando lo paso en el marco temporal diario, segun veo, la compra la efectua en la vela siguiente.
Se puede de alguna forma, añadir alguna condicion en marco temporal inferior, para que efectue antes la compra? ya que si ves el ejemplo de la imagen, la compra se efectua un 2% ya despues de cuando quiero.
En la imagen te pongo diario y a la derecha horario (el sombreado horario equivale a la vela diaria).
Este es el codigo:
DEFPARAM CumulateOrders = true // Acumulación de posiciones desactivada
compra=0
maximosdecrecientes=(high[4]>high[3] or close[4]>close[3]) and (high[3]>high[2] or close[3]>close[2]) and (high[2]>high[1] or close[2]>close[1])
cMaxDec=0
minimosdecrecientes=low[4]>low[3] and low[3]>low[2] and low[2]>low[1]
cMinDec=0
velasrojas=open[3]>close[3] and open[2]>close[2] and open[1]>close[1]
cVelRoj=0
m20=average[20](close)
cm20=0
c3VelasDebajoM20=0
cPC1=0
cM20Alcista=0
if maximosdecrecientes then
cMaxDec=1
endif
if minimosdecrecientes and vminimosdecrecientes then
cMinDec=1
elsif vminimosdecrecientes=0 then
cMinDec=1
endif
if vvelasrojas and velasrojas then
cVelRoj=1
elsif vvelasrojas=0 then
cVelRoj=1
endif
for i=3 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
posicionminrel=i
break
endif
next
if close[posicionminrel]>m20[posicionminrel] then
cm20=1
endif
if close[1]<m20[1] and close[2]<m20[2] and close[3]<m20[3] then
c3VelasDebajoM20=1
endif
if high>high[1] then
dist=((high[1]-m20[1])/m20[1])*100
if dist<4 then
cPC1=1
endif
endif
if m20>m20[1] and m20[1]>m20[2] then
cM20Alcista=1
endif
if cMaxDec and cMinDec and cVelRoj and cm20 and c3VelasDebajoM20=0 and cPC1 and cM20Alcista then
if low<low[1] then
stoploss=low-low*0.01
else
stoploss=low[1]-low[1]*0.01
endif
// Calcula la cantidad de acciones a comprar basado en el riesgo y el stoploss
capital = 10000 // Capital disponible // Riesgo por operación
precioEntrada = close[0] // Precio actual
cantidadAcciones = floor(riesgo / (precioEntrada – stoploss))
if cantidadAcciones > 0 then
BUY cantidadAcciones SHARES AT MARKET
endif
endif
// Variables para el cálculo de salida
maxAnterior = high[1]
minAnterior = low[1]
maxActual = high
minActual = low
// Condición 1: Vela actual tiene mayor máximo y mayor mínimo que la anterior
condicion1 = (maxActual > maxAnterior and minActual > minAnterior)
// Condición 2: El cierre de la vela actual es superior al cierre de la vela anterior
condicion2 = (close > close[1])
// Si ambas condiciones se cumplen
if condicion1 and condicion2 then
// Establecer el stop loss en el mínimo más bajo de las dos velas anteriores
nuevostoploss=0
if low[1]<low[2] then
nuevostoploss = low[1]-low[1]*0.01
else
nuevostoploss = low[2]-low[2]*0.01
endif
if nuevostoploss>stopLoss then
stopLoss=nuevostoploss
endif
endif
if longonmarket and low<=stopLoss then
SELL AT MARKET
endif
Muchas gracias.