Esta estrategia se llama
La lógica básica es contar el número de velas de cierre (upCloseCount) y de cierre (downCloseCount) en el período de retroalimentación reciente. Si upCloseCount es mayor, indica un mercado alcista. Si downCloseCount es mayor, indica un mercado bajista. El indicador EMA se utiliza como filtro, solo considerando el largo cuando el precio > EMA, y el corto cuando el precio < EMA. También establece la sesión1 y la sesión2 como sesiones de negociación.
La lógica detallada:
La señal larga se activa cuando: inSession es true (en las sesiones de negociación) y upCloseCount > downCloseCount (más cerradas las velas) y close > ema (precio de cierre superior a la EMA) y currentSignal no es
La señal corta se activa cuando: inSession es true y downCloseCount > upCloseCount (más abajo cerrar velas) y close < ema (precio de cierre inferior a la EMA) y currentSignal no es
Soluciones:
Esta estrategia identifica las señales de tendencia comparando velas cerradas y cerradas y utilizando el filtro EMA, dentro de las sesiones de negociación preestablecidas. Tiene algún efecto de seguimiento de tendencia pero también riesgos de señales falsas. Mejorar optimizando parámetros, agregando stop loss, mejorando filtros, etc. Evaluar a fondo en backtest.
/*backtest start: 2023-11-26 00:00:00 end: 2023-12-26 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Up vs Down Close Candles Strategy with EMA and Session Time Frames", shorttitle="UvD Strat EMA Session", overlay=true) // User input to define the lookback period, EMA period, and session strings for time frames int lookback = input(20, title="Lookback Period") int emaPeriod = input(50, title="EMA Period") string session1 = input("0900-1200", title="Time Frame 1 Session") string session2 = input("1300-1600", title="Time Frame 2 Session") // Calculate the EMA float ema = ta.ema(close, emaPeriod) // State variable to track the current signal var string currentSignal = na // Counting up-close and down-close candles within the lookback period int upCloseCount = 0 int downCloseCount = 0 if barstate.isnew upCloseCount := 0 downCloseCount := 0 for i = 0 to lookback - 1 if close[i] > close[i + 1] upCloseCount += 1 else if close[i] < close[i + 1] downCloseCount += 1 // Define the long (buy) and short (sell) conditions with EMA filter and session time frame bool inSession = time(timeframe.period, session1) or time(timeframe.period, session2) bool longCondition = inSession and upCloseCount > downCloseCount and close > ema and currentSignal != "long" bool shortCondition = inSession and downCloseCount > upCloseCount and close < ema and currentSignal != "short" // Enter or exit the market based on conditions if longCondition currentSignal := "long" strategy.entry("Buy", strategy.long) if shortCondition currentSignal := "short" strategy.entry("Sell", strategy.short) // Exit logic for long and short positions if currentSignal == "long" and strategy.position_size <= 0 strategy.close("Sell") if currentSignal == "short" and strategy.position_size >= 0 strategy.close("Buy") plot(ema, color=color.blue, title="EMA")