Mudança de estratégia de rastreamento de perda de parada

Autora:ChaoZhang, Data: 2024-01-03 16:15:29
Tags:

img

Resumo

Esta estratégia usa o indicador Stoch para gerar sinais de entrada. Após entrar em uma posição, ele rastreará novos máximos ou mínimos em tempo real para ajustar dinamicamente o stop loss. Ao mesmo tempo, a estratégia também enviará informações de modificação de stop loss para o MT4/MT5 através da função de alerta para ajustar posições em negociação real.

Princípio da estratégia

  1. A estratégia gera sinais de compra e venda com base no indicador Stoch. Quando a linha Stoch K cruza acima da linha D de baixo, um sinal de compra é gerado. Quando a linha K cruza abaixo da linha D de cima, um sinal de venda é gerado.

  2. Após a entrada de uma posição, a estratégia rastreia o último mínimo do preço mais baixo e o último máximo do preço mais alto em tempo real como níveis de stop loss dinâmicos. Especificamente, para posições longas, o ponto mais baixo mais recente do preço mais baixo é rastreado como o nível de stop loss. Para posições curtas, o ponto mais alto mais recente do preço mais alto é rastreado como o nível de stop loss.

  3. Quando uma mudança no nível de stop loss é detectada, a estratégia gera uma ordem de stop loss de modificação através da função de alerta e a envia para o MT4/MT5 para ajustar o nível de stop loss de negociações reais em tempo real.

  4. Esta estratégia suporta o controlo manual da habilitação do mecanismo dinâmico de stop loss.

Análise das vantagens

  1. O mecanismo dinâmico de suspensão de perdas pode ajustar de forma flexível os níveis de suspensão de perdas em função das flutuações do mercado para controlar eficazmente os riscos.

  2. A função de alerta permite o envio em tempo real de informações de ajustamento de stop loss para o MT4/MT5 para gestão automatizada sem intervenção manual.

  3. As anotações visuais dos ajustamentos de stop loss no gráfico facilitam a visualização e a verificação dos efeitos de stop loss.

  4. O suporte ao controlo manual do mecanismo de tração de stop loss permite uma adaptação flexível às diferentes condições de mercado.

  5. Combinada com o indicador Stoch para determinar a oportunidade, a estratégia pode filtrar efetivamente as falsas rupturas e melhorar a estabilidade.

Análise de riscos

  1. O indicador Stoch pode gerar sinais cruzados frequentes, introduzindo o risco de operações mais ineficazes.

  2. Em condições de mercado extremas, os stop losses podem ser penetrados, incapazes de evitar completamente perdas enormes.

  3. Podem ocorrer problemas de conexão de alerta, como interrupções e atrasos, impedindo o feedback em tempo real dos ajustes.

  4. O intervalo de ajustamento deve ser equilibrado em relação aos custos.

Orientações de otimização

  1. Podem ser testadas diferentes combinações de parâmetros para otimizar o indicador Stoch para melhor qualidade do sinal e desempenho da estratégia.

  2. Outros indicadores podem ser combinados para filtrar sinais ou determinar intervalos de ajustamento para melhorar a estabilidade da estratégia.

  3. Podem ser estudados diferentes algoritmos de rastreamento para reduzir a frequência de ajuste, assegurando simultaneamente efeitos de stop loss.

  4. Os métodos de ligação ao MT4/MT5 podem ser melhorados para garantir alertas oportunos e eficientes e minimizar os atrasos.

  5. Os modos automáticos e manuais de stop loss podem ser introduzidos para utilizar diferentes mecanismos em diferentes condições de mercado.

Resumo

Esta estratégia primeiro determina as oportunidades de negociação com base no indicador Stoch, em seguida, rastreia as flutuações de preços durante as posições para ajustar dinamicamente as perdas de parada e emite automaticamente informações de ajuste através de ordens de alerta. Tal mecanismo dinâmico permite a gestão ativa do risco de posição de acordo com as mudanças do mercado com menos intervenção manual. Enquanto isso, as anotações de stop loss intuitivas também facilitam o monitoramento. Outras otimizações nos algoritmos de filtragem de sinais e trailing podem melhorar a lucratividade.


/*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)


Mais.