BB21_SMA200 Trend Mengikut Strategi

Penulis:ChaoZhang, Tarikh: 2023-11-16 11:04:42
Tag:

img


Ringkasan

Strategi ini menggabungkan Bollinger Bands dan Moving Average untuk merancang trend mengikuti sistem perdagangan. Ia pergi lama apabila harga menembusi jalur atas Bollinger Bands dan jalur bawah berada di atas SMA200, menutup kedudukan separa apabila harga menembusi jalur bawah, dan keluar semua apabila harga melintasi di bawah SMA200. Strategi ini mengikuti trend dan memotong kerugian dalam masa apabila trend berubah.

Logika Strategi

  1. Mengira SMA200 sebagai purata bergerak eksponen untuk menentukan trend utama
  2. Mengira Bollinger Bands, termasuk band atas, band tengah dan band bawah, dan mengisi warna sebagai julat keuntungan
  3. Apabila kedua-dua jalur atas dan bawah berada di atas SMA200, ia menunjukkan aliran menaik
  4. Apabila harga memecahkan jalur tengah Bollinger Bands ke atas, pergi panjang
  5. Apabila harga memecahkan jalur bawah ke bawah, tutup kedudukan separa
  6. Apabila harga melintasi di bawah SMA200, ia menunjukkan pembalikan trend utama, tutup semua kedudukan
  7. Tetapkan titik stop loss untuk mengelakkan kerugian berlebihan
  8. Mengira saiz dagangan berdasarkan modal akaun dan risiko yang boleh diterima

Premis strategi ini untuk mengenal pasti trend adalah bahawa Bollinger Bands harus sepenuhnya di atas SMA200, hanya berjalan lama apabila trend menaik jelas muncul.

Analisis Kelebihan

  1. Gunakan Bollinger Bands dan bukannya satu penunjuk untuk mengenal pasti trend yang jelas
  2. SMA200 menentukan arah trend utama, mengelakkan dagangan yang tidak perlu di pasaran terikat julat
  3. Stop loss separa untuk mengikuti trend run
  4. Stop loss tepat pada masa pada titik utama untuk meminimumkan kerugian
  5. Mengira saiz dagangan memperkenalkan pengurusan risiko untuk mengelakkan kerugian berlebihan pada satu dagangan

Analisis Risiko

  1. Isyarat pecah yang dihasilkan dari Bollinger Bands mungkin mempunyai isyarat palsu yang agak tinggi
  2. Titik-titik stop loss separa perlu dioptimumkan untuk mengelakkan stop loss awal
  3. Jika titik stop loss terlalu ketat, stop loss mungkin dicetuskan terlalu kerap
  4. Tempoh SMA perlu diuji dan dioptimumkan untuk mengimbangi kelewatan dan kepekaan
  5. Kaedah pengiraan saiz dagangan mungkin memerlukan pengoptimuman untuk mengelakkan saiz yang berlebihan pada dagangan tunggal

Risiko ini boleh dikurangkan dengan menguji dengan teliti parameter Bollinger Bands, mengoptimumkan strategi stop loss separa, menyesuaikan tempoh SMA, dan memperkenalkan kaedah pengurusan risiko yang lebih saintifik.

Arahan pengoptimuman

  1. Uji dan optimumkan parameter Bollinger Bands untuk mengurangkan isyarat palsu
  2. Penyelidikan bagaimana untuk menetapkan titik stop rugi separa yang betul
  3. Uji tempoh SMA optimum
  4. Pertimbangkan hentian penyesuaian dan bukannya titik hentian kehilangan tetap
  5. Kajian menggunakan saiz kedudukan berasaskan turun naik untuk pengiraan saiz perdagangan yang lebih saintifik
  6. Ujian belakang dengan kos dagangan untuk mensimulasikan dagangan sebenar
  7. Pertimbangkan untuk menggabungkan dengan penunjuk lain untuk meningkatkan kekuatan strategi

Kesimpulan

Strategi ini mengintegrasikan Bollinger Bands dan SMA untuk merancang sistem trend berikut yang agak lengkap. Ia boleh dipercayai dalam mengenal pasti kewujudan trend dan mempunyai keupayaan penjejakan trend yang kuat. Dengan terus mengoptimumkan strategi stop loss, mengurangkan kesilapan isyarat, dan memperkenalkan teknik pengurusan risiko saintifik, strategi ini boleh menjadi sistem yang bernilai untuk mengesan dalam perdagangan langsung. Ia menyediakan pendekatan menggabungkan beberapa penunjuk untuk reka bentuk strategi perdagangan kuantitatif.


/*backtest
start: 2022-11-09 00:00:00
end: 2023-11-15 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/
// © mohanee

//@version=4
strategy(title="BB9_MA200_Strategy", overlay=true, pyramiding=1,     default_qty_type=strategy.cash,  initial_capital=10000, currency=currency.USD)  //default_qty_value=10, default_qty_type=strategy.fixed, 


var stopLossVal=0.00

//variables BEGIN
smaLength=input(200,title="MA Length")
bbLength=input(21,title="BB Length")  

bbsrc = input(close, title="BB Source")
mult = input(2.0, minval=0.001, maxval=50, title="StdDev")


stopLoss = input(title="Stop Loss%", defval=5, minval=1)

riskCapital = input(title="Risk % of capital  == Based on this trade size is claculated    numberOfShares = (AvailableCapital*risk/100) / stopLossPoints", defval=10, minval=1)


sma200=ema(close,smaLength)

plot(sma200, title="SMA 200", color=color.orange)


//bollinger calculation
basis = sma(bbsrc, bbLength)
dev = mult * stdev(bbsrc, bbLength)
upperBand = basis + dev
lowerBand = basis - dev
offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500)

//plot bb
plot(basis, "Basis", color=color.teal, style=plot.style_circles , offset = offset)
p1 = plot(upperBand, "Upper", color=color.teal, offset = offset)
p2 = plot(lowerBand, "Lower", color=color.teal, offset = offset)
fill(p1, p2, title = "Background", color=color.teal, transp=95)


strategy.initial_capital = 50000

//Entry---

strategy.entry(id="LE", comment="LE capital="+tostring(strategy.initial_capital + strategy.netprofit ,"######.##"), qty=( (strategy.initial_capital + strategy.netprofit ) * riskCapital / 100)/(close*stopLoss/100) , long=true,  when=strategy.position_size<1 and upperBand>sma200 and lowerBand > sma200 and crossover(close, basis) )     //  // aroonOsc<0  //(strategy.initial_capital * 0.10)/close


barcolor(color=strategy.position_size>=1? color.blue: na)

//partial Exit
tpVal=strategy.position_size>1 ? strategy.position_avg_price * (1+(stopLoss/100) ) : 0.00
strategy.close(id="LE", comment="Partial points="+tostring(close - strategy.position_avg_price, "####.##"),  qty_percent=30 , when=abs(strategy.position_size)>=1 and close>tpVal and crossunder(lowerBand, sma200)   )   //close<ema55 and rsi5Val<20 //ema34<ema55


//close All on stop loss
//stoploss
stopLossVal:=   strategy.position_size>1 ? strategy.position_avg_price * (1-(stopLoss/100) ) : 0.00

strategy.close_all( comment="SL Exit points="+tostring(close - strategy.position_avg_price, "####.##"),  when=abs(strategy.position_size)>=1 and close < stopLossVal  )  //close<ema55 and rsi5Val<20 //ema34<ema55  //close<ema89//

strategy.close_all( comment="BB9 X SMA200 points="+tostring(close - strategy.position_avg_price, "####.##"),  when=abs(strategy.position_size)>=1 and  crossunder(basis, sma200)  )  //close<ema55 and rsi5Val<20 //ema34<ema55  //close<ema89
    

Lebih lanjut