
Chiến lược Thánh Giá (Holy Grail Strategy) là một chiến lược giao dịch định lượng kết hợp hệ thống đường hai chiều và chỉ số ADX. Nó nhằm mục đích xác định hướng và cường độ của xu hướng và giao dịch khi xu hướng đảo ngược.
Chiến lược này đồng thời sử dụng chỉ số di chuyển trung bình 20 ngày (EMA) và chỉ số ADX để xác định thời điểm vào thị trường. Cụ thể, nó sẽ phát ra tín hiệu giao dịch trong hai trường hợp sau:
Khi ADX thấp hơn 30 (thể hiện xu hướng yếu) và giá phá vỡ EMA 20 ngày từ bên dưới, hãy làm nhiều hơn;
Khi ADX cao hơn 30 ((gọi là xu hướng mạnh) và giá phá vỡ EMA 20 ngày từ trên, hãy tháo dỡ.
Có thể thấy rằng chiến lược này dựa vào sức mạnh và hướng của ADX để xác định xu hướng, sau đó kết hợp với kháng cự hỗ trợ của đường trung bình di chuyển để tìm cơ hội đảo ngược. Nó kết hợp các khái niệm về theo xu hướng và giao dịch ngược.
Ưu điểm lớn nhất của chiến lược Holy Cross là nó cân nhắc cả chiều hướng và cường độ của xu hướng, có thể tránh hiệu quả các phá vỡ giả, do đó làm giảm khả năng dừng lỗ. Cụ thể, chiến lược này có một số lợi thế sau:
Chiến lược Thánh Giá cũng có một số rủi ro, chủ yếu tập trung vào các khía cạnh sau:
Để giảm nguy cơ trên, bạn có thể điều chỉnh các tham số để đạt được hiệu quả tối ưu, hoặc bạn có thể thiết lập dừng để kiểm soát tổn thất đơn. Ngoài ra, để chiến lược được thử nghiệm lại trên các giống và chu kỳ khác nhau cũng rất cần thiết.
Các chiến lược của Thánh Giá có nhiều phương hướng tối ưu hóa:
Điều chỉnh tham số hoặc thêm các chỉ số mới có thể làm tăng tỷ lệ lợi nhuận hoặc tỷ lệ chiến thắng của chiến lược. Nhưng bất kỳ tối ưu hóa nào cũng cần có đủ phản hồi để đảm bảo tính ổn định của nó.
Nhìn chung, chiến lược thánh giá kết hợp các ưu điểm của đường hai chiều và chỉ số ADX, sử dụng các quy tắc giao dịch rõ ràng để nắm bắt sự biến đổi xu hướng. Nó hứa hẹn sẽ có hiệu quả tốt.
/*backtest
start: 2022-11-24 00:00:00
end: 2023-11-30 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy("LAT Holy Grail v3", overlay=true)
/////////////TEST TIME ////////////////////////
testStartYear = input(2018, "Backtest Start Year")
testStartMonth = input(4, "Backtest Start Month")
testStartDay = input(15, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
testStopYear = input(2018, "Backtest Stop Year")
testStopMonth = input(5, "Backtest Stop Month")
testStopDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)
// A switch to control background coloring of the test period
testPeriodBackground = input(title="Color Background?", type=bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)
testPeriod() =>
time >= testPeriodStart and time <= testPeriodStop ? true : false
//////////////////////////////////////////////////////////////////////
myema= ema(close, 20)
plot(myema, color=green, title="eMA", linewidth=3)
//longCondition = (crossover(close, myema)) //and adx3 < target
//if (longCondition)
//strategy.entry("My Long Entry Id", strategy.long)
//shortCondition = (crossunder(close, myema)) //and adx3 > target
//if (shortCondition)
//strategy.entry("My Short Entry Id", strategy.short)
//////////////////////////////////////////////////////////
/////////////////////////////////////// DMI ///////////////////////////////////////////////
len3 = input(14, minval=1, title="DI Length") /////////////////////
lensig3 = input(14, title="ADX Smoothing", minval=1, maxval=50) ////////////////////
up3 = change(high) ///////////////////
down3 = -change(low) //////////////////
plusDM3 = na(up3) ? na : (up3 > down3 and up3 > 0 ? up3 : 0) /////////////////
minusDM3 = na(down3) ? na : (down3 > up3 and down3 > 0 ? down3 : 0) ////////////////
trur3 = rma(tr, len3) ///////////////
plus3 = fixnan(100 * rma(plusDM3, len3) / trur3) //////////////
minus3 = fixnan(100 * rma(minusDM3, len3) / trur3) /////////////
sum3 = plus3 + minus3 ////////////
adx3 = 100 * rma(abs(plus3 - minus3) / (sum3 == 0 ? 1 : sum3), lensig3) ///////////
//plot(plus3, color=green, style=circles, linewidth=2, title="+DI") //////////
//plot(minus3, color=red, style=circles, linewidth=2, title="-DI") /////////
plot(adx3, color=aqua, style=line, linewidth=3, title="ADX") ////////
target = input(30, title=" ADX Target Line") ///////
plot(target, color=yellow, title="ADX Target Line") //////
/////////////////////////////////////////////////////////////////////////////////////////////////
plot(hl2)
/////////////////////////////////////////////// eMA SIGNAL LINE ///////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////// HOLY GRAIL STRATEGY ///////////////////////////////////////////////////////////////////
if (adx3 <= target) and crossover(close, myema)
strategy.entry("HolyGrail", strategy.long, comment="Long")
if (adx3 >= target) and crossunder(close, myema)
strategy.entry("HolyGrail", strategy.short, comment="Short")