Tài nguyên đang được tải lên... tải...

Chiến lược Chén Thánh

Tác giả:ChaoZhang, Ngày: 2023-12-01 15:27:39
Tags:

img

Chiến lược Chén Thánh

Chiến lược Holy Grail là một chiến lược giao dịch định lượng kết hợp hệ thống trung bình động kép với chỉ số ADX. Nó nhằm mục đích xác định hướng và sức mạnh của xu hướng và giao dịch khi xu hướng đảo ngược.

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

Chiến lược này sử dụng cả đường trung bình động theo cấp số nhân 20 ngày (EMA) và chỉ số ADX để xác định các cơ hội nhập cảnh. Cụ thể, nó sẽ phát ra tín hiệu giao dịch trong hai trường hợp sau:

  1. Khi giá trị ADX dưới 30 (cho thấy xu hướng yếu hơn), và giá vượt qua đường EMA 20 ngày từ dưới, mua dài;

  2. Khi giá trị ADX trên 30 (cho thấy xu hướng mạnh hơn), và giá vượt qua đường EMA 20 ngày từ trên, đi ngắn.

Có thể thấy rằng chiến lược này dựa trên ADX để đánh giá sức mạnh và hướng của xu hướng, và sau đó kết hợp hỗ trợ và kháng cự của đường trung bình động để tìm kiếm các cơ hội đảo ngược.

Phân tích lợi thế

Ưu điểm lớn nhất của chiến lược Holy Grail là nó tính đến cả hướng và sức mạnh của xu hướng, có thể ngăn chặn hiệu quả các đột phá sai và giảm xác suất dừng lỗ.

  1. Sử dụng một hệ thống trung bình động kép có thể xác định hiệu quả xu hướng;
  2. Với sự giúp đỡ của ADX để đánh giá sức mạnh của xu hướng, việc phá vỡ không hợp lệ có thể được tránh;
  3. Kết hợp các khái niệm giao dịch đảo ngược và xu hướng có thể nắm bắt xu hướng và đảo ngược tại các điểm chuyển đổi;
  4. Các quy tắc hoạt động là rõ ràng và đơn giản, dễ thực hiện.

Phân tích rủi ro

Chiến lược Chén Thánh cũng có một số rủi ro, chủ yếu là trong các lĩnh vực sau:

  1. ADX như một chỉ số phán đoán phụ trợ cũng sẽ phát ra tín hiệu sai;
  2. Crossover của hai đường trung bình di chuyển không thể tránh hoàn toàn tổn thất gây ra bởi các cuộc biểu tình nhỏ;
  3. Cài đặt tham số không chính xác (như giá trị mục tiêu ADX, thời gian trung bình động, v.v.) có thể làm cho tín hiệu quá thường xuyên hoặc bảo thủ.

Để giảm các rủi ro trên, các thông số có thể được điều chỉnh để đạt được hiệu quả tốt nhất. Stop loss cũng có thể được thiết lập để kiểm soát tổn thất đơn lẻ. Ngoài ra, cũng cần phải thử nghiệm các chiến lược trên các giống và chu kỳ khác nhau.

Hướng dẫn tối ưu hóa

Vẫn còn nhiều hướng tối ưu hóa cho chiến lược Chén Thánh:

  1. Hãy thử các loại trung bình động khác nhau, chẳng hạn như trung bình động cân nhắc, v.v.
  2. Giá trị mục tiêu ADX có thể được tối ưu hóa như một tham số;
  3. Các thông số chu kỳ khác nhau có thể được thử nghiệm, chẳng hạn như EMA 10 ngày, 30 ngày;
  4. Các chỉ số phụ khác có thể được thêm vào, chẳng hạn như RSI, Bollinger Bands, vv để xác nhận tín hiệu giao dịch.

Điều chỉnh các tham số hoặc thêm các chỉ số mới có thể làm tăng lợi nhuận hoặc tỷ lệ chiến thắng của chiến lược.

Tóm lại

Tóm lại, chiến lược Holy Grail kết hợp các lợi thế của đường trung bình động đôi và chỉ số ADX, và sử dụng các quy tắc giao dịch rõ ràng để nắm bắt sự đảo ngược xu hướng. Nó có tiềm năng hoạt động tốt. Tuy nhiên, các nhà giao dịch vẫn cần tối ưu hóa sự kết hợp các tham số và các quy tắc dừng lỗ để thích nghi với môi trường thị trường khác nhau. Hơn nữa, bất kể cải thiện như thế nào, không thể tránh hoàn toàn dừng lỗ, đó là một tình huống khó khăn mà mọi chiến lược giao dịch phải đối mặ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")
    


Thêm nữa