Đây là một chiến lược giao dịch đơn giản nhưng hiệu quả kết hợp dao động MACD và giao dịch chéo EMA. Hiện được thiết lập cho nến 4h nhưng có thể thích nghi với các khung thời gian khác. Nó đã hoạt động tốt trên BTC và ETH trong 3 năm qua, đánh bại mua và giữ. Với tối ưu hóa nó có thể được thích nghi cho tương lai, chỉ số, ngoại hối, cổ phiếu vv
Các thành phần chính là:
MACD: Đánh giá sự thay đổi động lực giá.
EMA: Định hướng xu hướng giá.
Điều kiện thời gian: Định nghĩa khoảng thời gian chiến lược hợp lệ.
Tùy chọn dài / ngắn: Chọn hướng dài hoặc ngắn.
Các quy tắc giao dịch là:
Long / exit short: Khi đóng trên EMA, biểu đồ MACD dương tính và nến hiện tại cao hơn nến trước.
Short/exit long: Khi đóng dưới EMA, biểu đồ MACD âm, và nến hiện tại thấp hơn nến trước.
Chiến lược kết hợp theo xu hướng và động lực trong một hệ thống đơn giản và hiệu quả.
So với các chỉ số đơn lẻ, những lợi thế chính là:
MACD đánh giá động lực ngắn hạn, EMA xác định hướng xu hướng.
Quy tắc đơn giản và rõ ràng, dễ hiểu và thực hiện.
Điều chỉnh tham số linh hoạt cho các sản phẩm và khung thời gian khác nhau.
Tùy chọn chỉ giao dịch dài/ ngắn hoặc giao dịch hai chiều.
Có thể xác định thời gian chiến lược hợp lệ để tránh giao dịch không cần thiết.
Hiệu suất vượt trội ổn định trong nhiều năm.
Rủi ro có thể kiểm soát được cho mỗi giao dịch.
Khả năng tối ưu hóa hơn nữa với máy học.
Bất chấp những lợi ích, rủi ro để xem xét:
Chế độ điều chỉnh tham số rộng có nguy cơ quá mức.
Không dừng lại, có nguy cơ mất mát không giới hạn.
Không có bộ lọc âm lượng, có nguy cơ phát ra âm thanh giả.
Trễ trong việc bắt kịp xu hướng biến, không thể tránh được tất cả các tổn thất.
Sự suy giảm hiệu suất do thay đổi chế độ thị trường.
Chỉ dựa trên dữ liệu lịch sử, sự vững chắc của mô hình là chìa khóa.
Tần suất giao dịch cao làm tăng chi phí giao dịch.
Cần phải theo dõi tỷ lệ lợi nhuận / rủi ro và đường cong vốn chủ sở hữu.
Chiến lược có thể được tăng cường bằng cách:
Thêm bộ lọc âm lượng để tránh các sự đột phá giả.
Thực hiện dừng để kiểm soát lỗ cho mỗi giao dịch.
Đánh giá hiệu quả của các tham số qua các khoảng thời gian.
Kết hợp máy học để tối ưu hóa động.
Kiểm tra độ bền trên các thị trường.
Điều chỉnh kích thước vị trí để giảm tần số.
Tối ưu hóa các chiến lược quản lý rủi ro.
Kiểm tra các thiết bị truyền để tăng tần số.
Kiểm tra liên tục để tránh quá tải.
Tóm lại, chiến lược tạo thành một hệ thống đơn giản nhưng mạnh mẽ từ sự kết hợp của MACD và EMA. Nhưng tối ưu hóa liên tục và kiểm tra độ bền là rất quan trọng cho bất kỳ chiến lược nào để thích nghi với điều kiện thị trường thay đổi.
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © SoftKill21 //@version=4 strategy("My Script", overlay=true) //heiking ashi calculation UseHAcandles = input(false, title="Use Heikin Ashi Candles in Algo Calculations") // // === /INPUTS === // === BASE FUNCTIONS === haClose = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, close) : close haOpen = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, open) : open haHigh = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, high) : high haLow = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, low) : low //timecondition 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) //monday and session // To Date Inputs toDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31) toMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12) toYear = input(defval = 2021, title = "To Year", minval = 1970) startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00) finishDate = timestamp(toYear, toMonth, toDay, 00, 00) time_cond = true //ema data -- moving average len = input(9, minval=1, title="Length") src = input(hl2, title="Source") out = ema(src, len) //plot(out, title="EMA", color=color.blue) //histogram fast_length = input(title="Fast Length", type=input.integer, defval=12) slow_length = input(title="Slow Length", type=input.integer, defval=26) 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) // Calculating 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 //main variables to apply conditions are going to be out(moving avg) and hist(macd) long = haClose > out and haClose > haClose[1] and out > out[1] and hist> 0 and hist[1] < 0 and time_cond short = haClose < out and haClose < haClose[1] and out < out[1] and hist < 0 and hist[1] > 0 and time_cond //limit to 1 entry var longOpeneda = false var shortOpeneda = false var int timeOfBuya = na longCondition= long and not longOpeneda if longCondition longOpeneda := true timeOfBuya := time longExitSignala = short exitLongCondition = longOpeneda[1] and longExitSignala if exitLongCondition longOpeneda := false timeOfBuya := na plotshape(longCondition, style=shape.labelup, location=location.belowbar, color=color.green, size=size.tiny, title="BUY", text="BUY", textcolor=color.white) plotshape(exitLongCondition, style=shape.labeldown, location=location.abovebar, color=color.red, size=size.tiny, title="SELL", text="SELL", textcolor=color.white) //automatization longEntry= input(true) shortEntry=input(false) if(longEntry) strategy.entry("long",strategy.long,when=longCondition) strategy.close("long",when=exitLongCondition) if(shortEntry) strategy.entry("short",strategy.short,when=exitLongCondition) strategy.close("short",when=longCondition)