Strategi henti kerugian mengekori pintar berdasarkan purata pergerakan dan corak urusniaga harian

SMA MA18 ATR
Tarikh penciptaan: 2025-01-17 16:04:09 Akhirnya diubah suai: 2025-01-17 16:04:09
Salin: 4 Bilangan klik: 361
1
fokus pada
1617
Pengikut

Strategi henti kerugian mengekori pintar berdasarkan purata pergerakan dan corak urusniaga harian

Gambaran keseluruhan

Ini adalah strategi berdasarkan purata pergerakan 18 hari (SMA18), digabungkan dengan pengecaman corak dagangan intrahari dan mekanisme hentian pengesanan pintar. Strategi ini terutamanya memerhatikan hubungan antara harga dan SMA18, menggabungkan mata tinggi dan rendah urusniaga harian, dan memasuki kedudukan beli pada masa yang tepat. Strategi ini menggunakan pelan henti rugi yang fleksibel, yang boleh menggunakan sama ada titik henti rugi tetap atau titik terendah dua hari sebagai tanda aras henti rugi mengekori.

Prinsip Strategi

Logik teras strategi merangkumi elemen utama berikut:

  1. Syarat kemasukan adalah berdasarkan kedudukan relatif harga kepada purata bergerak 18 hari Anda boleh memilih untuk memasuki pasaran apabila ia menembusi purata bergerak atau masuk di atas purata bergerak.
  2. Dengan menganalisis corak K-line intrahari, terutamanya memberi perhatian kepada corak K-line dalaman (Inside Bar), ketepatan kemasukan dipertingkatkan
  3. Berdasarkan ciri prestasi hari dagangan yang berbeza dalam seminggu, anda boleh berdagang secara terpilih pada hari tertentu
  4. Harga kemasukan ditetapkan dalam susunan had, dengan premium kecil di atas titik rendah untuk meningkatkan kebarangkalian transaksi.
  5. Mekanisme stop loss menyokong dua mod: satu ialah stop loss tetap berdasarkan harga kemasukan, dan satu lagi ialah trailing stop loss berdasarkan titik terendah dua hari dagangan sebelumnya.

Kelebihan Strategik

  1. Menggabungkan penunjuk teknikal dan corak harga, isyarat kemasukan lebih dipercayai
  2. Mekanisme pemilihan masa dagangan yang fleksibel, yang boleh dioptimumkan mengikut ciri pasaran yang berbeza
  3. Penyelesaian henti rugi pintar melindungi keuntungan sambil memberikan harga yang cukup ruang untuk turun naik
  4. Parameter strategi sangat boleh dilaraskan dan boleh menyesuaikan diri dengan persekitaran pasaran yang berbeza
  5. Melalui penyaringan pola K-line dalaman, isyarat palsu dikurangkan dengan berkesan

Risiko Strategik

  1. Dalam pasaran yang tidak menentu, hentian tetap boleh membawa kepada keluar pramatang
  2. Untuk pembalikan pantas, trailing stop loss mungkin mengurangkan keuntungan
  3. Semasa fasa sisi, batang lilin dalaman yang kerap boleh membawa kepada dagangan yang berlebihan. Tindakan balas:
  • Laraskan jarak henti kerugian secara dinamik mengikut turun naik pasaran
  • Tambah penunjuk pengesahan arah aliran
  • Tetapkan sasaran keuntungan minimum untuk menapis dagangan berkualiti rendah

Arah pengoptimuman strategi

  1. Memperkenalkan penunjuk turun naik (seperti ATR) untuk melaraskan jarak stop loss secara dinamik
  2. Tingkatkan dimensi analisis volum dan tingkatkan kebolehpercayaan isyarat
  3. Membangunkan algoritma pemilihan tarikh yang lebih bijak untuk mengoptimumkan masa dagangan secara automatik berdasarkan prestasi sejarah
  4. Penapis kekuatan aliran ditambah untuk mengelakkan dagangan dalam aliran lemah
  5. Optimumkan algoritma pengecaman garis K dalaman untuk meningkatkan ketepatan pengecaman corak

ringkaskan

Strategi ini membina sistem perdagangan yang agak lengkap dengan menggabungkan kaedah analisis daripada pelbagai dimensi. Kelebihan teras strategi terletak pada tetapan parameter yang fleksibel dan mekanisme henti rugi pintar, yang membolehkannya menyesuaikan diri dengan persekitaran pasaran yang berbeza. Melalui pengoptimuman dan penambahbaikan berterusan, strategi ini dijangka dapat mengekalkan prestasi yang stabil di bawah pelbagai keadaan pasaran.

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