Strategi kuantitatif berdasarkan PSAR dan EMA

PSAR EMA IGC IRC
Tarikh penciptaan: 2024-05-28 11:00:40 Akhirnya diubah suai: 2024-05-28 11:00:40
Salin: 7 Bilangan klik: 681
1
fokus pada
1617
Pengikut

Strategi kuantitatif berdasarkan PSAR dan EMA

Gambaran keseluruhan

Strategi kuantitatif ini terutamanya menggunakan isyarat silang indikator SAR parasol ((PSAR) dan rata-rata bergerak indeks ((EMA), digabungkan dengan beberapa syarat tersuai, untuk menghasilkan isyarat beli dan jual. Gagasan utama strategi ini adalah: apabila PSAR dari bawah menembusi EMA dan memenuhi syarat-syarat tertentu, ia menghasilkan isyarat beli; apabila PSAR dari atas menembusi EMA dan memenuhi syarat-syarat tertentu, ia menghasilkan isyarat jual.

Prinsip Strategi

  1. Pengiraan PSAR dan 30 kitaran EMA
  2. Menilai hubungan silang antara PSAR dan EMA, dan menetapkan kedudukan tanda yang sesuai
  3. Menggabungkan hubungan kedudukan PSAR dengan EMA, warna garis K dan lain-lain, menentukan IGC (Ideal Green Candle) dan IRC (Ideal Red Candle)
  4. Menerusi kemunculan IGC dan IRC, untuk menilai isyarat beli dan jual
  5. Tetapkan Stop Stop dan Stop Loss, Stop Stop adalah 8%, 16% dan 32% dari harga Beli, Stop Loss adalah 16% dari harga Beli, Stop Loss adalah 8% dari harga Jual dan 16% dari harga Jual
  6. Melakukan operasi beli, jual, atau kosong berdasarkan masa perdagangan dan kedudukan

Kelebihan Strategik

  1. Gabungan pelbagai petunjuk dan syarat meningkatkan kebolehpercayaan isyarat
  2. Pelbagai stop loss dan stop loss untuk mengawal risiko dan keuntungan secara fleksibel
  3. Keadaan pasaran yang berbeza, syarat penapisan untuk membeli dan menjual, meningkatkan fleksibiliti strategi
  4. Kode bermodulasi tinggi, mudah difahami dan diubah suai

Risiko Strategik

  1. Tetapan parameter strategi mungkin tidak sesuai untuk semua keadaan pasaran dan perlu disesuaikan dengan keadaan sebenar
  2. Strategi ini boleh menyebabkan isyarat dagangan yang kerap berlaku dalam pasaran yang bergolak, menyebabkan kos dagangan meningkat.
  3. Strategi ini kurang menilai trend pasaran dan mungkin kehilangan peluang dalam pasaran yang sedang trend kuat
  4. Pengaturan untuk menghentikan kerugian mungkin tidak dapat mengelakkan risiko yang timbul daripada keadaan yang melampau

Arah pengoptimuman strategi

  1. Memperkenalkan lebih banyak petunjuk teknikal atau sentimen pasaran untuk meningkatkan ketepatan dan kebolehpercayaan isyarat
  2. Optimumkan seting stop dan stop loss, pertimbangkan untuk memperkenalkan stop loss yang dinamik atau stop loss berdasarkan kadar turun naik
  3. Menetapkan parameter dan peraturan perdagangan yang berbeza untuk keadaan pasaran yang berbeza, meningkatkan kebolehpasaran strategi
  4. Menambah modul pengurusan wang, menyesuaikan kedudukan dan pendedahan risiko secara dinamik berdasarkan faktor seperti baki nisbah ekuiti akaun

ringkaskan

Strategi kuantitatif ini berdasarkan kepada indikator PSAR dan EMA, menghasilkan isyarat beli dan jual melalui pelbagai syarat dan peraturan yang boleh disesuaikan. Strategi ini mempunyai kebolehan dan fleksibiliti tertentu, tetapi juga menetapkan titik berhenti untuk mengawal risiko. Walau bagaimanapun, terdapat ruang untuk pengoptimuman dalam pengaturan parameter strategi dan kawalan risiko.

Kod sumber strategi
/*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 )