Estrategias de negociación de media móvil de índices triples con índices aleatorios

El autor:¿ Qué pasa?, fecha: 2024-01-30 16:52:48
Las etiquetas:

三重指数移动平均线与随机指数平滑移动平均线交易策略

Resumen

La estrategia es una estrategia de seguimiento de tendencias que combina indicadores de media móvil de índices triples y indicadores de media móvil de índices aleatorios para generar señales de negociación. La estrategia también introduce indicadores de media móvil de índices aleatorios como indicadores de juicio auxiliares.

El principio

  1. Usando medias móviles de índices triples de 8, 14 y 50 días. Cuando una media móvil de índices de 8 días atraviesa una media móvil de índices de 14 días, una media móvil de índices de 14 días atraviesa una media móvil de índices de 50 días y produce más señales de ver; por el contrario, una señal de mirar hacia abajo.

  2. Utilizando un indicador de media móvil aleatorio (Stochastic RSI) como indicador de juicio auxiliar. Específicamente: primero se calcula el RSI del día 14, luego se calcula el indicador Stochastic sobre la base del indicador RSI, y finalmente se calcula el indicador Stochastic para obtener la línea K de la media móvil simple de 3 días y la línea D de la media móvil simple de 3 días.

  3. En el momento de generar la señal de negociación, si el precio está por encima de la media móvil del índice de 8 días, se entra más; si el precio está por debajo de la media móvil del índice de 8 días, se entra en blanco.

  4. El stop loss está situado a una distancia ATR de 1x por debajo/por encima del precio de entrada. El stop loss está situado a una distancia ATR de 4x por debajo/por debajo del precio de entrada.

Las ventajas

  1. Las medias móviles como indicadores básicos pueden ser eficaces para seguir las tendencias del mercado. Las medias móviles de triple índice utilizan múltiples ciclos en combinación para garantizar la sensibilidad a las tendencias a corto y mediano plazo.

  2. La adición del RSI estocástico como indicador de juicio auxiliar puede filtrar las falsas señales y mejorar la precisión de las entradas.

  3. La posición de stop loss stop loss se puede ajustar según el ATR, lo que permite un seguimiento dinámico de la volatilidad del mercado y evitar que el stop loss stop loss sea demasiado grande o demasiado pequeño.

  4. La configuración de los parámetros de la estrategia es razonable y se desempeña bien en grandes tendencias. Las retracciones son pequeñas, las ganancias son más estables y son adecuadas para operaciones largas.

El riesgo

  1. Las estrategias de combinación de múltiples indicadores aumentan el riesgo de reversión. Puede producirse un error de señal de negociación cuando la media móvil y el RSI estocástico emiten señales opuestas.

  2. Los parámetros de stop loss y stop caps son más conservadores, y pueden romperse cuando el mercado fluctúa fuertemente, perdiendo oportunidades de tendencia.

  3. Debido a que se utilizan tres medias móviles, hay un cierto retraso cuando la línea rápida y la línea media se invierten. En este caso, se necesita prestar atención a si el precio se invierte para decidir si entrar o no.

  4. Esta estrategia es especialmente adecuada para mercados tendenciales, que no funcionan bien en los mercados consolidados. En este caso, puede considerarse optimizar los parámetros de ciclo de las medias móviles o usar otros indicadores de determinación.

Optimización

  1. Se puede considerar la incorporación de otros indicadores, como el MACD, para optimizar aún más el tiempo de entrada. También se pueden probar combinaciones de medias móviles con diferentes parámetros.

  2. Se pueden optimizar los parámetros de la inspección de aire libre de ATR. Por ejemplo, ajustar el stop loss de 1ATR a 1.5ATR y el stop brake de 4ATR a 3ATR para ver si se obtienen mejores ganancias.

  3. Se puede probar usando solo las medias móviles, eliminando el indicador Stochastic RSI, para ver si se puede filtrar más ruido y obtener ganancias más estables.

  4. Se puede considerar la posibilidad de añadir más condiciones para determinar la tendencia, como aumentar el indicador de volumen de transacción y asegurar que se opera en tendencias a gran escala.

Resumen

La estrategia se basa en el uso integral de la media móvil de tres índices y el indicador Stochastic RSI para determinar la dirección de la tendencia. Las señales de entrada son más estrictas, lo que reduce eficazmente las operaciones sin sentido. Se establece un ATR de seguimiento dinámico para detener las pérdidas, lo que permite que los parámetros de la estrategia sean adaptables.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//              3ESRA
//              v0.2a

// Coded by Vaida Bogdan

// 3ESRA consists of a 3 EMA cross + a close above (for longs) the quickest EMA
// or below (for shorts). Note that I've deactivated the RSI Cross Over/Under
// (you can modify the code and activate it). The strategy also uses a stop loss
// that's at 1 ATR distance from the entry price and a take profit that's at
// 4 times the ATR distance from the entry price.

// Feedback:
// Tested BTCUSDT Daily
// 1. Stoch-RSI makes you miss opportunities.
// 2. Changing RR to 4:1 times ATR works better.

//@version=4
strategy(title="3 EMA + Stochastic RSI + ATR", shorttitle="3ESRA", overlay=true, pyramiding=1,
     process_orders_on_close=true, calc_on_every_tick=true,
     initial_capital=1000, currency = currency.USD, default_qty_value=10, 
     default_qty_type=strategy.percent_of_equity,
     commission_type=strategy.commission.percent, commission_value=0.1, slippage=2)

startDate = input(title="Start Date", type=input.integer,
     defval=1, minval=1, maxval=31, group="Backtesting range")
startMonth = input(title="Start Month", type=input.integer,
     defval=1, minval=1, maxval=12, group="Backtesting range")
startYear = input(title="Start Year", type=input.integer,
     defval=1900, minval=1800, maxval=2100, group="Backtesting range")
endDate = input(title="End Date", type=input.integer,
     defval=1, minval=1, maxval=31, group="Backtesting range")
endMonth = input(title="End Month", type=input.integer,
     defval=1, minval=1, maxval=12, group="Backtesting range")
endYear = input(title="End Year", type=input.integer,
     defval=2040, minval=1800, maxval=2100, group="Backtesting range")

// Date range filtering
inDateRange = (time >= timestamp(syminfo.timezone, startYear, startMonth, startDate, 0, 0)) and
     (time < timestamp(syminfo.timezone, endYear, endMonth, endDate, 23, 59))
     
fast = input(8, minval=8, title="Fast EMA", group="EMAs")
medium = input(14, minval=8, title="Medium EMA", group="EMAs")
slow = input(50, minval=8, title="Slow EMA", group="EMAs")
src = input(close, title="Source")

smoothK = input(3, "K", minval=1, group="Stoch-RSI", inline="K&D")
smoothD = input(3, "D", minval=1, group="Stoch-RSI", inline="K&D")
lengthRSI = input(14, "RSI Length", minval=1, group="Stoch-RSI", inline="length")
lengthStoch = input(14, "Stochastic Length", minval=1, group="Stoch-RSI", inline="length")
rsiSrc = input(close, title="RSI Source", group="Stoch-RSI")

length = input(title="Length", defval=14, minval=1, group="ATR")
smoothing = input(title="Smoothing", defval="RMA", options=["RMA", "SMA", "EMA", "WMA"], group="ATR")

// EMAs
fastema = ema(src, fast)
mediumema = ema(src, medium)
slowema = ema(src, slow)

// S-RSI
rsi1 = rsi(rsiSrc, lengthRSI)
k = sma(stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
d = sma(k, smoothD)
sRsiCrossOver = k[1] < d[1] and k > d
sRsiCrossUnder = k[1] > d[1] and k < d

// ATR
ma_function(source, length) =>
	if smoothing == "RMA"
		rma(source, length)
	else
		if smoothing == "SMA"
			sma(source, length)
		else
			if smoothing == "EMA"
				ema(source, length)
			else
				wma(source, length)
atr = ma_function(tr(true), length)

// Trading Logic
longCond1 = (fastema > mediumema) and (mediumema > slowema)
longCond2 = true
// longCond2 = sRsiCrossOver
longCond3 = close > fastema
longCond4 = strategy.position_size <= 0
longCond = longCond1 and longCond2 and longCond3 and longCond4 and inDateRange

shortCond1 = (fastema < mediumema) and (mediumema < slowema)
shortCond2 = true 
// shortCond2 = sRsiCrossUnder
shortCond3 = close < fastema
shortCond4 = strategy.position_size >= 0
shortCond = shortCond1 and shortCond2 and shortCond3 and shortCond4 and inDateRange

var takeProfit = float(na), var stopLoss = float(na)
if longCond and strategy.position_size <= 0
    takeProfit := close + 4*atr
    stopLoss := close - 1*atr
    // takeProfit := close + 2*atr
    // stopLoss := close - 3*atr

else if shortCond and strategy.position_size >= 0
    takeProfit := close - 4*atr
    stopLoss := close + 1*atr
    // takeProfit := close - 2*atr
    // stopLoss := close + 3*atr
    
// Strategy calls
strategy.entry("3ESRA", strategy.long, comment="Long", when=longCond and strategy.position_size <= 0)
strategy.entry("3ESRA", strategy.short, comment="Short", when=shortCond and strategy.position_size >= 0)
strategy.exit(id="TP-SL", from_entry="3ESRA", limit=takeProfit, stop=stopLoss)
if (not inDateRange)
    strategy.close_all()
    
// Plot EMAs
plot(fastema, color=color.purple, linewidth=2, title="Fast EMA")
plot(mediumema, color=color.teal, linewidth=2, title="Medium EMA")
plot(slowema, color=color.yellow, linewidth=2, title="Slow EMA")
// Plot S-RSI
// plotshape((strategy.position_size > 0) ? na : sRsiCrossOver, title="StochRSI Cross Over", style=shape.triangleup, location=location.belowbar, color=color.teal, text="SRSI", size=size.small)
// Plot trade
bgcolor(strategy.position_size > 0 ? color.new(color.green, 75) : strategy.position_size < 0 ? color.new(color.red,75) : color(na))
// Plot Strategy
plot((strategy.position_size != 0) ? takeProfit : na, style=plot.style_linebr, color=color.green, title="TP")
plot((strategy.position_size != 0) ? stopLoss : na, style=plot.style_linebr, color=color.red, title="SL")



Más contenido