Estratégia de ruptura do preço de fechamento de reversão com stop loss oscilante

Autora:ChaoZhang, Data: 2023-12-11 11:44:49
Tags:

img

Resumo

Esta estratégia utiliza os sinais de ruptura de preço e o mecanismo de stop loss oscilante para gerenciamento de riscos. Ele fica longo quando o preço rompe a resistência e fica curto quando o preço rompe o suporte. Ao mesmo tempo, os stop loss oscilantes e os stop taking de lucro são aplicados para um melhor controle do risco.

Estratégia lógica

A estratégia baseia-se nos seguintes pontos-chave:

  1. Usando MA para determinar a direção da tendência. MAs rápidos e lentos são traçados, MAs rápidos cruzando acima de MAs lentas sinalizam tendência de alta, enquanto cruzando abaixo de sinais tendência de baixa.

  2. Quando o preço aumenta e quebra o recente swing high, é considerado quebrar o nível de resistência, indo longo.

  3. Quando o preço cai e quebra o baixo recente, é considerado quebrar o nível de suporte, indo curto.

  4. Stop loss oscilante. Após a entrada, a linha de stop loss é definida e continua a ajustar-se com base na flutuação do preço, formando um mecanismo de stop loss oscilante.

  5. Parar a perda e tirar lucro.

Especificamente, usa a média de preços altos e baixos como fonte, traça EMAs rápidas e lentas para determinar tendências. Quando a EMA rápida ultrapassa a EMA lenta e surge o sinal de ruptura de resistência, ela fica longa. Quando a EMA rápida cai abaixo da EMA lenta e a ruptura de suporte aparece, ela fica curta. Após a entrada, o preço mais baixo em certos períodos é definido como a linha de stop loss, continua ajustando à medida que o preço sobe. A linha de lucro é traçada para bloquear ganhos.

Análise das vantagens

As vantagens desta estratégia incluem:

  1. Rentabilidade estável. Seguindo tendências pode fazer ganhos estáveis de tendências de longo prazo.

  2. Excelente controlo de riscos, parada oscilante e parada protetora reduzem rapidamente as perdas.

  3. Os sinais precisos: resistência longa e suporte curto fornecem sinais confiáveis.

  4. As regras são simples, os sinais são simples e fáceis de seguir.

  5. Adaptável ao mercado, funciona bem em diferentes produtos e condições de mercado.

Análise de riscos

Alguns riscos a ter em conta para esta estratégia:

  1. Risco de falha de ruptura: o preço pode ter um retrocesso ou retração após a ruptura inicial, desencadeando o stop loss.

  2. Risco de otimização de parâmetros. Mal ajuste de parâmetros leva a muitos ou poucos sinais. A otimização requer prudência.

  3. Risco de falha do indicador Em condições extremas, as EMAs podem parar de funcionar ou ficar para trás do preço.

  4. Risco de reversão da tendência: manter uma posição contra a tendência traz perdas acumuladas quando a tendência se inverte.

O ajuste adequado dos parâmetros, a grande perda de paragem, o cumprimento estrito das regras podem mitigar em grande parte os riscos acima.

Orientações de otimização

A estratégia pode ser melhorada a partir dos seguintes aspectos:

  1. Optimização de prazos, ajuste de períodos de cálculo de MAs e padrões de preços, encontre as melhores combinações.

  2. Optimização da adaptabilidade, ajuste de parâmetros para diferentes produtos.

  3. Optimização de stop loss. Teste métodos mais avançados de stop loss como trailing stop, Chandelier stop.

  4. Adotar lucros adaptativos ou exponenciais tomando saídas para uma melhor recompensa.

  5. Adicione filtros, volume e volatilidade para evitar falhas.

  6. Melhorar os sinais de entrada, combinar mais indicadores ou padrões para confirmar entradas.

Conclusão

Esta é uma estratégia de ruptura eficaz com bom controle de risco, modelo de lucro estável e fluxo lógico direto.


/*backtest
start: 2023-12-03 00:00:00
end: 2023-12-10 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © EduardoMattje

//@version=4
strategy("Reversal closing price", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10, initial_capital=10000)

src = input(hl2, "Price source")
order_direction = input("Both", "Order direction", options=["Both", "Long", "Short"])

// EMA calculation and plot

ema_long_period = input(80, "EMA long period")
ema_short_period = input(8, "EMA short period")
ema_long = ema(src, ema_long_period)
ema_short = ema(src, ema_short_period)
ema_bull = ema_short > ema_long
ema_bear = ema_short < ema_long
plot(ema_long, "EMA long", ema_bull ? color.green : color.red, 3)
plot(ema_short, "EMA short", ema_bull ? color.green : color.red, 3)

// Settings

risk_reward_ratio = input(2.0, "Risk to reward ratio", minval=1.0, step=0.1)
stop_lookback = input(3, "Stoploss candle lookback", minval=1)
ema_cross_stop = input(true, "Close if EMA crosses in oposite direction")
allow_retracing = input(true, "Allow price retracing")

// RCP calculation

rcp_bull = low[0] < low[1] and low[0] < low[2] and close[0] > close[1]
rcp_bear = high[0] > high[1] and high[0] > high[2] and close[0] < close[1]

// Order placement

in_market = strategy.position_size != 0

long_condition = rcp_bull and ema_bull and not in_market and order_direction != "Short"
short_condition = rcp_bear and ema_bear and not in_market and order_direction != "Long"

bought = strategy.position_size[0] > strategy.position_size[1] and strategy.position_size[1] == 0
sold = strategy.position_size[0] < strategy.position_size[1] and strategy.position_size[1] == 0
closed = not in_market and in_market[1]

long_position = strategy.position_size > 0
short_position = strategy.position_size < 0

buy_price = high + syminfo.mintick
sell_price = low - syminfo.mintick

if long_condition
    strategy.entry("Long", true, stop=buy_price)
if short_condition
    strategy.entry("Short", false, stop=sell_price)
    
if allow_retracing
    better_price_long = barssince(closed) > barssince(long_condition) and barssince(long_condition) >= 1 and not in_market and ema_bull and buy_price < valuewhen(long_condition, buy_price, 0) and buy_price[0] < buy_price[1]
    if better_price_long
        strategy.cancel("Long")
        strategy.entry("Long", true, stop=buy_price)
    
    better_price_short = barssince(closed) > barssince(short_condition) and barssince(short_condition) >= 1 and not in_market and ema_bear and sell_price > valuewhen(short_condition, sell_price, 0) and sell_price[0] > sell_price[1]
    if better_price_short
        strategy.cancel("Short")
        strategy.entry("Short", false, stop=sell_price)

// Stoploss orders

stop_price = long_position ? valuewhen(bought, lowest(stop_lookback)[1] - syminfo.mintick, 0) : short_position ? valuewhen(sold, highest(3)[1] + syminfo.mintick, 0) : na
stop_comment = "Stoploss triggered"
strategy.close("Long", low <= stop_price, stop_comment)
strategy.close("Short", high >= stop_price, stop_comment)
plot(stop_price, "Stop price", color.red, 2, plot.style_linebr)

// EMA cross close orders

if ema_cross_stop
    if long_position and ema_bear
        strategy.close("Long", comment=stop_comment)
    if short_position and ema_bull
        strategy.close("Short", comment=stop_comment)

// Take profit orders

stop_ticks = abs(strategy.position_avg_price - stop_price)
take_profit_price = long_position ? valuewhen(bought, strategy.position_avg_price + stop_ticks * risk_reward_ratio, 0) : short_position ? valuewhen(sold, strategy.position_avg_price  - (stop_ticks * risk_reward_ratio), 0) : na
target_comment = "Take profit"
strategy.close("Long", high >= take_profit_price, target_comment)
strategy.close("Short", low <= take_profit_price, target_comment)
plot(take_profit_price, "Target price", color.green, 2, plot.style_linebr)


Mais.