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.
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.
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.
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.
Esta estratégia suporta o controlo manual da habilitação do mecanismo dinâmico de stop loss.
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.
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.
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.
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.
Combinada com o indicador Stoch para determinar a oportunidade, a estratégia pode filtrar efetivamente as falsas rupturas e melhorar a estabilidade.
O indicador Stoch pode gerar sinais cruzados frequentes, introduzindo o risco de operações mais ineficazes.
Em condições de mercado extremas, os stop losses podem ser penetrados, incapazes de evitar completamente perdas enormes.
Podem ocorrer problemas de conexão de alerta, como interrupções e atrasos, impedindo o feedback em tempo real dos ajustes.
O intervalo de ajustamento deve ser equilibrado em relação aos custos.
Podem ser testadas diferentes combinações de parâmetros para otimizar o indicador Stoch para melhor qualidade do sinal e desempenho da estratégia.
Outros indicadores podem ser combinados para filtrar sinais ou determinar intervalos de ajustamento para melhorar a estabilidade da estratégia.
Podem ser estudados diferentes algoritmos de rastreamento para reduzir a frequência de ajuste, assegurando simultaneamente efeitos de stop loss.
Os métodos de ligação ao MT4/MT5 podem ser melhorados para garantir alertas oportunos e eficientes e minimizar os atrasos.
Os modos automáticos e manuais de stop loss podem ser introduzidos para utilizar diferentes mecanismos em diferentes condições de mercado.
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)