これは,LazyBear
この戦略のコアインジケーターは,レジーベア
ストラテジーは,21期ボリンジャーバンドを計算し,価格の標準偏差が2倍になる.同時に,価格幅の1.5倍の幅の20期ケルターチャンネルを計算する.ボルリンジャーバンドがケルターチャンネルに圧縮されると,圧縮信号が起動する.また,ストラテジーは,一定の期間で価格の自分の価格チャネルの真ん中点との関係で価格の勢いを計算する.圧縮が発生すると,勢力の指標の方向性と組み合わせて,購入するか売却するかを決定する.
出口の場合,モメントインジケーターの色が灰色に変わると,圧縮状態が終了し,トレンドが逆転する可能性があります.
これらの指標の全体的な関係を判断することで,取引決定の正確性が向上し,誤った取引の確率が減少します.
モメントスプレイス戦略は,市場が突発する可能性のある重要なポイントを捕捉することができる.これらのポイントは,しばしば市場が重要な方向判断を行う転換点である.正しく判断された場合,後の市場の動きは比較的長くなるので,戦略の潜在的な利益空間は大きい.
ランダムブレイクトレードと比較して,この戦略で選択されたエントリーポイントは,ボリンジャーバンドとケルターチャネル間の絞り点にあります.統合指標判断により,取引成功率は非常に高いです.
ボリンジャー帯とケルターチャネルのサイクルパラメータと帯域幅パラメータは,取引結果に大きな影響を与える.パラメータが不適切に設定された場合,誤判が発生する可能性があります.これは多くのバックテストを通じて最適なパラメータを見つける必要があります.
この戦略によって選択されたポイントを突破した後,価格が引き戻し,損失を引き起こすリスクは常にあります.損失を制御するために,これは厳格に停止する必要があります.
圧縮状態が終わると,この戦略はすべてのポジションを閉じます.しかし,時には価格トレンドが依然として継続し,早期出口の危険性があります.出口ロジックは最適化する必要があります.
バックテストのデータ試用により,戦略のパフォーマンスを向上させるため,より良いサイクルと帯域幅パラメータの設定を見つけることができます.
価格が逆転するとすぐに損失を削減するために移動または振動停止を設定します.
戦略がポジションを終了すると,傾向が続く場合,市場復帰のために特定の再入場条件を設定することができます.
他の変動指標,ボリューム指標など,さまざまなタイプの指標を多く組み込むことを試み,決定の正確性を向上させるため,指標統合の複合戦略を確立します.
この戦略はボリンジャーバンド,ケルターチャネル,モメントインジケーターを統合している.これらのインジケーター間の関係を判断することで,高い成功率のブレイクアウトポイントに入ります.パラメータ最適化,ストップロスの戦略,再エントリー条件,複合インジケーター統合などの多くの側面で最適化スペースがあります.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 //All credits to LazyBear. All I did was turn it into a strategy! strategy(title = "SQZMOM STRAT", overlay=false) // --- GENERAL INPUTS --- FromMonth = input(defval = 4, title = "From Month", minval = 1, maxval = 12) FromYear = input(defval = 2020, title = "From Year", minval = 2012) ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) ToYear = input(defval = 9999, title = "To Year", minval = 2017) FromDay = 1 ToDay = 1 start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window window() => true get_round(value, precision) => round(value * (pow(10, precision))) / pow(10, precision) trade_leverage = input(1, title = "Trade - Leverage", step = 0.25) trade_risk = input(100, title = "Trade - Risk Percent", type = input.float, step = 0.1, minval = 0.1, maxval = 100) tradeType = input("LONG", title="What trades should be taken : ", options=["LONG", "SHORT", "BOTH"]) // --- SQZMOM CODE length = input(21, title="BB Length") mult = input(2.0,title="BB MultFactor") lengthKC=input(20, title="KC Length") multKC = input(1.5, title="KC MultFactor") useTrueRange = input(true, title="Use TrueRange (KC)", type=input.bool) // 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 = color.gray if (val > 0 and val > nz(val[1])) bcolor := color.green if (val < 0 and val < nz(val[1])) bcolor := color.red scolor = noSqz ? color.blue : sqzOn ? color.black : color.gray plot(val, color=bcolor, style=plot.style_histogram, linewidth=4) plot(0, color=scolor, style=plot.style_cross, linewidth=2) // --- VWMA CODE --- useVWMA = input(false, title = "Use VWMA to selectively long/short?", type = input.bool) lengthVWMA=input(42, title = "VWMA Length", step = 1, minval = 1) useCV=input(false, type=input.bool, title="Use Cumulative Volume for VWMA?") nbfs = useCV ? cum(volume) : sum(volume, lengthVWMA) medianSrc=close calc_evwma(price, lengthVWMA, nb_floating_shares) => data = (nz(close[1]) * (nb_floating_shares - volume)/nb_floating_shares) + (volume*price/nb_floating_shares) m=calc_evwma(medianSrc, lengthVWMA, nbfs) // ---STRATEGY--- if ((tradeType == "LONG" or tradeType == "BOTH") and (m>0 or useVWMA == false)) longCondition = (val > 0 and noSqz == 0 and sqzOn == 0 and sqzOn[1] == 1) if (longCondition) contracts = get_round((strategy.equity * trade_leverage / close) * (trade_risk / 100), 4) strategy.entry("LONG", strategy.long, qty = contracts, when = window()) if((tradeType == "SHORT" or tradeType == "BOTH") and (m<0 or useVWMA == false)) shortCondition = (val < 0 and noSqz == 0 and sqzOn == 0 and sqzOn[1] == 1) if (shortCondition) contracts = get_round((strategy.equity * trade_leverage / close) * (trade_risk / 100), 4) strategy.entry("SHORT", strategy.short, qty = contracts, when = window()) if (bcolor == color.gray) strategy.close("LONG") strategy.close("SHORT")