Estratégia de lógica inversa da última N Candle

Autora:ChaoZhang, Data: 23 de dezembro de 2023 26 de dezembro de 2023 11: 00:29
Tags:

img

Resumo

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 lógica inversa que pode reverter a lógica original. Quando o parâmetro lógica inversa for verdadeiro, as últimas N velas verdes vão curtas e as últimas N velas vermelhas vão longas.

Princípio da estratégia

Esta estratégia assenta principalmente nos seguintes parâmetros importantes:

  1. numCandlesToCheck: Usado para especificar o número de velas a verificar
  2. NumCandlesToExit: Especifica o número de velas após a posição de abertura que precisa sair
  3. inverseLogic: O parâmetro de lógica inversa. Quando verdadeiro, a lógica longa e curta original é invertida

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.

Análise das vantagens

Esta é uma estratégia interessante que usa a cor da vela para tomar decisões, com um parâmetro lógica inversa que pode ajustar flexivelmente a lógica longa e curta.

  1. A ideia é nova e pode constituir um investimento inverso contra a lógica comum do mercado
  2. O código é claro e conciso, fácil de compreender e modificar
  3. Pode encontrar a combinação de parâmetros ideal ajustando parâmetros
  4. Não importa a condição do mercado, esta estratégia pode continuar a funcionar e gerar sinais

Análise de riscos

Há também alguns riscos a considerar para esta estratégia:

  1. A cor da vela não pode representar plenamente a condição do mercado, existe o risco de rastreamento de sinal incorreto
  2. Incapaz de determinar o valor ideal para numCandlesToCheck
  3. Incapaz de determinar o valor ideal para numCandlesToExit
  4. Parâmetro lógico inverso incorreto pode amplificar perdas
  5. Incapacidade de controlar efetivamente a perda de parada única

Para combater estes riscos, podem ser adoptadas as seguintes medidas de controlo e otimização:

  1. Aumentar outros filtros para evitar sinais incorretos, por exemplo, determinar a tendência em um período de tempo mais longo
  2. Atravessar diferentes valores de parâmetros para encontrar a combinação ideal de parâmetros
  3. Adicionar um mecanismo de stop loss para controlar perdas individuais
  4. Verificar a eficácia do parâmetro de lógica inversa

Orientações de otimização

As principais direcções de otimização para esta estratégia são:

  1. Aumentar a condição do livro de pedidos para evitar ser preso
  2. Otimizar os valores de numCandlesToCheck e numCandlesToExit
  3. Adicionar indicador de tendência em um período de tempo mais longo para filtrar sinal falso
  4. Adicionar stop loss e take profit
  5. Testes de retrocesso em diferentes produtos para verificar a eficácia
  6. Comparar retorno entre lógica original e invertida

Conclusã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")


Mais.