Strategi Kuantitatif Indikator Berganda

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

img

Ringkasan

Strategi ini menghasilkan isyarat dagangan dengan menggabungkan penunjuk 123 Reversal dan penunjuk RAVI. 123 Reversal tergolong dalam strategi jenis pembalikan, menggunakan pergerakan harga dalam dua hari terakhir untuk menentukan trend harga masa depan. Penunjuk RAVI menentukan sama ada harga telah memasuki zon overbought atau oversold. Strategi memutuskan untuk pergi panjang atau pendek berdasarkan isyarat gabungan dari kedua-dua penunjuk.

Logika Strategi

123 Pembalikan

Indikator ini berdasarkan nilai K dari indikator Stochastic. Secara khusus, ia pergi panjang apabila harga penutupan hari ini lebih rendah daripada dua hari sebelumnya dan garis stochastic perlahan 9 hari lebih rendah daripada 50. Ia pergi pendek apabila harga penutupan hari ini lebih tinggi daripada dua hari sebelumnya dan garis stochastic cepat 9 hari lebih tinggi daripada 50. Jadi ia masuk berdasarkan pengesahan titik pembalikan.

Penunjuk RAVI

Indikator ini menghasilkan isyarat dengan mengira perbezaan antara purata bergerak pantas dan perlahan. Khususnya, perbezaan antara MA 7 hari dan MA 65 hari. Ia menjadi panjang apabila perbezaannya lebih besar daripada ambang dan menjadi pendek apabila lebih rendah daripada ambang.

Isyarat Strategi

Isyarat dihasilkan apabila 123 Reversal dan RAVI bersetuju dengan arah. Isyarat panjang dicetuskan apabila kedua-dua penunjuk menunjukkan 1 dan isyarat pendek dicetuskan apabila kedua-dua menunjukkan -1. Pengesahan berganda ini mengelakkan isyarat yang salah dari satu penunjuk.

Analisis Kelebihan

  • Menggabungkan dua penunjuk meningkatkan ketepatan isyarat dan mengelakkan isyarat palsu
  • 123 Pembalikan menggunakan data harga dan RAVI menggunakan data purata bergerak untuk menentukan trend dari pelbagai perspektif
  • Parameter RAVI boleh diselaraskan dan boleh dioptimumkan untuk produk dan persekitaran pasaran yang berbeza
  • Gabungan pembalikan dan trend membolehkan menangkap pembalikan dan trend

Risiko dan Pengoptimuman

  • Gabungan dua penunjuk kadang-kadang boleh membawa kepada isyarat yang bertentangan. parameter penyimpangan harga boleh diperkenalkan untuk mencetuskan isyarat apabila penyimpangan harga antara dua penunjuk berada dalam ambang
  • 123 Pembalikan adalah strategi frekuensi tinggi. Ia harus digabungkan dengan strategi frekuensi rendah yang lain untuk mengurangkan frekuensi perdagangan
  • RAVI adalah baik untuk menangkap trend jangka sederhana hingga panjang.

Kesimpulan

Strategi ini mempertimbangkan faktor pembalikan dan trend. Pengesahan berganda membantu mengelakkan isyarat palsu. Langkah seterusnya boleh memperkenalkan algoritma pembelajaran mesin untuk pengoptimuman parameter adaptif. Atau menggabungkan strategi ini dengan jenis strategi lain untuk mencapai kepelbagaian portfolio sambil mengekalkan keuntungan dan mengurangkan pengeluaran maksimum.


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

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 31/05/2021
// 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
// The indicator represents the relative convergence/divergence of the moving 
// averages of the financial asset, increased a hundred times. It is based on 
// a different principle than the ADX. Chande suggests a 13-week SMA as the 
// basis for the indicator. It represents the quarterly (3 months = 65 working days) 
// sentiments of the market participants concerning prices. The short moving average 
// comprises 10% of the one and is rounded to seven.
//
// 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


RAVI(LengthMAFast, LengthMASlow, TradeLine) =>
    pos = 0.0
    xMAF = sma(close, LengthMAFast)
    xMAS = sma(close, LengthMASlow)
    xRAVI = ((xMAF - xMAS) / xMAS) * 100
    pos:= iff(xRAVI > TradeLine, 1,
    	   iff(xRAVI < TradeLine, -1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal & Range Action Verification Index (RAVI)", shorttitle="Combo", overlay = true)
line1 = input(true, "---- 123 Reversal ----")
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
line2 = input(true, "---- Range Action Verification Index (RAVI) ----")
LengthMAFast = input(title="Length MA Fast", defval=7)
LengthMASlow = input(title="Length MA Slow", defval=65)
TradeLine = input(0.14, step=0.01)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posRAVI = RAVI(LengthMAFast, LengthMASlow, TradeLine)
pos = iff(posReversal123 == 1 and posRAVI == 1 , 1,
	   iff(posReversal123 == -1 and posRAVI == -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