
Chiến lược này sử dụng đường chéo giữa trung bình di chuyển động động (ALMA) và trung bình di chuyển chỉ số (EMA) với hai tham số khác nhau để tạo ra tín hiệu giao dịch. Trong khi đó, chiến lược này cũng kết hợp với trung bình di chuyển chỉ số ngẫu nhiên (RSI Stochastic) để tránh mua và bán quá mức.
Chiến lược sử dụng ALMA làm chỉ số chính để xác định xu hướng giá. ALMA có chức năng làm mịn dữ liệu giá, có thể lọc sự biến động ngẫu nhiên của giá. Bằng cách điều chỉnh chu kỳ, giá trị di chuyển và tham số sigma của ALMA, có thể làm cho nó nhạy cảm hơn hoặc ổn định hơn.
Chiến lược sử dụng hai đường EMA với độ dài khác nhau. Khi đường EMA nhanh đi lên qua đường EMA chậm, nó tạo ra tín hiệu mua; Khi đường EMA nhanh đi xuống qua đường EMA chậm, nó tạo ra tín hiệu bán.
Stochastic RSI hoạt động để tránh phát tín hiệu giao dịch trong khu vực mua bán quá mức. Nó kết hợp lợi thế của cả hai chỉ số RSI và Stochastic để đánh giá tốt hơn các khu vực đỉnh và đáy. Chiến lược này sẽ hủy bỏ các đơn đặt hàng đầu hoặc trống ban đầu khi Stochastic RSI mua hoặc bán quá mức.
Chiến lược tận dụng lợi thế của EMA để xác định xu hướng xu hướng giá, phối hợp với chỉ số ALMA để xác định các cơ hội đầu nhiều và đầu trống chính, để thực hiện giao dịch theo hướng đi.
Chu kỳ EMA, tham số ALMA, v.v. đều cung cấp không gian điều chỉnh, người dùng có thể tối ưu hóa tham số theo nhu cầu của mình, giúp chiến lược phù hợp hơn với môi trường thị trường khác nhau.
Chiến lược này có cài đặt dừng lỗ. Việc sử dụng dừng nổi có thể làm giảm khả năng dừng lỗ bị đuổi theo; thiết lập thu lợi nhuận có thể khóa lợi nhuận và tránh xả lợi nhuận.
Trong các trường hợp phức tạp, các đường EMA và ALMA có thể phát ra tín hiệu sai. Trong trường hợp này, cần phải dựa vào dừng để kiểm soát tổn thất.
Nếu các tham số được thiết lập không đúng cách, đường EMA và ALMA sẽ không hoạt động đúng cách, làm tăng rủi ro giao dịch. Cần thử nghiệm và tối ưu hóa để chọn kết hợp tham số tốt nhất.
Kiểm tra tối ưu hóa các thiết lập tham số của EMA và ALMA, chọn tham số tối ưu nhất.
Kết hợp với các chỉ số khác để lọc tín hiệu, tránh các tín hiệu sai dẫn đến tổn thất. Ví dụ MACD, KDJ, v.v.
Tối ưu hóa mứ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.
Thử nghiệm các biến thể khác nhau và các tham số chu kỳ để chiến lược có thể áp dụng cho nhiều thị trường hơn.
Chiến lược này nói chung 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 để xác định hướng xu hướng, ALMA để định vị điểm đặt cược, Stochastic RSI để tránh rủi ro quá mua quá bán, đồng thời đặt lệnh dừng và dừng để kiểm soát rủi ro. Bằng cách điều chỉnh tham số và tối ưu hóa chỉ số, chiến lược này có thể đạt được hiệu quả tốt hơn.
/*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)