Ý tưởng cốt lõi của chiến lược này là tạo ra tín hiệu giao dịch dựa trên sự giao thoa của nhiều chỉ số trung bình di chuyển ((EMA)). Khi EMA ngắn hạn được đeo trên EMA dài hạn, hãy làm nhiều hơn; Khi EMA ngắn hạn được đeo dưới EMA dài hạn, hãy bán. Chiến lược này cho phép cấu hình nhiều chu kỳ EMA, mỗi EMA có thể được bật độc lập, chiến lược sẽ giao dịch chéo trên tất cả các EMA được bật.
Chiến lược này đã thiết lập 8 chu kỳ EMA, 8th, 13th, 21st, 34th, 55th, 89th, 144th và 233rd. Các EMA được cấu hình để có thể bật hoặc tắt một cách độc lập.
Khi EMA ngắn hơn đi qua EMA dài hơn từ phía dưới, tạo ra tín hiệu mua; khi EMA ngắn hơn đi qua EMA dài hơn từ phía trên xuống, tạo ra tín hiệu bán. Nếu cả hai EMA đều được kích hoạt, shorterEMA > longerEMA là tín hiệu đa, shorterEMA < longerEMA là tín hiệu yên.
Ví dụ, nếu EMA ngày 55 và EMA ngày 89 được kích hoạt, làm nhiều hơn khi EMA ngày 55 trên EMA 89; khi EMA ngày 55 dưới EMA 89 bằng. Điều này cho phép chiến lược này động thái điều chỉnh các cặp EMA được sử dụng, chuyển từ chu kỳ dài hơn sang chu kỳ ngắn hơn hoặc ngược lại.
Số lượng vị trí được thiết lập là quyền lợi tài khoản chia cho gần và chia cho số nhóm EMA được kích hoạt. Điều này đảm bảo kích thước vị trí trên mỗi EMA là giống nhau.
Bạn có thể xem xét sử dụng EMA với các chỉ số khác, chẳng hạn như chỉ số kênh hoặc chỉ số chấn động để lọc tín hiệu, hoặc kết hợp xu hướng và chỉ số đảo ngược. Ngoài ra, tối ưu hóa các tham số EMA rất quan trọng và cần điều chỉnh cho các thị trường khác nhau.
Chiến lược này có thể được tối ưu hóa theo các khía cạnh sau:
Tối ưu hóa tham số EMA. Bạn có thể tìm thấy sự kết hợp tham số EMA tốt nhất thông qua quét tham số và phương pháp phân tích tiến bộ.
Thêm các điều kiện lọc. Bạn có thể thêm các điều kiện lọc bổ sung để tránh các tín hiệu sai, chẳng hạn như lọc khối lượng giao dịch, lọc tỷ lệ dao động, v.v.
Kết hợp với các chỉ số khác. EMA có thể được kết hợp với các chỉ số khác như MACD, KDJ, Blink và các chỉ số khác để tận dụng tính bổ sung của chúng.
Đổi vị trí động. Các vị trí trên mỗi EMA có thể được điều chỉnh động theo biến động của thị trường hoặc cường độ của xu hướng.
Tối ưu hóa tỷ lệ lợi nhuận. Tối ưu hóa mức dừng lỗ, tìm tỷ lệ lợi nhuận rủi ro tốt nhất.
Chiến lược này nói chung rất đơn giản và trực tiếp, lấy xu hướng ngắn hạn và trung hạn thông qua EMA chéo. Ưu điểm của nó là khả năng cấu hình và linh hoạt cao, cho phép các nhà giao dịch chọn các cặp EMA phù hợp nhất với mình. Tuy nhiên, EMA với chỉ số đơn lẻ dễ tạo ra tín hiệu sai, đây là rủi ro lớn nhất của chiến lược.
/*backtest
start: 2023-11-11 00:00:00
end: 2023-12-11 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy("EMA Fan", shorttitle = "EMA Fan", overlay=true)
// Revision: 1
// Author: @ToS_MavericK
buyprice = 0.0
buyprice := buyprice[1]
// === INPUT SMA ===
EMA1 = input(8)
EMA2 = input(13)
EMA3 = input(21)
EMA4 = input(34)
EMA5 = input(55)
EMA6 = input(89)
EMA7 = input(144)
EMA8 = input(233)
EnableEMA1 = input(true)
EnableEMA2 = input(true)
EnableEMA3 = input(true)
EnableEMA4 = input(true)
EnableEMA5 = input(true)
EnableEMA6 = input(true)
EnableEMA7 = input(true)
EnableEMA8 = input(true)
//Profit = input(defval = 5, type = integer, title = "Profit", minval = 1, step = 1)
//StopLoss = input(defval = 15, type = integer, title = "StopLoss", minval = 1, step = 1)
// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear = input(defval = 2018, title = "From Year", minval = 2012)
ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear = input(defval = 2020, title = "To Year", minval = 2012)
// === FUNCTION EXAMPLE ===
start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window
window() => true // create function "within window of time"
// === SERIES SETUP ===
vEMA1 = ema(close, EMA1)
vEMA2 = ema(close, EMA2)
vEMA3 = ema(close, EMA3)
vEMA4 = ema(close, EMA4)
vEMA5 = ema(close, EMA5)
vEMA6 = ema(close, EMA6)
vEMA7 = ema(close, EMA7)
vEMA8 = ema(close, EMA8)
count = -1
if (EnableEMA1 == true)
count := count + 1
if (EnableEMA2 == true)
count := count + 1
if (EnableEMA3 == true)
count := count + 1
if (EnableEMA4 == true)
count := count + 1
if (EnableEMA5 == true)
count := count + 1
if (EnableEMA6 == true)
count := count + 1
if (EnableEMA7 == true)
count := count + 1
if (EnableEMA8 == true)
count := count + 1
// set position size
Amount = 1 / (close * count)
// === EXECUTION ===
strategy.entry("EMA1", strategy.long, qty = Amount, when = window() and crossover(vEMA1,vEMA2) and EnableEMA1 and EnableEMA2)
strategy.close("EMA1", time > finish or crossunder(vEMA1,vEMA2))
strategy.entry("EMA2", strategy.long, qty = Amount, when = window() and crossover(vEMA2,vEMA3) and EnableEMA2 and EnableEMA3)
strategy.close("EMA2", time > finish or crossunder(vEMA2,vEMA3))
strategy.entry("EMA3", strategy.long, qty = Amount, when = window() and crossover(vEMA3,vEMA4) and EnableEMA3 and EnableEMA4)
strategy.close("EMA3", time > finish or crossunder(vEMA3,vEMA4))
strategy.entry("EMA4", strategy.long, qty = Amount, when = window() and crossover(vEMA4,vEMA5) and EnableEMA4 and EnableEMA5)
strategy.close("EMA4", time > finish or crossunder(vEMA4,vEMA5))
strategy.entry("EMA5", strategy.long, qty = Amount, when = window() and crossover(vEMA5,vEMA6) and EnableEMA5 and EnableEMA6)
strategy.close("EMA5", time > finish or crossunder(vEMA5,vEMA6))
strategy.entry("EMA6", strategy.long, qty = Amount, when = window() and crossover(vEMA6,vEMA7) and EnableEMA6 and EnableEMA7)
strategy.close("EMA6", time > finish or crossunder(vEMA6,vEMA7))
strategy.entry("EMA7", strategy.long, qty = Amount, when = window() and crossover(vEMA7,vEMA8) and EnableEMA7 and EnableEMA8)
strategy.close("EMA7", time > finish or crossunder(vEMA7,vEMA8))
plot(vEMA1, title = 'EMA1', color = red, linewidth = 2, style = line) // plot FastMA
plot(vEMA2, title = 'EMA2', color = orange, linewidth = 2, style = line) // plot SlowMA
plot(vEMA3, title = 'EMA3', color = yellow, linewidth = 2, style = line) // plot SlowMA
plot(vEMA4, title = 'EMA4', color = green, linewidth = 2, style = line) // plot SlowMA
plot(vEMA5, title = 'EMA5', color = teal, linewidth = 2, style = line) // plot SlowMA
plot(vEMA6, title = 'EMA6', color = blue, linewidth = 2, style = line) // plot SlowMA
plot(vEMA7, title = 'EMA7', color = maroon, linewidth = 2, style = line) // plot SlowMA
plot(vEMA8, title = 'EMA8', color = white, linewidth = 2, style = line) // plot SlowMA
//plot(long_stop, title = 'High-ATR', color = red, linewidth = 2, style = line) // plot SlowMA
//plot(short_stop, title = 'Low+ATR', color = green, linewidth = 2, style = line) // plot SlowMA