
La idea principal de esta estrategia es decidir si hacer más o vacío en función del color de la última N de las líneas K. Si las últimas N de las líneas K son verdes, hacer más; si las últimas N de las líneas K son rojas, vacío. Su peculiaridad consiste en agregar un parámetro de la columna inversa de la lógica inversa, que se puede contrarrestar a la lógica original. Cuando el parámetro de la columna inversa de la lógica inversa es verdadero, la última N de las líneas K verdes quedará vacía, mientras que la última N de las líneas K rojas hará más.
Esta estrategia depende principalmente de los siguientes parámetros importantes:
La lógica clave es recorrer las líneas K más recientes de numCandlesToCheck en un ciclo de for, y calcular en tiempo real el número de líneas K verdes y líneas K rojas que aparecen consecutivamente. Marque lastNCandlesRed como verdadero si la línea K roja es ≥numCandlesToCheck. Marque lastNCandlesGreen como verdadero si la línea K verde es ≥numCandlesToCheck.
Cuando lastNCandlesGreen es verdadero, si el argumento inversoLogic es falso, se hace más; si es verdadero, se hace vacío. Por el contrario, cuando lastNCandlesRed es verdadero, si el argumento inversoLogic es falso, se hace vacío; si es verdadero, se hace más.
Independientemente de la cantidad de candelada, el contador barsSinceEntry se restablecerá a 0 después de abrir la posición. Cuando barsSinceEntry sea mayor que igual a numCandlesToExit, se eliminará la posición actual.
Esta es una estrategia interesante que utiliza la decisión de color de la línea K, con la adición de los parámetros de la columna de lógica inversa de la columna, con la flexibilidad de ajustar la lógica de hacer más tomas de vuelo. Las principales ventajas son:
La estrategia también tiene algunos riesgos a tener en cuenta:
Los riesgos mencionados pueden ser controlados y optimizados con las siguientes medidas:
La estrategia se puede optimizar principalmente en las siguientes direcciones:
La idea general de la estrategia es clara y fácil de entender, y se determina la formación de señales de negociación mediante el uso de un simple color de la línea K. La adaptación de los parámetros de la estrategia puede generar una rica combinación de cambios, lo que permite un ajuste óptimo para diferentes entornos y variedades de mercado. Al mismo tiempo, se debe tener en cuenta algunos riesgos potenciales y adoptar las medidas necesarias para controlar los riesgos.
/*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")