Strategi trailing stop loss cerdas berdasarkan moving average dan pola intraday

SMA MA18 ATR
Tanggal Pembuatan: 2025-01-17 16:04:09 Akhirnya memodifikasi: 2025-01-17 16:04:09
menyalin: 4 Jumlah klik: 361
1
fokus pada
1617
Pengikut

Strategi trailing stop loss cerdas berdasarkan moving average dan pola intraday

Ringkasan

Ini adalah strategi yang didasarkan pada rata-rata pergerakan 18 hari (SMA18), dikombinasikan dengan pengenalan pola perdagangan intraday dan mekanisme trailing stop yang cerdas. Strategi ini terutama mengamati hubungan antara harga dan SMA18, menggabungkan titik tinggi dan rendah intraday, dan memasuki posisi panjang pada waktu yang tepat. Strategi ini mengadopsi rencana stop-loss yang fleksibel, yang dapat menggunakan titik stop-loss tetap atau titik terendah dua hari sebagai patokan stop-loss trailing.

Prinsip Strategi

Logika inti dari strategi ini mencakup elemen-elemen kunci berikut:

  1. Kondisi masuk didasarkan pada posisi relatif harga terhadap rata-rata pergerakan 18 hari. Anda dapat memilih untuk memasuki pasar saat harga menembus rata-rata pergerakan atau masuk di atas rata-rata pergerakan.
  2. Dengan menganalisis pola K-line intraday, terutama memperhatikan pola K-line internal (Inside Bar), akurasi entri ditingkatkan
  3. Berdasarkan karakteristik kinerja hari perdagangan yang berbeda dalam seminggu, Anda dapat berdagang secara selektif pada hari-hari tertentu
  4. Harga masuk ditetapkan dalam batas pesanan, dengan premi kecil di atas titik terendah untuk meningkatkan kemungkinan transaksi.
  5. Mekanisme stop loss mendukung dua mode: satu adalah stop loss tetap berdasarkan harga masuk, dan yang lainnya adalah stop loss trailing berdasarkan titik terendah dari dua hari perdagangan sebelumnya.

Keunggulan Strategis

  1. Menggabungkan indikator teknis dan pola harga, sinyal masuk lebih dapat diandalkan
  2. Mekanisme pemilihan waktu perdagangan yang fleksibel, yang dapat dioptimalkan sesuai dengan karakteristik pasar yang berbeda
  3. Solusi stop loss yang cerdas melindungi keuntungan sambil memberi harga cukup ruang untuk fluktuasi
  4. Parameter strategi sangat dapat disesuaikan dan dapat beradaptasi dengan lingkungan pasar yang berbeda
  5. Melalui penyaringan pola K-line internal, sinyal palsu secara efektif dikurangi

Risiko Strategis

  1. Dalam pasar yang bergejolak, stop tetap dapat menyebabkan keluar prematur
  2. Untuk pembalikan cepat, trailing stop loss dapat mengunci keuntungan yang lebih sedikit
  3. Selama fase menyamping, candlestick internal yang sering muncul dapat mengakibatkan perdagangan yang berlebihan. Tindakan penanggulangan:
  • Sesuaikan jarak stop loss secara dinamis sesuai dengan volatilitas pasar
  • Tambahkan indikator konfirmasi tren
  • Tetapkan target keuntungan minimum untuk menyaring perdagangan berkualitas rendah

Arah optimasi strategi

  1. Perkenalkan indikator volatilitas (seperti ATR) untuk menyesuaikan jarak stop loss secara dinamis
  2. Meningkatkan dimensi analisis volume dan meningkatkan keandalan sinyal
  3. Mengembangkan algoritma pemilihan tanggal yang lebih cerdas untuk mengoptimalkan waktu perdagangan secara otomatis berdasarkan kinerja historis
  4. Menambahkan filter kekuatan tren untuk menghindari perdagangan dalam tren yang lemah
  5. Optimalkan algoritma pengenalan garis K internal untuk meningkatkan akurasi pengenalan pola

Meringkaskan

Strategi ini membangun sistem perdagangan yang relatif lengkap dengan menggabungkan metode analisis dari berbagai dimensi. Keuntungan inti dari strategi ini terletak pada pengaturan parameter yang fleksibel dan mekanisme stop-loss yang cerdas, yang memungkinkannya beradaptasi dengan berbagai lingkungan pasar. Melalui pengoptimalan dan perbaikan berkelanjutan, strategi ini diharapkan dapat mempertahankan kinerja yang stabil dalam berbagai kondisi pasar.

Kode 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')