
Strategi ini menggabungkan penggunaan indikator PSAR untuk menentukan tren harga, indikator ADX untuk menentukan kekuatan tren, indikator RSI untuk menentukan area overbought dan oversold, dan indikator CMF untuk menentukan aliran dana, untuk membangun strategi perdagangan kuantitatif yang melacak tren lintas siklus. Strategi ini menentukan posisi cepat ketika harga terputus untuk membentuk arah tren baru, dan terus melacak tren berikutnya, sekaligus mengatur kondisi proses penyaringan untuk mengurangi risiko memegang posisi, sambil memastikan pengambilalihan tren utama.
Aturan penilaian utama dalam kebijakan ini adalah sebagai berikut:
Menggunakan indikator PSAR untuk menentukan apakah harga sedang dalam tren naik, penetasan PSAR dianggap sebagai akhir dari tren naik dan bergeser ke penurunan;
RSI membutuhkan nilai di atas garis tengah 50, untuk memfilter terobosan palsu yang terbentuk di zona oversold.
ADX meminta lebih tinggi dari rata-rata EMA-nya sendiri, yang menunjukkan adanya sinyal yang terus berlanjut dari hasil analisis tren;
CMF lebih besar dari 0 dan dianggap sebagai aliran dana;
Sinyal beli muncul ketika empat kondisi di atas terpenuhi; Sinyal jual muncul ketika RSI berada di bawah 50, ADX berada di bawah rata-rata EMA sendiri dan CMF kurang dari 0.
Strategi ini secara komprehensif mempertimbangkan arah tren harga, intensitas tren, status overbought dan oversold, dan aliran dana ke beberapa dimensi untuk mengatur aturan perdagangan, menetapkan penilaian logis yang ketat dalam menentukan apakah sinyal perdagangan dihasilkan, dan secara efektif memfilter kemungkinan terobosan, untuk memastikan bahwa arah tren ditangkap dengan probabilitas tinggi dan berkelanjutan.
Strategi ini memiliki keuntungan utama sebagai berikut:
Kombinasi berbagai aturan pengaturan indikator perdagangan, dapat secara efektif mencegah penembusan palsu, memastikan kualitas sinyal perdagangan;
Mengidentifikasi dan melacak tren yang muncul dengan cepat, sehingga Anda dapat sepenuhnya memanfaatkan proses tren;
Proses pengaturan melacak kondisi penyaringan, yang dapat secara efektif mengendalikan risiko dan memastikan efek pelacakan;
Pengertian indikator intensitas tren dapat mencegah terjadinya kebuntuan.
Strategi ini memiliki risiko utama sebagai berikut:
Strategi tunggal mudah untuk menimbun risiko, yang memerlukan penyesuaian posisi yang tepat untuk mengendalikan risiko keseluruhan;
Perhatikan perubahan kondisi penyaringan dalam proses pelacakan untuk menghindari terjadinya Loss Cut setelah kondisi dibatalkan.
Strategi ini didasarkan pada garis tengah dan panjang, dan konten jangka pendek rentan terhadap dampak fluktuasi yang menimbulkan risiko stop loss.
Langkah-langkah manajemen risiko yang sesuai meliputi: optimalisasi aturan manajemen posisi, pengaturan garis peringatan risiko, jarak jarak penghentian yang tepat, dll.
Strategi ini memiliki ruang optimasi sebagai berikut:
Pengaturan parameter yang dioptimalkan, saat ini parameter yang lebih subjektif, dapat diperkenalkan metode pembelajaran mesin untuk mengoptimalkan secara otomatis;
Menambahkan modul manajemen posisi, yang memungkinkan untuk menyesuaikan posisi secara dinamis sesuai dengan situasi risiko;
Optimalisasi mekanisme stop loss, seperti tracking stop loss, time stop loss, dan breakout stop loss.
Strategi ini mengintegrasikan berbagai aturan penilaian indikator, memungkinkan identifikasi cepat dan pelacakan terus menerus terhadap tren baru, dan memvalidasi efektivitas analisis multi-dimensi seperti analisis kuantitatif perdagangan yang menggabungkan tren dan dana. Strategi ini dapat digunakan secara indeks sebagai strategi dasar untuk melacak tren lintas-siklus, atau dapat dibangun menjadi strategi kuantitatif jangka menengah yang stabil setelah optimasi parameter dan modul.
/*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)