
La estrategia es una estrategia combinada, que combina indicadores de impulso, indicadores de seguimiento de tendencias y indicadores de la línea media, para lograr el seguimiento de tendencias y la venta/compra de brechas. Se utiliza principalmente la combinación de indicadores estocásticos y indicadores de Supertrend para determinar el momento de compra/venta, y se utiliza la línea media EMA para determinar la tendencia principal del mercado.
La estrategia se compone principalmente de los siguientes indicadores:
EMA promedio: utiliza EMA 25, 50, 100 y 200 cuatro líneas promedio para determinar la tendencia principal. Si el EMA25 atraviesa el EMA50 y el EMA100 atraviesa el EMA200, es una tendencia alcista, o una tendencia bajista.
Indicador de seguimiento de tendencias de Supertrend: los parámetros son Factor 3 y ATR 10, para determinar si el precio actual está en una tendencia ascendente o descendente. Cuando Supertrend es verde para la tendencia ascendente, rojo para la tendencia descendente.
Indicadores de la dinámica estocástica: %K 8 y %D 3, para determinar si el estocástico produce el fenómeno de la horca dorada o la horca muerta. Cuando la línea %K atraviesa la línea %D desde abajo es una señal de horca dorada, al contrario de la horca muerta.
La estrategia de compra es la siguiente: EMA muestra tendencia al alza + Supertrend muestra tendencia al alza + Hora de la horquilla estocástica. La estrategia de venta es la siguiente: EMA muestra una tendencia a la baja + Supertrend muestra una tendencia a la baja + Stochastic Dead Forks.
La estrategia combina tres indicadores: tendencia, dinámica y breakout para determinar con mayor fiabilidad el movimiento del mercado y los puntos de venta y venta.
La estrategia tiene las siguientes ventajas:
La combinación de varios indicadores, con un buen juicio, puede filtrar eficazmente las brechas falsas.
La inclusión de indicadores de dinámica permite determinar el punto de inflexión con anticipación.
Los parámetros se pueden personalizar para diferentes entornos de mercado.
Se ha logrado una configuración relativamente eficiente de parada y parada de pérdidas.
Se puede hacer un retroceso en un ciclo alto como la luz solar, con mejores resultados.
La estrategia también tiene sus riesgos:
La configuración inadecuada de los parámetros puede causar una frecuencia de transacción o inestabilidad de la señal. Se requiere ajuste a los parámetros.
En el momento de la elección, es posible que se produzcan errores de juicio. Se puede considerar la inclusión de más indicadores de fluctuación.
El punto de parada se establece como el punto máximo del indicador estocástico, que puede estar demasiado cerca, y se puede considerar una relajación adecuada.
Los datos de la detección son insuficientes, lo que puede afectar a la adaptación de los parámetros, por lo que se debe ampliar el período de detección.
La estrategia puede ser optimizada en las siguientes direcciones:
Prueba más combinaciones de parámetros para encontrar los mejores. Por ejemplo, ajusta los parámetros Factor de Supertrend.
Añadir más indicadores de filtro, como indicadores de energía, indicadores de fluctuación, etc., para reducir la probabilidad de error.
Se pueden probar diferentes formas de detener la pérdida, como el establecimiento de una línea de detener la pérdida en un determinado porcentaje en el punto extremo.
Optimización de los métodos de suspensión, como la consideración de la suspensión dinámica, para bloquear más ganancias.
Ampliar el alcance de la estrategia, por ejemplo, tratando de adaptarse a más variedades de transacciones o tratando de usarlas en ciclos más altos.
La estrategia tiene una idea general clara, la selección de indicadores es razonable, el seguimiento de la tendencia y la ruptura de las operaciones, el efecto de la retroalimentación es mejor. Pero todavía hay espacio para la optimización, mediante el ajuste de los parámetros, la adición de más indicadores de fluctuación, la mejora de los métodos de detención de pérdidas, etc. La optimización multidimensional puede hacer que la estrategia sea más estable y confiable.
/*backtest
start: 2023-12-05 00:00:00
end: 2023-12-06 07:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy(title="Supertrend + Stoch Strategy", overlay=true)
// ---inputs---
pl = input(1.5, title="P/L", minval=0.1)
lossPercentage = input(1, title="Loss Percentage", minval=1, maxval=100)
atrPeriod = input(10, "ATR Length")
factor = input(3, "Supertrend Factor")
periodK = input(8, title="%K Length", minval=1)
smoothK = input(3, title="%K Smoothing", minval=1)
periodD = input(3, title="%D Smoothing", minval=1)
ema1l = input(25, title="EMA 1 Length", minval=1)
ema2l = input(50, title="EMA 2 Length", minval=1)
ema3l = input(100, title="EMA 3 Length", minval=1)
ema4l = input(200, title="EMA 4 Length", minval=1)
// ---lines---
ema1 = ema(close, ema1l)
ema2 = ema(close, ema2l)
ema3 = ema(close, ema3l)
ema4 = ema(close, ema4l)
trendUpper = ema1 > ema2 and ema3 > ema4
trendLower = ema1 < ema2 and ema3 < ema4
[supertrend, direction] = supertrend(factor, atrPeriod)
supertrendUpper = direction < 0
supertrendLower = direction > 0
k = sma(stoch(close, high, low, periodK), smoothK)
d = sma(k, periodD)
stochCrossOver = crossover(k, d)
stochCrossUnder = crossunder(k, d)
// ---plot---
plot(ema1, color=color.green)
plot(ema2, color=color.orange)
plot(ema3, color=color.blue)
plot(ema4, color=color.purple)
bodyMiddle = plot((open + close) / 2, display=display.none)
upTrend = plot(direction < 0 ? supertrend : na, "Up Trend", color = color.green, style=plot.style_linebr)
downTrend = plot(direction < 0 ? na : supertrend, "Down Trend", color = color.red, style=plot.style_linebr)
fill(bodyMiddle, upTrend, color.new(color.green, 95), fillgaps=false)
fill(bodyMiddle, downTrend, color.new(color.red, 95), fillgaps=false)
// ---stop place compute---
edge = 0. // periodly high/low
edge := stochCrossOver ? high : stochCrossUnder ? low : k > d ? max(edge[1], high) : k < d ? min(edge[1], low) : edge[1]
// plot(edge)
// ---trade condition---
// longCond = trendUpper and supertrendUpper and stochCrossOver
// shortCond = trendLower and supertrendLower and stochCrossUnder
longCond = trendUpper and supertrendUpper and stochCrossOver and strategy.position_size == 0
shortCond = trendLower and supertrendLower and stochCrossUnder and strategy.position_size == 0
// ---stop & take---
stop = 0.
stop := nz(stop[1], stop)
take = 0.
take := nz(take[1], take)
if longCond
stop := edge[1]
take := close + (close - stop) * pl
if shortCond
stop := edge[1]
take := close - (stop - close) * pl
// ---trade---
qty = strategy.equity / abs(stop - close) / 100 * lossPercentage
strategy.entry("Buy", strategy.long, when=longCond, qty=qty)
strategy.exit("Close Buy","Buy", limit=take, stop=stop)
strategy.entry("Sell", strategy.short, when=shortCond, qty=qty)
strategy.exit("Close Sell","Sell", limit=take, stop=stop)
stopLine = plot(strategy.position_size != 0 ? stop : na, color=color.red, style=plot.style_linebr)
takeLine = plot(strategy.position_size != 0 ? take : na, color=color.green, style=plot.style_linebr)
entryLine = plot(strategy.position_size != 0 ? strategy.position_avg_price : na, color=color.blue, style=plot.style_linebr)
fill(entryLine, stopLine, color.new(color.red, 90), fillgaps=false)
fill(entryLine, takeLine, color.new(color.green, 90), fillgaps=false)