Strategi Hentian Pengangkutan Beradaptasi

Penulis:ChaoZhang, Tarikh: 2023-10-08 15:06:28
Tag:

Ringkasan

Strategi ini terutamanya melaksanakan mekanisme stop loss adaptif yang menyesuaikan kedudukan stop loss secara automatik berdasarkan turun naik harga untuk mencapai kesan stop loss yang lebih baik. Strategi ini menggunakan penunjuk ATR untuk mengira julat stop loss yang munasabah, dan menghasilkan isyarat perdagangan dalam kombinasi dengan garis EMA. Ia membuka kedudukan panjang atau pendek apabila harga memecahkan garis EMA, dan menggunakan algoritma stop loss adaptif untuk mengikuti stop loss.

Logika Strategi

  1. Mengira penunjuk ATR dan menetapkan nilai ATR didarabkan dengan parameter a sebagai julat stop loss nLoss.
  2. Mengira garis EMA.
  3. Pergi panjang apabila harga melangkau di atas garis EMA, dan pergi pendek apabila harga melangkau di bawah garis EMA.
  4. Menggunakan algoritma stop loss adaptif untuk menyesuaikan kedudukan stop loss xATRTrailingStop secara automatik, dengan peraturan seperti berikut:
    • Apabila harga pecah di atas kedudukan stop loss, sesuaikan stop loss kepada harga tolak julat stop loss nLoss.
    • Apabila harga pecah di bawah kedudukan stop loss, sesuaikan stop loss kepada harga ditambah julat stop loss nLoss.
    • Jika tidak, simpan stop loss tidak berubah.
  5. Tutup kedudukan untuk stop loss apabila harga mencapai tahap stop loss.

Analisis Kelebihan

  1. Melaksanakan mekanisme stop loss adaptif yang menyesuaikan julat stop loss secara automatik berdasarkan turun naik pasaran, mengawal risiko dengan berkesan.
  2. Mengira julat stop loss yang munasabah dengan penunjuk ATR, mengelakkan stop loss yang terlalu besar atau terlalu kecil.
  3. Menggunakan EMA untuk menjana isyarat dagangan, mengurangkan dagangan yang tidak perlu dan menapis bunyi pasaran.
  4. Logik strategi yang mudah dan jelas, mudah difahami dan dioptimumkan.
  5. Membolehkan penyesuaian parameter input untuk menyesuaikan diri dengan persekitaran pasaran yang berbeza.

Risiko dan Penambahbaikan

  1. Sinyal EMA mungkin terlambat, yang membawa kepada kemasukan lewat.
  2. Tempoh penahan yang tidak pasti, tidak dapat mengawal saiz stop loss tunggal.
  3. Stop loss boleh dicetuskan terlalu kerap di pasaran yang mempunyai trend yang kuat.
  4. Parameter seperti tempoh ATR, pengganda stop loss harus disesuaikan berdasarkan ciri simbol, nilai lalai tidak boleh digunakan secara buta.

Arahan pengoptimuman

  1. Pertimbangkan untuk menambah penunjuk trend, mengambil dagangan ke arah trend untuk mengelakkan dagangan yang bertentangan dengan trend.
  2. Sesuaikan pengganda stop loss berdasarkan turun naik, membolehkan berhenti yang lebih luas dalam keadaan turun naik yang tinggi.
  3. Tetapkan tempoh tahan maksimum, stop loss aktif selepas melebihi masa tertentu.
  4. Tambah strategi stop loss bergerak, menaikkan stop secara beransur-ansur semasa harga bergerak.
  5. Sesuaikan parameter tempoh ATR berdasarkan ciri simbol.

Kesimpulan

Strategi ini mempunyai logik yang jelas dan mudah, menguruskan risiko dengan stop loss berasaskan ATR adaptif dan EMA untuk isyarat perdagangan. Tetapi ia agak pasif dengan banyak ruang untuk pengoptimuman. Pertimbangkan untuk menambah penilaian trend, pelarasan parameter dinamik berdasarkan keadaan pasaran untuk menjadikannya lebih proaktif. Secara keseluruhan ia berfungsi sebagai idea yang baik dan templat untuk strategi stop loss pembalikan, tetapi parameter harus disesuaikan untuk simbol yang berbeza dan bukannya secara membabi buta menggunakan nilai lalai.


/*backtest
start: 2023-09-07 00:00:00
end: 2023-10-07 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="UT Bot Strategy", overlay = true)
//CREDITS to HPotter for the orginal code. The guy trying to sell this as his own is a scammer lol. 

// Inputs
a = input(1,     title = "Key Vaule. 'This changes the sensitivity'")
c = input(10,    title = "ATR Period")
h = input(false, title = "Signals from Heikin Ashi Candles")

////////////////////////////////////////////////////////////////////////////////
// BACKTESTING RANGE
 
// From Date Inputs
fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2019, title = "From Year", minval = 1970)
 
// To Date Inputs
toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2100, title = "To Year", minval = 1970)
 
// Calculate start/end date and time condition
startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true
 
////////////////////////////////////////////////////////////////////////////////


xATR  = atr(c)
nLoss = a * xATR

src = h ? security(heikinashi(syminfo.tickerid), timeframe.period, close, lookahead = false) : close

xATRTrailingStop = 0.0
xATRTrailingStop := iff(src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), src - nLoss),
   iff(src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), src + nLoss), 
   iff(src > nz(xATRTrailingStop[1], 0), src - nLoss, src + nLoss)))
 
pos = 0   
pos :=	iff(src[1] < nz(xATRTrailingStop[1], 0) and src > nz(xATRTrailingStop[1], 0), 1,
   iff(src[1] > nz(xATRTrailingStop[1], 0) and src < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0))) 
   
xcolor = pos == -1 ? color.red: pos == 1 ? color.green : color.blue 

ema   = ema(src,1)
above = crossover(ema, xATRTrailingStop)
below = crossover(xATRTrailingStop, ema)

buy  = src > xATRTrailingStop and above 
sell = src < xATRTrailingStop and below

barbuy  = src > xATRTrailingStop 
barsell = src < xATRTrailingStop 

plotshape(buy,  title = "Buy",  text = 'Buy',  style = shape.labelup,   location = location.belowbar, color= color.green, textcolor = color.white, transp = 0, size = size.tiny)
plotshape(sell, title = "Sell", text = 'Sell', style = shape.labeldown, location = location.abovebar, color= color.red,   textcolor = color.white, transp = 0, size = size.tiny)

barcolor(barbuy  ? color.green : na)
barcolor(barsell ? color.red   : na)

strategy.entry("long",   true, when = buy  and time_cond)
strategy.entry("short", false, when = sell and time_cond)

Lebih lanjut