Estratégia de lógica reversa para os últimos N candlesticks


Data de criação: 2023-12-26 11:00:29 última modificação: 2023-12-26 11:00:29
cópia: 1 Cliques: 696
1
focar em
1623
Seguidores

Estratégia de lógica reversa para os últimos N candlesticks

Visão geral

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.

Princípio da estratégia

Esta estratégia depende principalmente dos seguintes parâmetros importantes:

  1. numCandlesToCheck: Usado para especificar o número de linhas K a serem verificadas
  2. numCandlesToExit: especifica o número de linhas K necessárias para sair da posição após a posse
  3. inverseLogic: um parâmetro de lógica inversa, que inverte a lógica multiespacial original em tempo real

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.

Análise de vantagens

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:

  1. A inovação de pensamento pode ser um investimento contra a lógica geral do mercado.
  2. Código limpo, conciso, fácil de entender e modificar
  3. Pode-se encontrar uma combinação de parâmetros ótima através de ajustes de parâmetros
  4. A estratégia pode ser mantida para gerar sinais, independentemente do que aconteça.

Análise de Riscos

A estratégia também apresenta alguns riscos que devem ser lembrados:

  1. As cores das linhas K não são representativas da probabilidade de um sinal falso.
  2. Não foi possível determinar o valor máximo para o parâmetro numCandlesToCheck
  3. Não foi possível determinar o valor máximo para o parâmetro numCandlesToExit
  4. Parâmetros de lógica inversa mal definidos podem aumentar as perdas
  5. Incapacidade de controlar de forma eficaz os prejuízos individuais

Os riscos acima mencionados podem ser controlados e otimizados através das seguintes medidas:

  1. Adicionar filtros adicionais para evitar sinais errados, como o julgamento de tendências em níveis maiores
  2. Analisando os diferentes parâmetros para encontrar a combinação ideal
  3. Adesão ao mecanismo de suspensão de prejuízos para controlar perdas individuais
  4. Verificar a validade dos parâmetros de lógica inversa

Direção de otimização

A estratégia pode ser melhorada principalmente nas seguintes direções:

  1. Aumentar a determinação dos parâmetros de oferta para evitar a cobrança
  2. Optimizar os valores dos argumentos numCandlesToCheck e numCandlesToExit
  3. Indicador de tendência de grande ciclo combinado com filtro de falha
  4. Adotar estratégias de stop loss e stop loss
  5. Avaliação da eficácia de estratégias de validação de diferentes variedades
  6. Comparação de retornos de lógica original e lógica inversa

Resumir

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.

Código-fonte da estratégia
/*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")