Sumber daya yang dimuat... Pemuatan...

Strategi Smart Trailing Stop berbasis SMA dengan Pengakuan Pola Intraday

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

 SMA-Based Intelligent Trailing Stop Strategy with Intraday Pattern Recognition

Gambaran umum

Ini adalah strategi yang didasarkan pada rata-rata bergerak sederhana 18 hari (SMA18), menggabungkan pengenalan pola intraday dan mekanisme trailing stop cerdas. Strategi ini terutama mengamati hubungan harga dengan SMA18, bersama dengan posisi tinggi dan rendah intraday, untuk mengeksekusi entri panjang pada waktu yang optimal.

Prinsip Strategi

Logika inti mencakup beberapa elemen kunci: 1. Kondisi masuk berdasarkan posisi harga relatif terhadap rata-rata bergerak 18 hari, dengan opsi untuk entri breakout atau di atas garis 2. Analisis pola candlestick intraday, terutama berfokus pada pola Inside Bar untuk meningkatkan akurasi entri 3. Perdagangan selektif berdasarkan karakteristik hari dalam seminggu 4. penetapan harga masuk menggunakan perintah batas dengan sedikit offset ke atas dari terendah untuk meningkatkan probabilitas mengisi 5. Mekanisme stop-loss ganda: stop tetap berdasarkan harga masuk atau trailing stop berdasarkan titik terendah dua hari

Keuntungan Strategi

  1. Menggabungkan indikator teknis dan pola harga untuk sinyal masuk yang lebih dapat diandalkan
  2. Mekanisme pemilihan waktu perdagangan yang fleksibel untuk optimalisasi khusus pasar
  3. Sistem stop-loss cerdas yang melindungi keuntungan dan memungkinkan pergerakan harga yang memadai
  4. Parameter yang sangat dapat disesuaikan untuk lingkungan pasar yang berbeda
  5. Pengurangan sinyal palsu yang efektif melalui penyaringan pola Inside Bar

Risiko Strategi

  1. Stop tetap dapat memicu keluar awal di pasar yang tidak stabil
  2. Trailing stop mungkin mengunci keuntungan minimal selama pembalikan cepat
  3. Sering Inside Bars selama konsolidasi dapat menyebabkan overtrading Langkah-langkah mitigasi:
  • Penyesuaian stop-loss dinamis berdasarkan volatilitas pasar
  • Penambahan indikator konfirmasi tren
  • Pelaksanaan target laba minimum untuk menyaring perdagangan berkualitas rendah

Arahan Optimasi

  1. Menggabungkan indikator volatilitas (seperti ATR) untuk penyesuaian stop-loss dinamis
  2. Tambahkan dimensi analisis volume untuk meningkatkan keandalan sinyal
  3. Mengembangkan algoritma pemilihan tanggal yang lebih cerdas berdasarkan kinerja historis
  4. Menerapkan filter kekuatan tren untuk menghindari perdagangan dalam tren yang lemah
  5. Meningkatkan algoritma pengenalan Inside Bar untuk peningkatan identifikasi pola

Ringkasan

Strategi ini membangun sistem perdagangan yang komprehensif dengan menggabungkan beberapa dimensi analitis. Kekuatannya utama terletak pada pengaturan parameter yang fleksibel dan mekanisme stop-loss cerdas, yang memungkinkan adaptasi dengan berbagai lingkungan pasar. Melalui optimalisasi dan perbaikan terus-menerus, strategi menunjukkan janji untuk mempertahankan kinerja yang stabil di berbagai kondisi pasar.


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