
この戦略は,ブリン帯の双線と組み合わせた,主要技術指標として砂石移動平均を採用し,市場トレンドを識別するためのブレーカー戦略である.価格がブリン帯を突破して上線するときに見上げ,価格がブリン帯を突破して下線するときに見上げ,人気の双線突破システムに属している.
グラビルの移動平均 ((CBMA) を計算する:適応EMAの平滑グラビルの移動平均を採用し,価格変化を効果的に追跡することができる.
ブリン帯のパラメータを設定する: 中間軌道としてグラブストーン移動平均を選択し,上下軌道では標準差の胃倍数設定を採用し,市場に応じて調整することができる。
突破取引:価格が上線を突破するときに空を見,下線を突破するときに見,トレンドを追跡するブレーカー戦略を採用する.
カンセル・レッシング (CANCEL) 注文方式で,一度に1方向のみの取引を行う.
固定取引額を設定し,資金に応じて調整できます.
石移動平均は平滑性があり,価格を効果的に追跡できる.
EMAのアルゴリズムに適応して,移動平均のリアルタイム性を最適化する.
ブルインは突破の方向を明らかにした.
トレンドフォローモデルを採用し,ウィップソーを避ける.
固定取引量は1回の損失を制御する.
ブリン帯のパラメータ設定は最適化が必要で,大きすぎても小さすぎても問題がある.
突破シグナルに偽突破が発生する可能性があります.
損失をコントロールするために,ストップ・ローズを設定する必要があります.
固定取引量では,市場に応じてポジションを調整することはできません.
取引は”つの方向にしか行われないので,より大きな利益は得られません.
ブリン帯のパラメータを動的に最適化して,ブリン帯を市場状況に適したものにします.
偽突破を避けるため,さらに多くの指標をフィルターに追加します.
ストップ・ロスを追加して,利益を固定します.
投資家は,その投資の利回りによって利益を得ています.
ポジション管理システムへの加入
本策は,ブレーカー・トレンド・トラッキング・策として,自主適応の移動平均技術指標を採用し,ブリン帯双線と組み合わせて,明確なブレイク・シグナルを設定している. 策は,操作が簡単で,固定取引量はリスクが制御可能で,一定の実証価値がある. しかし,偽ブレイクやパラメータ・最適化などの問題もある. これは,より多くの技術指標を追加して最適化する必要があり,リスクを制御しながら,戦略の実証効果をさらに向上させる.
/*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")