O recurso está a ser carregado... Carregamento...

K Velas consecutivas Estratégia Bull Bear

Autora:ChaoZhang, Data: 2024-05-17 13:54:06
Tags:EMAATR

img

Resumo

Esta estratégia determina os mercados de touro ou de urso com base no número de velas ascendentes ou descendentes consecutivas e faz os negócios de acordo. Quando o preço de fechamento é consecutivamente maior do que o fechamento das velas anteriores por um número especificado de vezes, ele entra em uma posição longa; quando o preço de fechamento é consecutivamente menor do que o fechamento das velas anteriores por um número especificado de vezes, ele entra em uma posição curta. Stop loss e take profit são definidos e um mecanismo de trailing stop é introduzido para proteger os lucros.

Princípio da estratégia

  1. Registre o número de vezes que as condições de alta e baixa consecutivas são atendidas. Se o fechamento for maior que a vela anterior, a contagem de alta aumenta em 1 e a contagem de baixa redefine-se para 0; se o fechamento for menor, a contagem de baixa aumenta em 1 e a contagem de baixa redefine-se para 0; caso contrário, ambas as contagens redefinem-se para 0.
  2. Quando a contagem de alta atinge o número especificado k, entre em uma posição longa com stop loss e tire lucro.
  3. Para as posições longas, registar o preço mais elevado após a entrada.
  4. Quando a contagem de baixa atingir o número especificado k2, entre numa posição curta com stop loss e take profit.
  5. Para as posições curtas, registar o preço mais baixo após a entrada. Quando o preço mais baixo for inferior ao preço de entrada por unidades de variação mínima de preços iTGT e o rebote próximo acima do preço mais baixo por iPcnt%, fechar a posição.

Vantagens da estratégia

  1. Simples e fáceis de entender, tomando decisões comerciais baseadas na continuidade das velas com lógica clara.
  2. Introduz um mecanismo de trailing stop para proteger ativamente os lucros depois que o preço se move uma certa distância na direção favorável.
  3. A definição de stop loss e take profit pode controlar eficazmente os riscos e bloquear os lucros.
  4. Parâmetros ajustáveis para os diferentes mercados e estilos de negociação.

Riscos estratégicos

  1. Em mercados agitados, a abertura e o encerramento frequentes de posições podem conduzir a custos de deslizamento elevados.
  2. O julgamento dos números consecutivos das velas é afetado pelo ruído do mercado, o que pode resultar em sinais frequentes.
  3. Os níveis fixos de stop loss e take profit podem não se adaptar às alterações da volatilidade do mercado.

Orientações para a otimização da estratégia

  1. Introduzir mais indicadores técnicos, tais como médias móveis e volatilidade, para ajudar a avaliar a força e a direcção das tendências.
  2. Otimizar as condições de desencadeamento para a parada de atraso, tais como ajustar a percentagem de retração com base no ATR.
  3. Adotar métodos mais dinâmicos de stop loss e take profit, como trailing stops e step take profits.
  4. Otimizar os parâmetros para encontrar a combinação ideal para diferentes mercados e instrumentos.

Resumo

Esta estratégia capta tendências de touro e urso através da continuidade de velas, enquanto define stop loss e take profit para controlar riscos. A introdução de um trailing stop pode proteger melhor os lucros. No entanto, pode gerar sinais frequentes em mercados agitados, exigindo uma otimização adicional da confiabilidade do sinal. Além disso, a configuração de stop loss e take profit pode ser mais flexível para se adaptar às mudanças dinâmicas do mercado.


/*backtest
start: 2024-04-16 00:00:00
end: 2024-05-16 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("K Consecutive Candles 數來寶V2", max_bars_back=300, overlay=true)

// 定義用戶輸入
k = input.int(3, title="Number of Consecutive Candles for Long", minval=1)
k2 = input.int(3, title="Number of Consecutive Candles for Short", minval=1)
stopLossTicks = input.int(500, title="Stop Loss (Ticks)")
takeProfitTicks = input.int(500, title="Take Profit (Ticks)")
iTGT = input.int(200,"iTGT")  // 移動停利點
iPcnt = input.int(50,"iPcnt")  // 移動停利%

var float TrailValue = 0
var float TrailExit = 0
var float  vMP = 0

BarsSinceEntry = ta.barssince(strategy.position_size == 0)

vMP := strategy.position_size

// 创建一个包含键值对的字典
addArrayData(type, value) =>
    alert_array = array.new_string()
    array.push(alert_array, '"timenow": ' + str.tostring(timenow))
    array.push(alert_array, '"seqNum": ' + str.tostring(value))
    array.push(alert_array, '"type": "' + type + '"')
    alertstring = '{' + array.join(alert_array,', ') + '}'


// 定義條件變量
var int countLong = 0  // 記錄連續多頭條件成立的次數
var int countShort = 0 // 記錄連續空頭條件成立的次數

// 計算連續大於或小於前一根的收盤價格的次數
if close > close[1]
    countLong += 1
    countShort := 0 // 重置空頭計數
else if close < close[1]
    countShort += 1
    countLong := 0 // 重置多頭計數
else
    countLong := 0
    countShort := 0

// 開設多頭倉位條件
if countLong >= k
    strategy.entry("Long Entry", strategy.long)
    strategy.exit("Exit Long", "Long Entry", loss=stopLossTicks, profit=takeProfitTicks)
    

if vMP>0
    TrailValue := ta.highest(high,BarsSinceEntry)
    TrailExit := TrailValue - iPcnt*0.01*(TrailValue - strategy.position_avg_price)
    if TrailValue > strategy.position_avg_price + iTGT * syminfo.minmove/syminfo.pricescale and close < TrailExit
        
        strategy.close("Long Entry", comment = "Trl_LX"+ str.tostring(close[0]))
// 開設空頭倉位條件
if countShort >= k2
    strategy.entry("Short Entry", strategy.short)
    strategy.exit("Exit Short", "Short Entry", loss=stopLossTicks, profit=takeProfitTicks)

if vMP<0    
    TrailValue := ta.lowest(low,BarsSinceEntry)
    TrailExit := TrailValue - iPcnt*0.01*(TrailValue - strategy.position_avg_price)
    if TrailValue < strategy.position_avg_price - iTGT * syminfo.minmove/syminfo.pricescale and close > TrailExit
        
        strategy.close("short60", comment = "Trl_SX"+ str.tostring(close[0]))






Relacionados

Mais.