Comprar en otro marco temporal para no esperar a finalizar la vela
Forums › ProRealTime foro Español › Soporte ProOrder › Comprar en otro marco temporal para no esperar a finalizar la vela
- This topic has 9 replies, 2 voices, and was last updated 2 months ago by robertogozzi.
-
-
08/18/2024 at 8:56 AM #236461
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=0if maximosdecrecientes then
cMaxDec=1
endifif minimosdecrecientes and vminimosdecrecientes then
cMinDec=1
elsif vminimosdecrecientes=0 then
cMinDec=1
endifif vvelasrojas and velasrojas then
cVelRoj=1
elsif vvelasrojas=0 then
cVelRoj=1
endiffor 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
nextif close[posicionminrel]>m20[posicionminrel] then
cm20=1
endifif close[1]<m20[1] and close[2]<m20[2] and close[3]<m20[3] then
c3VelasDebajoM20=1
endifif high>high[1] then
dist=((high[1]-m20[1])/m20[1])*100
if dist<4 then
cPC1=1
endif
endifif m20>m20[1] and m20[1]>m20[2] then
cM20Alcista=1
endifif 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
endifendif
// 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
endifif longonmarket and low<=stopLoss then
SELL AT MARKET
endifMuchas gracias.
08/18/2024 at 12:31 PM #236470Faltan algunas variables, publique o adjunte el archivo ITF.
08/18/2024 at 10:28 PM #23648808/19/2024 at 9:23 AM #236499Prueba esta versión:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143DEFPARAM CumulateOrders = true // Acumulación de posiciones desactivadaTimeframe(Daily)IF OnMarket THENSenal = 0ENDIF//vminimosdecrecientes=0//vvelasrojas=0//riesgo=100compra=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])maximosdecrecientes=high[4]>high[3] and high[3]>high[2] and high[2]>high[1] and low[4]<high[3] and low[3]<high[2] and low[2]<high[1]cMaxDec=0minimosdecrecientes=low[4]>low[3] and low[3]>low[2] and low[2]>low[1]cMinDec=0velasrojas=open[3]>close[3] and open[2]>close[2] and open[1]>close[1]cVelRoj=0c3VelasDebajoM20=0cPC1=0m20=average[20](close)m40=average[40](close)cM2040Alcista=0cHPBajista=0if maximosdecrecientes thencMaxDec=1endifif minimosdecrecientes and vminimosdecrecientes thencMinDec=1elsif vminimosdecrecientes=0 thencMinDec=1endifif vvelasrojas and velasrojas thencVelRoj=1elsif vvelasrojas=0 thencVelRoj=1endifif close[1]<m20[1] and close[2]<m20[2] and close[3]<m20[3] thenc3VelasDebajoM20=1endifif high>high[1]+high[1]*0.003 thendist=((high[1]-m20[1])/m20[1])*100if dist<4 thencPC1=1endifendifif m20>m20[1] and m20[1]>m20[2] and m40>m40[1] and m40[1]>m40[2] and m40[2]>m40[3] thencM2040Alcista=1endifif cMaxDec and cMinDec and cVelRoj and c3VelasDebajoM20=0 and cPC1 and cM2040Alcista thenfor j=1 to 4if close[j]>open[j] thencuerpoAlcista = close[j] - open[j]puntoMedio = open[j] + (cuerpoAlcista * 0.5)if open[j-1]<puntoMedio and open[j-1]>close[j-1] thenif j>2 and high[1]<open[j-1] thencHPBajista=1endifif j<=2 and high[1]<open[2] thencHPBajista=1endifendifendifnextif cHPBajista=0 thenif low<low[1] thenstoploss=low-low*0.01elsestoploss=low[1]-low[1]*0.01endif// Calcula la cantidad de acciones a comprar basado en el riesgo y el stoplosscapital = 10000 // Capital disponible // Riesgo por operaciónprecioEntrada = close[0] // Precio actualcantidadAcciones = floor(riesgo / (precioEntrada - stoploss))Senal = 0if cantidadAcciones > 0 thenSenal = 1//BUY cantidadAcciones SHARES AT MARKETendifendifendif// Variables para el cálculo de salidamaxAnterior = high[1]minAnterior = low[1]maxActual = highminActual = low// Condición 1: Vela actual tiene mayor máximo y mayor mínimo que la anteriorcondicion1 = (maxActual > maxAnterior and minActual > minAnterior)// Condición 2: El cierre de la vela actual es superior al cierre de la vela anteriorcondicion2 = (close > close[1])// Si ambas condiciones se cumplenif condicion1 and condicion2 then// Establecer el stop loss en el mínimo más bajo de las dos velas anterioresnuevostoploss=0if low[1]<low[2] thennuevostoploss = low[1]-low[1]*0.01elsenuevostoploss = low[2]-low[2]*0.01endifif nuevostoploss>stopLoss thenstopLoss=nuevostoplossendifendifif longonmarket thenif low <= stopLoss thenSELL AT MARKET//elsif high >= takeProfit then//SELL AT MARKETendifendifTimeframe(default)IF Senal THENBUY cantidadAcciones SHARES AT MARKETENDIFTIMEFRAME(WEEKLY)for i=3 to 251maxRel = (high[i] > high[i-3]) AND (high[i] > high[i-2]) AND (high[i] > high[i-1]) AND (high[i] > high[i+1]) AND (high[i] > high[i+2]) AND (high[i] > high[i+3])if maxRel and high[i]>close thentakeProfit=high[i]breakendifnextif longonmarket thenif high >= takeProfit thenSELL AT MARKETendifendif08/19/2024 at 4:14 PM #236519Sigue sin funcionar.
Lo que estoy pensando es, hago las condiciones diarias y las lanzo en marco temporal inferior.
Por tanto, para mi lo importante es:
if high>high[1]+high[1]*0.003 thendist=((high[1]–m20[1])/m20[1])*100if dist<4 thencPC1=1endifendifEl maximo que tengo en la vela de ayer, en horario es la zona sombreada, como puedo saber el maximo en horario que equivaldria a la vela de ayer?asi pongo que se ejecute en horario una vez supere el maximo diario (en horario te lo marco).Muchas gracias.08/19/2024 at 5:39 PM #236522He mirado con el DHigh(1) por ejemplo, para saber el maximo de ayer.
Pero veo que el problema reside en que en diario debe de cumplir unas condiciones.
Y si no se cumplen no quiero que se ejecute, por lo que la variable que usaria como condicion diaria no la puedo usar en horario o 15min.
hay alguna forma de poder poner condiciones en un marco temporal y en el inferior ver si ha cumplido y ejecutar?
08/19/2024 at 5:58 PM #236523El nuevo codigo modificado con lo que te comento:
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])
TIMEFRAME(DAILY)
maximosdecrecientes=high[4]>high[3] and high[3]>high[2] and high[2]>high[1] and low[4]<high[3] and low[3]<high[2] and low[2]<high[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
c3VelasDebajoM20=0
m20=average[20](close)
m40=average[40](close)
cM2040Alcista=0
cHPBajista=0
cDistM20=0if maximosdecrecientes then
cMaxDec=1
endifif minimosdecrecientes and vminimosdecrecientes then
cMinDec=1
elsif vminimosdecrecientes=0 then
cMinDec=1
endifif vvelasrojas and velasrojas then
cVelRoj=1
elsif vvelasrojas=0 then
cVelRoj=1
endifif close[1]<m20[1] and close[2]<m20[2] and close[3]<m20[3] then
c3VelasDebajoM20=1
endifif m20>m20[1] and m20[1]>m20[2] and m40>m40[1] and m40[1]>m40[2] and m40[2]>m40[3] then
cM2040Alcista=1
endifif ((high[1]-m20[1]/m20[1])*100)<5 then
cDistM20=1
endiffor j=1 to 4
if close[j]>open[j] then
cuerpoAlcista = close[j] – open[j]
puntoMedio = open[j] + (cuerpoAlcista * 0.5)
if open[j-1]<puntoMedio and open[j-1]>close[j-1] then
if j>2 and high[1]<open[j-1] then
cHPBajista=1
endif
if j<=2 and high[1]<open[2] then
cHPBajista=1
endif
endif
endif
nextif cMaxDec and cMinDec and cVelRoj and c3VelasDebajoM20=0 and cM2040Alcista and cDistM20 and cHPBajista=0 then
compra=1
endifTIMEFRAME(DEFAULT)
if compra then
maximoAyer=DHigh(1)
minimoAyer=DLow(1)
if high>maximoAyer+maximoAyer*0.003 then
if low<low[1] then
stoplss=low-low*0.01
else
stoplss=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 – stoplss))
if cantidadAcciones > 0 then
BUY cantidadAcciones SHARES AT MARKET
endif
endif
endifTIMEFRAME(DAILY)
// 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
endifif longonmarket then
if low <= stopLoss then
SELL AT MARKET
//elsif high >= takeProfit then
//SELL AT MARKET
endif
endifTIMEFRAME(WEEKLY)
for i=3 to 251
maxRel = (high[i] > high[i-3]) AND (high[i] > high[i-2]) AND (high[i] > high[i-1]) AND (high[i] > high[i+1]) AND (high[i] > high[i+2]) AND (high[i] > high[i+3])
if maxRel and high[i]>close then
takeProfit=high[i]
break
endif
nextif longonmarket then
if high >= takeProfit then
SELL AT MARKET
endif
endif08/21/2024 at 3:37 PM #236580El código está incompleto. Si intento agregar las variables que faltan, aparece un error debido al período de tiempo. Publique el archivo ITF e intente explicarme nuevamente lo que quiere lograr.
08/31/2024 at 10:58 AM #236943Borre el archivo.
Lo he dejado por el momento ese caso.
Estoy haciendo uno que si me gusta, y es este: Añado el archivo ITF que es mas sencillo.
Mi duda es, una vez salta el stop, puedo saber cuando sucedio? Para que si sucedio hace menos de 5 velas, entonces en vez de comprar 1, compre 2.
En el caso de la imagen, seria, se hace 1 compra, me salta el stop, como la nueva compra sucede en menos de 5 velas desde que salto el stop, quiero comprar 2, no 1.
Si hubiese pasado mas de 5 velas, entonces la compra que solo sea de 1, no 2.
Para el caso de la imagen, donde esta la flecha negra debería comprar 2 y donde la azul solo 1.
Adjunto imagen para explicar.
Muchas gracias!
09/02/2024 at 10:30 AM #237004Prueba esta versión:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465// Definición de los parámetros del códigoDEFPARAM CumulateOrders = true // Acumulación de posiciones desactivadavelasBajoM200=0m200 = average[200](close)TIMEFRAME(WEEKLY)m20s = average[20](close)m40s = average[40](close)cM20MayorM40 = m20s>m40s and m20s[1]>m40s[1] and m20s[2]>m40s[2] and m20s[3]>m40s[3]cM20JuntandoseM40 = m20s<m20s[1] and m20s[1]<m20s[2] and m40s>m40s[1] and m40s[1]>m40s[2] and m40s[2]>m40s[3]TIMEFRAME(DEFAULT)ONCE Cerrada = 0// Condiciones para entrada de posiciones largasc1 = (close >= m200 and open <m200 and cM20MayorM40 and cM20JuntandoseM40)IF c1 THENstoploss=openesperar=0numerodevelas = BarIndex - CerradaIF numerodevelas > 5 THENBUY 1 SHARES AT MARKETELSEBUY 2 SHARES AT MARKETENDIFENDIFif longonmarket thenif esperar>=0 thenesperar=esperar+1endifif esperar>2 then// Variables para el cálculo de salidamaxAnterior = high[1]minAnterior = low[1]maxActual = highminActual = low// Condición 1: Vela actual tiene mayor máximo y mayor mínimo que la anteriorcondicion1 = (maxActual >= maxAnterior and minActual >= minAnterior)// Condición 2: El cierre de la vela actual es superior al cierre de la vela anteriorcondicion2 = (close >= close[1])// Si ambas condiciones se cumplenif condicion1 and condicion2 then// Establecer el stop loss en el mínimo más bajo de las dos velas anterioresif low[1]<low[2] thennuevostoploss=low[1]-low[1]*0.01elsenuevostoploss=low[2]-low[2]*0.01endifif nuevostoploss>stopLoss thenstopLoss=nuevostoplossendifendifendifif close <= stopLoss thenSELL AT MARKETCerrada = BarIndexendifendif -
AuthorPosts
Find exclusive trading pro-tools on