
La estrategia se basa en el principio de la horca de oro de los promedios móviles. La estrategia utiliza dos promedios móviles, que generan una señal de compra cuando el promedio móvil a corto plazo rompe el promedio móvil a largo plazo desde la parte inferior.
La estrategia utiliza los períodos de promedio móvil de corto plazo, promedio móvil de largo plazo, promedio móvil de salida y las formas de cálculo de las promedias móviles personalizadas por el usuario.
Cuando las medias móviles a corto plazo se cruzan con las medias móviles a largo plazo desde abajo, se genera una señal de compra. Esto significa que la tendencia a corto plazo se convierte en una tendencia alcista y se puede comprar.
Cuando el precio de cierre cae por debajo de la salida de la media móvil, se genera una señal de venta. Esto significa que la tendencia se invierte y se debe salir de la posición.
Por lo tanto, la señal de negociación de la estrategia proviene de la intersección de las medias móviles de corto plazo y medias móviles de largo plazo y de la relación entre los precios de cierre y salida de las medias móviles.
La estrategia tiene las siguientes ventajas:
Es fácil de entender y fácil de hacer.
Los parámetros se pueden personalizar para adaptarse a diferentes situaciones del mercado.
Filtra el ruido con las medias móviles para captar las principales tendencias.
Los indicadores técnicos, como la tendencia y la resistencia de soporte, se pueden optimizar aún más.
La proporción de ganancias y pérdidas es controlada y tiene un mecanismo de suspensión de pérdidas.
La estrategia también tiene los siguientes riesgos:
En un mercado de liquidación con poca tendencia, es fácil generar falsas señales.
Si los parámetros no se establecen correctamente, se puede perder la tendencia o generar demasiadas transacciones no válidas.
La posición de parada de pérdidas no es razonable y puede aumentar las pérdidas.
El fracaso de la brecha puede causar pérdidas.
Hay que ajustar los parámetros a la hora de adaptarse a los cambios del mercado.
Las soluciones para responder al riesgo incluyen: ajuste de parámetros de optimización, filtración de señales en combinación con otros indicadores, ajuste de la posición de stop loss, determinación de tendencias y participación posterior, etc.
La estrategia puede ser optimizada en los siguientes aspectos:
Desarrollar un mecanismo para determinar tendencias y luego generar señales de negociación.
Se filtran las señales en combinación con el volumen de operaciones o el indicador de fluctuación.
Optimización dinámica de los parámetros de ciclo de las medias móviles.
Optimización de los mecanismos de detención de pérdidas para lograr la detención móvil.
La combinación de soporte y resistencia, junto con otros indicadores, confirman aún más las señales de negociación.
Ajuste de parámetros según la variedad y el ciclo.
La estrategia de trading de la línea de la horquilla de la media móvil es una estrategia de seguimiento de la tendencia sencilla y práctica en general. Puede ajustar los parámetros según las condiciones del mercado y capturar la dirección de la tendencia principal en la situación de la tendencia.
/*backtest
start: 2022-10-30 00:00:00
end: 2023-11-05 00:00:00
period: 1d
basePeriod: 1h
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/
// © TwoChiefs
//@version=4
strategy("John EMA Crossover Strategy", overlay=true)
////////////////////////////////////////////////////////////////////////////////
// BACKTESTING RANGE
// From Date Inputs
fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2020, title = "From Year", minval = 1970)
// To Date Inputs
toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2021, title = "To Year", minval = 1970)
// Calculate start/end date and time condition
startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true
////////////////////////////////////////////////////////////////////////////////
//CREATE USER-INPUT VARIABLES
periodShort = input(13, minval=1, title="Enter Period for Short Moving Average")
smoothingShort = input(title="Choose Smoothing Type for Short Moving Average", defval="EMA", options=["RMA", "SMA", "EMA", "WMA", "VWMA", "SMMA", "DEMA", "TEMA", "HullMA", "LSMA"])
periodLong = input(48, minval=1, title="Enter Period for Long Moving Average")
smoothingLong = input(title="Choose Smoothing Type for Long Moving Average", defval="EMA", options=["RMA", "SMA", "EMA", "WMA", "VWMA", "SMMA", "DEMA", "TEMA", "HullMA", "LSMA"])
periodExit = input(30, minval=1, title="Enter Period for Exit Moving Average")
smoothingExit = input(title="Choose Smoothing Type for Exit Moving Average", defval="EMA", options=["RMA", "SMA", "EMA", "WMA", "VWMA", "SMMA", "DEMA", "TEMA", "HullMA", "LSMA"])
src1 = close
pivot = (high + low + close) / 3
//MA CALCULATION FUNCTION
ma(smoothing, src, length) =>
if smoothing == "RMA"
rma(src, length)
else
if smoothing == "SMA"
sma(src, length)
else
if smoothing == "EMA"
ema(src, length)
else
if smoothing == "WMA"
wma(src, length)
else
if smoothing == "VWMA"
vwma(src, length)
else
if smoothing == "SMMA"
na(src[1]) ? sma(src, length) : (src[1] * (length - 1) + src) / length
else
if smoothing == "HullMA"
wma(2 * wma(src, length / 2) - wma(src, length), round(sqrt(length)))
//ASSIGN A MOVING AVERAGE RESULT TO A VARIABLE
shortMA=ma(smoothingShort, pivot, periodShort)
longMA=ma(smoothingLong, pivot, periodLong)
exitMA=ma(smoothingExit, pivot, periodExit)
//PLOT THOSE VARIABLES
plot(shortMA, linewidth=4, color=color.yellow,title="The Short Moving Average")
plot(longMA, linewidth=4, color=color.blue,title="The Long Moving Average")
plot(exitMA, linewidth=1, color=color.red,title="The Exit CrossUnder Moving Average")
//BUY STRATEGY
buy = crossover(shortMA,longMA) ? true : na
exit = crossunder(close,exitMA) ? true : na
strategy.entry("long",true,when=buy and time_cond)
strategy.close("long",when=exit and time_cond)
if (not time_cond)
strategy.close_all()