Compra direcional de baixa volatilidade com captação de lucro e stop loss

Autora:ChaoZhang, Data: 2023-12-18 12:00:07
Tags:

img

Resumo

A estratégia é chamada de Low Volatility Directional Buy with Profit Taking and Stop Loss. Utiliza o crossover da média móvel como sinais de compra e combina a tomada de lucro e o stop loss para bloquear o lucro.

Estratégia lógica

A estratégia utiliza 3 médias móveis com períodos diferentes: de 50 períodos, 100 períodos e 200 períodos.

O aumento rápido da MA de 50 períodos representa o fortalecimento do ímpeto de curto prazo; a MA de 100 períodos também indica a entrada de uma força de médio prazo para estabilizar a tendência ascendente.

Após a entrada, a estratégia usa a tomada de lucro e a parada de perda para bloquear os ganhos. O lucro da tomada é definido em 8% do preço de entrada. A parada de perda é definida em 4% do preço de entrada. Com maior lucro da tomada sobre a parada de perda, garante que a estratégia permaneça lucrativa em geral.

Análise das vantagens

As vantagens desta estratégia:

  1. Capturar com precisão as oportunidades de tendência a partir de breakouts de baixa volatilidade.
  2. Lógica simples e clara com médias móveis que são fáceis de calcular e testar.
  3. As configurações razoáveis de lucro e stop loss garantem ganhos estáveis.
  4. Parâmetros flexíveis e configuráveis facilitam a otimização.

Análise de riscos

Há também alguns riscos:

  1. Os sinais errados podem causar perdas.
  2. É difícil parar as perdas quando os mercados se revertem.
  3. As configurações incorretas dos parâmetros de captação de lucro e stop loss afetam a rentabilidade.

Soluções:

  1. Adicionar outros indicadores para filtrar os sinais e garantir a validade da fuga.
  2. Redução do período de stop loss para reduzir as perdas decorrentes de reversões.
  3. Teste diferentes índices de lucro e stop loss para encontrar o ideal.

Orientações de otimização

As melhorias podem ser feitas nas seguintes áreas:

  1. Teste diferentes períodos de média móvel para encontrar a melhor combinação.
  2. Adicionar volume, etc. para confirmar as rupturas da tendência.
  3. Ajuste dinâmico da percentagem de lucro e stop loss.
  4. Incorporar aprendizado de máquina etc. para prever a taxa de sucesso da fuga.
  5. Ajustar os parâmetros com base nas diferentes condições de mercado e moedas.

Em resumo, a estratégia tem uma lógica geral clara, obtém lucro de baixo risco através da configuração de períodos de média móvel e porcentagem de lucro/perda de parada. Pode ser aplicada de forma flexível na negociação quantitativa.


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

//@version=4
strategy(shorttitle='Low volatility Buy w/ TP & SL (by Coinrule)',title='Low volatility Buy w/ TP & SL', overlay=true, initial_capital = 1000, process_orders_on_close=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100)

//Backtest dates
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 10,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 2019, title = "From Year",       type = input.integer, minval = 1970)
thruMonth = input(defval = 1,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2112, title = "Thru Year",       type = input.integer, minval = 1970)

showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false       // create function "within window of time"

//MA inputs and calculations
movingaverage_fast = sma(close, input(50))
movingaverage_slow = sma(close, input(200))
movingaverage_normal= sma(close, input(100))



//Entry 
strategy.entry(id="long", long = true, when = movingaverage_slow > movingaverage_normal and movingaverage_fast > movingaverage_normal)

//Exit
longStopPrice  = strategy.position_avg_price * (1 - 0.04)
longTakeProfit = strategy.position_avg_price * (1 + 0.08)

strategy.close("long", when = close < longStopPrice or close > longTakeProfit and window())

//PLOT

plot(movingaverage_fast, color=color.orange, linewidth=2)
plot(movingaverage_slow, color=color.purple, linewidth=3)
plot(movingaverage_normal, color=color.blue, linewidth=2)


Mais.