Estrategia de negociación automática basada en STOCH

El autor:¿ Qué pasa?, Fecha: 2023-09-28 11:38:44
Las etiquetas:

Esta estrategia diseña un simple sistema de negociación automática basado en el indicador STOCH. Es adecuado para Forex, índices bursátiles, materias primas y se puede extender a las acciones y los mercados criptográficos.

Resumen de la estrategia

Esta estrategia identifica los estados de sobrecompra y sobreventa utilizando el indicador STOCH combinado con puntos PIVOT para establecer posiciones de stop loss, realizando la tendencia siguiente. Va largo o corto cuando el indicador STOCH muestra señales de sobrecompra o sobreventa. Los puntos de stop loss se establecen cerca de los puntos PIVOT del día para controlar eficazmente los riesgos. Los puntos de take profit parcial se establecen para cerrar posiciones parciales después de cierto nivel de ganancia.

Estrategia lógica

Esta estrategia utiliza el cruce de las líneas %K y %D del indicador STOCH para generar señales largas y cortas. Específicamente, cuando la línea %K cruza por encima de la línea %D, será larga. Cuando la línea %K cruza por debajo de la línea %D, será corta. Esto captura los estados de sobrecompra y sobreventa.

Para controlar los riesgos, el punto de stop loss largo se establece cerca del punto PIVOT más bajo diario y el punto de stop loss corto se establece cerca del punto PIVOT más alto diario.

Para obtener ganancias parciales, cierra el 50% de la posición después de un cierto nivel de ganancia después de abrir la posición.

En resumen, esta estrategia captura los puntos de sobrecompra y sobreventa de manera apropiada; controla los riesgos utilizando stop loss; y optimiza la eficiencia del uso del capital.

Los puntos fuertes de la estrategia

  • El uso del indicador STOCH captura de manera efectiva los estados de sobrecompra y sobreventa.

  • El mecanismo de toma parcial de ganancias optimiza la eficiencia del uso del capital.

  • Los parámetros personalizables permiten una flexibilidad basada en las condiciones del mercado y la preferencia de riesgo.

  • Lógica simple y clara, fácil de entender y dominar para todos los comerciantes.

Riesgos estratégicos

  • Como estrategia de tendencia, puede quedar atrapada en mercados de rango y no obtener ganancias.

  • El STOCH puede generar señales falsas, causando operaciones innecesarias.

  • Las pérdidas de parada cerca de los puntos de pivote pueden estar demasiado cerca después de las rupturas.

  • Algunos parámetros, como el período, pueden necesitar ajustes para diferentes mercados, de lo contrario afectan al rendimiento de la estrategia.

  • La prueba de retroceso sólo se basa en datos históricos no puede garantizar el rendimiento futuro más factores incontrolables en el comercio en vivo.

  • Los sistemas de negociación automática requieren conexiones estables para evitar problemas de ejecución de operaciones.

Optimización de la estrategia

  • Añadir un filtro de tendencia para evitar el comercio sin tendencias claras, como usar MA para determinar la dirección de la tendencia.

  • Añadir análisis de volumen para detectar falsas rupturas y evitar trampas. por ejemplo, volumen alcista/bajista.

  • Ajustar parámetros como las entradas de STOCH basadas en diferentes productos y plazos para optimizar el rendimiento.

  • Considere algoritmos de aprendizaje automático para entrenar modelos utilizando grandes datos y optimizar parámetros automáticamente.

  • Establezca la relación de factor de ganancia para introducir el control de riesgos y evitar grandes pérdidas de operaciones.

  • Añadir más filtros como las condiciones comerciales, los fundamentos para mejorar la tasa de ganancia.

Conclusión

Esta estrategia adopta un enfoque de tendencia simple e intuitivo basado en el indicador STOCH para identificar los puntos de sobrecompra / sobreventa. Con PIVOT stop loss para controlar el riesgo y partial take profit para optimizar la eficiencia del capital. El diseño cubre Capture, Control y Optimize.


/*backtest
start: 2022-09-21 00:00:00
end: 2023-09-27 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="TradingView Alerts to MT4 MT5 - Forex, indices, commodities, stocks, crypto", commission_type=strategy.commission.cash_per_contract, commission_value=0.00003, overlay=false, default_qty_value=20000, initial_capital=1000)
//
// This script was created for educational purposes only.
// It is showing how to use Alerts-Straight-From-Strategies and
// dynamic variables in TradingView alerts.
// And how to auto-execute them in Forex, indices, commodities markets
// 
// (This method will also work with stocks and crypto - anything your 
// broker is offering via their MT4/MT5 platform).
 
TakeProfitLevel=input(400)
TakePartialProfitLevel=input(150)

// **** Entries logic **** {
periodK = input(13, title="K", minval=1)
periodD = input(3, title="D", minval=1)
smoothK = 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 and year>2009
GoShort=crossunder(k,d) and k>20 and year>2009

AlertTest=open>close or open<close or open==close
// } 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
// } End of Pivot-points and stop-loss logic

// **** Trade counter and partial closing mechanism **** {
var int trade_id=0
if GoLong or GoShort
    trade_id:=trade_id+1

TakePartialProfitLong = barssince(GoLong)<barssince(GoShort) and crossover(high,(valuewhen(GoLong,close,0)+TakePartialProfitLevel*syminfo.mintick))
TakePartialProfitShort = barssince(GoLong)>barssince(GoShort) and crossunder(low,(valuewhen(GoShort,close,0)-TakePartialProfitLevel*syminfo.mintick))
// } End of Trade counter and partial closing mechanism

strategy.entry("Long", strategy.long, when=GoLong)
strategy.exit("XPartLong", from_entry="Long", qty_percent=50, profit=TakePartialProfitLevel)
strategy.exit("XLong", from_entry="Long", stop=stoploss_long, profit=TakeProfitLevel)
strategy.entry("Short", strategy.short, when=GoShort)
strategy.exit("XPartShort", from_entry="Short", qty_percent=50, profit=TakePartialProfitLevel)
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 TakePartialProfitLong
    alertsyntax_closepartlong='closepart tradeid=' + tostring(trade_id) + ' part=0.5'
    alert(message=alertsyntax_closepartlong, freq=alert.freq_once_per_bar_close)
if TakePartialProfitShort
    alertsyntax_closepartshort='closepart tradeid=' + tostring(trade_id) + ' part=0.5'
    alert(message=alertsyntax_closepartshort, freq=alert.freq_once_per_bar_close)


Más.