LazyBear 圧縮モメンタム指標に基づく定量取引戦略


作成日: 2024-02-05 14:48:01 最終変更日: 2024-02-05 14:48:01
コピー: 0 クリック数: 1698
1
フォロー
1617
フォロワー

LazyBear 圧縮モメンタム指標に基づく定量取引戦略

概要

この戦略は,LazyBearの圧縮動量指標をベースに,動量フィルターを追加し,データソースを変更し,リスク管理システムを追加し,波動的な圧縮後の価格爆発をキャプチャするためにカスタマイズ可能な回帰時間帯を追加しました.

戦略原則

この戦略は,ブリン帯指数とケルトナーチャネル指数を用いて価格チャネルを計算し,価格がチャネルを突破すると,波動性の増大の信号として捉えます.これは,LazyBearの圧縮動量指数と組み合わせて,線形回帰の方法を使用して価格動量方向を判断します.

戦略は,動量フィルターを追加し,動量絶対値が値を超えるとのみ取引信号を発信する.波動的圧縮 ((チャネル内緊縮)),動量フィルターが通過すると,戦略はトレンドの方向を判断し,オーバーまたは空きをする.同時に,リスクを管理するために止損,停止,ストップを追跡する.

優位分析

この戦略は,複数の指標判断を統合し,比較的に包括的であり,リスク管理機構を組み込み,単一損失を制限し,波動性の圧縮後に価格傾向の方向をタイムリーに判断し,パラメータはカスタマイズでき,適応性が強い.

リスク分析

リスクは主に次のとおりである.偽の突破は誤った判断につながり,パラメータの設定は不適切で,時効的に逆転できず,ストップロスは突破によって損失が拡大される.パラメータを最適化し,リスク管理パラメータを調整し,適切な品種と取引時期を選択することで,これらのリスクを軽減することができる.

最適化の方向

取引量指標など,他の指標のフィルター信号と組み合わせて検討することができる. 動量値の値下げをより正確に調整する. リスクをさらに制御するために,撤回ストップを設定する. より多くの品種データ効果をテストする. これらの最適化は,戦略をより安定させ,一般化することができます.

要約する

この戦略は,価格の傾向と変動をより全面的に判断し,統合度が高く,リスク管理策がより完善であり,最適化方向に応じてさらなる改善が可能であり,波動性の圧縮後の価格爆発に強い適応性を持っています.

ストラテジーソースコード
/*backtest
start: 2024-01-05 00:00:00
end: 2024-02-04 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @version=4
// Strategy based on LazyBear Squeeze Momentum Indicator
// © Bitduke
// All scripts: https://www.tradingview.com/u/Bitduke/#published-scripts

strategy(shorttitle="SMS", title="Squeeze Momentum Strategy", overlay=false )

length = input(12, title="BB Length")
mult = input(2.0, title="BB MultFactor")
lengthKC = input(16, title="KC Length")
mult_kc = input(1.5, title="KC MultFactor")


//FILTERS
useMomAverage = input(false, title="Filter for Momenutum value", type=input.bool)
MomentumMin = input(20, title="Min for momentum")

// Calculate BB
src = ohlc4

ma_1 = sma(src, length)
ma_2 = sma(src, lengthKC)
range_ma = sma(high - low, lengthKC)

dev = mult * stdev(src, length)

upper_bb = ma_1 + dev
lower_bb = ma_1 - dev

upper_kc = ma_2 + range_ma * mult_kc
lower_kc = ma_2 - range_ma * mult_kc

sqz_on = lower_bb > lower_kc and upper_bb < upper_kc
sqz_off = lower_bb < lower_kc and upper_bb > upper_kc
no_sqz = sqz_on == false and sqz_off == false

val = linreg(src - avg(avg(highest(hl2, lengthKC), lowest(low, lengthKC)), sma(hl2, lengthKC)), lengthKC, 0)

bcolor = iff(val > 0, iff(val > nz(val[1]), color.lime, color.green), iff(val < nz(val[1]), color.red, color.maroon))
scolor = no_sqz ? color.blue : sqz_on ? color.black : color.aqua
plot(val, color=bcolor, style=plot.style_histogram, linewidth=4)
plot(0, color=scolor, style=plot.style_cross, linewidth=2)

//LOGIC
//momentum filter
filterMom = useMomAverage ? abs(val) > MomentumMin / 100000 ? true : false : true

//standard condition
longCondition = scolor[1] != color.aqua and scolor == color.aqua and bcolor == color.lime and filterMom
exitLongCondition = bcolor == color.green
shortCondition = scolor[1] != color.aqua and scolor == color.aqua and bcolor == color.red and filterMom
exitShortCondition = bcolor == color.maroon

// Risk Management Sysyem
stop_loss = input(defval = 600, title="Stop Loss", minval = 0)
take_profit = input(defval = 1000, title="Take Profit", minval = 0)
trailing_stop = input(defval = 20, title="Trailing Stop", minval = 0)
// If the zero value is set for stop loss, take profit or trailing stop, then the function is disabled
s_loss = stop_loss >= 1 ? stop_loss : na
tk_profit = take_profit >= 1 ? take_profit : na
tr_stop = trailing_stop >= 1 ? trailing_stop : na


//STRATEGY
strategy.entry("SQ_Long", strategy.long, when=longCondition)
strategy.exit("Exit Long", from_entry = "SQ_Long", profit = take_profit, trail_points = trailing_stop, loss = s_loss)
strategy.close("SQ_Long", exitLongCondition)

strategy.entry("SQ_Short", strategy.short, when=shortCondition)
strategy.exit("Exit Short", from_entry = "SQ_Short", profit = take_profit, trail_points = trailing_stop, loss = s_loss )
strategy.close("SQ_Short", when=exitShortCondition)