Động lực Đường trung bình chuyển động trơn tru và Chiến lược chéo đường trung bình chuyển động

Tác giả:ChaoZhang, Ngày: 2023-11-27 17:35:09
Tags:

img

Tổng quan

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.

Nguyên tắc chiến lược

Đường động ALMA

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 đỏ.

EMA nhanh và chậm Crossover

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.

Chỉ số RSI ngẫu nhiên

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ó.

Phân tích lợi thế

Giao dịch theo xu hướng

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 thông số điều chỉnh

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.

Cơ chế dừng lỗ và lấy lợi nhuận

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.

Phân tích rủi ro

Phương pháp đánh giá sai

Trong các thị trường phức tạp, đường EMA và ALMA có thể phát ra tín hiệu sai.

Cài đặt tham số không chính xác

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.

Tối ưu hóa chiến lược

  1. 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.

  2. 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.

  3. 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.

  4. 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.

Tóm lại

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)


Thêm nữa