Uma estratégia Stop Loss e Take Profit orientada por indicadores

Autora:ChaoZhang, Data: 2023-11-10 11:28:06
Tags:

img

Resumo

Esta estratégia usa uma média móvel como sinais de negociação e combina-a com índices de stop loss e take profit definidos pelo usuário para implementar uma estratégia completa de stop loss e take profit orientada por indicadores.

Estratégia lógica

A lógica central desta estratégia é a seguinte:

  1. Utilize a SMA de 3 períodos como sinais de negociação, vá longo quando a SMA cruza acima de 0 e vá curto quando a SMA cruza abaixo de 0.

  2. Após entrar em um comércio, os usuários podem personalizar o stop loss e tomar as taxas de lucro.

  3. Com base no preço de entrada e na taxa de stop loss definida pelo utilizador, definir automaticamente a linha de stop loss.

  4. Com base no preço de entrada e no rácio de lucro estabelecido pelo utilizador, a linha de lucro é automaticamente definida.

  5. Quando o preço toca a linha de stop loss, pára automaticamente.

  6. Após o fechamento das posições, cancele automaticamente as ordens de stop loss e tome lucro.

Especificamente, a estratégia calcula a SMA de 3 períodos utilizando a função sma e atribui-a à variável ma.

Em seguida, ele calcula o comprimento da linha de entrada longa, que é ma mais ma% de lo. lo é um parâmetro ajustável pelo usuário para o deslocamento de linha de entrada longa.

Quando ma cruza acima de 0, ele sinaliza uma entrada longa.

Ao mesmo tempo, os preços de stop loss e take profit são definidos. O preço de stop loss é o preço de entrada menos o preço de entrada% de sl. sl é o parâmetro de taxa de stop loss ajustável pelo usuário. O preço de take profit é o preço de entrada mais o preço de entrada% de tp. tp é o parâmetro de taxa de take profit ajustável pelo usuário.

A função Strategy.entry define as ordens stop loss e take profit separadamente. Quando o preço toca a linha stop loss, ele vai parar automaticamente. Quando o preço toca a linha take profit, ele vai tirar lucro automaticamente.

Após o encerramento das posições, as ordens de stop loss e take profit são canceladas automaticamente através da função strategy.cancel.

Vantagens

As vantagens desta estratégia:

  1. Alto grau de automação, sem interferência manual necessária, adequado para negociação por algoritmos.

  2. Indicadores de stop loss e take profit personalizáveis para controlar o risco.

  3. Os sinais de negociação vêm do indicador, evitando falhas.

  4. Visualização de stop loss e take profit, intuitivo.

  5. Uma lógica estratégica simples e clara, fácil de compreender e implementar.

Riscos e soluções

Há também alguns riscos com esta estratégia:

  1. Risco de sinais falsos do indicador A solução é otimizar os parâmetros para garantir um indicador confiável.

  2. A solução é ajustar as taxas para diferentes mercados.

  3. A solução é filtrar os sinais de entrada com tendência, volume, etc.

  4. A solução é reduzir o tamanho da posição ou usar o stop loss.

Orientações de otimização

Algumas orientações para otimizar a estratégia:

  1. Otimizar os parâmetros da média móvel para garantir a fiabilidade.

  2. Otimizar as condições de entrada para evitar falhas, adicionar confirmação de volume, etc.

  3. Otimizar o stop loss e tirar lucro, usar stop loss dinâmico ou de trail, etc.

  4. Otimizar a gestão de riscos, ajustar o tamanho das posições, reduzir o risco de negociação única.

  5. Otimizar o tempo de entrada, combinar com tendência, suporte/resistência, etc.

  6. Adicione pirâmide para ganhos compostos.

  7. Optimização de parâmetros para produtos específicos.

Conclusão

Esta estratégia fornece uma estrutura técnica simples e confiável para stop loss orientado por indicadores e take profit com vantagens como automação e controle de risco. É adequado para negociação algorítmica. Há também muitos aspectos que podem ser melhorados e otimizados, como parâmetros de indicadores, filtros de entrada, estratégias de stop loss / take profit, gerenciamento de riscos, etc. Com novas extensões e otimizações, pode se tornar uma estratégia de negociação ainda mais poderosa.


/*backtest
start: 2023-01-01 00:00:00
end: 2023-11-09 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("example for panel signals", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)
//https://www.tradingview.com/script/m2a04xmb-noro-s-shiftma-tp-sl-strategy/
//Settings
lo = input(-5.0, title = "Long-line, %")
tp = input(5.0, title = "Take-profit")
sl = input(2.0, title = "Stop-loss")

//SMA
ma = sma(ohlc4, 3)
long = ma + ((ma / 100) * lo)

//Orders
avg = strategy.position_avg_price
if ma > 0
    strategy.entry("Long", strategy.long, limit = long)
    strategy.entry("Take", strategy.short, 0, limit = avg + ((avg / 100) * tp))
    strategy.entry("Stop", strategy.short, 0, stop = avg - ((avg / 100) * sl))
    
//Cancel order
if strategy.position_size == 0
    strategy.cancel("Take")
    strategy.cancel("Stop")

//Lines
plot(long, offset = 1, color = color.black, transp = 0)
take = avg != 0 ? avg + ((avg / 100) * tp) : long + ((long / 100) * tp)
stop = avg != 0 ? avg - ((avg / 100) * sl) : long - ((long / 100) * sl)
takelinecolor = avg == avg[1] and avg != 0 ? color.lime : na
stoplinecolor = avg == avg[1] and avg != 0 ? color.red : na
plot(take, offset = 1, color = takelinecolor, linewidth = 3, transp = 0)
plot(stop, offset = 1, color = stoplinecolor, linewidth = 3, transp = 0)
//
disp_panels = input(true, title="Display info panels?")
h=high
info_label_off = input(20, title="Info panel offset")
info_label_size = input(size.large, options=[size.tiny, size.small, size.normal, size.large, size.huge], title="Info panel label size")
info_panel_x = timenow + round(change(time)*info_label_off)
info_panel_y = h

info_title= "-=-=-=-=- Info Panel -=-=-=-=-"
info_div = "\n\n------------------------------"
a = "\n\ Long : " + tostring(long)
b = "\n\ Stop loss : " + tostring(stop)
c = "\n\ TP : " + tostring(take)
// info_text = a+c+b
// info_panel = disp_panels ? label.new(x=info_panel_x, y=info_panel_y, text=info_text, xloc=xloc.bar_time, yloc=yloc.price, color=color.yellow, style=label.style_labelup, textcolor=color.black, size=info_label_size) : na
// label.delete(info_panel[1])




Mais.