
Strategi ini adalah strategi pengesanan kecenderungan yang berdasarkan pada turun naik harga. Ia menggunakan purata turun naik sebenar (ATR) untuk menetapkan garis berhenti untuk turun naik harga. ATR mencerminkan turun naik harga dan tahap risiko.
Strategi ini pertama-tama mengira purata amplitudo sebenar turun naik ATR dalam tempoh tertentu. Kemudian, mengikut arah trend harga semasa, jika trend naik, garis henti akan ditetapkan sebagai ATR n kali harga tertinggi semasa dikurangkan; jika trend menurun, garis henti ditambah dengan ATR n kali harga terendah semasa.
Apabila harga menembusi garisan hentian untuk trend naik atau garisan hentian untuk trend turun, menentukan bahawa trend berubah. Pada masa ini, strategi untuk menghentikan kerugian dan menetapkan garisan hentian baru sesuai dengan arah trend baru.
Secara keseluruhannya, strategi ini menggunakan turun naik harga untuk menetapkan garis hentian dan mencapai keupayaan untuk menilai perubahan trend dengan tepat. Apabila perubahan trend, hentian tepat pada masanya membantu strategi untuk menangkap arah trend baru.
Strategi ini secara keseluruhannya adalah pelaksanaan algoritma yang lebih baik untuk menetapkan garis hentian berdasarkan turun naik harga. Ia menilai pergerakan harga dengan ketepatan yang lebih tinggi dan dapat menangkap titik perubahan tren yang penting. Ia juga menyediakan ruang parameter untuk penyesuaian dan fleksibiliti 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)