
La estrategia utiliza el indicador de Stoch para determinar la señal de entrada, y después de la entrada, rastrea en tiempo real los precios nuevos altos o bajos, lo que permite ajustar dinámicamente el punto de parada. Al mismo tiempo, la estrategia también envía información sobre la modificación de la parada a MT4 / MT5 a través de la función de alerta, para ajustar las posiciones en el comercio real en tiempo real.
La estrategia se basa en el indicador de Stoch para generar señales de compra y venta, generando una señal de compra cuando la línea K de Stoch rompe la línea D desde abajo; y una señal de venta cuando la línea K de Stoch rompe la línea D desde arriba.
Una vez en el mercado, la estrategia rastrea en tiempo real los últimos mínimos de los precios más bajos y los últimos máximos de los precios más altos, como un stop loss dinámico. En concreto, para las órdenes múltiples, rastrea los últimos mínimos de los precios más bajos como un stop loss; para las órdenes en blanco, rastrea los últimos máximos de los precios más altos como un stop loss.
Cuando se detecta un cambio en el punto de parada, la estrategia genera una instrucción de parada modificada a través de la función de alerta y se envía a MT4/MT5 para ajustar el punto de parada en el comercio real en tiempo real. Al mismo tiempo, se traza una etiqueta gráfica para mostrar visualmente el cambio de parada.
La estrategia permite el control manual de si se ha activado el mecanismo de stop loss dinámico. Una vez activado, se puede ajustar el precio de seguimiento de stop loss en tiempo real según las fluctuaciones del mercado.
El mecanismo de seguimiento de pérdidas dinámico permite ajustar los puntos de parada de forma flexible en función de las fluctuaciones del mercado, lo que permite el seguimiento de las pérdidas y el control efectivo del riesgo.
El uso de la función de alerta puede enviar información de ajuste de pérdidas en tiempo real a MT4/MT5, para una gestión automatizada, sin intervención humana.
Indica la información de los ajustes de stop loss de forma gráfica para facilitar la visualización y verificación de los efectos de seguimiento de stop loss.
Soporta el control manual de si el mecanismo de seguimiento de pérdidas está activado o no, y la flexibilidad para adaptarse a diferentes condiciones de mercado.
En combinación con el indicador de Stoch para determinar el momento, se puede filtrar eficazmente las brechas falsas y mejorar la estabilidad de la estrategia.
Los indicadores de Stoch pueden tener frecuentes señales de cruce, con el riesgo de más operaciones no válidas. Se pueden ajustar los parámetros adecuadamente para filtrar las señales.
En situaciones extremas, el riesgo de pérdidas masivas no se puede evitar por completo. Se debe monitorear el riesgo de posición a tiempo.
La conexión alerta puede sufrir interrupciones, retrasos, etc. No se pueden ajustar los resultados en tiempo real, por lo que es necesario un buen manejo de errores.
El seguimiento dinámico del stop loss requiere un ajuste relativamente intenso, lo que puede generar más costos de transacción. Se debe equilibrar la amplitud de ajuste con los costos.
Se pueden probar diferentes combinaciones de parámetros para optimizar los indicadores de Stoch, obteniendo una mejor calidad de la señal y el efecto de la estrategia.
Se puede combinar con otros indicadores para filtrar señales o determinar la amplitud de ajuste, optimizar el mecanismo de detención de pérdidas y mejorar la estabilidad de la estrategia.
Se pueden estudiar diferentes algoritmos de seguimiento para garantizar un efecto de detención de pérdidas a la vez que se reduce la frecuencia de ajuste.
Se puede optimizar la forma en que se conecta con MT4/MT5 para garantizar una alerta oportuna y eficiente y reducir los problemas de latencia.
Se puede introducir un modo de parada automática y un modo de conmutación manual, con diferentes mecanismos de parada en diferentes condiciones de mercado.
Esta estrategia primero determina el momento de compra y venta basándose en el indicador de Stoch, y luego rastrea en tiempo real la volatilidad de los precios para ajustar los puntos de parada y enviar la información de ajuste automáticamente a través de la alerta. Este mecanismo de parada dinámica puede administrar activamente el riesgo de posición en función de los cambios en el mercado y reducir la eficiencia de la intervención manual.
/*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)