移動平均ダブルトラックブルベア戦略


作成日: 2023-11-06 16:25:01 最終変更日: 2023-11-06 16:25:01
コピー: 1 クリック数: 646
1
フォロー
1617
フォロワー

移動平均ダブルトラックブルベア戦略

概要

この戦略は,ブリン帯の双線と組み合わせた,主要技術指標として砂石移動平均を採用し,市場トレンドを識別するためのブレーカー戦略である.価格がブリン帯を突破して上線するときに見上げ,価格がブリン帯を突破して下線するときに見上げ,人気の双線突破システムに属している.

戦略原則

  1. グラビルの移動平均 ((CBMA) を計算する:適応EMAの平滑グラビルの移動平均を採用し,価格変化を効果的に追跡することができる.

  2. ブリン帯のパラメータを設定する: 中間軌道としてグラブストーン移動平均を選択し,上下軌道では標準差の胃倍数設定を採用し,市場に応じて調整することができる。

  3. 突破取引:価格が上線を突破するときに空を見,下線を突破するときに見,トレンドを追跡するブレーカー戦略を採用する.

  4. カンセル・レッシング (CANCEL) 注文方式で,一度に1方向のみの取引を行う.

  5. 固定取引額を設定し,資金に応じて調整できます.

優位分析

  1. 石移動平均は平滑性があり,価格を効果的に追跡できる.

  2. EMAのアルゴリズムに適応して,移動平均のリアルタイム性を最適化する.

  3. ブルインは突破の方向を明らかにした.

  4. トレンドフォローモデルを採用し,ウィップソーを避ける.

  5. 固定取引量は1回の損失を制御する.

リスク分析

  1. ブリン帯のパラメータ設定は最適化が必要で,大きすぎても小さすぎても問題がある.

  2. 突破シグナルに偽突破が発生する可能性があります.

  3. 損失をコントロールするために,ストップ・ローズを設定する必要があります.

  4. 固定取引量では,市場に応じてポジションを調整することはできません.

  5. 取引は”つの方向にしか行われないので,より大きな利益は得られません.

最適化の方向

  1. ブリン帯のパラメータを動的に最適化して,ブリン帯を市場状況に適したものにします.

  2. 偽突破を避けるため,さらに多くの指標をフィルターに追加します.

  3. ストップ・ロスを追加して,利益を固定します.

  4. 投資家は,その投資の利回りによって利益を得ています.

  5. ポジション管理システムへの加入

要約する

本策は,ブレーカー・トレンド・トラッキング・策として,自主適応の移動平均技術指標を採用し,ブリン帯双線と組み合わせて,明確なブレイク・シグナルを設定している. 策は,操作が簡単で,固定取引量はリスクが制御可能で,一定の実証価値がある. しかし,偽ブレイクやパラメータ・最適化などの問題もある. これは,より多くの技術指標を追加して最適化する必要があり,リスクを制御しながら,戦略の実証効果をさらに向上させる.

ストラテジーソースコード
/*backtest
start: 2023-10-29 00:00:00
end: 2023-11-05 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="CBMA Bollinger Bands Strategy directed [ChuckBanger]", shorttitle="CBMA BB CB", 
   overlay=true )


length = input(title="Length", type=input.integer, defval=12, minval=1)
regular = input(title="Regular BB Or CBMA?", type=input.bool, defval=false)
src = input(title="Source", type=input.source, defval=close)
mult = input(title="Multipler", type=input.float, defval=2.3, minval=.001, maxval=50, step=.1)
emaLen = input(title="EMA Length", type=input.integer, defval=11, minval=1)
emaGL = input(title="EMA Gain Limit", type=input.integer, defval=50, minval=1)
highlight = input(title="Highlight On/Off", type=input.bool, defval=true)

direction = input(0, title = "Strategy Direction", type=input.integer, minval=-1, maxval=1)

strategy.risk.allow_entry_in(direction == 0 ? strategy.direction.all : (direction < 0 ? strategy.direction.short : strategy.direction.long))

//strategy.risk.max_drawdown(50, strategy.percent_of_equity)

calc_hma(src, length) =>
    hullma = wma(2*wma(src, length/2)-wma(src, length), round(sqrt(length)))
    hullma

calc_cbma(price, length, emaLength, emaGainLimit) =>
    alpha = 2 / (emaLength + 1)
    ema = ema(price, emaLength)
    int leastError = 1000000
    
    float ec = 0
    float bestGain = 0
    
    for i = emaGainLimit to emaGainLimit
        gain = i / 10
        ec := alpha * ( ema + gain * (price - nz(ec[1])) ) + (1 - alpha) * nz(ec[1])
        error = price - ec
        if (abs(error) < leastError)
            leastError = abs(error)
            bestGain = gain
    
    ec := alpha * ( ema + bestGain * (price - nz(ec[1])) ) + (1 - alpha) * nz(ec[1])
    hull = calc_hma(price, length)
    
    cbma = (ec + hull) / 2
    cbma

cbma = calc_cbma(src, length, emaLen, emaGL)
basis = regular ? sma(src, length) : cbma
dev = mult * stdev(src, length)
upper = basis + dev
lower = basis - dev
cbmaColor = fixnan(highlight and not regular ? cbma > high ? color.purple : cbma < low ? color.aqua : na : color.red)
plot(basis, color=cbmaColor)
p1 = plot(upper, color=color.blue)
p2 = plot(lower, color=color.blue)
fill(p1, p2)

if (crossover(src, lower))
    strategy.entry("CBMA_BBandLE", strategy.long, stop=lower, oca_name="BollingerBands", comment="CBMA_BBandLE")
else
    strategy.cancel(id="CBMA_BBandLE")

if (crossunder(src, upper))
    strategy.entry("CBMA_BBandSE", strategy.short, stop=upper, oca_name="BollingerBands", comment="CBMA_BBandSE")
else
    strategy.cancel(id="CBMA_BBandSE")