
Chiến lược đảo ngược động lực mô hình đa yếu tố có thể đạt được lợi nhuận ổn định và cao hơn bằng cách kết hợp mô hình đa yếu tố và chiến lược đảo ngược động lực. Chiến lược này sử dụng chỉ số 123 đảo ngược và đồng âm như hai tín hiệu độc lập và tạo vị trí khi tín hiệu của cả hai phù hợp.
Chiến lược đảo ngược động lượng mô hình đa yếu tố bao gồm hai chiến lược con: chiến lược đảo ngược 123 và chiến lược chỉ số cộng hưởng.
123 Chiến lược đảo ngược dựa trên giá tăng hoặc giảm liên tục trong 2 ngày và kết hợp với chỉ số STOCH để xác định thị trường có quá lạnh hoặc quá nóng để tạo ra tín hiệu giao dịch. Cụ thể, khi giá tăng 2 ngày liên tiếp và đường dài STOCH 9 ngày thấp hơn 50 thì mua nhiều; khi giá giảm 2 ngày liên tiếp và đường dài STOCH 9 ngày cao hơn 50 thì mua nhiều.
Chiến lược chỉ số cộng hưởng sử dụng các chỉ số trung bình và dao động khác nhau để đánh giá xu hướng và cường độ của xu hướng. Bao gồm các phương pháp như trọng lượng tuyến tính, cộng âm và các phương pháp tổng hợp để đánh giá tình trạng đa luồng. Chỉ số này được phân chia theo cấp độ, trả về 1 đến 9 cho thấy đa luồng mạnh, 1 đến 9 cho thấy luồng mạnh.
Cuối cùng, chiến lược chọn đặt vị trí đầu nhiều hoặc đầu trống khi hai tín hiệu phù hợp.
Chiến lược đảo ngược động lực mô hình đa yếu tố kết hợp các yếu tố đảo ngược và yếu tố động lực, có thể nắm bắt cơ hội đảo ngược theo thứ tự đồng thời, tránh đột phá giả, do đó có tỷ lệ thắng cao hơn. Lợi thế của chiến lược cụ thể là:
Chiến lược đảo ngược là một nguồn tín hiệu đảo ngược, có thể nắm bắt được sự đảo ngược ngắn hạn mang lại lợi nhuận vượt trội.
Các chỉ số cộng hưởng đánh giá xu hướng và sức mạnh của xu hướng, tránh rủi ro thua lỗ do không gian đảo ngược quá lớn.
Kết hợp cả hai, đến một mức độ nào đó, bổ sung cho nhau, bù đắp cho những thiếu sót, cải thiện chất lượng tín hiệu.
Sự kết hợp nhiều yếu tố có thể cải thiện sự ổn định của chiến lược so với mô hình đơn lẻ.
Mặc dù có một số ưu điểm của chiến lược đảo ngược động lực mô hình đa yếu tố, nhưng vẫn có một số rủi ro sau:
Losses caused by the reversal not completed, the price reversed again. Losses caused by the reversal not completed, the price reversed again. Losses caused by the reversal not completed, the price reversed again. Losses caused by the reversal not completed.
Không thể xác định hướng khi hai tín hiệu không phù hợp. Bạn có thể điều chỉnh tham số để làm cho hai kết hợp cao hơn.
Mô hình quá phức tạp, có nhiều tham số, không dễ điều chỉnh và tối ưu hóa.
Cần chú ý đến nhiều mô hình con cùng một lúc, hoạt động trên thực tế khó khăn và căng thẳng về tâm lý. Có thể giới thiệu một số yếu tố giao dịch tự động để giảm gánh nặng hoạt động.
Chiến lược đảo ngược động lực của mô hình đa yếu tố có thể được tối ưu hóa theo các khía cạnh sau:
Điều chỉnh các tham 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.
Điều chỉnh các tham số của chỉ số cộng hưởng để cho xu hướng phán đoán gần hơn với xu hướng thực sự.
Giới thiệu các thuật toán học máy để tự động tối ưu hóa các tham số.
Thêm mô-đun quản lý vị trí để điều chỉnh vị trí có thể định lượng và có hệ thống hơn.
Thêm mô-đun dừng lỗ. Kiểm soát hiệu quả lỗ đơn bằng cách đặt giá dừng lỗ trước.
Chiến lược đảo ngược động lực mô hình đa yếu tố sử dụng tổng hợp các yếu tố đảo ngược và yếu tố động lực, dựa trên đảm bảo chất lượng tín hiệu cao hơn, đạt được tỷ lệ thắng cao hơn bằng cách chồng lên nhiều yếu tố. Chiến lược này có lợi thế kép của việc nắm bắt cơ hội đảo ngược, theo chiều hướng, 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 )