Sumber dimuat naik... memuat...

Strategi Perdagangan Kuantitatif berasaskan PSAR dan EMA

Penulis:ChaoZhang, Tarikh: 2024-05-28 11:00:40
Tag:PSAREMAKPMIRC

img

Ringkasan

Strategi perdagangan kuantitatif ini terutamanya menggunakan isyarat silang indikator SAR Parabolik (PSAR) dan Purata Bergerak Eksponen (EMA), digabungkan dengan pelbagai syarat tersuai untuk menjana isyarat beli dan jual. Idea utama di sebalik strategi adalah: apabila PSAR memecahkan di atas EMA dari bawah dan memenuhi syarat tertentu, isyarat beli dihasilkan; apabila PSAR jatuh di bawah EMA dari atas dan memenuhi syarat tertentu, isyarat jual dihasilkan. Di samping itu, strategi menetapkan tahap mengambil keuntungan dan stop-loss untuk menguruskan risiko.

Prinsip Strategi

  1. Mengira penunjuk PSAR dan EMA 30 tempoh
  2. Menentukan hubungan silang antara PSAR dan EMA, dan menetapkan bendera yang sepadan
  3. Menentukan IGC (Ideal Green Candle) dan IRC (Ideal Red Candle) berdasarkan kedudukan relatif PSAR dan EMA, serta warna lilin
  4. Menghasilkan isyarat beli dan jual berdasarkan kejadian IGC dan IRC
  5. Tetapkan tahap mengambil keuntungan pada 8%, 16%, dan 32% di atas harga beli, dan tahap berhenti kerugian pada 16% di bawah harga beli; menetapkan tahap mengambil keuntungan pada 8%, 16%, dan 32% di bawah harga jual, dan tahap berhenti kerugian pada 16% di atas harga jual
  6. Melakukan pembelian, menjual, atau menutup kedudukan berdasarkan sesi dagangan dan status kedudukan

Kelebihan Strategi

  1. Menggabungkan pelbagai penunjuk dan keadaan untuk meningkatkan kebolehpercayaan isyarat
  2. Menetapkan pelbagai tahap mengambil keuntungan dan berhenti kerugian untuk pengurusan risiko dan pulangan yang fleksibel
  3. Menetapkan penapis untuk membeli dan menjual keadaan berdasarkan situasi pasaran yang berbeza, meningkatkan kebolehsesuaian strategi
  4. Kod yang sangat modular, menjadikannya mudah difahami dan diubah suai

Risiko Strategi

  1. Tetapan parameter strategi mungkin tidak sesuai untuk semua persekitaran pasaran dan perlu diselaraskan berdasarkan keadaan sebenar
  2. Dalam pasaran yang bergelombang, strategi ini boleh menghasilkan isyarat perdagangan yang kerap, yang membawa kepada peningkatan kos perdagangan
  3. Strategi ini tidak mempunyai penilaian mengenai trend pasaran dan mungkin kehilangan peluang di pasaran yang kuat
  4. Tetapan stop-loss mungkin tidak sepenuhnya mengelakkan risiko yang disebabkan oleh keadaan pasaran yang melampau

Arahan Pengoptimuman Strategi

  1. Memperkenalkan lebih banyak petunjuk teknikal atau petunjuk sentimen pasaran untuk meningkatkan ketepatan dan kebolehpercayaan isyarat
  2. Mengoptimumkan tetapan tahap mengambil keuntungan dan menghentikan kerugian, mempertimbangkan pelaksanaan mengambil keuntungan dinamik/berhenti kerugian atau mengambil keuntungan berasaskan turun naik/berhenti kerugian
  3. Menetapkan parameter perdagangan dan peraturan yang berbeza untuk keadaan pasaran yang berbeza untuk meningkatkan kebolehsesuaian strategi
  4. Memasukkan modul pengurusan wang untuk menyesuaikan kedudukan dan pendedahan risiko secara dinamik berdasarkan faktor seperti nisbah ekuiti akaun dan baki

Ringkasan

Strategi perdagangan kuantitatif ini berdasarkan kepada penunjuk PSAR dan EMA, menghasilkan isyarat beli dan jual melalui pelbagai syarat dan peraturan tersuai. Strategi ini mempunyai tahap penyesuaian dan fleksibiliti tertentu sambil juga menetapkan tahap mengambil keuntungan dan stop-loss untuk menguruskan risiko. Walau bagaimanapun, masih ada ruang untuk pengoptimuman dari segi tetapan parameter dan kawalan risiko. Secara keseluruhan, strategi ini boleh berfungsi sebagai templat asas, dan dengan pengoptimuman dan penambahbaikan lanjut, ia berpotensi menjadi strategi perdagangan yang kukuh.


/*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 lanjut