
Gambaran keseluruhan
Strategi ini menggunakan purata gelombang sebenar (ATR) sebagai asas untuk mengesan hentian (TS) untuk mencapai tujuan mengikuti trend dengan menyesuaikan kedudukan hentian secara dinamik. Apabila harga bergerak ke arah yang menguntungkan, kedudukan hentian juga akan disesuaikan, sehingga mengunci keuntungan yang telah diperoleh; apabila harga bergerak ke arah yang tidak menguntungkan, kedudukan hentian tetap tidak berubah, dan apabila harga menyentuh harga hentian, hentian hentian.
Prinsip Strategi
- Mengira ATR, sebagai asas untuk mengesan kerugian. ATR mencerminkan turun naik pasaran dan digunakan untuk mengukur purata perubahan harga.
- Berdasarkan ATR dan parameter KeyValue, jarak hentian dikira nLoss. KeyValue adalah kelipatan yang disesuaikan oleh pengguna, nLoss adalah perkalian KeyValue dengan ATR, yang bermaksud jarak hentian adalah beberapa kali ATR.
- Hitung kedudukan hentian pengesanan dinamik xATRTrailingStop. Apabila memegang banyak kedudukan, tetapkan sebagai “nilai yang lebih besar antara harga tertinggi dan harga penutupan — nLoss pada baris K sebelumnya”; Apabila memegang kedudukan kosong, tetapkan sebagai “nilai yang lebih rendah antara harga terendah dan harga penutupan — nLoss pada baris K sebelumnya”.
- Menjana isyarat bukaan kedudukan. Apabila harga penutupan melebihi xATRTrailingStop, buat lebih banyak; apabila harga penutupan melebihi xATRTrailingStop, buat kosong.
Analisis kelebihan
- Kedudukan Hentian Kerosakan menyesuaikan diri secara dinamik dengan turun naik harga, dapat mengunci keuntungan, tetapi juga membolehkan keuntungan berkembang mengikut trend.
- Kedudukan hentian berdasarkan pengiraan ATR, dapat mencerminkan turun naik pasaran secara objektif, lebih fleksibel dan berkesan daripada hentian tetap yang ditetapkan secara subjektif.
- Dengan meningkatkan ATR dengan parameter KeyValue, anda boleh menetapkan jarak henti yang sesuai mengikut keutamaan risiko anda. Nilai kunci yang lebih besar akan membawa ruang henti yang lebih luas dan frekuensi henti yang lebih rendah.
Analisis risiko
- Strategi trend kurang baik dalam pasaran yang bergolak, dan sering berhenti apabila trend unilateral tidak jelas, menyebabkan aliran dana yang cepat.
- Waktu masuk bergantung pada isyarat silang harga penutupan dengan garis hentian dinamik, dan mungkin berlaku hentian kecil berturut-turut dalam keadaan gegaran.
- Strategi menghentikan kerugian yang diikuti tidak dapat mengelakkan lompatan yang dibawa oleh Lido atau Lido, dan penyesuaian kedudukan berhenti tidak dapat mengikuti perubahan harga, menyebabkan kerugian sebenar jauh lebih besar daripada kerugian yang boleh dikawal yang diharapkan.
Arah pengoptimuman
- Anda boleh menambah indikator penghakiman trend berdasarkan strategi, seperti sistem garis rata, indikator momentum, dan lain-lain, dan masuk hanya apabila trend jelas, untuk mengelakkan perdagangan yang kerap di pasaran yang bergolak.
- Anda boleh mempertimbangkan untuk memperkenalkan strategi stop-loss, seperti memegang kedudukan berdasarkan formula Kelly, menetapkan beberapa penangguhan penangguhan untuk keuntungan tetap, dan lain-lain, untuk mengurangkan kemungkinan pulangan keuntungan yang berpotensi pada akhir trend.
- Untuk lubang melompat, anda boleh menetapkan had maksimum untuk menghentikan kerugian, seperti jumlah tetap atau peratusan tetap, dan apabila had itu tercapai, anda akan berhenti dengan serta-merta di mana harga berhenti dinamik berada.
ringkaskan
ATR boleh menyesuaikan kedudukan hentian secara dinamik mengikut keluasan turun naik harga. Tetapi, strategi ini juga tidak dapat menangani pasaran yang bergolak, hentian yang terlalu kerap dan risiko yang sukar untuk mengelakkan jurang melompat. Untuk kelemahan yang disebutkan di atas, strategi dapat dioptimumkan dan diperbaiki dari segi penilaian trend, strategi hentian, dan had hentian maksimum.
Kod sumber strategi
/*backtest
start: 2024-04-01 00:00:00
end: 2024-04-30 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Long TAP", overlay=true)
// Constants
keyValueDefault = 3.0
keyValueStep = 0.5
atrPeriodDefault = 10
// Inputs
keyValue = input.float(keyValueDefault, title="Key Value")
atrPeriod = input.int(atrPeriodDefault, title="ATR Period")
// Calculations
xATR = ta.atr(atrPeriod)
nLoss = keyValue * xATR
// Trailing Stop Calculation
var float xATRTrailingStop = 0.0
xATRTrailingStop := ta.highest(math.max(nz(xATRTrailingStop[1], 0), close - nLoss), 1)
xATRTrailingStop := ta.lowest(math.min(nz(xATRTrailingStop, 0), close + nLoss), 1)
// Position Calculation
var int pos = 0
pos := nz(pos[1], 0)
if (close[1] < nz(xATRTrailingStop, 0) and close > nz(xATRTrailingStop, 0))
pos := 1
else if (close[1] > nz(xATRTrailingStop, 0) and close < nz(xATRTrailingStop, 0))
pos := -1
// Plotting Trailing Stop
var color xcolor = na
if (pos == -1)
xcolor := color.red
else if (pos == 1)
xcolor := color.green
plot(xATRTrailingStop, color=xcolor, title="Trailing Stop")
// Buy/Sell Signals
buySignal = ta.crossover(close, xATRTrailingStop)
sellSignal = ta.crossunder(close, xATRTrailingStop)
// Strategy
if (buySignal)
strategy.entry("Long", strategy.long)
label.new(bar_index, xATRTrailingStop, text="Buy Signal", color=color.green, style=label.style_label_up, yloc=yloc.belowbar)
if (sellSignal)
strategy.entry("Short", strategy.short)
label.new(bar_index, xATRTrailingStop, text="Sell Signal", color=color.red, style=label.style_label_down, yloc=yloc.abovebar)
// Alerts
alertcondition(buySignal, title='UT BOT Buy', message='UT BOT Buy')
alertcondition(sellSignal, title='UT BOT Sell', message='UT BOT Sell')