Chiến lược này sử dụng sự chéo chéo của Đường trung bình chuyển động mượt mà (ALMA) và hai Đường trung bình chuyển động nhân tố (EMA) với các thiết lập tham số khác nhau để tạo ra tín hiệu giao dịch.
Chiến lược này sử dụng ALMA như là chỉ số chính để đánh giá xu hướng giá. ALMA có chức năng làm mịn dữ liệu giá và có thể lọc ra các biến động ngẫu nhiên trong giá. Bằng cách điều chỉnh thời gian, giá trị bù đắp và các thông số sigma của ALMA, nó có thể trở nên nhạy cảm hơn hoặc ổn định hơn. Khi giá tăng, ALMA sẽ hiển thị màu xanh lá cây, và khi giá giảm, ALMA sẽ hiển thị màu đỏ.
Chiến lược này sử dụng hai đường EMA có chiều dài khác nhau. Khi đường EMA nhanh vượt qua trên đường EMA chậm, một tín hiệu mua được tạo ra. Khi đường EMA nhanh vượt qua dưới đường EMA chậm, một tín hiệu bán được tạo ra.
Vai trò của chỉ số Stochastic RSI là tránh phát hành tín hiệu giao dịch trong các khu vực mua quá mức và bán quá mức. Nó kết hợp các lợi thế của cả chỉ số RSI và chỉ số Stochastic, và có thể xác định tốt hơn các khu vực đỉnh và đáy. Khi chỉ số Stochastic RSI bị mua quá mức hoặc bán quá mức, chiến lược sẽ hủy các lệnh dài hoặc ngắn hiện có.
Chiến lược sử dụng đầy đủ EMA để xác định hướng của xu hướng giá, kết hợp với chỉ số ALMA để xác định các cơ hội dài và ngắn để thực hiện giao dịch xu hướng.
Các giai đoạn của EMA và ALMA cung cấp không gian điều chỉnh. Người dùng có thể tối ưu hóa các tham số theo nhu cầu của họ để làm cho chiến lược thích nghi tốt hơn với các môi trường thị trường khác nhau.
Chiến lược có cài đặt dừng lỗ và lấy lợi nhuận tích hợp. Sử dụng dừng lỗ nổi có thể làm giảm xác suất dừng lỗ bị theo đuổi; cài đặt lấy lợi nhuận có thể khóa lợi nhuận và tránh nhổ ra lợi nhuận.
Trong các thị trường phức tạp, đường EMA và ALMA có thể phát ra tín hiệu sai.
Nếu các tham số được đặt không đúng, các đường EMA và ALMA không thể hoạt động đúng cách, điều này sẽ làm tăng rủi ro giao dịch.
Kiểm tra và tối ưu hóa các thiết lập tham số của EMA và ALMA để chọn các tham số tối ưu.
Kết hợp các chỉ số khác để lọc tín hiệu và tránh tổn thất do tín hiệu sai. chẳng hạn như MACD, KDJ, vv.
Tối ưu hóa kích thước dừng lỗ để tìm sự cân bằng giữa kiểm soát rủi ro và lợi nhuận.
Kiểm tra các giống và tham số chu kỳ khác nhau để áp dụng chiến lược cho nhiều thị trường hơn.
Nhìn chung, đây là một chiến lược theo dõi xu hướng đơn giản và thực tế. Nó sử dụng EMA chéo để xác định hướng xu hướng, chỉ số ALMA để xác định điểm bổ sung, Stochastic RSI để tránh rủi ro mua quá nhiều và bán quá nhiều, trong khi thiết lập dừng lỗ và lấy lợi nhuận để kiểm soát rủi ro. Thông qua điều chỉnh tham số và tối ưu hóa chỉ số, chiến lược này có thể đạt được kết quả tốt. Nó dễ hiểu và sử dụng, và cũng có khả năng thích nghi nhất định.
/*backtest start: 2022-11-20 00:00:00 end: 2023-11-26 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 ////Arranged by @ClassicScott //Strategy Created by @CheatCode1 strategy('ALMA/EMA Strategy', shorttitle='ALMA/EMA Strategy', overlay=true ) ////Source Selection & ALMA Variables //Dominant Momentum ALMA dsource = input.source(close, title='Source', group='Dominant ALMA') dperiod = input.int(title='Period', defval=130, group='Dominant ALMA') doffset = input.float(title='Offset', step=0.025, defval=0.775, group='Dominant ALMA') dsigma = input.float(title='Sigma', step=0.5, defval=4.5, group='Dominant ALMA') dalma = ta.alma(dsource, dperiod, doffset, dsigma) dalma_up_color = input.color(#66bb6a, 'Going Up!', group='Dominant ALMA', inline = '1') dalma_down_color = input.color(#ef5350, 'Going Down :(', group='Dominant ALMA', inline = '1') dcolor = close[1] > dalma ? dalma_up_color : dalma_down_color ////ALMA Plots plot(dalma, color=dcolor, style=plot.style_stepline, linewidth=2, title='Dominant Momentum MA') //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 cheatcode = input.bool(true, '-----------CHEATC0DE1------------', group = 'Strategy Inputs', confirm = true) //Variable Declerations/Plot Assingments inp1 = input.int(49, 'Slow Ema Length', 1, 100, group = 'Strategy Inputs', confirm = true) inp2 = input.int(9, 'Fast Ema Length', 1, 200, group = 'Strategy Inputs', confirm = true) inp3 = int(200) sma1 = ta.sma(close, inp3) ema1 = ta.ema(close, inp1) ema2 = ta.ema(close, inp2) eplot1 = plot(ema1, 'Slow Ema', color.aqua, 1, plot.style_linebr) eplot2 = plot(ema2, 'Fast Ema', color.yellow, 1, plot.style_linebr) splot1 = plot(sma1, 'Long MA', close[1] < sma1 ? color.red:color.green, 1, plot.style_line, display = display.none) cross1 = ta.crossover(ema1, ema2) cross2 = ta.crossunder(ema1, ema2) plotchar(cross1, '', '↑', location.belowbar, close[1] > dalma and dalma > sma1 ? na:color.green, size = size.normal, editable = false) plotchar(cross2, '', '↓', location.abovebar, close[1] < dalma and dalma < sma1 ? na:color.red, size = size.normal, editable = false) bgcolor(cross1 and close[1] > dalma ? color.new(color.green, 80):cross2 and close[1] < dalma ? color.new(color.red, 80):na) valueL = ta.valuewhen(cross1 and close[1] > dalma, close, 0) valueS = ta.valuewhen(cross2 and close[1] < dalma, close, 0) //Entries if cross1 and close[2] > dalma[2] and close[1] > dalma[1] strategy.entry('Long', strategy.long) if cross2 and close[2] < dalma[2] and close[1] < dalma[1] strategy.entry('Short', strategy.short) //StochRsi smoothK = input.int(3, "K", minval=1) smoothD = input.int(15, "D", minval=1) lengthRSI = input.int(14, "RSI Length", minval=1) lengthStoch = input.int(8, "Stochastic Length", minval=1) src = input(close, title="RSI Source") rsi1 = ta.rsi(src, lengthRSI) k = ta.sma(ta.stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK) d = ta.sma(k, smoothD) //Cancellations if k > 75 strategy.cancel('Long') if k < 25 strategy.cancel('Short') //Closures if ta.crossunder(k, d) and k > 92 strategy.close('Long') if ta.crossover(k,d) and k < 8 strategy.close('Short') //Exit Percents takeP = input.float(3, title='Take Profit', group = 'Take Profit and Stop Loss') / 100 stopL = input.float(5.49, title = 'Stop Loss', group = 'Take Profit and Stop Loss')/100 // Pre Directionality Stop_L = strategy.position_avg_price * (1 - stopL) Stop_S = strategy.position_avg_price * (1 + stopL) Take_S= strategy.position_avg_price * (1 - takeP) Take_L = strategy.position_avg_price * (1 + takeP) //Post Excecution if strategy.position_size > 0 strategy.exit("Flat", limit=Take_L, stop = Stop_L) if strategy.position_size < 0 strategy.exit("Flat", limit=Take_S, stop = Stop_S)