Strategi Pembalikan Momen Berdasarkan Model Multi-faktor

Penulis:ChaoZhang, Tarikh: 2023-12-21 16:26:10
Tag:

img

Ringkasan

Strategi pembalikan momen berdasarkan model pelbagai faktor menggabungkan model pelbagai faktor dan strategi pembalikan momentum untuk mencapai pulangan yang lebih stabil dan lebih tinggi. Strategi ini menggunakan penunjuk pembalikan dan perpaduan 123 sebagai dua isyarat bebas dan menubuhkan kedudukan apabila kedua-dua isyarat konsisten.

Prinsip Strategi

Strategi ini terdiri daripada dua sub-strategi: 123 strategi pembalikan dan strategi penunjuk perpaduan.

Strategi pembalikan 123 menjana isyarat dagangan berdasarkan sama ada harga telah meningkat atau jatuh secara berterusan selama 2 hari, digabungkan dengan penunjuk STOCH untuk menilai sama ada pasaran terlalu sejuk atau terlalu panas. Khususnya, apabila harga meningkat secara berterusan selama 2 hari dan garis perlahan STOCH 9 hari di bawah 50, ia adalah bullish. Apabila harga turun secara berterusan selama 2 hari dan garis cepat STOCH 9 hari di atas 50, ia adalah bearish.

Strategi penunjuk pertemuan menggunakan superposisi purata bergerak dan osilator kitaran yang berbeza untuk menentukan arah dan kekuatan trend. Termasuk berat linear, penambahan sinus dan kaedah lain untuk menilai momentum panjang dan pendek secara komprehensif. Penunjuk ini dinilai dan mengembalikan 1 hingga 9 yang menunjukkan momentum kenaikan yang kuat dan -1 hingga -9 yang menunjukkan momentum penurunan yang kuat.

Akhirnya, strategi menetapkan kedudukan panjang atau pendek apabila kedua-dua isyarat adalah konsisten.

Analisis Kelebihan

Strategi Pembalikan Momen Berdasarkan Model Multi-faktor menggabungkan faktor pembalikan dan faktor momentum untuk menangkap peluang pembalikan sambil mengikuti trend untuk mengelakkan pecah palsu, dengan itu mempunyai kadar kemenangan yang lebih tinggi.

  1. Sebagai sumber isyarat pembalikan, strategi pembalikan 123 boleh menangkap pulangan yang berlebihan dari pembalikan jangka pendek.

  2. Penunjuk pertemuan menilai arah trend dan kekuatan untuk mengelakkan risiko kerugian yang disebabkan oleh ruang pembalikan yang terlalu besar.

  3. Gabungan kedua-dua strategi itu menyempurnakan satu sama lain kekuatan dan kelemahan dalam tahap tertentu dan meningkatkan kualiti isyarat.

  4. Berbanding dengan satu model, gabungan pelbagai faktor boleh meningkatkan kestabilan strategi.

Analisis Risiko

Walaupun Strategi Pembalikan Momen Berdasarkan Model Multi-faktor mempunyai kelebihan tertentu, masih ada beberapa risiko:

  1. Risiko kerugian yang disebabkan oleh pembalikan tidak diselesaikan dan harga berputar semula.

  2. Tidak dapat menentukan arah apabila dua isyarat tidak konsisten. Pengaturan parameter boleh dibuat untuk meningkatkan tahap pencocokan.

  3. Model ini terlalu kompleks dengan terlalu banyak parameter, yang sukar untuk menyesuaikan dan mengoptimumkan.

  4. Pelbagai submodel perlu dipantau secara serentak, mengakibatkan kesukaran operasi yang lebih besar dan tekanan psikologi.

Arahan pengoptimuman

Strategi Pembalikan Momen Berdasarkan Model Multi-faktor boleh dioptimumkan dalam aspek berikut:

  1. Sesuaikan parameter strategi pembalikan 123 untuk menjadikan isyarat pembalikan lebih tepat dan boleh dipercayai.

  2. Sesuaikan parameter penunjuk pertemuan untuk menjadikan trend yang ditentukan lebih dekat dengan yang sebenar.

  3. Memperkenalkan algoritma pembelajaran mesin untuk mengoptimumkan kombinasi parameter secara automatik.

  4. Tambah modul pengurusan kedudukan untuk membuat penyesuaian kedudukan lebih kuantitatif dan sistematik.

  5. Tambah modul stop loss. berkesan mengawal kerugian tunggal dengan menetapkan harga stop loss.

Ringkasan

Strategi pembalikan saat berdasarkan model pelbagai faktor secara komprehensif menggunakan faktor pembalikan dan faktor momentum. Atas dasar memastikan kualiti isyarat yang agak tinggi, ia memperoleh kadar kemenangan yang lebih tinggi melalui pemasangan pelbagai faktor. Strategi ini mempunyai dua kelebihan menangkap peluang pembalikan dan mengikuti trend. Ini adalah strategi kuantitatif yang cekap dan stabil. Pengoptimuman susulan boleh dibuat dalam aspek seperti penyesuaian parameter dan kawalan risiko untuk meningkatkan lagi nisbah risiko-balasan 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 )

Lebih lanjut