Strategi pembalikan momentum model multi-faktor


Tanggal Pembuatan: 2023-12-21 16:26:10 Akhirnya memodifikasi: 2023-12-21 16:26:10
menyalin: 0 Jumlah klik: 663
1
fokus pada
1623
Pengikut

Strategi pembalikan momentum model multi-faktor

Ringkasan

Strategi reversal momentum model multi-faktor dengan kombinasi model multi-faktor dan strategi reversal momentum menghasilkan keuntungan yang lebih stabil dan lebih tinggi. Strategi ini menggunakan indikator 123 reversal dan resonansi sebagai dua sinyal independen, dan membuka posisi ketika sinyal keduanya sesuai.

Prinsip Strategi

Strategi reversal momentum model multi-faktor terdiri dari dua substrategi: strategi reversal 123 dan strategi indikator resonansi.

123 Strategi berbalik berdasarkan harga naik atau turun selama 2 hari berturut-turut, dan dikombinasikan dengan indikator STOCH untuk menilai apakah pasar terlalu dingin atau terlalu panas untuk menghasilkan sinyal perdagangan. Secara khusus, ketika harga naik selama 2 hari berturut-turut, dan pada hari ke-9 garis STOCH lambat di bawah 50, maka Anda akan melihat lebih banyak; ketika harga turun selama 2 hari berturut-turut, dan pada hari ke-9 garis STOCH cepat di atas 50, maka Anda akan melihat lebih banyak.

Strategi indikator resonansi menggunakan superposisi dari berbagai indikator rata-rata dan getaran untuk menentukan arah dan kekuatan tren. Metode seperti linear weighting, sinonim plus dan lain-lain digunakan untuk menilai posisi polygon secara komprehensif. Indikator ini dibagi dengan tingkatan, kembali 1 hingga 9 untuk polygon yang kuat, dan 1 hingga 9 untuk polygon yang kuat.

Akhirnya, strategi memilih untuk membangun posisi multihead atau kosong ketika sinyal keduanya sama.

Analisis Keunggulan

Strategi reversal momentum model multi faktor menggabungkan faktor reversal dan faktor momentum, yang dapat menangkap peluang reversal secara berurutan, menghindari false breakout, sehingga memiliki tingkat kemenangan yang lebih tinggi. Keuntungan dari strategi ini adalah:

  1. 123 Strategi reversal sebagai sumber sinyal reversal, dapat menangkap reversal jangka pendek yang membawa keuntungan ekstra.

  2. Indikator sinkronisasi menilai arah dan kekuatan tren, menghindari risiko kerugian yang disebabkan oleh ruang pembalikan yang terlalu besar.

  3. Kedua hal ini dapat dikombinasikan untuk saling melengkapi dan meningkatkan kualitas sinyal.

  4. Kombinasi multi-faktor dapat meningkatkan stabilitas strategi dibandingkan dengan model tunggal.

Analisis risiko

Meskipun ada beberapa keuntungan dari strategi reversal momentum model multi-faktor, ada beberapa risiko:

  1. Kerugian yang ditimbulkan oleh reversal tidak selesai, harga kembali kembali ke arah yang lebih rendah. Anda dapat menyesuaikan pencegahan kerugian yang tepat.

  2. Jika sinyal keduanya tidak konsisten, maka tidak dapat menentukan arah. Dengan penyesuaian parameter dapat membuat keduanya lebih cocok.

  3. Model terlalu rumit, banyak parameter, dan tidak mudah disesuaikan dan dioptimalkan.

  4. Perlu memperhatikan beberapa sub model sekaligus, operasi hard disk lebih sulit dan tekanan psikologis lebih besar. Beberapa elemen perdagangan otomatis dapat diperkenalkan untuk mengurangi beban operasi.

Arah optimasi

Strategi pembalikan momentum dalam model multifaktor dapat dioptimalkan dari beberapa aspek:

  1. Mengatur parameter 123 untuk strategi pembalikan agar sinyal pembalikan lebih akurat dan dapat diandalkan.

  2. Menyesuaikan parameter dari indikator resonansi agar trend yang dinilai lebih dekat dengan trend yang sebenarnya.

  3. Masukkan algoritma pembelajaran mesin untuk mengoptimalkan parameter secara otomatis.

  4. Menambahkan modul manajemen posisi untuk membuat penyesuaian posisi lebih kuantitatif dan sistematis.

  5. Tambahkan modul Stop Loss. Mengontrol kerugian secara efektif dengan menetapkan harga Stop Loss sebelumnya.

Meringkaskan

Strategi reversal momentum model multi-faktor menggunakan faktor reversal dan faktor momentum secara komprehensif, dengan menjamin kualitas sinyal yang lebih tinggi, dengan mendapatkan tingkat kemenangan yang lebih tinggi melalui superimposition multi-faktor. Strategi ini memiliki keuntungan ganda untuk menangkap peluang reversal, berdasarkan pada keberlanjutan, merupakan strategi stabilisasi kuantitatif yang efisien. Di masa depan, strategi ini dapat terus dioptimalkan dari penyesuaian parameter, kontrol risiko, dan lain-lain.

Kode Sumber Strategi
/*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 )