
A principal idéia desta estratégia é decidir sobre o excesso ou a falta de espaço com base na cor da última N linha K. Se a última N linha K for verde, faça mais; se a última N linha K for vermelha, faça vazio. A sua singularidade é a adição de um parâmetro de um parâmetro de lógica inversa, que pode ser invertido em relação à lógica original.
Esta estratégia depende principalmente dos seguintes parâmetros importantes:
A lógica-chave é percorrer apenas as linhas K mais recentes do numCandlesToCheck por um ciclo de for e, em tempo real, estudar o número de linhas K verdes e linhas K vermelhas que aparecem em sequência. Marque lastNCandlesRed como verdadeiro se for uma linha K vermelha ≥numCandlesToCheck. Marque lastNCandlesGreen como verdadeiro se for uma linha K verde ≥numCandlesToCheck.
Quando lastNCandlesGreen é verdadeiro, se o argumento inversoLogic for falso, faz mais; se for verdadeiro, faz vazio. Por outro lado, quando lastNCandlesRed é verdadeiro, se o argumento inversoLogic for falso, faz vazio; se for verdadeiro, faz mais.
Independentemente do número de candeias feitas, o contador barsSinceEntry será reajustado para 0 após a abertura da posição. Quando o barsSinceEntry for maior do que é igual a numCandlesToExit, a posição atual será liquidada.
Esta é uma estratégia interessante de usar a decisão de cores de linha K, com o acréscimo de um parâmetro de coluna de lógica inversa de coluna, que pode ser flexível para ajustar a lógica de fazer mais do que o que você fez. As principais vantagens são:
A estratégia também apresenta alguns riscos que devem ser lembrados:
Os riscos acima mencionados podem ser controlados e otimizados através das seguintes medidas:
A estratégia pode ser melhorada principalmente nas seguintes direções:
O conceito geral da estratégia é claro e fácil de entender, usando um simples K-line colorido para determinar a formação de sinais de negociação. O ajuste dos parâmetros da estratégia pode formar uma rica combinação de mudanças, permitindo o ajuste de otimização para diferentes ambientes e variedades de mercado.
/*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")