Estrategia de trading de stop loss flexible a corto plazo basada en el indicador estocástico


Fecha de creación: 2023-09-28 10:45:41 Última modificación: 2023-09-28 10:45:41
Copiar: 0 Número de Visitas: 679
1
Seguir
1617
Seguidores

Descripción general

Esta estrategia se basa en el indicador de oscilador estocástico para determinar el estado de sobrecompra y sobreventa en el mercado, en combinación con el principio de parada de pérdidas elásticas para realizar operaciones a corto plazo. Haga más cuando el indicador estocástico está en la horquilla de oro, haga vacío cuando está muerto, y al mismo tiempo establezca una parada de resistencia basada en el eje central de la fase anterior, mientras controla el riesgo para garantizar la ganancia.

Principio de estrategia

Principio de la entrada

El indicador del oscilador estocástico contiene la línea%K y la línea%D. Cuando la línea%K rompe la línea%D de abajo hacia arriba, se toma como señal de horquilla de oro, y cuando la línea%K rompe la línea%D de arriba hacia abajo, se toma como señal de horquilla de oro. La estrategia es juzgar la señal de horquilla de oro en función del indicador estocástico.

Concretamente, en el momento de la bifurcación de un indicador estocástico, si el valor de la línea%K es menor que 80 (no se sobrecompra), se hace más; en el momento de la bifurcación de un indicador estocástico, si el valor de la línea%K es mayor que 20 (no se sobrecompra), se hace más.

GoLong=crossover(k,d) and k<80 
GoShort=crossunder(k,d) and k>20

Principio de la detención de pérdidas

Esta estrategia utiliza el método de los paros flexibles para fijar el precio de los paros en función de los puntos centrales de la etapa anterior, con el siguiente código:

piv_high = pivothigh(high,1,1)
piv_low = pivotlow(low,1,1)

stoploss_long=valuewhen(piv_low,piv_low,0) 
stoploss_short=valuewhen(piv_high,piv_high,0)

Los puntos centrales representan una resistencia de soporte importante, y si el precio rompe los puntos centrales, se retira de la posición, lo que hace que el precio de parada se mueva con la columna de elasticidad de los cambios en los puntos centrales.

Además, el precio de parada también toma en cuenta los precios mínimos y máximos del período actual para optimizar aún más la posición de parada, como se muestra en el siguiente código:

if GoLong 
    stoploss_long := low<pl ? low : pl
if GoShort  
    stoploss_short := high>ph ? high : ph   

Ventajas estratégicas

  1. El uso de indicadores estocásticos para determinar el estado de sobrecompra y sobreventa en el mercado, evitando el seguimiento de alzas y bajas.

  2. La aplicación del principio de la elasticidad de los paros, que permite optimizar la posición de los paros en función de los cambios en el mercado;

  3. La combinación de la ruptura del eje central para lograr el cierre de pérdidas y hacer que el cierre de pérdidas sea más eficaz;

  4. Tenga en cuenta el precio mínimo más alto en ese momento para optimizar el stop loss y hacer que el stop loss sea más preciso.

Riesgos y soluciones

  1. El riesgo de señales falsas en los indicadores estocásticos

    • Solución: Verificar junto con otros indicadores y evitar errores
  2. Riesgo de pérdidas ampliadas por una ruptura de stop loss

    • Solución: reducir la distancia de parada apropiadamente, o usar un método de parada como Chandelier Exit
  3. La frecuencia de las transacciones conlleva un riesgo de aumento de los gastos de transacción

    • Solución: una adecuada flexibilización de las condiciones de entrada y una reducción de las operaciones

Optimización de las ideas

  1. Optimización de las estrategias de pérdidas, como el uso de Chandelier Exit, movimiento de pérdidas, pérdidas de oscilación, etc.

  2. Optimización de las condiciones de entrada, en combinación con otros indicadores para evitar falsas señales de indicadores estocásticos

  3. Optimización de los métodos de frenado, como el uso de frenados móviles, frenados de oscilación, etc., para obtener una mayor rentabilidad de frenado

  4. Añadir gestión de posición, como cantidad fija por partida, porcentaje fijo de inversión, etc., para controlar el riesgo individual

  5. Configuración de parámetros de optimización, como el número de K, D, el ciclo de suavización, etc., para ajustar los parámetros a diferentes mercados

Resumir

Esta estrategia utiliza el indicador estocástico para determinar la entrada en el estado de sobrecompra y sobreventa, y utiliza un método de parada flexible para administrar el riesgo. La estrategia tiene ventajas como evitar el seguimiento de la caída y la parada efectiva, pero también existe un cierto riesgo de señales falsas. En el futuro, la estrategia puede perfeccionarse aún más optimizando las condiciones de entrada, la estrategia de parada de pérdidas, el método de parada y la gestión del riesgo.

Código Fuente de la Estrategia
/*backtest
start: 2023-08-28 00:00:00
end: 2023-09-27 00:00:00
period: 2h
basePeriod: 15m
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="TradingView Alerts to MT4 MT5 example with cancelling pending orders", commission_type=strategy.commission.cash_per_order, commission_value=0.00003, overlay=true, default_qty_value=100000, initial_capital=1000)

// This script was created for educational purposes only.
// It is showing how to create pending orders and cancel them
// Together with syntax to send these events through TradingView alerts system
// All the way to brokers for execution

TakeProfitLevel=input(400)

// **** Entries logic **** {
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)
// plot(k, title="%K", color=color.blue)
// plot(d, title="%D", color=color.orange)
// h0 = hline(80)
// h1 = hline(20)
// fill(h0, h1, color=color.purple, transp=75)

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.lime, title="stoploss_long")
plot(stoploss_short, color=color.red, title="stoploss_short")
// } End of Pivot-points and stop-loss logic

CancelLong=crossunder(low,stoploss_long) and strategy.position_size[1]<=0 and strategy.position_size<=0
CancelShort=crossover(high,stoploss_short) and strategy.position_size[1]>=0 and strategy.position_size>=0
entry_distance=input(10, title="Entry distance for stop orders")

plotshape(CancelLong ? stoploss_long[1]-10*syminfo.mintick : na, location=location.absolute, style=shape.labelup, color=color.gray, textcolor=color.white, text="cancel\nlong", size=size.tiny)
plotshape(CancelShort ? stoploss_short[1]+10*syminfo.mintick : na, location=location.absolute, style=shape.labeldown, color=color.gray, textcolor=color.white, text="cancel\nshort", size=size.tiny)

strategy.entry("Long", strategy.long, when=GoLong, stop=close+entry_distance*syminfo.mintick)
strategy.exit("XLong", from_entry="Long", stop=stoploss_long, profit=TakeProfitLevel)
strategy.cancel("Long", when = CancelLong)
strategy.entry("Short", strategy.short, when=GoShort, stop=close-entry_distance*syminfo.mintick)
strategy.exit("XShort", from_entry="Short", stop=stoploss_short, profit=TakeProfitLevel)
strategy.cancel("Short", when = CancelShort)

if GoLong
    alertsyntax_golong='long offset=' + tostring(entry_distance) + ' slprice=' + tostring(stoploss_long) + ' tp=' + tostring(TakeProfitLevel)
    alert(message=alertsyntax_golong, freq=alert.freq_once_per_bar_close)
if GoShort
    alertsyntax_goshort='short offset=' + tostring(-entry_distance) + ' slprice=' + tostring(stoploss_short) + ' tp=' + tostring(TakeProfitLevel)
    alert(message=alertsyntax_goshort, freq=alert.freq_once_per_bar_close)
if CancelLong
    alertsyntax_cancellong='cancel long'
    alert(message=alertsyntax_cancellong, freq=alert.freq_once_per_bar_close)
if CancelShort
    alertsyntax_cancelshort='cancel short'
    alert(message=alertsyntax_cancelshort, freq=alert.freq_once_per_bar_close)