Buenas tardes,
Llevo algunos meses creando un sistema automático y lo he lanzado con éxito para ejecutar órdenes a través de IG. Me he dado cuenta que en IG se ejecutan las órdenes correctamente según tengo definido pero en cambio no se crean todas en el backtesting y no encuentro el motivo. Unas si se marcan y otras no.
He resumido mucho la estrategia para que vean lo que sucede.
Estrategia con EURUSD 10 minutos.
En la captura pongo una flecha donde realmente se hizo la operación en corto , pasado día 28/08/24 a las 17h, pero en cambio, en la plataforma backtesting no se ejecuta y no lo entiendo. Todo cuadra y de hecho, se lanzó la orden a través de IG.
// Definición de los parámetros del código
DEFPARAM CumulateOrders = False // Acumulación de posiciones desactivada
// Anular todas las órdenes pendientes y cerrar todas las posiciones a la hora "FLATAFTER"
DEFPARAM FLATAFTER = 213000
// Impide al sistema crear nuevas órdenes para entrar al mercado a aumentar el tamaño de la posición antes de una hora precisa
noEntryBeforeTime = 060000
timeEnterBefore = time >= noEntryBeforeTime
// Impide al sistema lanzar nuevas órdenes para entrar al mercado o aumentar el tamaño de la posición después de una hora precisa
noEntryAfterTime = 210000
timeEnterAfter = time < noEntryAfterTime
// Impide al sistema operar en días precisos de la semana
daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0
indicator97 = 0.006
c98 = (indicator97 <= 0.0050)
c99 = (indicator97 > 0.0050)
// Condiciones de entrada de posiciones cortas
indicator30 = Stochastic[14,3](close)
c31 = (indicator30 >80)
indicator31= highest[5](HIGH)
c32 = (close<indicator31)
c33 = close<Open
c43 = lowest[10](low)<close*0.999
c46 = (high[19]>close) OR (high[20]>close) OR (high[21]>close)
c42 = low<=(TRADEPRICE(1)*0.9991)
IF c31 AND c32 AND c33 AND c43 AND c46 AND c99 AND timeEnterBefore AND timeEnterAfter AND not daysForbiddenEntry THEN
SELLSHORT 3 CONTRACT AT MARKET
ENDIF
// Condiciones de salida de posiciones cortas
IF c99 AND c42 THEN
EXITSHORT AT MARKET
ENDIF
// Stops y targets
SET STOP pLOSS 10
//trailing stop function
trailingstart = 3 //trailing will start @trailinstart points profit
trailingstep = 3 //trailing step to move the "stoploss"
//reset the stoploss value
IF NOT ONMARKET THEN
newSL=0
ENDIF
//manage long positions
IF LONGONMARKET THEN
//first move (breakeven)
IF newSL=0 AND High -tradeprice(1)>=trailingstart*pipsize THEN
newSL = High *0.999
ENDIF
//next moves
IF newSL>0 AND High -newSL>=trailingstep*pipsize THEN
newSL = High *0.999
ENDIF
ENDIF
//manage short positions
IF SHORTONMARKET THEN
//first move (breakeven)
IF newSL=0 AND tradeprice(1)-low >=trailingstart*pipsize THEN
newSL = Low*1.001
ENDIF
//next moves
IF newSL>0 AND newSL-low >=trailingstep*pipsize THEN
newSL = Low*1.001
ENDIF
ENDIF
//stop order to exit the positions
IF newSL>0 THEN
SELL AT newSL STOP
EXITSHORT AT newSL STOP
ENDIF
//************************************************************************
Gracias por vuestro soporte.
Albert.
Añado otro recorte donde tampoco se ejecuta la order en el backtesting y en cambio sí lanza la orden de entrada en corto en IG tal y como tengo programado.
Día 29/8 a las 18:10h
A ver si se puede averiguar porque el programa no muestra la órden.
Gracias
Albert.
Buenas tardes,
Después de muchas pruebas, veo que si cambio la fecha de simulación y empiezo la simulación unas horas antes de que se cumplan las condiciones, si que aparece la operación en el backtesting. Es como si tuviese un limite de operaciones por día o algo similar y por eso no aparecen todas las entradas, ¿es posible?
No encuentro ningún sentido a este error.
A ver si Roberto tiene alguna explicación.
Gracias.
Albert
Hola,
Puedes probar con la instrucción DEFPARAM PRELOADBARS = 200 para que cargue barras antes del backtesting.
Gracias pero me parece que ese no es el problema.
Pienso que el backtesting solo ejecuta un porcentaje de entradas, no todas las posibles. Si hago un backtesting a 6 meses vista , no hace esa operacion, en cambio si empiezo unas horas antes del dia de la ejecución, sí que aparece.
Es rarísimo.
Gracias,
Albert