Trend intraday mengikut strategi kuantitatif berdasarkan penapisan keadaan pelbagai penunjuk

Penulis:ChaoZhang, Tarikh: 2023-12-15 15:59:37
Tag:

img

Ringkasan

Strategi ini menggabungkan PSAR untuk menilai trend harga, ADX untuk menilai kekuatan trend, RSI untuk mencari zon overbought dan oversold, dan CMF untuk menilai aliran dana untuk membina strategi perdagangan kuantitatif trend intraday yang mengikuti sepanjang kitaran. Ia dapat dengan cepat mencari arah trend baru apabila harga keluar dari penyatuan dan membentuk trend baru, dan terus mengesan trend selepas itu.

Prinsip-prinsip

Peraturan utama strategi ini ialah:

  1. Gunakan penunjuk PSAR untuk menilai sama ada harga berada dalam trend menaik.

  2. Memerlukan RSI berada di atas titik tengah 50 untuk menapis pecah palsu yang berlaku di zon oversold.

  3. Memerlukan ADX berada di atas garis EMA, yang menunjukkan isyarat yang mampan dalam analisis trend.

  4. Memerlukan CMF lebih besar daripada 0, menilai peningkatan dana yang mengalir.

Isyarat beli dihasilkan apabila semua empat syarat di atas dipenuhi. Syarat jual berlaku apabila PSAR meningkat di atas harga, RSI jatuh di bawah 50, ADX jatuh di bawah EMA dan CMF menjadi kurang daripada 0.

Strategi ini secara komprehensif mempertimbangkan arah trend harga, kekuatan trend, keadaan overbought / oversold dan aliran dana semasa menubuhkan peraturan dagangan. Dengan menetapkan peraturan logik yang ketat semasa menghasilkan isyarat dagangan, pecah palsu dapat disaring dengan berkesan dan arah trend yang mampan yang berkemungkinan tinggi dapat ditangkap.

Kelebihan

Kelebihan utama strategi ini termasuk:

  1. Menggabungkan beberapa penunjuk dalam menetapkan peraturan dagangan dapat dengan berkesan mencegah pecah palsu dan memastikan kualiti isyarat.

  2. Mengesan arah trend yang sedang berkembang dengan cepat dan mengesan membolehkan menangkap kebanyakan keuntungan trend.

  3. Menetapkan keadaan penapisan proses dapat mengawal risiko dengan berkesan dan memastikan keberkesanan penjejakan.

  4. Mempertimbangkan kekuatan trend membantu mengelakkan kesesakan julat perdagangan.

Analisis Risiko

Risiko utama strategi ini termasuk:

  1. Pengumpulan strategi tunggal menimbulkan risiko portfolio, yang memerlukan saiz kedudukan yang sesuai.

  2. Memantau dengan teliti perubahan keadaan penapisan semasa pengesanan untuk mengelakkan kehilangan apabila dibatalkan.

  3. Strategi jangka menengah / jangka panjang ini boleh terganggu jangka pendek oleh turun naik dan menimbulkan risiko stop loss.

Langkah pengurusan risiko yang sepadan termasuk: mengoptimumkan peraturan saiz kedudukan, menetapkan garis amaran risiko dan memperluaskan jarak berhenti dll.

Arahan pengoptimuman

Ruang pengoptimuman termasuk:

  1. Pengoptimuman parameter melalui pembelajaran mesin yang diberikan tetapan subjektif semasa.

  2. Tambah modul pengukuran kedudukan yang secara dinamik mengukuran berdasarkan risiko.

  3. Mempertingkatkan mekanisme hentian, contohnya hentian berturut-turut, hentian masa atau hentian pecah.

Kesimpulan

Strategi yang menggabungkan penunjuk ini terbukti berkesan dalam mencari dan mengesan trend yang baru lahir dengan cepat, mengesahkan perdagangan kuantitatif berdasarkan pelbagai dimensi seperti trend dan dana. Sebagai asas, ia boleh diindeks merentasi kitaran. Dengan penyesuaian parameter dan peningkatan modular, ia juga boleh menjadi strategi jangka menengah / panjang yang stabil.


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

//@version=4
strategy("psar+ adx + cmf + rsi Strategy", overlay=true,initial_capital = 1000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent , commission_value=0.1 )

start = input(1.02)
increment = input(1.02)
maximum = input(1.2)
var bool uptrend = na
var float EP = na
var float SAR = na
var float AF = start
var float nextBarSAR = na
if bar_index > 0
	firstTrendBar = false
	SAR := nextBarSAR
	if bar_index == 1
		float prevSAR = na
		float prevEP = na
		lowPrev = low[1]
		highPrev = high[1]
		closeCur = close
		closePrev = close[1]
		if closeCur > closePrev
			uptrend := true
			EP := high
			prevSAR := lowPrev
			prevEP := high
		else
			uptrend := false
			EP := low
			prevSAR := highPrev
			prevEP := low
		firstTrendBar := true
		SAR := prevSAR + start * (prevEP - prevSAR)
	if uptrend
		if SAR > low
			firstTrendBar := true
			uptrend := false
			SAR := max(EP, high)
			EP := low
			AF := start
	else
		if SAR < high
			firstTrendBar := true
			uptrend := true
			SAR := min(EP, low)
			EP := high
			AF := start
	if not firstTrendBar
		if uptrend
			if high > EP
				EP := high
				AF := min(AF + increment, maximum)
		else
			if low < EP
				EP := low
				AF := min(AF + increment, maximum)
	if uptrend
		SAR := min(SAR, low[1])
		if bar_index > 1
			SAR := min(SAR, low[2])
	else
		SAR := max(SAR, high[1])
		if bar_index > 1
			SAR := max(SAR, high[2])
	nextBarSAR := SAR + AF * (EP - SAR)

//rsi strat
length = input( 50 )
middle_RSI=input(49)
price = close
vrsi = rsi(price, length)

//cmf
lengthCMF = input(20, minval=1)
ad = close==high and close==low or high==low ? 0 : ((2*close-low-high)/(high-low))*volume
mf = sum(ad, lengthCMF) / sum(volume, lengthCMF)

//ADX
adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
dirmov(len) =>
	up = change(high)
	down = -change(low)
	plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
	minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
	truerange = rma(tr, len)
	plus = fixnan(100 * rma(plusDM, len) / truerange)
	minus = fixnan(100 * rma(minusDM, len) / truerange)
	[plus, minus]
adx(dilen, adxlen) =>
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
sig = adx(dilen, adxlen)
ema_length=input(10)
ema_sig= ema(sig,ema_length)


long = not uptrend  and vrsi > middle_RSI and sig > ema_sig   and mf>0 
short= uptrend   and vrsi < middle_RSI and sig<ema_sig and mf<0

strategy.entry("long",1,when=long)
strategy.close('long',when=short)

Lebih lanjut