Estratégia dinâmica de stop-loss trailing


Data de criação: 2024-01-03 16:15:29 última modificação: 2024-01-03 16:15:29
cópia: 0 Cliques: 596
1
focar em
1617
Seguidores

Estratégia dinâmica de stop-loss trailing

Visão geral

A estratégia usa o indicador de Stoch para avaliar os sinais de entrada e, após a entrada, rastreia em tempo real os novos altos e baixos dos preços, ajustando dinamicamente o ponto de parada. Ao mesmo tempo, a estratégia também envia informações sobre a alteração do stop loss para o MT4/MT5 por meio do recurso de alertas, para ajustar a posição na negociação real em tempo real.

Princípio da estratégia

  1. A estratégia é baseada no indicador de Stoch para gerar sinais de compra e venda, quando a linha K de Stoch atravessa a linha D de baixo para comprar; quando a linha K de Stoch atravessa a linha D de cima para baixo para vender.

  2. Depois de entrar no mercado, a estratégia rastreia em tempo real os últimos baixos do preço mais baixo e os últimos altos do preço mais alto, como um stop loss dinâmico. Concretamente, para fazer múltiplos pedidos, rastreia os últimos baixos do preço mais baixo como um stop loss; para fazer pedidos de curto prazo, rastreia os últimos altos do preço mais alto como um stop loss.

  3. Quando uma mudança na parada é detectada, a estratégia gera uma instrução de parada modificada através da função de alerta e envia para o MT4/MT5 para ajustar a parada em tempo real em uma negociação real. Ao mesmo tempo, marcações gráficas são desenhadas para mostrar a mudança de parada visualmente.

  4. A estratégia permite o controle manual de se o mecanismo de stop loss dinâmico está ativado ou não. Quando ativado, o preço de stop loss pode ser ajustado em tempo real de acordo com as flutuações do mercado.

Análise de vantagens

  1. O mecanismo de parada de rastreamento dinâmico permite ajustar o ponto de parada de forma flexível de acordo com as flutuações do mercado, permitindo o rastreamento de parada e o controle eficaz do risco.

  2. A função de alerta pode enviar informações de ajuste de parada em tempo real para o MT4/MT5, permitindo o gerenciamento automatizado, sem a necessidade de intervenção humana.

  3. Informações de ajustamento de stop loss são marcadas na gráfica de forma intuitiva, facilitando a visualização e verificação do efeito de rastreamento de stop loss.

  4. Suporte para controle manual se o mecanismo de rastreamento de stop loss está ativado, com flexibilidade para adaptar-se a diferentes condições de mercado.

  5. Combinado com o indicador de Stoch para determinar o tempo, pode filtrar eficazmente as brechas falsas e aumentar a estabilidade da estratégia.

Análise de Riscos

  1. Os indicadores de Stoch podem apresentar sinais de cruzamento frequentes, com risco de mais operações inválidas. Os parâmetros podem ser adequadamente ajustados para filtrar os sinais.

  2. Em situações extremas, o stop loss pode ser ultrapassado e o risco de perdas enormes não pode ser totalmente evitado. O risco de posição deve ser monitorado em tempo hábil.

  3. A conexão alert pode ser interrompida ou atrasada, não há feedback em tempo real sobre os resultados e é necessário um tratamento tolerante de falhas.

  4. O rastreamento dinâmico do stop loss requer uma adaptação relativamente densa, que pode acarretar mais custos de transação. A amplitude de ajuste deve ser equilibrada com o custo.

Direção de otimização

  1. É possível testar diferentes combinações de parâmetros para otimizar os indicadores de Stoch, obtendo melhor qualidade do sinal e melhores resultados estratégicos.

  2. Pode ser combinado com outros indicadores para filtrar sinais ou determinar a amplitude de ajuste, otimizar o mecanismo de parada de perdas para melhorar a estabilidade da estratégia.

  3. Diferentes algoritmos de rastreamento podem ser estudados, garantindo um efeito de parada de perda ao mesmo tempo em que reduz a frequência de ajuste.

  4. Otimizar a conexão com o MT4/MT5 para garantir a eficiência do alerta e reduzir os problemas de latência.

  5. Pode-se introduzir um modo de parada automática e um modo de mudança manual, com diferentes mecanismos de parada em diferentes condições de mercado.

Resumir

Esta estratégia é baseada em Stoch para determinar o momento de compra e venda, em seguida, em tempo real, durante a manutenção de posições, rastrear a volatilidade dos preços e ajustar o ponto de parada, através da automação de alertas de instruções. Este mecanismo de parada dinâmica pode gerenciar ativamente o risco de posição de acordo com as mudanças do mercado e reduzir a eficiência da intervenção humana.

Código-fonte da estratégia
/*backtest
start: 2022-12-27 00:00:00
end: 2024-01-02 00:00:00
period: 1d
basePeriod: 1h
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/
// © Peter_O

//@version=4
strategy(title="Moving Stop-Loss mechanism", overlay=true)

// This script was created for educational purposes only and it is a spin-off of my previous script:
// https://www.tradingview.com/script/9MJO3AgE-TradingView-Alerts-to-MT4-MT5-dynamic-variables-NON-REPAINTING/
// This spin-off adds very often requested Moving Stop-Loss Mechanism - the logic here moves the stop-loss each time 
// a new pivot is detected.
//
// Last lines of the script include alert() function calls, with a syntax compatible with TradingConnector
// for execution in Forex/indices/commodities/crypto markets via MetaTrader.
// Please note that "tradeid=" variable must be passed with each alert, so that MetaTrader knows which
// trade to modify.

TakeProfitLevel=input(400)

// **** Entries logic, based on Stoch **** {
periodK = 13 //input(13, title="K", minval=1)
periodD = 3 //input(3, title="D", minval=1)
smoothK = 4 //input(4, title="Smooth", minval=1)
k = sma(stoch(close, high, low, periodK), smoothK)
d = sma(k, periodD)

GoLong=crossover(k,d) and k<80
GoShort=crossunder(k,d) and k>20
// } End of entries logic

// **** Pivot-points and stop-loss logic **** {
piv_high = pivothigh(high,1,1)
piv_low = pivotlow(low,1,1)
var float stoploss_long=low
var float stoploss_short=high

pl=valuewhen(piv_low,piv_low,0)
ph=valuewhen(piv_high,piv_high,0)

if GoLong 
    stoploss_long := low<pl ? low : pl
if GoShort 
    stoploss_short := high>ph ? high : ph

plot(stoploss_long, color=color.red, title="stoploss_long")
plot(stoploss_short, color=color.lime, title="stoploss_short")

// Stop-Loss Updating mechanism
enable_stoploss_mechanism=input(true, title="Enable Stoploss Modification Mechanism")
UpdateLongStopLoss = strategy.position_size>0 and strategy.position_size[1]>0 and piv_low and pl!=stoploss_long and not GoLong and enable_stoploss_mechanism
UpdateShortStopLoss = strategy.position_size<0 and strategy.position_size[1]<0 and piv_high and ph!=stoploss_short and not GoShort and enable_stoploss_mechanism
if UpdateLongStopLoss
    stoploss_long := pl
if UpdateShortStopLoss
    stoploss_short := ph

plotshape(UpdateLongStopLoss ? stoploss_long[1]-300*syminfo.mintick : na, location=location.absolute, style=shape.labelup, color=color.lime, textcolor=color.white, text="SL\nmove")
plotshape(UpdateShortStopLoss ? stoploss_short[1]+300*syminfo.mintick : na, location=location.absolute, style=shape.labeldown, color=color.red, textcolor=color.black, text="SL\nmove")
// } End of Pivot-points and stop-loss logic

// **** Trade counter **** {
var int trade_id=0
if GoLong or GoShort
    trade_id:=trade_id+1
// } End of Trade counter

strategy.entry("Long", strategy.long, when=GoLong)
strategy.exit("XLong", from_entry="Long", stop=stoploss_long, profit=TakeProfitLevel)
strategy.entry("Short", strategy.short, when=GoShort)
strategy.exit("XShort", from_entry="Short", stop=stoploss_short, profit=TakeProfitLevel)

if GoLong
    alertsyntax_golong='long slprice=' + tostring(stoploss_long) + ' tradeid=' + tostring(trade_id) + ' tp=' + tostring(TakeProfitLevel)
    alert(message=alertsyntax_golong, freq=alert.freq_once_per_bar_close)
if GoShort
    alertsyntax_goshort='short slprice=' + tostring(stoploss_short) + ' tradeid=' + tostring(trade_id) + ' tp=' + tostring(TakeProfitLevel)
    alert(message=alertsyntax_goshort, freq=alert.freq_once_per_bar_close)
if UpdateLongStopLoss
    alertsyntax_updatelongstoploss='slmod slprice=' + tostring(stoploss_long) + ' tradeid=' + tostring(trade_id)
    alert(message=alertsyntax_updatelongstoploss, freq=alert.freq_once_per_bar_close)
if UpdateShortStopLoss
    alertsyntax_updateshortstoploss='slmod slprice=' + tostring(stoploss_short) + ' tradeid=' + tostring(trade_id)
    alert(message=alertsyntax_updateshortstoploss, freq=alert.freq_once_per_bar_close)