先進的なボリンジャー帯移動平均グリッドトレンド追跡戦略

作者: リン・ハーンチャオチャン,日付: 2023-11-24 14:48:28
タグ:

img

概要

この戦略は,Advanced Bollinger Band Moving Average Grid Trend Tracking Strategyと名付けられている.これはトレンド決定のためにボリンジャーバンドと移動平均を使用し,トレンド方向を追跡するためにグリッドポジションを確立する戦略である.

原則

この戦略の主な考えは,

  1. 現在の市場変動幅を判断するためにボリンジャーバンドを使用する.ボリンジャーバンドの中間レールはn日間の単純な移動平均線であり,幅はn日間のATR平均幅である.

  2. ボリンジャー帯の外の4つの線は,平均の真の波動幅線の異常倍数である.この戦略は,異なるレベルの線を突破する際にポジションを確立する.

  3. EMAは,大きなサイクルのトレンド方向を決定します.大きなサイクルの上昇傾向においてだけロングで,逆の傾向でショートします.

  4. 傾向の方向にポジションを追跡し ピンバーを見ると利益を得るためにポジションを閉じます

具体的には,この戦略の主な部分は次のとおりです.

  1. ボリンジャーバンドのパラメータを決定する.ボリンジャーバンドの中間レールはn日間のSMA移動平均線であり,ボリンジャーバンドの幅はn日間のATRである.戦略におけるボリンジャー長さはnは20である.

  2. 波リンジャー帯の外に4つの拡張線を設定します.線と中間線間の距離は,平均の真波動幅の1.236倍,2.382倍,3.618倍,4.236倍です.

  3. 大きなサイクルトレンドを決定するために,高速線長が25日,遅い線長が200日である.

  4. 長いポジションを徐々に確立すると,大きなサイクル上向きの4つの線を突破します. ショートサイドは同じです.

  5. ピンバーが表示されたり,価格が再び大きなサイクル移動平均を横切ったりすると,それは利益を得るためにポジションを閉じるピンバー終了信号とみなされます.

上記は,この戦略の主な技術原理である.ボリンジャー帯を通して現在の変動範囲を判断し,大きなサイクルトレンドの下のポジションを確立することで,高い確率のポジションの最終効果を達成することができます.

利点分析

この戦略の主な利点は以下の通りです.

  1. トレンドの特徴を充分活用し,大きなサイクルのトレンド方向を決定し,不必要な逆転操作を減らすためにトレンド方向にポジションを構築します.

  2. 複数のボリンジャー線を使用することで,現在の変動幅をより明確に判断することができ,ほとんどのトレンドを把握できます.

  3. グリッドポジション法では,安定した収益を得るため,各資金単位にリスクを均等に分配できます.

  4. ピンバーの高効率のシグナルを使用して ポジションを閉じると,すぐに利益を得ることができます.

  5. 全体の戦略は,トレンド決定,グリッドポジション,特定のシグナルポジション閉じるを統合している.それは比較的成熟し,完全な定量戦略である.

リスク分析

この戦略にはいくつかのリスクもあります:

  1. 大サイクルのトレンドを誤って判定する確率は.高速および遅い移動平均値に誤りがある確率は,不要な逆転操作につながる可能性があります.

  2. ボリンガーラインのブレイクアウトの失敗の確率 ボリンガーラインは価格経路を100%正確に予測できません

  3. ピンバー信号は遅れてきて 利益を間に合わないかもしれません

  4. 大サイクルのショック調整中に重なり合っているポジションが多すぎるのが容易です.

対応する解は次のとおりです.

  1. 誤りの可能性を減らすため,高速移動平均値と遅い移動平均値を調整する.

  2. ボリンガー線を調整して ボリンガー線が可能な限り多くの変動に 固執するようにします

  3. より敏感な特定のパターンをテストして 利益のシグナルを探します

  4. 制御位置のサイズに インターバル距離を拡大します

オプティマイゼーションの方向性

戦略は以下の方向で最適化できる:

  1. 大きなサイクルのトレンド決定を最適化するために,異なる移動平均パラメータをテストします.例えば,EMA,RSIなどの他の指標をテストします.

  2. 複数のATRパラメータをテストし,ボリンガーチャネル幅設定を最適化します.ボリンガー帯が実際の変動に近いようにします.

  3. SAR,カルマン線などなどです.

  4. 格子間隔を最適化して,変動間隔をより均等に分割して重複するポジションを減らす.

  5. ストップ・ロスのメカニズムを増やし 極端な市場状況で大きな損失を回避する

概要

この戦略は,ボリンジャーチャネル,移動平均指標,特定のK線パターン,その他の技術手段の使用を統合している.大きなサイクルトレンドを決定する前提下で,移動平均値とボリンジャーバンドに基づいてトレンドトラッキンググリッド戦略を構築する.従来のボリンジャーバンドブレイクアウトと比較して,この戦略はトレンド特性の判断を追加し,不必要な逆転ポジションを削減することができる.同時に,グリッドポジション方法は,安定した収益を得るために各ユニットのリスクを多様化させる.戦略は,傾向決定,ボリンジャー幅,利益シグナル,ストップ損失方法など,複数の角度から最適化され,より安定した戦略効果を得ることができる.


/*backtest
start: 2023-10-24 00:00:00
end: 2023-11-23 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Aayonga

//@version=5
strategy("fib trend grid@Aa", overlay=true)

//回测时间
useDateFilter=input.bool(true,title = "启用回测时间范围限定(backtest)", group = "回测范围(backtest)")
backtesStarDate=input(timestamp("1 Jan 2015"),title = "开始时间(Start)", group = "回测范围(backtest)")
backtestEndDate=input(timestamp("1 Jan 2040"),title = "结束时间(finish)",group = "回测范围(backtest)")
inTradeWindow=true


//入场位 entry
bolllen=input.int(defval=20,minval=1,title="布林长度,(boll length)",group = "入场位(entry)")
sma=ta.sma(close,bolllen)
avg=ta.atr(bolllen)
fib1=input(defval=1.236,title="Fib 1",group = "入场位(entry)")
fib2=input(defval=2.382,title="Fib 2",group = "入场位(entry)")
fib3=input(defval=3.618,title="fib 3",group = "入场位(entry)")
fib4=input(defval=4.236,title="Fib 4",group = "入场位(entry)")
r1=avg*fib1
r2=avg*fib2
r3=avg*fib3
r4=avg*fib4
top4=sma+r4
top3=sma+r3
top2=sma+r2
top1=sma+r1
bott1=sma-r1
bott2=sma-r2
bott3=sma-r3
bott4=sma-r4



//趋势 plot

t4=plot(top4,title="卖 (sell)4",color=color.rgb(244, 9, 9))
t3=plot(top3,title = "卖(sell) 3",color=color.rgb(211, 8, 8))
t2=plot(top2,title="卖 (sell)2",color=color.rgb(146, 13, 13))
t1=plot(top1,title="卖(sell) 1",color=color.rgb(100, 3, 3))

b1=plot(bott1,title="买(buy1)1",color=color.rgb(4, 81, 40))
b2=plot(bott2,title="买(buy)2",color=color.rgb(15, 117, 46))
b3=plot(bott3,title = "买(buy)3",color =color.rgb(8, 176, 42) )
b4=plot(bott4,title="买(buy)4",color=color.rgb(15, 226, 103))
plot(sma,style=plot.style_cross,title="SMA",color=color.rgb(47, 16, 225))

//趋势
LengthF=input(defval = 25,title = "快线长度(fastlength)")
LengthS=input(defval=200,title = "慢线长度(slowlength)")
emaF=ta.ema(close,LengthF)
smaS=ta.sma(close,LengthS)
longTrend=emaF>smaS
longb=ta.crossover(emaF,smaS)
bgcolor(longb ? color.new(color.green,40):na,title = "多头强势(bull trend)")
shortTrend=smaS>emaF
shortb=ta.crossunder(emaF,smaS)
bgcolor(shortb ? color.new(#951313, 40):na,title = "空头强势(bear trend)")

//pinbar
bullPinBar = ((close > open) and ((open - low) > 0.6* (high - low))) or ((close < open) and ((close - low) > 0.9 * (high - low)))
//plotshape(bullPinBar  , text ="pinbar", textcolor=color.rgb(9, 168, 144),location=location.belowbar, color=color.rgb(29, 103, 67), size=size.tiny)
bearPinBar = ((close > open) and ((high - close) > 0.7 * (high - low))) or ((close < open) and ((high - open) > 0.7 * (high - low)))
//plotshape(bearPinBar  , text ="pinbar", textcolor=color.rgb(219, 12, 12),location=location.abovebar, color=color.rgb(146, 7, 7), size=size.tiny)

buy1=ta.crossunder(close,bott1) and longTrend and close>ta.ema(close,100)
buy2=ta.crossunder(close,bott2) and longTrend 
buy3=ta.crossunder(close,bott3) and longTrend 
buy4=ta.crossunder(close,bott4) and longTrend 
buyclose=bearPinBar or ta.crossunder(close,smaS)




if buy2 or buy3 or buy4 or buy1 and inTradeWindow
    strategy.order("多(buy)",strategy.long)

if buyclose  and inTradeWindow
    strategy.close("多(buy)")

sell1=ta.crossover(close,top1) and shortTrend and close<ta.ema(close,200)
sell2=ta.crossover(close,top2) and shortTrend and close<ta.ema(close,200)
sell3=ta.crossover(close,top3) and shortTrend and close<ta.ema(close,200)
sell4=ta.crossover(close,top4) and shortTrend and close<ta.ema(close,200)
sellclose=bullPinBar or ta.crossover(close,ta.sma(close,220))

if  sell1 or sell2 or sell3 or sell4 and inTradeWindow
    strategy.order("空(sell)",strategy.short)

if sellclose  and inTradeWindow
    strategy.close("空(sell)")
     

もっと