La idea principal de esta estrategia es determinar largo o corto basado en el color de las últimas N velas. Si las últimas N velas son verdes, ir largo; si las últimas N velas son rojas, ir corto. La parte única es la adición de un parámetro
Esta estrategia se basa principalmente en los siguientes parámetros importantes:
La lógica clave es atravesar las últimas velas numCandlesToCheck a través de un bucle for, y contar las velas verdes y rojas consecutivas en tiempo real. Si las velas rojas consecutivas ≥numCandlesToCheck, marcar lastNCandlesRed como verdadero. Si las velas verdes consecutivas ≥numCandlesToCheck, marcar lastNCandlesGreen como verdadero.
Cuando lastNCandlesGreen es verdadero, ir largo si inverseLogic es falso, de lo contrario ir corto.
No importa si es largo o corto, el contador de baresSinceEntry se restablecerá a 0 después de la posición de apertura.
Esta es una estrategia interesante que utiliza el color de las velas para tomar decisiones, con un parámetro
También hay algunos riesgos a tener en cuenta para esta estrategia:
Para hacer frente a estos riesgos, pueden adoptarse las siguientes medidas de control y optimización:
Las principales direcciones de optimización para esta estrategia son:
La idea general de esta estrategia es clara y fácil de entender, generando señales comerciales basadas simplemente en la determinación del color de la vela. El ajuste de parámetros puede formar ricas variaciones de combinación para la optimización dirigida a diferentes entornos y productos del mercado. También es necesario prestar atención a algunos riesgos potenciales y tomar las medidas necesarias para controlarlos. Al enriquecer continuamente el contenido de la estrategia, esta estrategia puede convertirse en una valiosa para seguir optimizando para el comercio a largo plazo.
/*backtest start: 2022-12-25 00:00:00 end: 2023-12-25 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("Last Number of Candles", overlay=true) // Define the condition for a green candle isGreenCandle(candle) => close[candle] > open[candle] // Define the condition for a red candle isRedCandle(candle) => close[candle] < open[candle] // Input to specify the number of candles to check numCandlesToCheck = input(5, title="Number of Candles to Check") numCandlesToExit = input(2, title="Number of Candles To Exit") // Corrected the input title // Initialize variables to count consecutive green and red candles var int consecutiveGreenCandles = 0 var int consecutiveRedCandles = 0 // Initialize barsSinceEntry outside the loop var int barsSinceEntry = 0 // Loop through the last "numCandlesToCheck" candles for i = 0 to numCandlesToCheck - 1 if isGreenCandle(i) consecutiveGreenCandles := consecutiveGreenCandles + 1 consecutiveRedCandles := 0 // Reset the count for consecutive red candles else if isRedCandle(i) consecutiveRedCandles := consecutiveRedCandles + 1 consecutiveGreenCandles := 0 // Reset the count for consecutive green candles // Check if the last "numCandlesToCheck" candles are green or red lastNCandlesGreen = consecutiveGreenCandles >= numCandlesToCheck lastNCandlesRed = consecutiveRedCandles >= numCandlesToCheck // Calculate the quantity based on the investment value and current asset price investmentValue = input(10000, title="Investment Value") var assetPrice = close var quantity = investmentValue / assetPrice inverseLogic = input(false, title="inverseLogic") // Entry condition: Open a buy order if the last "numCandlesToCheck" candles are green if lastNCandlesGreen if inverseLogic strategy.entry("Short", strategy.long, qty = quantity) else strategy.entry("Buy", strategy.long, qty = quantity)// Reset barsSinceEntry when entering a trade barsSinceEntry := 0 // Entry condition: Open a short order if the last "numCandlesToCheck" candles are red if lastNCandlesRed if inverseLogic strategy.entry("Buy", strategy.long, qty = quantity) else strategy.entry("Short", strategy.short, qty = quantity) // Reset barsSinceEntry when entering a trade barsSinceEntry := 0 // Increment barsSinceEntry barsSinceEntry := barsSinceEntry + 1 // Exit condition: Close the position after 2 bars if barsSinceEntry >= numCandlesToExit strategy.close("Buy") strategy.close("Short")