Esta estrategia integra los indicadores Ichimoku Cloud, promedio móvil, MACD, estocástico y ATR para identificar y rastrear tendencias en múltiples marcos de tiempo.
La nube de Ichimoku juzga las direcciones de tendencia a mediano y largo plazo.
El histograma MACD cruza por encima de la línea de señal MACD es una señal alcista, y cruzar por debajo es una señal bajista.
El KD estocástico juzga las zonas sobrecompradas/sobrevendidas. Cruzar la línea K por encima de 20 es una señal alcista, y cruzar por debajo de 80 es una señal bajista.
El precio cerrado por encima de MA es una señal alcista, y el cruce por debajo es una señal bajista.
Integrar señales de los indicadores anteriores para filtrar algunas señales falsas y formar señales de tendencia sostenible de alta probabilidad.
Utilice ATR para calcular el precio de stop loss y take profit.
Identificar las tendencias en múltiples marcos de tiempo para mejorar la precisión de la señal.
Utilice ampliamente combinaciones de indicadores para filtrar eficazmente las señales falsas.
Los límites de stop loss y take profit basados en ATR significan pérdidas por operación.
El rigor personalizable de las condiciones de entrada satisface diferentes apetitos de riesgo.
La tendencia natural no detecta las reversiones causadas por los eventos del cisne negro.
El stop loss ATR idealizado es difícil de replicar completamente en el comercio en vivo.
La configuración incorrecta de los parámetros puede dar lugar a un exceso o a una precisión insuficiente de la señal.
El ajuste de parámetros es necesario para adaptarse a diferentes productos y entornos de mercado.
Introduzca el aprendizaje automático para ayudar a juzgar los puntos de inversión de tendencia.
Optimizar los valores de los parámetros del multiplicador ATR para diferentes productos.
Incorporar otros factores como cambios de volumen para mejorar la precisión de la señal de avance.
Sigue optimizando los parámetros basados en los resultados de backtest para encontrar las mejores combinaciones de parámetros.
Esta estrategia aprovecha Ichimoku Cloud, MACD, Estocástico y más para la identificación de tendencias de múltiples marcos de tiempo, capturando tendencias mientras evita quedar atrapado por eventos de cisne negro.
/*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) //}