La estrategia combina el K-valor de un indicador aleatorio de dinámica y el ATR de un indicador de volatilidad para ajustar dinámicamente las líneas de parada y entrada de los valores de K en función de los valores de ATR, lo que lleva a cabo la idea de ajustar automáticamente las líneas de parada y entrada en función de la volatilidad del mercado.
Calcula el valor de K de la longitud de lénsma (close, stoch, high, low, len), smoothK), que representa el valor del indicador al azar K。
El valor ATR calculado para la longitud de lénatr ((len) ≠
Traza la línea de parada (rsi) + la línea baja (low line) y la línea de entrada (rsi) según el valor de ATR*-1+100-lowLine, …, title = “up line”)。
Determinar cuándo el valor de K rompe la línea de entrada (crossover) y la línea de parada (crossunder), generando señales de compra y venta.
Dibujar el color de fondo de la compra y venta.
Cuando se cumplan las señales anteriores, se realizan operaciones de compra y venta y se establece un stop loss.
La estrategia ajusta dinámicamente las líneas de parada y entrada en función de la fluctuación del ATR en el mercado y puede adaptarse automáticamente al riesgo de parada en función de la fluctuación del mercado.
Cuando el mercado es más volátil, la distancia entre la línea de parada y la línea de entrada es mayor, lo que evita que la parada se sacuda.
Cuando el mercado fluctúa en calma, la distancia entre la línea de parada y la línea de entrada se estrecha, lo que permite una parada oportuna.
Utiliza el indicador de movimiento K para determinar entradas y salidas. El valor K puede reaccionar a la velocidad de cambio de precios y capturar puntos de inflexión.
La combinación de un indicador de dinámica y un indicador de fluctuación permite capturar tendencias y ajustar automáticamente el riesgo en función de las fluctuaciones.
Los valores de K son propensos a falsas rupturas que pueden provocar señales de transacción innecesarias. Se puede ajustar adecuadamente el parámetro de valor de K para suavizar la línea de K.
Los parámetros de ATR están demasiado grandes, la distancia entre la línea de parada y la línea de entrada es demasiado grande, el riesgo puede ser demasiado alto. Se puede probar la estabilidad de diferentes parámetros de len.
El simple seguimiento de la parada no puede determinar si la posición de parada es razonable y no puede controlar el riesgo de parada única. Se puede considerar la combinación de algoritmos de parada esperada para controlar el riesgo de parada única.
Las señales de estrategia son frecuentes y las transacciones son costosas. Se puede ajustar adecuadamente el parámetro de línea de entrada lowLine para controlar la frecuencia de las transacciones.
Prueba de ajuste de los parámetros de K-valor para smoothK, para encontrar la combinación óptima de parámetros para un k-valor suave.
Prueba los diferentes valores de los parámetros ATR len para determinar los parámetros ATR adecuados.
Optimización del parámetro de línea de entrada lowLine, para encontrar el parámetro óptimo para controlar la frecuencia de las operaciones.
Considere la posibilidad de filtrar las señales de entrada en combinación con otros indicadores para evitar falsas brechas, como el indicador de volumen de transacción, el indicador KDJ, etc.
Considere la optimización de la parada de pérdidas, mejorando la parada de pérdidas esperadas y controlando activamente el riesgo de parada de pérdidas
La estrategia, basada en el valor K del indicador de dinámica y el indicador de volatilidad ATR, realiza la idea de ajustar dinámicamente las líneas de parada y entrada, tanto para capturar tendencias como para ajustar automáticamente el riesgo en función de las fluctuaciones, es una idea estratégica muy innovadora y práctica. La optimización adicional a través de la optimización de parámetros, la mejora de las formas de parada y demás, puede hacer que la estrategia sea más estable y confiable, con muy buenas perspectivas de desarrollo.
/*backtest
start: 2023-09-08 00:00:00
end: 2023-10-08 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy("Stoch + ATR", overlay=false, pyramiding = 0, calc_on_order_fills = false, commission_type = strategy.commission.percent, commission_value = 0.0454, default_qty_type = strategy.percent_of_equity, default_qty_value = 100)
len = input(34, minval=1, title="Length for Main Stochastic & ATR")
smoothK = input(2, minval=1, title="SmoothK for Main Stochastic")
lowLine = input(10, minval=-50, maxval=50, title="Multiplier for up/low lines")
//Stoch formula
k = sma(stoch(close, high, low, len), smoothK)
plot(k, color=aqua, title = "Stoch")
//len=input
atr=atr(len)
plot(rsi(atr, len)+lowLine , color=red,linewidth=2, title = "low line")
plot(rsi(atr, len)*-1+100-lowLine, color=lime,linewidth=2, title = "up line")
aboveLine = crossunder(k,(rsi(atr, len)+lowLine))? 1 : 0
belowLine = crossover(k,(rsi(atr, len)*-1+100-lowLine))? 1 : 0
aboveLine2 = crossover(k,(rsi(atr, len)+lowLine))? 1 : 0
belowLine2 = crossunder(k,(rsi(atr, len)*-1+100-lowLine))? 1 : 0
skip=(aboveLine2==1 or belowLine2==1) and (aboveLine==1 or belowLine==1)? 1 : 0
//BackGroound Color Plots
plotchar(belowLine==1 and skip==0, title="Buy Signal", char='B', location=location.bottom, color=white, transp=0, offset=0)
plotchar(aboveLine==1 and skip==0, title="Sell Signal", char='S', location=location.top, color=white, transp=0, offset=0)
plotchar(belowLine2==1 and skip==0, title="Close Signal", char='C', location=location.bottom, color=white, transp=0, offset=0)
plotchar(aboveLine2==1 and skip==0, title="Close Signal", char='C', location=location.top, color=white, transp=0, offset=0)
bgcolor(aboveLine==1 ? red : na, transp=30, title = "sell signal")
bgcolor(belowLine==1 ? lime : na, transp=30, title = "buy signal")
bgcolor(aboveLine2==1 ? lime : na, transp=80, title = "close short")
bgcolor(belowLine2==1 ? red : na, transp=80, title = "close long")
bgcolor(skip==1 ? black : na, transp=0, title = "skip signal")
//strategy
longCondition = belowLine==1
shortCondition = aboveLine==1
strategy.entry("BUY", strategy.long, when = longCondition)
strategy.entry("SELL", strategy.short, when = shortCondition)
strategy.cancel_all(when = skip==1)