Buenos días. necesito que el sistema de 15min entre solo cuando las condiciones en diario sean las adecuadas, el código no me da problemas a la hora de compilar pero cuando lo llevo al backtesting no lo hace, no se en que estoy fallando a ver si alguien puede echarme una mano . muchísimas gracias.un saludo
DEFPARAM CumulateOrders = False // Acumulación de posiciones desactivada
timeframe(daily,updateonclose)
indicator8 = MACDline[12,26,9](close)
indicator9 = MACDSignal[12,26,9](close)
c10 = (indicator8 > indicator9)
timeframe(15 minutes,updateonclose)
// Condiciones para entrada de posiciones largas
indicator1 = Stochastic[89,3](close)
c1 = (indicator1 CROSSES OVER 80)
indicator2 = MACDline[12,26,9](close)
indicator3 = MACDSignal[12,26,9](close)
c2 = (indicator2 > indicator3)
if indicator1 < 40 then
c3=1
endif
IF c1 AND c2 and c3 THEN
BUY 1 SHARES AT MARKET
c3=0
ENDIF
// Condiciones de salida de posiciones largas
indicator4 = ExponentialAverage[26](close)
c4 = (close < indicator4)
IF c4 THEN
SELL AT MARKET
ENDIF
// Stops y targets
SET TARGET pPROFIT 230
set stop ploss 50
Siempre use el botón “Insert PRT Code” cuando incluya e inserte un código en sus mensajes para que sea más fácil de leer para otros.
Gracias 🙂
Las condiciones C1 y C3 son incompatibles, ambas no pueden ser verdaderas simultáneamente.
Nunca use la condición C10.
Hola robertogozzi perdona por no hacerlo con el botón insert PRT code, no lo sabía .
en cuanto el sistema sí que lo hace bien , el problema es que lo hace en todas las condiciones de diario en vez de hacerlo solo cuando el macdline sea mayor que su señal
Si las condiciones C1 y C3 son incompatibles, ¿cómo se pone en posición? ¡MACD no puede cruzar 80 y ser inferior a 40 al mismo tiempo!
Además, NO utiliza la variable C10 creada en el marco de tiempo diario, entonces, ¿cómo la considera para ingresar al mercado?
El sistema mira primero si el estocastico de 89 ha estado por debajo de 40 que es condición indispensable y después si el estocastico de 89 cruza 80 y el macd es mayor que su señal entonces compra y en el backtesting eso lo hace bien el problema es que solo lo tiene que hacer si en diario el macd es mayor que su señal ( cortado al alza) no sé qué tendría que cambiar. Estoy perdido
El método para verificar si el indicador STOCHASTIC está cruzando 80 después de estar por debajo de 40 debe hacerse de manera diferente.
En primer lugar, si el estocástico cruza al alza 80, primero habrá sido DEFINITIVAMENTE por debajo de 40. Entonces, el punto esencial es saber CUÁNTAS velas antes de haber estado por debajo de 40. Por ejemplo, cuando hay una cruz al alza en 80, debe haber estado primero debajo de 40 por NO MÁS DE 20 velas (u otro valor numérico editable).
Además, está mezclando el STOCHASTIC diario con el de 15 minutos, no tiene mucho sentido verificar que el STOCHASTIC incrico 80 diario y que el de 15 minutos era previamente menor de 40.
Resuma las condiciones que desea, para cada período de tiempo (time frame), como una lista:
- ….
- ….
- ….
después de lo cual intentaré crearlo.
Pues muchísimas gracias
seria:
DIARIO
1/ macdline > que su señal
15 MINUTOS:
1/ estocastico(89) este por debajo de 40 IMPORTANTE
2/ MACDline > su señal
3/ estocastico(89) cruza 80
COMPRA
Ahí tienes:
DEFPARAM CumulateOrders = false
TIMEFRAME(default)
ONCE N = 50 //50 bars to look back for Stochastic to be < 40
//------------------------------------------------------------------
TIMEFRAME(Daily,UpdateOnClose)
SignalD = ExponentialAverage[9](MACDline[12,26,9](close)) //Signal
MyMacdD = MACDline[12,26,9](close) //Macd
c1 = MyMacdD > SignalD
//------------------------------------------------------------------
TIMEFRAME(1 hour,UpdateOnClose)
Signal5 = ExponentialAverage[9](MACDline[12,26,9](close)) //Signal
MyMacd5 = MACDline[12,26,9](close) //Macd
c2 = MyMacd5 > Signal5
//
c3 = Stochastic[89,3](close) CROSSES OVER 80 //Stochastic bullish crossover
c4 = summation[n](Stochastic[89,3](close) < 40) //Stochastic < 40 within the last N bars
cExit = ExponentialAverage[26](close)
//
//------------------------------------------------------------------
TIMEFRAME(default)
Cond = c1 AND c2 AND c3 AND c4
IF Cond AND Not OnMarket THEN
BUY 1 CONTRACT AT MARKET
ENDIF
IF LongOnMarket AND (close < cExit) THEN
SELL AT Market
ENDIF
//
SET TARGET pPROFIT 230
set stop ploss 50
Muchisimas gracias de verdad
Tambien veo que has metido graficos de una hora
Lo sentimos, reemplace la línea 10 con:
TIMEFRAME(15 minute,UpdateOnClose)