
この戦略は,ブリン帯,KC通路,線色などの複数の指標によって市場の圧縮と放出を判断し,均等線の方向と組み合わせて,トレンドの方向転換時に操作する.
ブリン帯. ブリン帯の中間軌道がN日閉盘価格の単純移動平均,上軌道が中軌道+KC通路のN日実波幅のM倍,下軌道が中軌道-KC通路のN日実波幅のM倍を計算する.
KCチャネルを計算する。KCチャネルの中軌はN日の閉盘価格の単純移動平均で,上軌は中軌+N日の実波幅のM倍,下軌は中軌-N日の実波幅のM倍である。
圧縮と放出を判断する。ブリン帯の上線がKC通道上線より低いとき,ブリン帯の下線がKC通道下線より高いとき,圧縮として,ブリン帯の上線がKC通道上線より高いとき,ブリン帯の下線がKC通道下線より低いとき,放出として。
設立トレンドを計算する. N日閉店価格 - N日最高価格と最低価格の平均値を入力して, N日線形回帰を計算し,その値は0より大きい場合は設立の上昇傾向を示し,0より小さい場合は設立の下降傾向を示します.
取引シグナル 設立が上昇すると,短陽線と解放は多行シグナル;設立が下落すると,短陰線と圧縮は空白シグナル.
複数の指標判断,信号の正確性を向上させる. ブリン帯,KCチャネル,線を組み合わせて市場の動きを判断し,偽信号を回避する.
設立のトレンド判断,トレンドで取引する. 設立の判断を利用して主要なトレンドを判断し,逆転操作を避ける.
自動ストップ,リスクコントロール. 価格がストップラインに触れたとき,自動平仓ストップ.
ブリン帯とKC通路のパラメータが正しく設定されていなければ,圧縮と解放の判断に誤りが生じます.
業界はトレンド判断に遅れており,トレンド転換点を逃しているかもしれない。
突発的な出来事は大きな損失を招くので,それを止めることは不可能で,大きな損失のリスクがあります.
最適化方法:ブリン帯とKC通路のパラメータを調整し,ADXなどの指標を補助判断に用いること. 確立平均線周期をタイムリーに更新し,遅延を軽減すること. 止損線を設定する際にバッファローンを追加すること.
KDJ,MACDなどの技術指標を組み合わせて,倉庫建設信号の正確性を向上させる.
新しいトレンドを捉えるため,Establishment平均線の周期パラメータを最適化します.
取引量指標を足し,偽突破を避ける.例えばエネルギー潮指標,蓄積/分布など.
複数の時間周期を判断し,長線と短線の信号を区別する.
AI最適化パラメータ,searched列挙,searched最適化パラメータの組み合わせ.過適合を減らす.
この戦略の主な考え方は:ブリン帯を用いて市場の圧縮と解放を判断する;確立傾向を活用して主要な傾向の方向を判断する;圧縮解放の転換点で反確立方向の操作を行う.戦略の優位性は,シグナル準確性,ストップ損失,偽信号の回避である.戦略の最適化方向は,複数の指標の組み合わせ,トレンド判断パラメータの最適化,加入量エネルギー指標,複数の時間周期判断,AI優位性の探求などである.全体的に言えば,この戦略は,市場の自己相似性および周期的動作の法則に基づいており,指標によって市場のリズムの変化を描写し,市場がエネルギー貯蔵からエネルギー放出の鍵点に転換する際に取引する.これは典型的な計量戦略である.
/*backtest
start: 2024-01-17 00:00:00
end: 2024-01-24 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//Noro
//2017
//@version=2
strategy(shorttitle = "Squeeze str 1.1", title="Noro's Squeeze Momentum Strategy v1.1", 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")
lev = input(1, defval = 1, minval = 1, maxval = 100, title = "leverage")
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
mode2 = input(true, defval = true, title = "Mode 2")
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(2018, defval = 2018, 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)
//Body
body = abs(close - open)
abody = sma(body, 10) / 3
//Indicator
bcol = iff( val > 0, iff( val > nz(val[1]), lime, green), iff( val < nz(val[1]), red, maroon))
scol = noSqz ? blue : sqzOn ? black : gray
plot(val, color=bcol, style=histogram, linewidth=4)
plot(0, color=scol, style=cross, linewidth=2)
//Signals
bar = close > open ? 1 : close < open ? -1 : 0
up1 = trend == 1 and (bar == -1 or usecolor == false) and (body > abody or usebody == false) and mode2 == false
dn1 = trend == -1 and (bar == 1 or usecolor == false) and (body > abody or usebody == false) and mode2 == false
up2 = trend == 1 and val < val[1] and mode2
dn2 = trend == -1 and val > val[1] and mode2
exit = (strategy.position_size > 0 and close > strategy.position_avg_price) or (strategy.position_size < 0 and close < strategy.position_avg_price) and mode2
//Trading
lot = strategy.position_size == 0 ? strategy.equity / close * lev : lot[1]
if up1 or up2
strategy.entry("Long", strategy.long, needlong == false ? 0 : lot)
if dn1 or dn2
strategy.entry("Short", strategy.short, needshort == false ? 0 : lot)
if exit
strategy.close_all()