Sumber daya yang dimuat... Pemuatan...

Strategi Perdagangan Kuantitatif berbasis PSAR dan EMA

Penulis:ChaoZhang, Tanggal: 2024-05-28 11:00:40
Tag:PSAREMAKIPIRC

img

Gambaran umum

Strategi perdagangan kuantitatif ini terutama memanfaatkan sinyal crossover dari indikator Parabolic SAR (PSAR) dan Exponential Moving Average (EMA), dikombinasikan dengan beberapa kondisi kustom untuk menghasilkan sinyal beli dan jual. Ide utama di balik strategi ini adalah: ketika PSAR melanggar di atas EMA dari bawah dan memenuhi kondisi tertentu, sinyal beli dihasilkan; ketika PSAR jatuh di bawah EMA dari atas dan memenuhi kondisi tertentu, sinyal jual dihasilkan. Selain itu, strategi menetapkan tingkat take-profit dan stop-loss untuk mengelola risiko.

Prinsip Strategi

  1. Menghitung indikator PSAR dan indikator EMA 30 periode
  2. Menentukan hubungan silang antara PSAR dan EMA, dan menetapkan flag yang sesuai
  3. Mendefinisikan IGC (Ideal Green Candle) dan IRC (Ideal Red Candle) berdasarkan posisi relatif PSAR dan EMA, serta warna lilin
  4. Membuat sinyal beli dan jual berdasarkan kejadian IGC dan IRC
  5. Menetapkan tingkat take profit sebesar 8%, 16% dan 32% di atas harga beli, dan tingkat stop loss sebesar 16% di bawah harga beli; menetapkan tingkat take profit sebesar 8%, 16%, dan 32% di bawah harga jual, dan tingkat stop loss sebesar 16% di atas harga jual
  6. Melakukan pembelian, penjualan, atau menutup posisi berdasarkan sesi perdagangan dan status posisi

Keuntungan Strategi

  1. Menggabungkan beberapa indikator dan kondisi untuk meningkatkan keandalan sinyal
  2. Menetapkan beberapa tingkat mengambil keuntungan dan stop-loss untuk manajemen risiko dan pengembalian yang fleksibel
  3. Menetapkan filter untuk kondisi pembelian dan penjualan berdasarkan situasi pasar yang berbeda, meningkatkan kemampuan adaptasi strategi
  4. Kode yang sangat modular, membuatnya mudah dipahami dan dimodifikasi

Risiko Strategi

  1. Pengaturan parameter strategi mungkin tidak cocok untuk semua lingkungan pasar dan perlu disesuaikan berdasarkan kondisi aktual
  2. Dalam pasar yang bergolak, strategi dapat menghasilkan sinyal perdagangan yang sering, yang menyebabkan peningkatan biaya perdagangan
  3. Strategi ini tidak memiliki penilaian terhadap tren pasar dan mungkin kehilangan peluang di pasar yang tren kuat
  4. Pengaturan stop loss mungkin tidak sepenuhnya menghindari risiko yang disebabkan oleh kondisi pasar yang ekstrem

Arah Optimasi Strategi

  1. Memperkenalkan lebih banyak indikator teknis atau indikator sentimen pasar untuk meningkatkan akurasi dan keandalan sinyal
  2. Mengoptimalkan pengaturan tingkat take profit dan stop-loss, mempertimbangkan implementasi take profit/stop-loss dinamis atau take profit/stop-loss berbasis volatilitas
  3. Menetapkan parameter dan aturan perdagangan yang berbeda untuk negara pasar yang berbeda untuk meningkatkan kemampuan adaptasi strategi
  4. Memasukkan modul pengelolaan uang untuk menyesuaikan posisi dan eksposur risiko secara dinamis berdasarkan faktor-faktor seperti rasio ekuitas akun dan saldo

Ringkasan

Strategi perdagangan kuantitatif ini didasarkan pada indikator PSAR dan EMA, menghasilkan sinyal beli dan jual melalui beberapa kondisi dan aturan kustom. Strategi ini memiliki tingkat kelayakan dan fleksibilitas tertentu sambil juga menetapkan tingkat mengambil keuntungan dan stop-loss untuk mengelola risiko. Namun, masih ada ruang untuk optimasi dalam hal pengaturan parameter dan pengendalian risiko. Secara keseluruhan, strategi ini dapat berfungsi sebagai templat dasar, dan dengan optimasi dan perbaikan lebih lanjut, ia memiliki potensi untuk menjadi strategi perdagangan yang kuat.


/*backtest
start: 2024-04-01 00:00:00
end: 2024-04-30 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/

// This Pine Scriptâ„¢ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © SwapnilRaykar

//@version=5
strategy("aj sir second project", overlay=true, margin_long=100, margin_short=100)

start=input("0915-1515","session time")
st11=time(timeframe.period,start)
st=st11>0
et= not st 

psar=ta.sar(0.02,0.02,0.2)
emared=ta.ema(close,30)
//plot(psar,"psar",color.yellow,style = plot.style_cross)
//plot(emared,"emared",color.red)
var crodownflag=0
var croupflag=0

var igcflag=0

var ircflag=0

cdown1=ta.crossunder(psar,emared)  and not (psar<close and psar[1]>close[1])
cup1=ta.crossover(psar,emared) and not (psar>close and psar[1]<close[1])

cdown=ta.crossunder(psar,emared) 
cup=ta.crossover(psar,emared)


green_candle=close>open
red_candle=close<open

if ta.crossunder(psar,emared) and crodownflag==0  and not (psar<close and psar[1]>close[1])
    crodownflag:=1
else if cdown and crodownflag==1
    crodownflag:=0



if crodownflag==1 and green_candle and igcflag==0
    igcflag:=1
else if cdown and igcflag==1
    igcflag:=0

//plot(igcflag,"igcflag",color.lime)

if ta.crossover(psar,emared) and croupflag==0 and not (psar>close and psar[1]<close[1])
    croupflag:=1
else if cdown and croupflag==1
    croupflag:=0

//plot(crodownflag,"crodownflag",color.white)
irc_cond=croupflag==1 or cup

if (croupflag==1 and red_candle and ircflag==0)
    ircflag:=1
else if cup and croupflag==1
    ircflag:=0

igc_candle1=(igcflag==1 and igcflag[1]==0) or (cdown1 and green_candle)
irc_candle1=(ircflag==1 and ircflag[1]==0) or (cup1 and red_candle)
///////////////////////////
dm=dayofmonth(time)
newday=dm!=dm[1]
dmc=dm==ta.valuewhen(bar_index==last_bar_index,dm,0)

///////////////////////////////////////////
var irc_there=0

if irc_candle1[1] and irc_there==0
    irc_there:=1
else if cdown and irc_there==1
    irc_there:=0

irc_candle=irc_candle1 and irc_there==0// and dmc

var igc_there=0

if igc_candle1[1] and igc_there==0
    igc_there:=1
else if cup and igc_there ==1
    igc_there:=0

igc_candle=igc_candle1 and igc_there==0// and dmc
/////////// to get rid of irc being valid even after crossdown
var valid_igc_low=0
var valid_irc_high=0

if irc_candle[1] and valid_irc_high==0
    valid_irc_high:=1
else if igc_candle and valid_irc_high==1
    valid_irc_high:=0

if igc_candle and valid_igc_low==0
    valid_igc_low:=1
else if irc_candle and valid_igc_low==1
    valid_igc_low:=0


igc_low=ta.valuewhen(igc_candle,low,0)
irc_high=ta.valuewhen(irc_candle,high,0)
//////////////////////////////
//plot(irc_high,"irc_high",color.red)

//plot(valid_irc_high,"valid_irc_high",color.purple)

buy12=ta.crossunder(close,igc_low) and valid_igc_low==1
buy1=buy12[1]

short12=ta.crossover(close,irc_high) and valid_irc_high==1
short1=short12[1]
//plotshape(short12,"short12",shape.arrowdown,color=color.purple)

// plotshape(igc_candle,"igc_candle",shape.arrowdown,color=color.green)
// plotshape(irc_candle,"irc_candle",shape.arrowdown,color=color.red)
//plotshape((psar<close and psar[1]>close[1]) ,"croup",shape.arrowdown,color=color.red)
//plotshape(cup ,"croup",shape.arrowdown,color=color.orange)

buyprice=ta.valuewhen(buy1 and strategy.position_size[1]==0,open,0)
shortprice=ta.valuewhen(short1 and strategy.position_size[1]==0,open,0)

btarget1=buyprice+(buyprice*0.08)
btarget2=buyprice+(buyprice*0.16)
btarget3=buyprice+(buyprice*0.32)
bstoploss=buyprice-(buyprice*0.16)

starget1=shortprice-(shortprice*0.08)
starget2=shortprice-(shortprice*0.16)
starget3=shortprice-(shortprice*0.32)
sstoploss=shortprice+(shortprice*0.16)

if buy12 and strategy.position_size==0 and st11
    strategy.entry("buy",strategy.long)

if strategy.position_size >0
    strategy.exit("sell",from_entry = "buy",stop=bstoploss,limit=btarget3)

if short12 and strategy.position_size==0 and st11
    strategy.entry("short",strategy.short)

if strategy.position_size<0
    strategy.exit("cover",from_entry = "short",stop = sstoploss,limit = starget3)

if et
    strategy.close_all(comment = "timeover")

plot(strategy.position_size>0?buyprice:na,"buyprice",color.white, style=plot.style_circles )
plot(strategy.position_size>0?bstoploss:na,"bstoploss",color.red, style=plot.style_circles )
plot(strategy.position_size>0?btarget1:na,"btarget1",color.green, style=plot.style_circles )
plot(strategy.position_size>0?btarget2:na,"btarget2",color.green, style=plot.style_circles )
plot(strategy.position_size>0?btarget3:na,"btarget3",color.green, style=plot.style_circles )

plot(strategy.position_size<0?shortprice:na,"shortprice",color.white, style=plot.style_circles )
plot(strategy.position_size<0?sstoploss:na,"sstoploss",color.red, style=plot.style_circles )
plot(strategy.position_size<0?starget1:na,"starget1",color.green, style=plot.style_circles )
plot(strategy.position_size<0?starget2:na,"starget2",color.green, style=plot.style_circles )
plot(strategy.position_size<0?starget3:na,"starget3",color.green, style=plot.style_circles )


Berkaitan

Lebih banyak