Основная идея этой стратегии заключается в определении длины или короткого цвета на основе цвета последних N свечей. Если последние N свечи зеленые, идите длинные; если последние N свечи красные, идите короткие. Уникальная часть заключается в добавлении параметра
Эта стратегия основывается на следующих важных параметрах:
Ключевая логика заключается в том, чтобы пройти последние свечи numCandlesToCheck через петлю for и подсчитать последовательные зеленые и красные свечи в режиме реального времени. Если последовательные красные свечи ≥numCandlesToCheck, отметьте lastNCandlesRed как true. Если последовательные зеленые свечи ≥numCandlesToCheck, отметьте lastNCandlesGreen как true.
Когда lastNCandlesGreen является истинным, выбираем long, если inverseLogic является ложным, в противном случае выбираем short.
Независимо от того, длинный или короткий, счетчик barsSinceEntry будет сброшен на 0 после открытия позиции.
Это интересная стратегия, которая использует цвет свечи для принятия решений, с параметром
Для этой стратегии также существуют некоторые риски:
Для устранения этих рисков могут быть приняты следующие меры по контролю и оптимизации:
Основными направлениями оптимизации этой стратегии являются:
Общая идея этой стратегии ясна и понятна, генерируя торговые сигналы просто на основе определения цвета свечи. Настройка параметров может сформировать богатые комбинационные вариации для оптимизации, ориентированные на различные рыночные среды и продукты. Также необходимо обратить внимание на некоторые потенциальные риски и принять необходимые меры для их контроля.
/*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")