Chiến lược này tích hợp các chỉ số Ichimoku Cloud, moving average, MACD, Stochastic và ATR để xác định và theo dõi xu hướng trên nhiều khung thời gian.
Ichimoku Cloud đánh giá hướng xu hướng trung hạn và dài hạn. Giá CLOSE vượt trên đường quay và đường cơ sở của Ichimoku là tín hiệu tăng, và vượt dưới chúng là tín hiệu giảm.
MACD đánh giá xu hướng ngắn hạn và tình huống mua quá mức / bán quá mức.
Stochastic KD đánh giá các vùng mua quá mức / bán quá mức. Đường K vượt trên 20 là tín hiệu tăng, và vượt dưới 80 là tín hiệu giảm.
Moving average đánh giá xu hướng trung hạn. Giá đóng vượt trên MA là tín hiệu tăng, và vượt dưới là tín hiệu giảm.
Tích hợp các tín hiệu từ các chỉ số trên để lọc ra một số tín hiệu sai và hình thành các tín hiệu xu hướng bền vững có xác suất cao.
Sử dụng ATR để tính giá dừng lỗ và lấy lợi nhuận. Sử dụng một số lần số ATR như là dừng lỗ và lấy lợi nhuận để kiểm soát rủi ro.
Xác định xu hướng trên nhiều khung thời gian để cải thiện độ chính xác tín hiệu.
Sử dụng rộng rãi các kết hợp chỉ số để lọc hiệu quả các tín hiệu sai.
ATR dựa trên dừng lỗ & lấy lợi nhuận hạn chế đáng kể cho mỗi lỗ giao dịch.
Sự nghiêm ngặt có thể tùy chỉnh của các điều kiện nhập cảnh phục vụ cho các ham muốn rủi ro khác nhau.
Xu hướng theo tự nhiên không thể phát hiện sự đảo ngược do các sự kiện thiên nga đen.
ATR dừng lỗ lý tưởng là khó để tái tạo đầy đủ trong giao dịch trực tiếp.
Cài đặt tham số không chính xác có thể dẫn đến giao dịch quá mức hoặc độ chính xác tín hiệu không đủ.
Điều chỉnh tham số là cần thiết để phù hợp với các sản phẩm và môi trường thị trường khác nhau.
Đưa ra máy học để giúp đánh giá các điểm đảo ngược xu hướng.
Tối ưu hóa các giá trị tham số nhân ATR cho các sản phẩm khác nhau.
Kết hợp các yếu tố khác như thay đổi âm lượng để cải thiện độ chính xác tín hiệu đột phá.
Tiếp tục tối ưu hóa các tham số dựa trên kết quả backtest để tìm kết hợp tham số tốt nhất.
Chiến lược này tận dụng Ichimoku Cloud, MACD, Stochastic và nhiều hơn nữa để xác định xu hướng nhiều khung thời gian, nắm bắt xu hướng trong khi tránh bị mắc kẹt bởi các sự kiện thiên nga đen.
/*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) //}