Chiến lược đảo ngược khoảnh khắc dựa trên mô hình đa yếu tố

Tác giả:ChaoZhang, Ngày: 2023-12-21 16:26:10
Tags:

img

Tổng quan

Chiến lược đảo ngược khoảnh khắc dựa trên mô hình đa yếu tố kết hợp mô hình đa yếu tố và chiến lược đảo ngược động lực để đạt được lợi nhuận ổn định và cao hơn. Chiến lược sử dụng các chỉ số 123 đảo ngược và hợp lưu như hai tín hiệu độc lập và thiết lập một vị trí khi hai tín hiệu phù hợp.

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

Chiến lược bao gồm hai tiểu chiến lược: 123 chiến lược đảo ngược và chiến lược chỉ số hội tụ.

Chiến lược đảo ngược 123 tạo ra các tín hiệu giao dịch dựa trên việc giá đã tăng hoặc giảm liên tục trong 2 ngày, kết hợp với chỉ số STOCH để đánh giá liệu thị trường có quá lạnh hay quá nóng. Cụ thể, khi giá tăng liên tục trong 2 ngày và đường chậm STOCH 9 ngày dưới 50, đó là tăng. Khi giá giảm liên tục trong 2 ngày và đường nhanh STOCH 9 ngày trên 50, đó là giảm.

Chiến lược chỉ số hội tụ sử dụng sự chồng chéo của các đường trung bình động và dao động của các chu kỳ khác nhau để xác định hướng và sức mạnh của xu hướng. Bao gồm cân nặng tuyến tính, tổng hợp sinus và các phương pháp khác để đánh giá toàn diện động lực dài và ngắn. Chỉ số được xếp hạng và trả về từ 1 đến 9 cho thấy động lực tăng mạnh và -1 đến -9 cho thấy động lực giảm mạnh.

Cuối cùng, chiến lược thiết lập các vị trí dài hoặc ngắn khi cả hai tín hiệu đều phù hợp.

Phân tích lợi thế

Chiến lược đảo ngược khoảnh khắc dựa trên mô hình đa yếu tố kết hợp các yếu tố đảo ngược và các yếu tố động lực để nắm bắt các cơ hội đảo ngược trong khi theo xu hướng để tránh phá vỡ sai, do đó có tỷ lệ thắng cao hơn.

  1. Là một nguồn tín hiệu đảo ngược, chiến lược đảo ngược 123 có thể nắm bắt lợi nhuận dư thừa từ các đảo ngược ngắn hạn.

  2. Chỉ số hợp lưu đánh giá hướng xu hướng và sức mạnh để tránh rủi ro mất mát do không gian đảo ngược quá lớn.

  3. Sự kết hợp của hai chiến lược bổ sung điểm mạnh và điểm yếu của nhau ở một mức độ nào đó và cải thiện chất lượng tín hiệu.

  4. So với một mô hình duy nhất, sự kết hợp của nhiều yếu tố có thể cải thiện sự ổn định của các chiến lược.

Phân tích rủi ro

Mặc dù chiến lược đảo ngược thời điểm dựa trên mô hình đa yếu tố có một số lợi thế, nhưng vẫn có một số rủi ro:

  1. Rủi ro mất mát do sự đảo ngược không được hoàn thành và giá quay lại.

  2. Không thể xác định hướng khi hai tín hiệu không phù hợp. Điều chỉnh tham số có thể được thực hiện để tăng mức độ phù hợp.

  3. Mô hình quá phức tạp với quá nhiều tham số, điều này khó điều chỉnh và tối ưu hóa.

  4. Nhiều mô hình phụ cần phải được giám sát đồng thời, dẫn đến khó khăn hơn trong hoạt động và áp lực tâm lý.

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

Chiến lược đảo ngược khoảnh khắc dựa trên mô hình đa yếu tố có thể được tối ưu hóa trong các khía cạnh sau:

  1. Điều chỉnh các thông số của chiến lược đảo ngược 123 để làm cho tín hiệu đảo ngược chính xác và đáng tin cậy hơn.

  2. Điều chỉnh các tham số của chỉ số hội tụ để làm cho các xu hướng được xác định gần hơn với thực tế.

  3. Đưa ra các thuật toán học máy để tự động tối ưu hóa các kết hợp tham số.

  4. Thêm mô-đun quản lý vị trí để làm cho điều chỉnh vị trí số lượng và có hệ thống hơn.

  5. Thêm mô-đun dừng lỗ. Hiệu quả kiểm soát lỗ đơn bằng cách đặt trước giá dừng lỗ.

Tóm lại

Chiến lược đảo ngược khoảnh khắc dựa trên mô hình đa yếu tố sử dụng các yếu tố đảo ngược và các yếu tố động lực một cách toàn diện. Trên cơ sở đảm bảo chất lượng tín hiệu tương đối cao, nó đạt tỷ lệ thắng cao hơn thông qua xếp chồng đa yếu tố. Chiến lược có hai lợi thế là nắm bắt các cơ hội đảo ngược và theo xu hướng. Đây là một chiến lược định lượng hiệu quả và ổn định.


/*backtest
start: 2023-11-20 00:00:00
end: 2023-12-07 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 11/11/2019
// This is combo strategies for get a cumulative signal. 
//
// First strategy
// This System was created from the Book "How I Tripled My Money In The 
// Futures Market" by Ulf Jensen, Page 183. This is reverse type of strategies.
// The strategy buys at market, if close price is higher than the previous close 
// during 2 days and the meaning of 9-days Stochastic Slow Oscillator is lower than 50. 
// The strategy sells at market, if close price is lower than the previous close price 
// during 2 days and the meaning of 9-days Stochastic Fast Oscillator is higher than 50.
//
// Second strategy
// This is modified version of Dale Legan's "Confluence" indicator written by Gary Fritz.
// ================================================================
// Here is Gary`s commentary:
// Since the Confluence indicator returned several "states" (bull, bear, grey, and zero), 
// he modified the return value a bit:
// -9 to -1 = Bearish
// -0.9 to 0.9 = "grey" (and zero)
// 1 to 9 = Bullish
// The "grey" range corresponds to the "grey" values plotted by Dale's indicator, but 
// they're divided by 10.
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
Reversal123(Length, KSmoothing, DLength, Level) =>
    vFast = sma(stoch(close, high, low, Length), KSmoothing) 
    vSlow = sma(vFast, DLength)
    pos = 0.0
    pos := iff(close[2] < close[1] and close > close[1] and vFast < vSlow and vFast > Level, 1,
	         iff(close[2] > close[1] and close < close[1] and vFast > vSlow and vFast < Level, -1, nz(pos[1], 0))) 
	pos

Confluence(Harmonic, BuyBand, SellBand) =>
    pos = 0.0
    Price = close
    STL = round((Harmonic * 2) - 1 - 0.5)
    ITL = round((STL * 2) - 1 - 0.5)
    LTL = round((ITL * 2) - 1 - 0.5)
    HOFF = round(Harmonic / 2 - 0.5)
    SOFF = round(STL / 2 - 0.5)
    IOFF = round(ITL / 2 - 0.5)
    xHavg = sma(Price, Harmonic)
    xSavg = sma(Price, STL)
    xIavg = sma(Price, ITL)
    xLavg = sma(Price, LTL)
    xvalue2 = xSavg - xHavg[HOFF]
    xvalue3 = xIavg - xSavg[SOFF]
    xvalue12 = xLavg - xIavg[IOFF]
    xmomsig = xvalue2 + xvalue3 + xvalue12
    xLavgOHLC = sma(ohlc4, LTL - 1)
    xH2 = sma(Price, Harmonic - 1)
    xS2 = sma(Price, STL - 1)
    xI2 = sma(Price, ITL - 1)
    xL2 = sma(Price, LTL - 1)
    DerivH = (xHavg * 2) - xHavg[1]
    DerivS = (xSavg * 2) - xSavg[1]
    DerivI = (xIavg * 2) - xIavg[1]
    DerivL = (xLavg * 2) - xLavg[1]
    SumDH = Harmonic * DerivH
    SumDS = STL * DerivS
    SumDI = ITL * DerivI
    SumDL = LTL * DerivL
    LengH = Harmonic - 1
    LengS = STL - 1
    LengI = ITL - 1
    LengL = LTL - 1
    N1H = xH2 * LengH
    N1S = xS2 * LengS
    N1I = xI2 * LengI
    N1L = xL2 * LengL
    DRH = SumDH - N1H
    DRS = SumDS - N1S
    DRI = SumDI - N1I
    DRL = SumDL - N1L
    SumH = xH2 * (Harmonic - 1)
    SumS = xS2 * (STL - 1)
    SumI = xI2 * (ITL - 1)
    SumL = xLavgOHLC * (LTL - 1)
    xvalue5 = (SumH + DRH) / Harmonic
    xvalue6 = (SumS + DRS) / STL
    xvalue7 = (SumI + DRI) / ITL
    xvalue13 = (SumL + DRL) / LTL
    value9 = xvalue6 - xvalue5[HOFF]
    value10 = xvalue7 - xvalue6[SOFF]
    value14 = xvalue13 - xvalue7[IOFF]
    xmom = value9 + value10 + value14
    HT = sin(xvalue5 * 2 * 3.14 / 360) + cos(xvalue5 * 2 * 3.14 / 360)
    HTA = sin(xHavg * 2 * 3.14 / 360) + cos(xHavg * 2 * 3.14 / 360)
    ST = sin(xvalue6 * 2 * 3.14 / 360) + cos(xvalue6 * 2 * 3.14 / 360)
    STA = sin(xSavg * 2 * 3.14 / 360) + cos(xSavg * 2 * 3.14 / 360)
    IT = sin(xvalue7 * 2 * 3.14 / 360) + cos(xvalue7 * 2 * 3.14 / 360)
    ITA = sin(xIavg * 2 * 3.14 / 360) + cos(xIavg * 2 * 3.14 / 360)
    xSum = HT + ST + IT
    xErr = HTA + STA + ITA
    Condition2 = (((xSum > xSum[SOFF]) and (xHavg < xHavg[SOFF])) or ((xSum < xSum[SOFF]) and (xHavg > xHavg[SOFF])))
    Phase = iff(Condition2 , -1 , 1)
    xErrSum = (xSum - xErr) * Phase
    xErrSig = sma(xErrSum, SOFF)
    xvalue70 = xvalue5 - xvalue13
    xvalue71 = sma(xvalue70, Harmonic)
    ErrNum = iff (xErrSum > 0 and xErrSum < xErrSum[1] and xErrSum < xErrSig, 1,
                  iff (xErrSum > 0 and xErrSum < xErrSum[1] and xErrSum > xErrSig, 2, 
                     iff (xErrSum > 0 and xErrSum > xErrSum[1] and xErrSum < xErrSig, 2,
                         iff (xErrSum > 0 and xErrSum > xErrSum[1] and xErrSum > xErrSig, 3,
                          iff (xErrSum < 0 and xErrSum > xErrSum[1] and xErrSum > xErrSig, -1,
                             iff (xErrSum < 0 and xErrSum < xErrSum[1] and xErrSum > xErrSig, -2,
                              iff (xErrSum < 0 and xErrSum > xErrSum[1] and xErrSum < xErrSig, -2,
                                 iff (xErrSum < 0 and xErrSum < xErrSum[1] and xErrSum < xErrSig, -3, 0))))))))

    momNum = iff (xmom > 0 and xmom < xmom[1] and xmom < xmomsig , 1,
              iff (xmom > 0 and xmom < xmom[1] and xmom > xmomsig, 2,
               iff (xmom > 0 and xmom > xmom[1] and xmom < xmomsig, 2,
                 iff (xmom > 0 and xmom > xmom[1] and xmom > xmomsig, 3,
                  iff (xmom < 0 and xmom > xmom[1] and xmom > xmomsig, -1,
                   iff (xmom < 0 and xmom < xmom[1] and xmom > xmomsig, -2,
                     iff (xmom < 0 and xmom > xmom[1] and xmom < xmomsig, -2,
                      iff (xmom < 0 and xmom < xmom[1] and xmom < xmomsig, -3, 0))))))))
    
    TCNum =  iff (xvalue70 > 0 and xvalue70 < xvalue70[1] and xvalue70 < xvalue71, 1,
              iff (xvalue70 > 0 and xvalue70 < xvalue70[1] and xvalue70 > xvalue71, 2,
               iff (xvalue70 > 0 and xvalue70 > xvalue70[1] and xvalue70 < xvalue71, 2,
                 iff (xvalue70 > 0 and xvalue70 > xvalue70[1] and xvalue70 > xvalue71, 3,
                  iff (xvalue70 < 0 and xvalue70 > xvalue70[1] and xvalue70 > xvalue71, -1,
                   iff (xvalue70 < 0 and xvalue70 < xvalue70[1] and xvalue70 > xvalue71, -2,
                     iff (xvalue70 < 0 and xvalue70 > xvalue70[1] and xvalue70 < xvalue71, -2,
                      iff (xvalue70 < 0 and xvalue70 < xvalue70[1] and xvalue70 < xvalue71, -3,0))))))))
    
    value42 = ErrNum + momNum + TCNum
    Confluence = iff (value42 > 0 and xvalue70 > 0, value42,
                  iff (value42 < 0 and xvalue70 < 0, value42,
                   iff ((value42 > 0 and xvalue70 < 0) or (value42 < 0 and xvalue70 > 0), value42 / 10, 0)))
    Res1 = iff (Confluence >= 1, Confluence, 0)
    Res2 = iff (Confluence <= -1, Confluence, 0)
    Res3 = iff (Confluence == 0, 0, iff (Confluence > -1 and Confluence < 1, 10 * Confluence, 0))
    pos := iff(Res2 >= SellBand and Res2 != 0, -1,
	         iff(Res1 <= BuyBand and Res1 != 0, 1, 
    	      iff(Res3 != 0, 2, nz(pos[1], 0))))
    pos

strategy(title="Combo Backtest 123 Reversal & Confluence", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
Harmonic = input(10, minval=1)
BuyBand = input(9)
SellBand = input(-9)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posConfluence = Confluence(Harmonic, BuyBand, SellBand)
pos = iff(posReversal123 == 1 and posConfluence == 1 , 1,
	   iff(posReversal123 == -1 and posConfluence == -1, -1, 0)) 
possig = iff(reverse and pos == 1, -1,
          iff(reverse and pos == -1 , 1, pos))	   
if (possig == 1) 
    strategy.entry("Long", strategy.long)
if (possig == -1)
    strategy.entry("Short", strategy.short)	 
if (possig == 0) 
    strategy.close_all()
barcolor(possig == -1 ? #b50404: possig == 1 ? #079605 : #0536b3 )

Thêm nữa