この戦略は,ZZ指数の価格チャネルをベースに取引し,チャネルの上限を向上して破る,またはチャネル下限を低下して破るという信号を利用して,多頭または空頭ポジションを確立します.この戦略は,価格チャネルの範囲外でのトレンドの勃発を捕捉しようとします.
具体的には,この戦略は,ZZ指数を使用して価格チャネルの上下限を計算する.価格が上下限から突破すると,多入場する.価格が上下限から突破すると,空売り入場する.多空売り後も,ストップ・ロードを使用して,価格チャネルの上下限をストップ・ロスとして使用する.また,日時範囲を設定し,この取引範囲内で,毎日の市場閉じる前を清算して,夜間のリスクを避ける.
経路の幅を広げ,ストップ・ローズ戦略を最適化し,トレンドの強さを判断することで,上記のリスクを軽減することができます.
この戦略は,価格チャネル判定トレンドの勃発点に基づいて取引する.優点は,取引シグナルがシンプルで,止損が明確で,操作が容易であること.欠点は,頻繁に空飛ぶことと充分に活用されていないトレンドの両面があることである.パラメータ最適化,戦略の組み合わせなどによって優位を維持しながら上記の欠点を克服することができる.この戦略は,トレーダーが価格チャネルの応用技術を習得するのを助けることができる.
/*backtest
start: 2022-09-14 00:00:00
end: 2023-09-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//Noro
//2019
//@version=4
strategy(title = "Noro's ZZ-4 Strategy", shorttitle = "Noro's ZZ-4 Strategy", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)
//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
len = input(7, minval = 1, title = "Length")
showll = input(true, defval = true, title = "Show Levels")
showbg = input(false, defval = false, title = "Show Background")
showpc = input(false, defval = false, title = "Show Price Channel")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")
//Price channel
h = highest(ohlc4, len)
l = lowest(ohlc4, len)
pccol = showpc ? color.blue : na
plot(h, color = pccol, transp = 0)
plot(l, color = pccol, transp = 0)
//Levels
ml = 0
ml := l > l[1] ? 1 : l < l[1] ? -1 : ml[1]
ll = 0.0
ll := ml == 1 and ml[1] == -1 ? l[1] : ll[1]
mh = 0
mh := h > h[1] ? 1 : h < h[1] ? -1 : mh[1]
hl = 0.0
hl := mh == -1 and mh[1] == 1 ? h[1] : hl[1]
//Lines
colorh = showll and hl == hl[1] ? color.lime : na
colorl = showll and ll == ll[1] ? color.red : na
plot(hl, color = colorh, linewidth = 2, transp = 0, title = "Long")
plot(ll, color = colorl, linewidth = 2, transp = 0, title = "Short")
//Background
size = strategy.position_size
trend = 0
trend := size > 0 ? 1 : size < 0 ? -1 : high >= hl ? 1 : low <= ll ? -1 : trend[1]
bgcol = showbg == false ? na : trend == 1 ? color.lime : trend == -1 ? color.red : na
bgcolor(bgcol, transp = 80)
//Trading
truetime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)
lot = 0.0
lot := size != size[1] ? strategy.equity / close * capital / 100 : lot[1]
if ll > 0 and hl > 0
strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, stop = hl, when=(truetime))
strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, stop = ll, when=(truetime))
if time > timestamp(toyear, tomonth, today, 23, 59)
strategy.close_all()
strategy.cancel("Long")
strategy.cancel("Short")