
この戦略は,3つの異なる技術指標を組み合わせ,双均線システムを用いて取引信号を生成し,K線の色と実体を使用し,追加のフィルタリング条件として,比較的安定で効果的なショートライン取引戦略を構築した.
策略全体では,ブリン帯とKCチャネルの組み合わせを使用して市場の圧縮と拡大の段階を識別する.具体的には,ブリン帯がKCチャネル内にあるときは圧縮とみなされ,ブリン帯がKCチャネルを突破すると拡大とみなされる.圧縮は,波動の増大とトレンドの逆転の可能性を代表し,このとき,線形回帰を主要な取引信号指標として使用する.
線形回帰ヒストグラムが正である場合 (上向きを表示する) と,このバーが赤いK線である場合 (このバーが陰向きを表示する) と,K線実体が過去30本のK線平均実体より1/3大きい場合,このような組み合わせの信号は多くなされる.逆に線形回帰ヒストグラムが負である場合,このバーが緑のK線であり,実体も大きい場合,空になる.
この戦略は,市場の段階を判断するのに役立つ,同時に,圧縮と拡大の背景を可視化します.
リスクは指標パラメータの調整やフィルタリング条件の最適化などで軽減できます.
この戦略は以下の点で最適化できます.
この戦略は,圧縮の機会を識別しながら,複数の指標を統合し,フィルター条件を増加させ,より堅牢で高効率のショートライン戦略を形成する.パラメータとフィルター条件の最適化により,よりよい効果を得ることができる.また,この戦略の枠組みは,柔軟で,異なる品種で簡単に調整され,さらなるテストと最適化の価値があります.
/*backtest
start: 2023-11-24 00:00:00
end: 2023-12-24 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//Noro
//2017
//@version=2
strategy(shorttitle = "Squeeze str 1.0", title="Noro's Squeeze Momentum Strategy v1.0", overlay = false, 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")
length = input(20, title="BB Length")
mult = input(2.0,title="BB MultFactor")
lengthKC=input(20, title="KC Length")
multKC = input(1.5, title="KC MultFactor")
useTrueRange = true
usecolor = input(true, defval = true, title = "Use color of candle")
usebody = input(true, defval = true, title = "Use EMA Body")
needbg = input(false, defval = false, title = "Show trend background")
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")
// Calculate BB
source = close
basis = sma(source, length)
dev = multKC * stdev(source, length)
upperBB = basis + dev
lowerBB = basis - dev
// Calculate KC
ma = sma(source, lengthKC)
range = useTrueRange ? tr : (high - low)
rangema = sma(range, lengthKC)
upperKC = ma + rangema * multKC
lowerKC = ma - rangema * multKC
sqzOn = (lowerBB > lowerKC) and (upperBB < upperKC)
sqzOff = (lowerBB < lowerKC) and (upperBB > upperKC)
noSqz = (sqzOn == false) and (sqzOff == false)
val = linreg(source - avg(avg(highest(high, lengthKC), lowest(low, lengthKC)),sma(close,lengthKC)), lengthKC,0)
bcolor = iff( val > 0, iff( val > nz(val[1]), lime, green), iff( val < nz(val[1]), red, maroon))
scolor = noSqz ? blue : sqzOn ? black : gray
trend = val > 0 ? 1 : val < 0 ? -1 : 0
//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 80)
//EMA Body
body = abs(close - open)
emabody = ema(body, 30) / 3
//Signals
bar = close > open ? 1 : close < open ? -1 : 0
up = trend == 1 and (bar == -1 or usecolor == false) and (body > emabody or usebody == false)
dn = trend == -1 and (bar == 1 or usecolor == false) and (body > emabody or usebody == false)
if up
strategy.entry("Long", strategy.long)
if dn
strategy.entry("Short", strategy.short)