Последняя N-свеча обратная логическая стратегия

Автор:Чао Чжан, Дата: 2023-12-26 11:00:29
Тэги:

img

Обзор

Основная идея этой стратегии заключается в определении длины или короткого цвета на основе цвета последних N свечей. Если последние N свечи зеленые, идите длинные; если последние N свечи красные, идите короткие. Уникальная часть заключается в добавлении параметра обратной логики, который может обратить вспять исходную логику. Когда параметр обратной логики верен, последние N зеленых свечей будут короткими, а последние N красных свечей будут длинными.

Принцип стратегии

Эта стратегия основывается на следующих важных параметрах:

  1. numCandlesToCheck: используется для указания количества свечей для проверки
  2. numCandlesToExit: Указывает количество свечей после открытия позиции, которая должна выйти
  3. InverseLogic: параметр обратной логики. Когда true, первоначальная длинная и короткая логика переворачивается

Ключевая логика заключается в том, чтобы пройти последние свечи numCandlesToCheck через петлю for и подсчитать последовательные зеленые и красные свечи в режиме реального времени. Если последовательные красные свечи ≥numCandlesToCheck, отметьте lastNCandlesRed как true. Если последовательные зеленые свечи ≥numCandlesToCheck, отметьте lastNCandlesGreen как true.

Когда lastNCandlesGreen является истинным, выбираем long, если inverseLogic является ложным, в противном случае выбираем short.

Независимо от того, длинный или короткий, счетчик barsSinceEntry будет сброшен на 0 после открытия позиции.

Анализ преимуществ

Это интересная стратегия, которая использует цвет свечи для принятия решений, с параметром обратная логика, который может гибко регулировать длинную и короткую логику.

  1. Идея нова и может стать обратным инвестированием против общей логики рынка
  2. Код ясен и лаконичен, легко понять и изменить
  3. Может найти оптимальную комбинацию параметров путем регулирования параметров
  4. Независимо от рыночных условий, эта стратегия может продолжать работать и генерировать сигналы

Анализ рисков

Для этой стратегии также существуют некоторые риски:

  1. Цвет свечи не может полностью отражать условия рынка, существует риск отслеживания неправильного сигнала
  2. Невозможно определить оптимальное значение numCandlesToCheck
  3. Невозможно определить оптимальное значение numCandlesToExit
  4. Неправильный параметр обратной логики может усилить потери
  5. Невозможно эффективно контролировать однократную потерю

Для устранения этих рисков могут быть приняты следующие меры по контролю и оптимизации:

  1. Увеличьте другие фильтры, чтобы избежать неправильных сигналов, например, определить тенденцию на более длительный период времени
  2. Пройдите через различные значения параметров, чтобы найти оптимальную комбинацию параметров
  3. Добавить механизм остановки потери для контроля одиночных потерь
  4. Проверка эффективности параметра обратной логики

Руководство по оптимизации

Основными направлениями оптимизации этой стратегии являются:

  1. Увеличьте состояние книги заказов, чтобы не попасть в ловушку
  2. Оптимизировать значения numCandlesToCheck и numCandlesToExit
  3. Добавить индикатор тренда на более высоком временном диапазоне для фильтрации ложного сигнала
  4. Добавить стоп-лосс и взять прибыль
  5. Реактивные испытания на различных продуктах для проверки эффективности
  6. Сравните возврат между оригинальной и перевернутой логикой

Заключение

Общая идея этой стратегии ясна и понятна, генерируя торговые сигналы просто на основе определения цвета свечи. Настройка параметров может сформировать богатые комбинационные вариации для оптимизации, ориентированные на различные рыночные среды и продукты. Также необходимо обратить внимание на некоторые потенциальные риски и принять необходимые меры для их контроля.


/*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")


Больше