
Strategi ini menggabungkan penggunaan indikator PSAR untuk menentukan trend harga, indikator ADX untuk menentukan kekuatan trend, indikator RSI untuk menentukan kawasan overbought dan oversold dan indikator CMF untuk menentukan aliran dana, untuk membina strategi perdagangan kuantitatif yang menjejaki trend melintasi kitaran. Strategi ini menentukan arah trend baru dengan cepat ketika harga memutuskan untuk melakukan penyelarasan, dan terus mengikuti trend berikutnya, sambil memastikan pengambilalihan trend utama, juga menetapkan syarat penyaringan proses untuk mengurangkan risiko memegang kedudukan.
Peraturan utama dalam dasar ini ialah:
Menggunakan indikator PSAR untuk menentukan sama ada harga berada dalam trend menaik, penetapan harga di bawah PSAR dianggap sebagai berakhirnya trend menaik dan beralih ke penurunan;
RSI memerlukan nilai di atas garis tengah 50, untuk menyaring penembusan palsu yang terbentuk di kawasan oversold;
ADX menuntut lebih tinggi daripada purata EMA sendiri, menunjukkan bahawa terdapat isyarat berterusan dalam analisis trend;
Keperluan CMF lebih besar daripada 0 dianggap sebagai aliran wang;
Sinyal beli dihasilkan apabila empat syarat di atas dipenuhi; Sinyal jual dihasilkan apabila RSI berada di bawah 50, ADX berada di bawah EMA rata-rata dan CMF kurang dari 0.
Strategi ini secara menyeluruh mempertimbangkan arah trend harga, kekuatan trend, keadaan overbought dan oversold, dan aliran dana ke pelbagai dimensi untuk menetapkan peraturan perdagangan, menetapkan penghakiman logik yang ketat untuk menentukan apakah isyarat perdagangan dihasilkan, yang dapat menyaring kes pecah palsu dengan berkesan, dan memastikan penangkapan arah trend yang berkemungkinan tinggi dan mampan.
Strategi ini mempunyai kelebihan utama:
Menggabungkan pelbagai peraturan perdagangan untuk menetapkan petunjuk, ia dapat mencegah penembusan palsu dengan berkesan dan memastikan kualiti isyarat perdagangan;
Mencari dan menjejaki trend baru dengan cepat, untuk mengambil manfaat daripada proses trend;
Proses penyetempatan untuk mengesan keadaan penapisan, mengawal risiko dengan berkesan dan memastikan kesan pengesanan;
Mengambil keputusan mengenai kekuatan trend, anda boleh mengelakkan kesukaran untuk menyusun semula.
Risiko utama strategi ini ialah:
Strategi tunggal mudah untuk menimbun risiko, yang memerlukan penyesuaian kedudukan yang sesuai untuk mengawal risiko keseluruhan;
Ia perlu dipantau dengan teliti untuk memantau perubahan keadaan penapis dan mengelakkan kehilangan pemotongan apabila keadaan dibatalkan.
Strategi ini memfokuskan pada garis tengah dan panjang, dan kandungan jangka pendek terdedah kepada kesan turun naik yang menyebabkan risiko kerugian.
Langkah-langkah pengurusan risiko yang sesuai termasuk: optimum peraturan pengurusan kedudukan, menetapkan garis amaran risiko, jarak jarak berhenti yang sesuai.
Strategi ini mempunyai ruang untuk pengoptimuman:
Pengaturan parameter yang dioptimumkan, yang pada masa ini lebih subjektif, boleh dioptimumkan secara automatik melalui kaedah pembelajaran mesin;
Menambah modul pengurusan kedudukan yang membolehkan anda menyesuaikan kedudukan secara dinamik mengikut keadaan risiko;
Menambah pengoptimuman mekanisme hentian kerugian, seperti hentian penjejakan, hentian masa, dan hentian pemecahan.
Strategi ini mengintegrasikan pelbagai peraturan penilaian indikator, mewujudkan penentuan cepat dan pengesanan berterusan terhadap trend baru, dan mengesahkan keberkesanan analisis multidimensi seperti analisis kuantitatif yang menggabungkan trend dan dana. Strategi ini boleh digunakan secara indeks sebagai strategi asas untuk mengesan trend sepanjang tempoh, atau boleh dibina sebagai strategi kuantitatif jangka panjang yang stabil setelah parameter dan modul dioptimumkan.
/*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)