
Strategi ini adalah strategi tracking stop loss berdasarkan volatilitas harga. Strategi ini menggunakan rata-rata real volatility (ATR) untuk mengatur garis stop loss untuk pergerakan harga. ATR mencerminkan volatilitas harga dan tingkat risiko.
Strategi ini pertama-tama menghitung rata-rata amplitudo fluktuasi nyata ATR dalam periode tertentu. Kemudian, sesuai dengan arah tren harga saat ini, jika tren naik, stop loss akan ditetapkan sebagai harga tertinggi saat ini dikurangi n kali ATR; jika tren turun, stop loss ditambah dengan ATR n kali harga terendah saat ini.
Ketika harga jatuh dari garis stop loss tren naik atau menembus garis stop loss tren turun, menentukan bahwa tren berubah. Pada saat ini, strategi untuk menghapus stop loss dan mengatur garis stop loss baru sesuai dengan arah tren baru.
Secara keseluruhan, strategi ini menggunakan volatilitas harga untuk mengatur garis stop loss dan kemampuan untuk menilai perubahan tren dengan tepat. Ketika tren berubah, stop loss tepat waktu membantu strategi untuk menangkap arah tren baru.
Strategi ini secara keseluruhan merupakan implementasi algoritme yang lebih baik untuk mengatur garis stop loss berdasarkan volatilitas harga. Strategi ini menilai pergerakan harga dengan akurasi yang lebih tinggi dan dapat menangkap titik-titik perubahan tren yang penting. Strategi ini juga menyediakan ruang parameter tertentu untuk penyesuaian dan memiliki kemampuan adaptasi yang kuat.
/*backtest
start: 2022-11-30 00:00:00
end: 2023-11-30 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © laptevmaxim92
//@version=4
strategy("Volatility stop strategy", overlay=true)
length = input(20)
mult = input(2, step = 0.1)
utp = input(false, "Use take profit?")
pr = input(100, "Take profit pips")
usl = input(false, "Use stop loss?")
sl = input(100, "Stop loss pips")
fromday = input(01, defval=01, minval=01, maxval=31, title="From Day")
frommonth = input(01, defval=01, minval= 01, maxval=12, title="From Month")
fromyear = input(2000, minval=1900, maxval=2100, title="From Year")
today = input(31, defval=01, minval=01, maxval=31, title="To Day")
tomonth = input(12, defval=12, minval=01, maxval=12, title="To Month")
toyear = input(2039, minval=1900, maxval=2100, title="To Year")
use_date = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 00, 00))
atr_ = atr(length)
max_ = 0.0
min_ = 0.0
max1 = 0.0
max1 := max(nz(max_[1]), close)
min1 = 0.0
min1 := min(nz(min_[1]), close)
vstop = 0.0
is_uptrend = false
is_uptrend_prev = false
is_uptrend_prev := nz(is_uptrend[1], true)
stop = is_uptrend_prev ? max1 - mult * atr_ : min1 + mult * atr_
vstop_prev = nz(vstop[1])
vstop1 = is_uptrend_prev ? max(vstop_prev, stop) : min(vstop_prev, stop)
is_uptrend := close - vstop1 >= 0
is_trend_changed = is_uptrend != is_uptrend_prev
max_ := is_trend_changed ? close : max1
min_ := is_trend_changed ? close : min1
vstop := is_trend_changed ? is_uptrend ? max_ - mult * atr_ : min_ + mult * atr_ : vstop1
plot(vstop, color = is_uptrend ? color.green : color.red, linewidth=2)
longCondition = is_uptrend
if (longCondition and use_date)
strategy.entry("BUY", strategy.long)
shortCondition = not is_uptrend
if (shortCondition and use_date)
strategy.entry("SELL", strategy.short)
if (utp and not usl)
strategy.exit("TP", "BUY", profit = pr)
strategy.exit("TP", "SELL", profit = pr)
if (usl and not utp)
strategy.exit("SL", "BUY", loss = sl)
strategy.exit("SL", "SELL", loss = sl)
if (usl and utp)
strategy.exit("TP/SL", "BUY", loss = sl, profit = pr)
strategy.exit("TP/SL", "SELL", loss = sl, profit = pr)