
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.
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.
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.
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.
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.
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.
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.
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.
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.
Combinado com o indicador de Stoch para determinar o tempo, pode filtrar eficazmente as brechas falsas e aumentar a estabilidade da estratégia.
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.
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.
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.
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.
É 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.
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.
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.
Otimizar a conexão com o MT4/MT5 para garantir a eficiência do alerta e reduzir os problemas de latência.
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.
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.
/*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)