ボリンジャー・バンド,移動平均値,MACDの組み合わせた取引戦略

作者: リン・ハーンチャオチャン, 日付: 2024-02-04 15:42:23
タグ:

img

戦略の概要

この戦略は,ボリンジャーバンド,移動平均値,MACDを組み合わせて,比較的完全な取引システムを形成します.市場傾向を判断する一方で,いくつかの逆転機会を捉えることもできます.

戦略名と理由

この戦略は"三角アンカリングトレンドトラッキング戦略"と呼ばれる.この名称は,トレンド方向とアンカリングエントリーポイントを決定するために3つの技術指標を使用することを強調する.

取引の基本論理は

  1. トレンド方向を判断します.市場が上昇傾向か下落傾向段階にあるかどうかを判断するために,ボリンジャーミッドバンド,EMAとMACDゼロラインを比較します.

  2. エントリー機会を見つけます.トレンドが特定された後,EMAがBBミッドバンドを横切るか,MACDヒストグラムがシグナルラインを横切るかチェックします.

  3. 利益目標とストップ損失を設定します.入力すると,固定目標とストップ損失レベルが事前に設定されます.

利点分析

この戦略の最大の利点は,トレンド,移動平均,MACDのツールが決定を導くのに同時に使用されていることです. これにより,市場の動向をより正確に判断することができ,またいくつかの逆転を把握するのに役立ちます.

第一に,BB Mid Band は,現在の主要な傾向の方向性を明確に反映しています.EMA の役割は,傾向の進行を追跡することです.それらの比較と組み合わせは,傾向をより正確に識別することができます.

第二に,BB自体には強い封筒特性があります. 中央帯の周りの領域は,特定のサポート/レジスタンスレベルも示しています.したがって,EMAクロスオーバーは信号値を持っています.

さらに,MACDは上昇/下落の勢力の上昇と衰退を測定する.その絶対サイズは,高または低群衆の感情を表し,潜在的な逆転を暗示する.

最後に,事前に設定された利益目標とストップロスは,個々の取引のリスク/報酬を制御し,全体的な安定を確保します.

リスク分析

複数の分析ツールが使用されているにもかかわらず,主なリスクは以下のとおりです.

  1. BBのパラメータが不適切で,主要な傾向がはっきりと反映されない.

  2. EMAシステムからの信号は長引くが MACDは肯定的な動きをしない. 下落力は拡大する可能性がある.

  3. 利益目標/ストップ損失範囲が大きすぎる 単一の取引損失が広がる

主な解決策は以下の通りです

  1. BB パラメータを調整して 中間帯が主要トレンドを効果的に反映することを確認します

  2. 牛/熊の勢いを判断するための より多くの技術指標を導入します

  3. 過去の取引を評価し,利益目標/ストップ損失を最適化します.

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

この戦略は,次の側面においてさらに改善することができる.

  1. KDJ,ATRなどの指標を導入し,傾向判断を助け,正確性を向上させる.

  2. トレイリングストップ,ブレイクアウトストップなどより洗練されたストップを導入します

  3. 異なる製品のパフォーマンスを評価し 市場条件に合わせて パラメータを調整します

  4. バックテストの結果をベースに 戦略をテストし 調整する 異なる時間枠と市場

  5. 自動パラメータ最適化と動的戦略更新のための機械学習を組み込む.

結論

この戦略は,BB,MA,MACDを一緒に活用している.明確なトレンド判断,特定の封筒特性を持ち,いくつかの逆転も把握している.入口/出口を判断するためのより多くの補助ツールにより,より信頼性の高いパフォーマンスを達成することができる.この戦略のさらなる評価と強化は正当化されており,強力な定量的なツールを生成することが期待されている.


/*backtest
start: 2024-01-04 00:00:00
end: 2024-02-03 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Combined Strategy", overlay=true, shorttitle="Comb Strat", default_qty_type=strategy.percent_of_equity, default_qty_value=10)

// Precio de beneficio y Stop Loss
takeProfitTicks = 87636
stopLossTicks = 53350

// Bollinger Bands + EMA
length_bb = input(150, title="BB Length")
src_bb = input(close, title="BB Source")
mult = input(2.0, title="BB StdDev")
basis = ta.sma(src_bb, length_bb)
dev = mult * ta.stdev(src_bb, length_bb)
upper = basis + dev
lower = basis - dev

len_ema = input(34, title="EMA Length")
src_ema = input(close, title="EMA Source")
out_ema = ta.ema(src_ema, len_ema)

typeMA = input("SMA", title="Method")
smoothingLength = input(5, title="Length")

var float smoothingLine = na
if (typeMA == "SMA")
    smoothingLine := ta.sma(out_ema, smoothingLength)
else if (typeMA == "EMA")
    smoothingLine := ta.ema(out_ema, smoothingLength)

// MACD
fast_length = input(title="Fast Length", defval=9)
slow_length = input(title="Slow Length", defval=17)
src_macd = input(title="Source", defval=close)
signal_length = input.int(title="Signal Smoothing", minval=1, maxval=50, defval=9)
sma_source = input.string(title="Oscillator MA Type", defval="EMA", options=["SMA", "EMA"])
sma_signal = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"])

fast_ma = sma_source == "SMA" ? ta.sma(src_macd, fast_length) : ta.ema(src_macd, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(src_macd, slow_length) : ta.ema(src_macd, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
hist = macd - signal

// Condiciones de compra y venta
longCondition = (out_ema > basis) and (macd > signal) and (signal > 0)
shortCondition = (out_ema < basis) and (macd < signal) and (signal < 0)

// Variables de estado
var bool longExecuted = na
var bool shortExecuted = na

// Estrategia
if (longCondition and not longExecuted)
    strategy.entry("Long", strategy.long)
    longExecuted := true
    shortExecuted := na
if (shortCondition and not shortExecuted)
    strategy.entry("Short", strategy.short)
    shortExecuted := true
    longExecuted := na

// Take Profit y Stop Loss para Compras y Ventas Cortas
strategy.exit("Take Profit/Close Long", from_entry="Long", profit=takeProfitTicks, loss=stopLossTicks)
strategy.exit("Take Profit/Close Short", from_entry="Short", profit=takeProfitTicks, loss=stopLossTicks)

// Cierre de posiciones cuando la dirección cambia
if ((out_ema < basis) and (macd < signal))
    strategy.close("Long")
    longExecuted := na
if ((out_ema > basis) and (macd > signal))
    strategy.close("Short")
    shortExecuted := na

// Plots
plot(basis, "BB Basis", color=#FF6D00)
plot(upper, "BB Upper", color=color.new(#2962FF, 0.5))
plot(lower, "BB Lower", color=color.new(#2962FF, 0.5))

plot(smoothingLine, title="Smoothing Line", color=#f37f20, linewidth=2)

hline(0, "Zero Line", color=color.new(#787B86, 50))
plot(hist, title="Histogram", style=plot.style_columns, color=(hist >= 0 ? (hist[1] < hist ? color.green : color.red) : (hist[1] < hist ? color.red : color.green)))
plot(macd, title="MACD", color=color.blue)
plot(signal, title="Signal", color=color.orange)


もっと