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.
A estratégia baseia-se nos seguintes pontos-chave:
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.
Quando o preço aumenta e quebra o recente swing high, é considerado quebrar o nível de resistência, indo longo.
Quando o preço cai e quebra o baixo recente, é considerado quebrar o nível de suporte, indo curto.
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.
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.
As vantagens desta estratégia incluem:
Rentabilidade estável. Seguindo tendências pode fazer ganhos estáveis de tendências de longo prazo.
Excelente controlo de riscos, parada oscilante e parada protetora reduzem rapidamente as perdas.
Os sinais precisos: resistência longa e suporte curto fornecem sinais confiáveis.
As regras são simples, os sinais são simples e fáceis de seguir.
Adaptável ao mercado, funciona bem em diferentes produtos e condições de mercado.
Alguns riscos a ter em conta para esta estratégia:
Risco de falha de ruptura: o preço pode ter um retrocesso ou retração após a ruptura inicial, desencadeando o stop loss.
Risco de otimização de parâmetros. Mal ajuste de parâmetros leva a muitos ou poucos sinais. A otimização requer prudência.
Risco de falha do indicador Em condições extremas, as EMAs podem parar de funcionar ou ficar para trás do preço.
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.
A estratégia pode ser melhorada a partir dos seguintes aspectos:
Optimização de prazos, ajuste de períodos de cálculo de MAs e padrões de preços, encontre as melhores combinações.
Optimização da adaptabilidade, ajuste de parâmetros para diferentes produtos.
Optimização de stop loss. Teste métodos mais avançados de stop loss como trailing stop, Chandelier stop.
Adotar lucros adaptativos ou exponenciais tomando saídas para uma melhor recompensa.
Adicione filtros, volume e volatilidade para evitar falhas.
Melhorar os sinais de entrada, combinar mais indicadores ou padrões para confirmar entradas.
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)