A ideia principal desta estratégia é determinar longo ou curto com base na cor das últimas N velas. Se as últimas N velas forem verdes, vá longo; se as últimas N velas forem vermelhas, vá curto. A parte única é a adição de um parâmetro
Esta estratégia assenta principalmente nos seguintes parâmetros importantes:
A lógica chave é atravessar as últimas velas numCandlesToCheck através de um loop for e contar as velas verdes e vermelhas consecutivas em tempo real. Se as velas vermelhas consecutivas ≥numCandlesToCheck, marque lastNCandlesRed como verdadeiro. Se as velas verdes consecutivas ≥numCandlesToCheck, marque lastNCandlesGreen como verdadeiro.
Quando lastNCandlesGreen é verdadeiro, vá longo se inverseLogic é falso, caso contrário vá curto.
Não importa se é longo ou curto, o contador barSinceEntry será redefinido para 0 após a posição de abertura.
Esta é uma estratégia interessante que usa a cor da vela para tomar decisões, com um parâmetro
Há também alguns riscos a considerar para esta estratégia:
Para combater estes riscos, podem ser adoptadas as seguintes medidas de controlo e otimização:
As principais direcções de otimização para esta estratégia são:
A ideia geral desta estratégia é clara e fácil de entender, gerando sinais de negociação simplesmente com base na determinação da cor da vela. Ajustando parâmetros pode formar variações de combinações ricas para otimização visando diferentes ambientes de mercado e produtos. Também precisa prestar atenção a alguns riscos potenciais e tomar as medidas necessárias para controlá-los. Ao enriquecer continuamente o conteúdo da estratégia, esta estratégia pode se tornar valiosa para manter a otimização para negociação a longo prazo.
/*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")