Estrategia de seguimiento de pérdidas de parada de movimiento

El autor:¿ Qué pasa?, Fecha: 2024-01-03 16:15:29
Las etiquetas:

img

Resumen general

Esta estrategia utiliza el indicador de Stoch para generar señales de entrada. Después de ingresar a una posición, rastreará nuevos máximos o mínimos en tiempo real para ajustar dinámicamente el stop loss. Al mismo tiempo, la estrategia también enviará información de modificación de stop loss a MT4/MT5 a través de la función de alerta para ajustar posiciones en operaciones reales.

Principio de la estrategia

  1. La estrategia genera señales de compra y venta basadas en el indicador Stoch. Cuando la línea Stoch K cruza por encima de la línea D desde abajo, se genera una señal de compra. Cuando la línea K cruza por debajo de la línea D desde arriba, se genera una señal de venta.

  2. Después de entrar en una posición, la estrategia rastrea el último mínimo del precio más bajo y el último máximo del precio más alto en tiempo real como niveles dinámicos de stop loss.

  3. Cuando se detecta un cambio en el nivel de stop loss, la estrategia genera una orden de stop loss de modificación a través de la función de alerta y la envía a MT4/MT5 para ajustar el nivel de stop loss de las operaciones reales en tiempo real.

  4. Esta estrategia admite el control manual de si se habilita el mecanismo dinámico de stop loss. Cuando está habilitado, los stop loss se pueden ajustar en tiempo real de acuerdo con las fluctuaciones del mercado.

Análisis de ventajas

  1. El mecanismo dinámico de suspensión de pérdidas puede ajustar flexiblemente los niveles de suspensión de pérdidas de acuerdo con las fluctuaciones del mercado para controlar eficazmente los riesgos.

  2. La función de alerta permite el envío en tiempo real de información sobre el ajuste de pérdidas de parada al MT4/MT5 para una gestión automatizada sin intervención manual.

  3. Las anotaciones visuales de los ajustes de stop loss en el gráfico facilitan la visualización y verificación de los efectos de stop loss.

  4. El apoyo al control manual del mecanismo de seguimiento de pérdidas de parada permite una adaptación flexible a las diferentes condiciones del mercado.

  5. Combinada con el indicador Stoch para determinar la oportunidad, la estrategia puede filtrar eficazmente las falsas rupturas y mejorar la estabilidad.

Análisis de riesgos

  1. El indicador de Stoch puede generar frecuentes señales cruzadas, lo que introduce el riesgo de operaciones más ineficaces.

  2. En condiciones extremas de mercado, las pérdidas de detención podrían penetrar, sin poder evitar completamente pérdidas enormes.

  3. Pueden ocurrir problemas de conexión de alerta como interrupciones y retrasos, lo que impide la retroalimentación en tiempo real de los ajustes.

  4. El intervalo de ajuste debe ser equilibrado con los costes.

Direcciones de optimización

  1. Se pueden probar diferentes combinaciones de parámetros para optimizar el indicador de Stoch para una mejor calidad de la señal y un mejor rendimiento de la estrategia.

  2. Otros indicadores pueden combinarse para filtrar señales o determinar rangos de ajuste para mejorar la estabilidad de la estrategia.

  3. Se pueden estudiar diferentes algoritmos de seguimiento para reducir la frecuencia de ajuste al tiempo que se garantizan los efectos de stop loss.

  4. Los métodos de conexión con MT4/MT5 pueden mejorarse para garantizar alertas oportunas y eficientes y minimizar los retrasos.

  5. Se pueden introducir modos de stop loss automáticos y manuales para utilizar diferentes mecanismos en diferentes condiciones de mercado.

Resumen de las actividades

Esta estrategia primero determina las oportunidades de negociación basadas en el indicador de Stoch, luego rastrea las fluctuaciones de precios durante las posiciones para ajustar dinámicamente las pérdidas de parada y emite automáticamente información de ajuste a través de órdenes de alerta. Tal mecanismo dinámico permite la gestión activa del riesgo de posición de acuerdo con los cambios del mercado con menos intervención manual. Mientras tanto, las anotaciones de stop loss intuitivas también facilitan el monitoreo.


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


Más.