Strategi perdagangan kuantitatif bingkai berbilang masa berdasarkan PSAR, MACD dan RSI


Tarikh penciptaan: 2023-12-27 16:12:57 Akhirnya diubah suai: 2023-12-27 16:12:57
Salin: 0 Bilangan klik: 657
1
fokus pada
1623
Pengikut

Strategi perdagangan kuantitatif bingkai berbilang masa berdasarkan PSAR, MACD dan RSI

Gambaran keseluruhan

Strategi ini menggabungkan tiga indikator yang menggunakan Parabolic SAR, MACD, dan RSI untuk mencapai perdagangan multihead yang automatik dalam pelbagai bingkai masa. Strategi ini digunakan terutamanya untuk perdagangan dalam sehari dalam stok dan jenis komoditi.

Prinsip Strategi

  1. Indeks PSAR digunakan untuk menentukan arah harga dan titik perubahan trend. Apabila jumlah mata turun, ia adalah isyarat multihead, dan apabila jumlah mata meningkat, ia adalah isyarat kosong.

  2. Indeks MACD menilai pergerakan harga. Garis MACD dan Garis SIGNAL melangkaui ke atas sebagai isyarat multihead, ke bawah sebagai isyarat kosong.

  3. Penunjuk RSI menilai fenomena overbought dan oversold. Apabila RSI lebih tinggi daripada nilai terendah, ia adalah isyarat multihead, dan apabila ia lebih rendah daripada nilai terendah, ia adalah isyarat kosong.

  4. Merangkumi tiga indikator di atas untuk membentuk keputusan akhir.

  5. Beradaptasi untuk menyaring keluar pasaran konsolidasi menggunakan Indeks Chop, mengelakkan whipsaws.

  6. Menggunakan prinsip penambahan kedudukan piramid terbalik, pengurusan dinamik risiko dan keuntungan dicapai dengan menetapkan stop loss dan stop loss.

Kelebihan Strategik

  1. Kombinasi pelbagai indikator untuk menilai trend, momentum dan ciri-ciri overbought dan oversold, meningkatkan ketepatan keputusan.

  2. Menyesuaikan diri dengan ciri-ciri pasaran, memfilterkan pasaran yang mengkonsolidasikan dengan Indeks Chop, dan mengelakkan diri daripada terikat.

  3. Pengurusan dinamik risiko dan keuntungan, dengan prinsip penambahan kedudukan piramid terbalik, untuk mencapai hentian kerugian aktif.

  4. Terdapat banyak parameter yang boleh disesuaikan dan dioptimumkan, mudah disesuaikan dengan pelbagai jenis dan keadaan pasaran.

  5. Ia menyokong pelbagai bingkai masa, dan boleh digunakan secara fleksibel untuk dagangan dalam talian pendek dan menengah.

Analisis risiko

  1. Keputusan multihead bergantung pada parameter yang ditetapkan, dan penyetempatan yang tidak tepat boleh menyebabkan kesilapan.

  2. Terdapat kebarangkalian bahawa penunjuk akan menghantar isyarat yang salah, yang boleh membentuk keputusan yang bertentangan dengan trend.

  3. Stop loss yang tidak betul boleh meningkatkan kerugian atau mengurangkan keuntungan.

  4. Ia memerlukan pemantauan dan penyesuaian parameter yang kerap dan kos intervensi manusia yang tinggi.

Arah pengoptimuman

  1. Menambah modul kelayakan model, menilai parameter dan kebolehgunaan isyarat.

  2. Menambah modul pembelajaran mesin untuk mengoptimumkan parameter dan model secara automatik.

  3. Akses kepada lebih banyak sumber data, lebih banyak ruang ciri, dan lebih banyak keputusan.

  4. Membangunkan sistem pemantauan dan penyelenggaraan automatik untuk mengurangkan kos intervensi manusia.

  5. Meningkatkan penilaian tindak balas dan simulasi, dan keberkesanan strategi pemeriksaan.

ringkaskan

Strategi ini mewujudkan perdagangan kuantitatif automatik berdasarkan peraturan dengan menggunakan gabungan pelbagai petunjuk teknikal. Strategi ini mempunyai ruang pengoptimuman yang besar, dapat diperluas, sesuai untuk pengoptimuman seperti penyesuaian parameter, pengembangan fungsi, dan pembelajaran mesin, dan akan lebih baik untuk perdagangan dalam talian.

Kod sumber strategi
/*backtest
start: 2022-12-20 00:00:00
end: 2023-12-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © vikris

//@version=4
strategy("[VJ]Phoenix Force of PSAR +MACD +RSI", overlay=true, calc_on_every_tick = false,pyramiding=0)

// ********** Strategy inputs - Start **********

// Used for intraday handling
// Session value should be from market start to the time you want to square-off 
// your intraday strategy
// Important: The end time should be at least 2 minutes before the intraday
// square-off time set by your broker
var i_marketSession = input(title="Market session", type=input.session, 
     defval="0915-1455", confirm=true)

// Make inputs that set the take profit % (optional)
longProfitPerc = input(title="Long Take Profit (%)",
     type=input.float, minval=0.0, step=0.1, defval=3) * 0.01

shortProfitPerc = input(title="Short Take Profit (%)",
     type=input.float, minval=0.0, step=0.1, defval=3) * 0.01
     
// Set stop loss level with input options (optional)
longLossPerc = input(title="Long Stop Loss (%)",
     type=input.float, minval=0.0, step=0.1, defval=3) * 0.01

shortLossPerc = input(title="Short Stop Loss (%)",
     type=input.float, minval=0.0, step=0.1, defval=3) * 0.01    


// ********** Strategy inputs - End **********


// ********** Supporting functions - Start **********

// A function to check whether the bar or period is in intraday session
barInSession(sess) => time(timeframe.period, sess) != 0



// Figure out take profit price
longExitPrice  = strategy.position_avg_price * (1 + longProfitPerc)
shortExitPrice = strategy.position_avg_price * (1 - shortProfitPerc)

// Determine stop loss price
longStopPrice  = strategy.position_avg_price * (1 - longLossPerc)
shortStopPrice = strategy.position_avg_price * (1 + shortLossPerc)


// ********** Supporting functions - End **********


// ********** Strategy - Start **********
// See if intraday session is active
bool intradaySession = barInSession(i_marketSession)

// Trade only if intraday session is active

//=================Strategy logic goes in here===========================
 
psar = sar(0.02,0.02,0.2)
c1a = close > psar
c1v = close < psar

malen = input(50, title="MA Length")
mm200 = sma(close, malen)
c2a = close > mm200
c2v = close < mm200

fast = input(12, title="MACD Fast EMA Length")
slow = input(26, title="MACD Slow EMA Length")
[macd,signal,hist] = macd(close, fast,slow, 9)
c3a = macd >= 0
c3v = macd <= 0

rsilen = input(7, title="RSI Length")
th = input(50, title="RSI Threshold")
rsi14 = rsi(close, rsilen)
c4a = rsi14 >= th
c4v = rsi14 <= th

chopi = input(7, title="Chop Index lenght")
ci = 100 * log10(sum(atr(1), chopi) / (highest(chopi) - lowest(chopi))) / log10(chopi)

buy = c1a and c2a and c3a and c4a ? 1 : 0
sell = c1v and c2v and c3v and c4v ? -1 : 0


//Final Long/Short Condition
longCondition = buy==1 and ci <50
shortCondition = sell==-1 and ci <50 
 
//Long Strategy - buy condition and exits with Take profit and SL
if (longCondition and intradaySession)
    stop_level = longStopPrice
    profit_level = longExitPrice
    strategy.entry("My Long Entry Id", strategy.long)
    strategy.exit("TP/SL", "My Long Entry Id", stop=stop_level, limit=profit_level)


//Short Strategy - sell condition and exits with Take profit and SL
if (shortCondition and intradaySession)
    stop_level = shortStopPrice
    profit_level = shortExitPrice
    strategy.entry("My Short Entry Id", strategy.short)
    strategy.exit("TP/SL", "My Short Entry Id", stop=stop_level, limit=profit_level)
 
 
// Square-off position (when session is over and position is open)
squareOff = (not intradaySession) and (strategy.position_size != 0)
strategy.close_all(when = squareOff, comment = "Square-off")

// ********** Strategy - End **********