Estrategia de seguimiento de tendencias de múltiples marcos temporales basada en Ichimoku Cloud, MACD y Stochastic


Fecha de creación: 2024-02-05 10:30:45 Última modificación: 2024-02-05 10:30:45
Copiar: 2 Número de Visitas: 768
1
Seguir
1617
Seguidores

Estrategia de seguimiento de tendencias de múltiples marcos temporales basada en Ichimoku Cloud, MACD y Stochastic

Descripción general

Esta estrategia combina varios indicadores, como el gráfico de la nube de Ichimoku, el promedio móvil, el MACD, el estocástico y el ATR, para permitir la identificación y el seguimiento de tendencias en múltiples marcos de tiempo. Después de obtener una señal de tendencia de mayor probabilidad, se utiliza el método de control de riesgo de stop loss de ATR.

Principio de estrategia

  1. El gráfico de la nube de Ichimoku determina la dirección de la tendencia de la línea media larga. La línea de giro y la línea de referencia que atraviesan el gráfico de la nube en la parte superior del precio de CLOSE son señales de múltiples cabezas, y la de abajo es una señal de cabezas vacías.

  2. El MACD determina la tendencia de la línea corta y la situación de sobreventa y sobrecompra. La línea de señal que atraviesa la columna del MACD es una señal de múltiples cabezas, y la que atraviesa la parte inferior es una señal de cabezas vacías.

  3. Stochastic KD juzga la zona de sobreventa y sobrecompra. En la línea K, el 20 es la señal de más cabeza, y el 80 es la señal de cabeza vacía.

  4. Los promedios móviles determinan la tendencia intermedia. Los promedios móviles son una señal de más de una cabeza en el precio de cierre y una señal de cabeza hueca en la parte inferior.

  5. La combinación de las señales de los indicadores anteriores, filtrando algunas señales falsas, forma una señal de tendencia continua de alta probabilidad.

  6. El precio de parada de pérdidas se calcula en función del ATR. El control de riesgo se realiza con un determinado número de ATR como punto de parada y punto de parada.

Ventajas estratégicas

  1. Identificación de tendencias en múltiples marcos de tiempo para mejorar la precisión de la señal.

  2. El uso generalizado de la tecnología de filtrado de combinación de indicadores es eficaz para filtrar señales falsas.

  3. El ATR es un bloqueador de pérdidas periódico que controla al máximo las pérdidas individuales.

  4. Se puede personalizar la rigurosidad de los requisitos de ingreso para satisfacer las diferentes preferencias de riesgo.

Riesgo estratégico

  1. La mayoría de las personas que se basan en el seguimiento de las tendencias no pueden identificar los reveses de los eventos repentinos.

  2. ATR puede ser demasiado idealista y difícil de reproducir en su totalidad.

  3. La configuración incorrecta de los parámetros puede causar una frecuencia de transacción excesiva o una precisión insuficiente en la identificación de señales.

  4. Hay que ajustar los parámetros para encontrar un equilibrio y adaptarse a las diferentes variedades y al entorno del mercado.

Dirección de optimización de la estrategia

  1. El uso de algoritmos de aprendizaje automático para ayudar a determinar los puntos de inflexión de las tendencias.

  2. Optimización de los parámetros de multiplicador ATR, diferentes variedades pueden tener diferentes multiplicadores.

  3. La precisión de las señales de ruptura, combinadas con otros factores como el cambio en el volumen de transacciones.

  4. Optimiza continuamente los parámetros de acuerdo con los resultados de las pruebas de retroalimentación para encontrar la combinación óptima de parámetros.

Resumir

Esta estrategia utiliza un conjunto de indicadores como el mapa de la nube Ichimoku, el MACD y el Stochastic para identificar tendencias en varios marcos de tiempo, capturar tendencias y evitar ser atrapado por eventos inesperados. El método de parada de pérdidas periódicas de ATR es una estrategia de seguimiento de tendencias recomendada para controlar eficazmente las pérdidas por un solo pago.

Código Fuente de la Estrategia
/*backtest
start: 2024-01-05 00:00:00
end: 2024-02-04 00:00:00
period: 4h
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/
// © FXFUNDINGMATE

//@version=4
strategy(title="FXFUNDINGMATE TREND INDICATOR", overlay=true)

//Ichimoku Cloud
conversionPeriods = input(9, minval=1, title="Conversion Line Length")
basePeriods = input(26, minval=1, title="Base Line Length")
laggingSpan2Periods = input(52, minval=1, title="Lagging Span 2 Length")
displacement = input(26, minval=1, title="Displacement")
donchian(len) => avg(lowest(len), highest(len))
conversionLine = donchian(conversionPeriods)
baseLine = donchian(basePeriods)
leadLine1 = avg(conversionLine, baseLine)[displacement - 1]
leadLine2 = donchian(laggingSpan2Periods)[displacement - 1]


//macd
fast_length = input(title="Fast Length", type=input.integer, defval=12)
slow_length = input(title="Slow Length", type=input.integer, defval=26)
src = input(title="Source", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9)
sma_source = input(title="Simple MA (Oscillator)", type=input.bool, defval=false)
sma_signal = input(title="Simple MA (Signal Line)", type=input.bool, defval=false)

fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal


//kd
periodK = input(5, title="%K Length", minval=1)
smoothK = input(3, title="%K Smoothing", minval=1)
periodD = input(3, title="%D Smoothing", minval=1)
k = sma(stoch(close, high, low, periodK), smoothK)
d = sma(k, periodD)


//atr
atrlength = input(title="Atr Length", defval=8, minval=1)
SMulti = input(title="Stop loss multi Atr", defval=1.0)
TMulti = input(title="Take profit multi Atr", defval=1.0)
smoothing = input(title="Smoothing", defval="RMA", options=["RMA", "SMA", "EMA", "WMA"])
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), atrlength)


operation_type = input(defval = "Both", title = "Position side", options = ["Long", "Short", "Both"])
operation = operation_type == "Long" ? 1 : operation_type == "Short" ? 2 : 3
showlines = input(true,  title="Show sl&tp lines")

// MA
sma_len = input(100, title="MA Length", type=input.integer)
sma = sma(close, sma_len)

longCond = crossover(k, 20) and macd > 0 and close > sma and close > leadLine1 and close > leadLine2
shortCond = crossunder(k, 80)  and macd < 0 and close < sma and close < leadLine1 and close < leadLine2

entry_price  = float(0.0) //set float
entry_price := strategy.position_size != 0 or longCond or shortCond ? strategy.position_avg_price : entry_price[1]
entry_atr = valuewhen(longCond or shortCond, atr,0)
short_stop_level     = float(0.0)   //set float
short_profit_level   = float(0.0)   //set float
long_stop_level      = float(0.0)   //set float
long_profit_level    = float(0.0)   //set float
short_stop_level    := entry_price + SMulti * entry_atr
short_profit_level  := entry_price - TMulti * entry_atr
long_stop_level     := entry_price - SMulti * entry_atr
long_profit_level   := entry_price + TMulti * entry_atr


//  Strategy Backtest Limiting Algorithm
i_startTime = input(defval = timestamp("1 Jan 2020 00:00 +0000"), title = "Backtesting Start Time", type = input.time)
i_endTime = input(defval = timestamp("31 Dec 2025 23:59 +0000"), title = "Backtesting End Time", type = input.time)
timeCond = true

if (operation == 1 or operation == 3)
    strategy.entry("long" , strategy.long , when=longCond and timeCond, alert_message = "Long")
    strategy.exit("SL/TP", from_entry = "long" , limit = long_profit_level , stop = long_stop_level , alert_message = "Long exit")

if (operation == 2 or operation == 3)
    strategy.entry("short", strategy.short, when=shortCond and timeCond, alert_message="Short")
    strategy.exit("SL/TP", from_entry = "short", limit = short_profit_level , stop = short_stop_level , alert_message = "Short exit")
    
if time > i_endTime  
    strategy.close_all(comment = "close all", alert_message = "close all")
    
plot(showlines and strategy.position_size <= 0 ? na : long_stop_level,    color=color.red,  style=plot.style_linebr, linewidth = 2)
plot(showlines and strategy.position_size <= 0 ? na : long_profit_level,  color=color.lime, style=plot.style_linebr, linewidth = 2)
plot(showlines and strategy.position_size >= 0 ? na : short_stop_level,   color=color.red,  style=plot.style_linebr, linewidth = 2)
plot(showlines and strategy.position_size >= 0 ? na : short_profit_level, color=color.lime, style=plot.style_linebr, linewidth = 2)

//}