
Chiến lược này sử dụng chỉ số đường hai và chỉ số đường ba, kết hợp với chỉ số ngẫu nhiên, tạo thành một chiến lược giao dịch theo dõi xu hướng ổn định và đáng tin cậy. Ý tưởng chính của nó là phát ra tín hiệu giao dịch khi chỉ số đường ngang ra phán đoán hình thành gai vàng hoặc gai chết; và chỉ số ngẫu nhiên được sử dụng để hỗ trợ phán đoán trường hợp quá mua quá bán, tránh phát ra tín hiệu sai khi thị trường biến động mạnh.
Chiến lược này bao gồm bốn phần:
Chỉ số hai đường trung bình: tính trung bình di chuyển chỉ số 50 chu kỳ và 100 chu kỳ (EMA), tạo ra tín hiệu mua khi vượt qua EMA ngắn hạn và bán khi vượt qua EMA dài hạn.
Ba chỉ số chỉ số: tính trung bình di chuyển chỉ số 50 chu kỳ, 100 chu kỳ và 200 chu kỳ để xác định hướng xu hướng thị trường. Thị trường đa đầu khi 50EMA> 100EMA> 200EMA và thị trường trống khi 50EMA < 100EMA < 200EMA.
Chỉ số ngẫu nhiên: tính giá trị K và giá trị D của RSI trong 6 ngày, để đánh giá tình trạng quá mua quá bán. Khi giá trị K vượt qua giá trị D, nó là quá bán, khi giá trị D vượt qua nó là quá mua.
Tín hiệu giao dịch: Chỉ khi các chỉ số đường hai đồng đều tạo ra tín hiệu, thị trường cũng phù hợp với trạng thái đa đầu hoặc trống của đường trung bình ba chỉ số, và chỉ khi các chỉ số ngẫu nhiên không hiển thị quá mua quá bán, thì chỉ có lệnh giao dịch thực sự được đưa ra.
Phương pháp này kết hợp các chỉ số đường trung bình và các chỉ số ngẫu nhiên để đưa ra tín hiệu giao dịch, xem xét định hướng xu hướng và tham khảo tình trạng quá mua quá bán của thị trường, do đó có thể lọc tốt tiếng ồn và theo dõi xu hướng rõ ràng hơn. Ngoài ra, nó sử dụng đường trung bình ba chỉ số để đánh giá xu hướng tổng thể, làm cho tín hiệu đáng tin cậy hơn.
Rủi ro lớn nhất của chiến lược này là nó phụ thuộc vào sự phán đoán của chỉ số, dễ dẫn đến thất bại giao dịch khi chỉ số phát ra tín hiệu sai. Ngoài ra, việc sử dụng chỉ số đường trung bình chu kỳ dài hơn để đánh giá xu hướng tổng thể cũng có thể bỏ lỡ cơ hội ngắn hạn. Các biện pháp chống rủi ro chính như sau:
Tối ưu hóa các tham số chỉ số, điều chỉnh kết hợp chu kỳ của đường trung bình hai chiều và đường trung bình ba chiều để phù hợp hơn với đặc điểm thị trường.
Các chỉ số khác có thể được kết hợp để thực hiện các hoạt động CANCEL, tạm dừng giao dịch hiện tại khi thị trường bị biến động mạnh.
Sử dụng chiến lược đa đầu ngắn để hỗ trợ, tận dụng cơ hội ngắn hạn để kiếm lợi nhuận trong thị trường đa đầu dài.
Chiến lược này có thể được tối ưu hóa từ các khía cạnh sau:
Điều chỉnh các tham số chu kỳ của đường trung bình kép và đường trung bình ba chỉ số, tối ưu hóa các chỉ số phù hợp với đặc điểm thị trường.
Tăng khả năng đánh giá các chỉ số như VOLUME và MACD để tránh các tín hiệu sai lệch do giá bất thường.
Sử dụng mô hình nến để xác định xu hướng tốt hơn, tránh tín hiệu sai sau khi rút ngắn.
Mở rộng sang nhiều loại khác nhau như cổ phiếu, ngoại hối, để kiểm tra tính phù hợp của chiến lược.
Kết hợp với chỉ số VIX để xác định tỷ lệ biến động của thị trường tổng thể, kiểm soát quy mô vị trí.
Chiến lược này sử dụng chỉ số đường hai để phát tín hiệu giao dịch, đường trung bình ba chỉ số và chỉ số ngẫu nhiên để đưa ra phán đoán hỗ trợ, do đó xây dựng một chiến lược theo dõi xu hướng ổn định hơn. Nó đơn giản, dễ hiểu, dễ thực hiện, phù hợp với đặc điểm của thị trường, thu nhập ổn định hơn, là một bộ chiến lược định lượng đáng được đề xuất.
/*backtest
start: 2023-12-07 00:00:00
end: 2023-12-12 08:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy(title='5212 EMA Strategy', shorttitle='5212 EMA', overlay=true, pyramiding=0, default_qty_type=strategy.percent_of_equity, default_qty_value=10, calc_on_every_tick=false)
//**Backtest Date sof
useStartPeriodTime = input.bool(true , 'Start Date & Time' , group='Date Range' , inline='Start Period')
startPeriodTime = input(timestamp('16 Apr 2021') , '' , group='Date Range' , inline='Start Period')
useEndPeriodTime = input.bool(false , 'End Date & Time' , group='Date Range' , inline='End Period')
endPeriodTime = input(timestamp('31 Dec 2222') , '' , group='Date Range' , inline='End Period')
enableHighlight = input.bool(false , 'Highlight' , group='Date Range' , inline='Highlight')
highlightType = input.string('Anchors' , '' , group='Date Range' , inline='Highlight' , options=['Anchors', 'Background'])
highlightColor = input.color(color.white , '' , group='Date Range' , inline='Highlight')
start = useStartPeriodTime ? startPeriodTime >= time : false
end = useEndPeriodTime ? endPeriodTime <= time : false
calcPeriod = true
// var line startAnchor = line.new(na, na, na, na, xloc.bar_time, extend.both, highlightColor, width=2)
// var line endAnchor = line.new(na, na, na, na, xloc.bar_time, extend.both, highlightColor, width=2)
// useBgcolor = false
// if enableHighlight
// if highlightType == 'Anchors'
// if useStartPeriodTime
// line.set_xy1(startAnchor, startPeriodTime, low)
// line.set_xy2(startAnchor, startPeriodTime, high)
// if useEndPeriodTime
// line.set_xy1(endAnchor, calcPeriod ? time : line.get_x1(endAnchor), low)
// line.set_xy2(endAnchor, calcPeriod ? time : line.get_x1(endAnchor), high)
// if highlightType == 'Background'
// useBgcolor := true
// useBgcolor
// bgcolor(useBgcolor and calcPeriod ? color.new(highlightColor,90) : na, editable=false)
//**Backtest Date eof
src =input(close , 'Source' , group='Support')
showEMA = input(true , 'Show EMA' , group='Support')
//**Stochastic RSI sof
smoothK = input.int(6 , "K" , group='Stochastic RSI' , minval=1)
smoothD = input.int(6 , "D" , group='Stochastic RSI' , minval=1)
lengthRSI = input.int(28 , "RSI Length" , group='Stochastic RSI' , minval=1)
lengthStoch = input.int(28 , "Stoch Length" , group='Stochastic RSI' , minval=1)
rsi1 = ta.rsi(src, lengthRSI)
k = ta.sma(ta.stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
d = ta.sma(k, smoothD)
//**STochastic RSI eof
//** EMA sof
emain01 = input.int(50 , "EMAma Girang" , group='Moving Average Exponential' , minval=1)
emain02 = input.int(100 , "EMAma Muda" , group='Moving Average Exponential' , minval=1)
emain03 = input.int(200 , "EMAma Tua" , group='Moving Average Exponential' , minval=1)
ema01 = ta.ema(src, emain01)
ema02 = ta.ema(src, emain02)
ema03 = ta.ema(src, emain03)
plot(showEMA ? ema01 : na, 'EMAma Girang' , color = color.new(color.orange, 0))
plot(showEMA ? ema02 : na, 'EMAma Muda' , color = color.new(color.blue, 0))
plot(showEMA ? ema03 : na, 'EMAma Tua' , color = color.new(color.red, 0))
//** EMA eof
//**Condition sof
emaLong = ema01 > ema02 and ema02 > ema03 and low > ema03
emaShort = ema01 < ema02 and ema02 < ema03 and high < ema03
longCond = ta.crossover(k,d) and k <= 23 and emaLong
shortCond = ta.crossunder(k,d) and k >= 77 and emaShort
longClose = ta.crossunder(k,d) and k <= 77
shortClose = ta.crossover(k,d) and k >= 23
longCross = ta.crossover(ema01, ema02)
shortCross = ta.crossunder(ema01, ema02)
//**Condition eof
//**Strategy sof
if calcPeriod and longCond
strategy.entry('long', strategy.long, when=longCond, comment='EN Long')
strategy.close('long', when=shortClose, comment='EX Long')
strategy.close('long', when=shortCross, comment='MD Short')
if calcPeriod and shortCond
strategy.entry('short', strategy.short, when=shortCond, comment='EN Short')
strategy.close('short', when=longClose, comment='EX Short')
strategy.close('short', when=longCross, comment='MD Long')
if calcPeriod == false and ta.crossover(ema01, ema02) or ta.crossunder(ema01, ema02)
strategy.cancel('long')
strategy.cancel('short')
//**Strategy eof
//**Label sof
entryText = str.tostring(strategy.position_avg_price, '##.###')
longText = 'Long Entry : ' + entryText
shortText = 'Short Entry : ' + entryText
noTrade = 'Sleeping Mode'
LongTrade = strategy.position_size > 0
ShortTrade = strategy.position_size < 0
Tekslabel = LongTrade ? longText : ShortTrade ? shortText : noTrade
xPosition = timenow + math.round(ta.change(time)*1)
yPosition = ta.highest(1)
labelColor = LongTrade ? color.new(color.aqua, 0) : ShortTrade ? color.new(color.red, 0) : color.new(color.gray, 0)
textColor = LongTrade ? color.new(color.black, 0) : ShortTrade ? color.new(color.white, 0) : color.new(color.white, 0)
// lab_l = label.new(
// xPosition, yPosition, Tekslabel,
// color=labelColor,
// textcolor=textColor,
// style = label.style_label_left,
// textalign=text.align_left,
// xloc=xloc.bar_time, yloc = yloc.price)
// label.delete(lab_l[1])
//**Strategy eof