Chiến lược giao cắt đường trung bình động và đường trung bình động được làm mịn


Ngày tạo: 2023-11-27 17:35:09 sửa đổi lần cuối: 2023-11-27 17:35:09
sao chép: 0 Số nhấp chuột: 673
1
tập trung vào
1617
Người theo dõi

Chiến lược giao cắt đường trung bình động và đường trung bình động được làm mịn

Tổng quan

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.

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

Dòng ALMA động lự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.

Dừng lại!

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

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.

Phân tích lợi thế chiến lược

Điều này có nghĩa là chúng ta không thể làm được điều gì.

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.

Các tham số có thể điều chỉnh, thích ứng

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.

Cơ chế đình chỉ thiệt hại

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.

Phân tích rủi ro

Sự sai lầm trong đánh giá xu hướng

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.

Các tham số không hợp lệ

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.

Hướng tối ưu hóa chiến lược

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

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

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

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

Tóm tắt

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.

Mã nguồn chiến lược
/*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)