Estrategia de negociación a corto plazo basada en el indicador estocástico con stop loss elástico

El autor:¿ Qué pasa?, Fecha: 2023-09-28 10:45:41
Las etiquetas:

Resumen general

Esta estrategia utiliza el indicador del oscilador estocástico para determinar las condiciones de mercado de sobrecompra y sobreventa para el comercio a corto plazo.

Estrategia lógica

Lógico de entrada

El indicador del oscilador estocástico se compone de la línea %K y la línea %D. Cuando la línea %K cruza por encima de la línea %D, se genera una señal de compra cruzada dorada. Cuando la línea %K cruza por debajo de la línea %D, se activa una señal de venta cruzada de muerte. Esta estrategia simplemente sigue los cruces en el indicador estocástico para determinar entradas.

Específicamente, cuando hay una cruz de oro en el indicador estocástico, si el valor de %K es menor a 80 (no sobrecomprado), se tomará una posición larga.

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

Deja la lógica de la pérdida

Esta estrategia utiliza un enfoque de stop loss elástico, estableciendo el precio de stop basado en puntos pivot anteriores, como se muestra a continuación:

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) 

Si el precio rompe el nivel de pivote, la posición se cerrará y el precio de stop loss seguirá elasticamente los puntos de pivote cambiantes.

Además, el precio de parada también considera los precios más altos y más bajos del período en curso para una mayor optimización:

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

Ventajas

  1. Usando el Estocástico para evitar perseguir los picos y los fondos;

  2. El stop loss elástico sigue los cambios del mercado y optimiza el precio del stop;

  3. El punto de ruptura del punto de pivote es más eficaz;

  4. La optimización del precio de parada utilizando los precios más altos y más bajos actuales hace que la parada sea más precisa.

Riesgos y soluciones

  1. Riesgo de señales falsas de Stochastic

    • Solución: confirmar las señales con otros indicadores para evitar señales falsas
  2. El riesgo de que se produzca un stop loss y de que se incremente el riesgo de pérdida

    • Solución: Reduzca la distancia de parada, o use métodos como la salida de la lámpara.
  3. Riesgo de alta frecuencia de negociación y comisiones

    • Solución: flexibilizar las normas de entrada para reducir el número de operaciones

Direcciones de optimización

  1. Optimizar el stop loss, utilizando métodos como la salida de la lámpara de candela, el stop de seguimiento, el stop loss oscilante, etc.

  2. Optimizar las reglas de entrada con otros indicadores para evitar las falsas señales estocásticas

  3. Optimizar la obtención de ganancias, utilizando el objetivo de ganancias traseras, el objetivo de ganancias oscilantes, etc. para aumentar la rentabilidad

  4. Se incluye el tamaño de las posiciones, como cantidad fija por operación, porcentaje de riesgo fijo, etc., en el control del riesgo por operación.

  5. Optimizar parámetros como los períodos K, D, suavizado, etc. basado en diferentes mercados

Resumen de las actividades

Esta estrategia se basa en la sobrecompra / sobreventa estocástica y gestiona el riesgo con un stop loss elástico. Tiene la ventaja de evitar perseguir el impulso, paradas efectivas, pero también tiene algunos riesgos de señal falsa. Se pueden hacer mejoras futuras en las entradas, paradas, salidas, gestión de riesgos, etc.


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


Más.