Tren intraday mengikuti strategi kuantitatif berdasarkan penyaringan kondisi multi-indikator

Penulis:ChaoZhang, Tanggal: 2023-12-15
Tag:

img

Gambaran umum

Strategi ini menggabungkan PSAR untuk menilai tren harga, ADX untuk menilai kekuatan tren, RSI untuk menemukan zona overbought dan oversold, dan CMF untuk menilai arus dana untuk membangun strategi perdagangan kuantitatif intraday yang mengikuti tren di seluruh siklus. Ini dapat dengan cepat menemukan arah tren baru ketika harga keluar dari konsolidasi dan membentuk tren baru, dan terus melacak tren setelahnya.

Prinsip-prinsip

Aturan utama penilaian strategi ini adalah:

  1. Gunakan indikator PSAR untuk menilai apakah harga berada dalam tren naik. penurunan PSAR di bawah harga menunjukkan akhir tren naik dan awal tren turun.

  2. Memerlukan RSI untuk berada di atas titik tengah 50 untuk menyaring breakout palsu yang terjadi di zona oversold.

  3. Memerlukan ADX berada di atas garis EMA, menunjukkan sinyal yang berkelanjutan dalam analisis tren.

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

Sinyal beli dihasilkan ketika semua empat kondisi di atas terpenuhi. Kondisi jual terjadi ketika PSAR naik di atas harga, RSI turun di bawah 50, ADX turun di bawah EMA dan CMF menjadi kurang dari 0.

Strategi ini secara komprehensif mempertimbangkan arah tren harga, kekuatan tren, keadaan overbought/oversold dan arus dana saat menetapkan aturan perdagangan. Dengan menetapkan aturan logis yang ketat saat menghasilkan sinyal perdagangan, pecah palsu dapat secara efektif disaring dan arah tren yang berkelanjutan dengan probabilitas tinggi dapat ditangkap.

Keuntungan

Keuntungan utama dari strategi ini meliputi:

  1. Menggabungkan beberapa indikator dalam menetapkan aturan perdagangan dapat secara efektif mencegah pecah palsu dan memastikan kualitas sinyal.

  2. Dengan cepat menemukan arah tren yang sedang berkembang dan melacak memungkinkan untuk menangkap sebagian besar keuntungan tren.

  3. Menetapkan kondisi penyaringan proses dapat secara efektif mengendalikan risiko dan memastikan efektivitas pelacakan.

  4. Mempertimbangkan kekuatan tren membantu menghindari kemacetan jangkauan perdagangan.

Analisis Risiko

Risiko utama dari strategi ini meliputi:

  1. Akumulasi strategi tunggal menimbulkan risiko portofolio, yang membutuhkan ukuran posisi yang tepat.

  2. Perhatikan perubahan kondisi penyaringan selama pelacakan untuk menghindari kerugian saat dibatalkan.

  3. Strategi jangka menengah/panjang ini dapat terganggu jangka pendek oleh fluktuasi dan menimbulkan risiko stop loss.

Langkah-langkah manajemen risiko yang sesuai meliputi: mengoptimalkan aturan ukuran posisi, menetapkan garis peringatan risiko dan memperluas jarak berhenti dll.

Arahan Optimasi

Ruang pengoptimalan meliputi:

  1. Optimasi parameter melalui pembelajaran mesin mengingat pengaturan subjektif saat ini.

  2. Tambahkan modul pengukuran posisi yang secara dinamis mengukuran berdasarkan risiko.

  3. Meningkatkan mekanisme berhenti, misalnya, berhenti di belakang, berhenti waktu atau berhenti keluar.

Kesimpulan

Strategi ini menggabungkan indikator terbukti efektif dalam dengan cepat menemukan dan melacak tren baru, memvalidasi perdagangan kuantitatif berdasarkan beberapa dimensi seperti tren dan dana. Sebagai dasar, dapat diindeks di seluruh siklus. Dengan penyesuaian parameter dan peningkatan modular, juga dapat 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 banyak