
Esta estrategia determina el exceso de compra y venta en el mercado mediante el cálculo del grado de desviación del precio del oro con respecto al promedio móvil del índice de 21 días, combinado con la diferencia estándar, y adopta una estrategia de seguimiento de tendencias cuando la desviación alcanza una cierta diferencia estándar, al tiempo que establece un mecanismo de stop loss para controlar el riesgo.
Se trata de una estrategia de seguimiento de tendencias de sobrecompra y sobreventa en el mercado basada en la dinámica de los precios y la diferencia estándar, que tiene las siguientes ventajas:
La estrategia también tiene sus riesgos:
La solución:
La estrategia puede ser optimizada en los siguientes aspectos:
Esta estrategia en su conjunto es una estrategia de seguimiento de tendencias básica y razonable. Utiliza las medias móviles para determinar la dirección de la tendencia principal y, al mismo tiempo, mediante el procesamiento estandarizado de la desviación de los precios, puede determinar claramente la situación de sobreventa y sobreventa en el mercado, lo que genera una señal de negociación.
/*backtest
start: 2024-01-20 00:00:00
end: 2024-02-19 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("GC Momentum Strategy with Stoploss and Limits", overlay=true)
// Input for the length of the EMA
ema_length = input.int(21, title="EMA Length", minval=1)
// Exponential function parameters
steepness = 2
// Calculate the EMA
ema = ta.ema(close, ema_length)
// Calculate the deviation of the close price from the EMA
deviation = close - ema
// Calculate the standard deviation of the deviation
std_dev = ta.stdev(deviation, ema_length)
// Calculate the Z-score
z_score = deviation / std_dev
// Long entry condition if Z-score crosses +0.5 and is below 3 standard deviations
long_condition = ta.crossover(z_score, 0.5)
// Short entry condition if Z-score crosses -0.5 and is above -3 standard deviations
short_condition = ta.crossunder(z_score, -0.5)
// Exit long position if Z-score converges below 0.5 from top
exit_long_condition = ta.crossunder(z_score, 0.5)
// Exit short position if Z-score converges above -0.5 from below
exit_short_condition = ta.crossover(z_score, -0.5)
// Stop loss condition if Z-score crosses above 3 or below -3
stop_loss_long = ta.crossover(z_score, 3)
stop_loss_short = ta.crossunder(z_score, -3)
// Enter and exit positions based on conditions
if (long_condition)
strategy.entry("Long", strategy.long)
if (short_condition)
strategy.entry("Short", strategy.short)
if (exit_long_condition)
strategy.close("Long")
if (exit_short_condition)
strategy.close("Short")
if (stop_loss_long)
strategy.close("Long")
if (stop_loss_short)
strategy.close("Short")
// Plot the Z-score on the chart
plot(z_score, title="Z-score", color=color.blue, linewidth=2)
// Optional: Plot zero lines for reference
hline(0.5, "Upper Threshold", color=color.red)
hline(-0.5, "Lower Threshold", color=color.green)