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.
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
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
El uso de indicadores estocásticos para determinar el estado de sobrecompra y sobreventa en el mercado, evitando el seguimiento de alzas y bajas.
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;
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;
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.
El riesgo de señales falsas en los indicadores estocásticos
Riesgo de pérdidas ampliadas por una ruptura de stop loss
La frecuencia de las transacciones conlleva un riesgo de aumento de los gastos de transacción
Optimización de las estrategias de pérdidas, como el uso de Chandelier Exit, movimiento de pérdidas, pérdidas de oscilación, etc.
Optimización de las condiciones de entrada, en combinación con otros indicadores para evitar falsas señales de indicadores estocásticos
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
Añadir gestión de posición, como cantidad fija por partida, porcentaje fijo de inversión, etc., para controlar el riesgo individual
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
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.
/*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)