Sumber dimuat naik... memuat...

Strategi Stop Trailing Cerdas berasaskan SMA dengan Pengiktirafan Corak Intraday

Penulis:ChaoZhang, Tarikh: 2025-01-17 16:04:09
Tag:SMAMA18ATR

 SMA-Based Intelligent Trailing Stop Strategy with Intraday Pattern Recognition

Ringkasan

Ini adalah strategi yang berdasarkan Purata Bergerak Sederhana 18 hari (SMA18), menggabungkan pengenalan corak intraday dan mekanisme hentian trailing yang pintar. Strategi ini terutamanya memerhatikan hubungan harga dengan SMA18, bersama dengan kedudukan tinggi dan rendah intraday, untuk melaksanakan entri panjang pada masa yang optimum. Ia menggunakan pendekatan stop-loss yang fleksibel, menawarkan kedua-dua titik stop-loss tetap dan pilihan stop trailing rendah dua hari.

Prinsip Strategi

Logik teras merangkumi beberapa elemen utama: Syarat kemasukan berdasarkan kedudukan harga berbanding purata bergerak 18 hari, dengan pilihan untuk kemasukan pecah atau di atas garis 2. Analisis corak candlestick intraday, terutamanya memberi tumpuan kepada corak Inside Bar untuk meningkatkan ketepatan kemasukan 3. Perdagangan selektif berdasarkan ciri-ciri hari dalam seminggu 4. penetapan harga kemasukan menggunakan perintah had dengan sedikit offset ke atas dari paras terendah untuk meningkatkan kebarangkalian mengisi 5. Mekanisme stop-loss berganda: hentian tetap berdasarkan harga kemasukan atau hentian trailing berdasarkan paras terendah dua hari

Kelebihan Strategi

  1. Menggabungkan penunjuk teknikal dan corak harga untuk isyarat kemasukan yang lebih boleh dipercayai
  2. Mekanisme pemilihan masa dagangan yang fleksibel untuk pengoptimuman khusus pasaran
  3. Sistem stop-loss pintar yang melindungi keuntungan dan membolehkan pergerakan harga yang mencukupi
  4. Parameter yang sangat boleh diselaraskan untuk persekitaran pasaran yang berbeza
  5. Pengurangan isyarat palsu yang berkesan melalui penapisan corak Bar Dalam

Risiko Strategi

  1. Hentian tetap boleh mencetuskan keluar awal di pasaran yang tidak menentu
  2. Penghentian yang beransur-ansur boleh mengunci keuntungan minimum semasa pembalikan cepat
  3. Bars dalaman yang kerap semasa penyatuan boleh membawa kepada perdagangan berlebihan Langkah-langkah pengurangan:
  • Penyesuaian stop-loss dinamik berdasarkan turun naik pasaran
  • Penambahan penunjuk pengesahan trend
  • Pelaksanaan sasaran keuntungan minimum untuk menapis perdagangan berkualiti rendah

Arahan pengoptimuman

  1. Menggabungkan penunjuk turun naik (seperti ATR) untuk penyesuaian stop-loss dinamik
  2. Tambah dimensi analisis jumlah untuk meningkatkan kebolehpercayaan isyarat
  3. Membangunkan algoritma pemilihan tarikh yang lebih pintar berdasarkan prestasi sejarah
  4. Melaksanakan penapis kekuatan trend untuk mengelakkan perdagangan dalam trend yang lemah
  5. Meningkatkan algoritma pengiktirafan Bar Dalam untuk pengenalan corak yang lebih baik

Ringkasan

Strategi ini membina sistem perdagangan yang komprehensif dengan menggabungkan pelbagai dimensi analitik. Kekuatannya terletak pada tetapan parameter yang fleksibel dan mekanisme stop-loss pintar, yang membolehkan penyesuaian dengan pelbagai persekitaran pasaran. Melalui pengoptimuman dan peningkatan yang berterusan, strategi menunjukkan janji untuk mengekalkan prestasi yang stabil dalam pelbagai keadaan pasaran.


/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-16 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/

//@version=5
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © zweiprozent

strategy('Buy Low over 18 SMA Strategy', overlay=true, default_qty_value=1)
xing = input(false, title='crossing 18 sma?')
sib = input(false, title='trade inside Bars?')
shortinside = input(false, title='trade inside range bars?')
offset = input(title='offset', defval=0.001)
belowlow = input(title='stop below low minus', defval=0.001)
alsobelow = input(false, title='Trade only above 18 sma?')
tradeabove = input(false, title='Trade with stop above order?')
trailingtwo = input(false, title='exit with two days low trailing?')


insideBar() =>  //and high <= high[1] and low >= low[1] ? 1 : 0
    open <= close[1] and close >= open[1] and close <= close[1] or open >= close[1] and open <= open[1] and close <= open[1] and close >= close[1] ? 1 : 0

inside() =>
    high <= high[1] and low >= low[1] ? 1 : 0
enterIndex = 0.0
enterIndex := enterIndex[1]

inPosition = not na(strategy.position_size) and strategy.position_size > 0
if inPosition and na(enterIndex)
    enterIndex := bar_index
    enterIndex



//if strategy.position_size <= 0 

//    strategy.exit("Long", stop=low[0]-stop_loss,comment="stop loss")


//if not na(enterIndex) and bar_index - enterIndex + 0 >= 0 

//    strategy.exit("Long", stop=low[0]-belowlow,comment="exit")

//    enterIndex := na

T_Low = request.security(syminfo.tickerid, 'D', low[0])
D_High = request.security(syminfo.tickerid, 'D', high[1])
D_Low = request.security(syminfo.tickerid, 'D', low[1])
D_Close = request.security(syminfo.tickerid, 'D', close[1])
D_Open = request.security(syminfo.tickerid, 'D', open[1])

W_High2 = request.security(syminfo.tickerid, 'W', high[1])
W_High = request.security(syminfo.tickerid, 'W', high[0])
W_Low = request.security(syminfo.tickerid, 'W', low[0])
W_Low2 = request.security(syminfo.tickerid, 'W', low[1])
W_Close = request.security(syminfo.tickerid, 'W', close[1])
W_Open = request.security(syminfo.tickerid, 'W', open[1])

//longStopPrice  = strategy.position_avg_price * (1 - stopl)
// Go Long - if prev day low is broken and stop loss prev day low
entryprice = ta.sma(close, 18)

//(high[0]<=high[1]or close[0]<open[0]) and low[0]>vwma(close,30) and time>timestamp(2020,12,0,0,0)

showMon = input(true, title='trade tuesdays?')
showTue = input(true, title='trade wednesdayy?')
showWed = input(true, title='trade thursday?')
showThu = input(true, title='trade friday?')
showFri = input(true, title='trade saturday?')
showSat = input(true, title='trade sunday?')
showSun = input(true, title='trade monday?')

isMon() =>
    dayofweek(time('D')) == dayofweek.monday and showMon
isTue() =>
    dayofweek(time('D')) == dayofweek.tuesday and showTue
isWed() =>
    dayofweek(time('D')) == dayofweek.wednesday and showWed
isThu() =>
    dayofweek(time('D')) == dayofweek.thursday and showThu
isFri() =>
    dayofweek(time('D')) == dayofweek.friday and showFri
isSat() =>
    dayofweek(time('D')) == dayofweek.saturday and showSat
isSun() =>
    dayofweek(time('D')) == dayofweek.sunday and showSun


clprior = close[0]
entryline = ta.sma(close, 18)[1]
//(isMon() or isTue()or isTue()or  isWed() 
noathigh = high < high[1] or high[2] < high[3] or high[1] < high[2] or low[1] < ta.sma(close, 18)[0] and close > ta.sma(close, 18)[0]

if noathigh and time > timestamp(2020, 12, 0, 0, 0) and (alsobelow == false or high >= ta.sma(close, 18)[0]) and (isMon() or isTue() or isWed() or isThu() or isFri() or isSat() or isSun()) and (high >= high[1] or sib or low <= low[1])  //((sib == false and inside()==true) or inside()==false) and (insideBar()==true or shortinside==false)
    if tradeabove == false
        strategy.entry('Long', strategy.long, limit=low + offset * syminfo.mintick, comment='long')
    if tradeabove == true and (xing == false or clprior < entryline)  // and high<high[1] 
        strategy.entry('Long', strategy.long, stop=high + offset * syminfo.mintick, comment='long')


//if time>timestamp(2020,12,0,0,0) and isSat()  
//    strategy.entry("Long", strategy.long, limit=0, comment="long")


//strategy.exit("Long", stop=low-400*syminfo.mintick)

//strategy.exit("Long", stop=strategy.position_avg_price-10*syminfo.mintick,comment="exit")
//strategy.exit("Long", stop=low[1]-belowlow*syminfo.mintick, comment="stop")

if strategy.position_avg_price > 0 and trailingtwo == false and close > strategy.position_avg_price
    strategy.exit('Long', stop=strategy.position_avg_price, comment='stop')

if strategy.position_avg_price > 0 and trailingtwo == false and (low > strategy.position_avg_price or close < strategy.position_avg_price)
    strategy.exit('Long', stop=low[0] - belowlow * syminfo.mintick, comment='stop')

if strategy.position_avg_price > 0 and trailingtwo
    strategy.exit('Long', stop=ta.lowest(low, 2)[0] - belowlow * syminfo.mintick, comment='stop')




Berkaitan

Lebih lanjut