資源の読み込みに... 荷物...

ボリンジャー帯とRSIに基づく動的コスト平均化戦略システム

作者: リン・ハーンチャオチャン,日付: 2024-11-27 16:37:12
タグ:BBRSIDCASMATP

img

概要

この戦略は,ボリンジャーバンド,相対強度指数 (RSI),ダイナミックコスト平均 (DCA) を組み合わせた定量的な取引システムである.この戦略は,市場変動の間に確立されたマネーマネジメントルールを介して自動ポジション構築を実装し,制御されたリスク実行を達成するために購入/売却信号決定のための技術指標を統合している.このシステムには,有効な取引の監視と管理のためのテイク・プロフィート論理と累積利益追跡機能も含まれている.

戦略の原則

この戦略は,次の主要な要素に基づいています.

  1. 価格変動範囲を決定するためのボリンガー帯,下帯で購入し上帯で販売することを考慮する
  2. 過剰購入/過剰販売状態の確認,過剰販売が25以下,過剰購入が75以上であることを確認するRSI
  3. DCA モジュールは,適応型資本管理のための口座資本に基づいてポジションサイズを動的に計算します.
  4. 利潤取りのモジュールは,自動的なポジション閉じるのに 5%の利潤目標を設定する.
  5. 市場状況モニタリングは,全体的な傾向を評価するために90日間の市場変化を計算します.
  6. 累積利益追跡は,戦略の業績評価のために各取引の利益/損失を記録する.

戦略 の 利点

  1. 複数の技術指標のクロスバリダーションは信号の信頼性を向上させる
  2. 動的ポジション管理は固定ポジションのリスクを回避する
  3. 合理的な利得条件で 適時利益を確保
  4. 市場動向の監視能力は,全体像を理解するのに役立ちます
  5. 利益を追跡する包括的なシステムは戦略分析を容易にする
  6. 適切に設定された警告システムは,リアルタイムでの取引機会を提供します.

戦略リスク

  1. 不安定な市場は,取引コストを増加させる頻繁にシグナルを引き起こす可能性があります.
  2. RSI インディケーターは,トレンド市場で遅れている可能性があります.
  3. 固定利回り率は 強い傾向で 早く退場するかもしれない
  4. DCA 戦略は,長期的な下落傾向において,重大な引き下げを引き起こす可能性があります. リスク管理の勧告
  • 最大位置制限を設定する
  • 市場変動に基づいてパラメータを動的に調整する
  • トレンドフィルターを追加する
  • 段階的な収益戦略を実施する

戦略の最適化方向

  1. パラメータ ダイナミック最適化:
  • ボリンジャー・バンドのパラメータは変動に適応する
  • RSI の 限界値 は 市場 サイクル に かかっ て 変化 し ます
  • DCAの配分は,口座の大きさによって調整されます.
  1. 信号システム強化:
  • 音量確認を追加する
  • トレンドライン分析を含める
  • 追加的な技術指標のクロスバリデーションを統合する
  1. リスク管理の改善
  • ダイナミックストップ・ロスを実行する
  • 最大抽出制御を追加する
  • 日々の損失制限を設定する

概要

この戦略は,技術分析とマネーマネジメントの組み合わせによる包括的な取引システムを構築する.その強みは複数の信号の確認と徹底的なリスク管理にありますが,まだライブ取引で広範なテストと最適化が必要です.パラメータ設定と追加の補助指標の継続的な改善により,この戦略は実際の取引で安定したパフォーマンスの約束を示しています.


/*backtest
start: 2023-11-27 00:00:00
end: 2024-11-26 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Combined BB RSI with Cumulative Profit, Market Change, and Futures Strategy (DCA)", shorttitle="BB RSI Combined DCA Strategy", overlay=true)

// Input Parameters
length = input.int(20, title="BB Length")  // Adjusted BB length
mult = input.float(2.5, title="BB Multiplier")  // Adjusted BB multiplier
rsiLength = input.int(14, title="RSI Length")  // Adjusted RSI length
rsiBuyLevel = input.int(25, title="RSI Buy Level")  // Adjusted RSI Buy Level
rsiSellLevel = input.int(75, title="RSI Sell Level")  // Adjusted RSI Sell Level
dcaPositionSizePercent = input.float(1, title="DCA Position Size (%)", tooltip="Percentage of equity to use in each DCA step")
takeProfitPercentage = input.float(5, title="Take Profit (%)", tooltip="Take profit percentage for DCA strategy")

// Calculate DCA position size
equity = strategy.equity  // Account equity
dcaPositionSize = (equity * dcaPositionSizePercent) / 100  // DCA position size as percentage of equity

// Bollinger Bands Calculation
basis = ta.sma(close, length)
dev = mult * ta.stdev(close, length)
upper = basis + dev
lower = basis - dev

// RSI Calculation
rsi = ta.rsi(close, rsiLength)

// Plotting Bollinger Bands and RSI levels
plot(upper, color=color.red, title="Bollinger Upper")
plot(lower, color=color.green, title="Bollinger Lower")
hline(rsiBuyLevel, "RSI Buy Level", color=color.green)
hline(rsiSellLevel, "RSI Sell Level", color=color.red)

// Buy and Sell Signals
buySignal = (rsi < rsiBuyLevel and close <= lower)
sellSignal = (rsi > rsiSellLevel and close >= upper)

// DCA Strategy: Enter Long or Short based on signals with calculated position size
if (buySignal)
    strategy.entry("DCA Buy", strategy.long)

if (sellSignal)
    strategy.entry("DCA Sell", strategy.short)

// Take Profit Logic
if (strategy.position_size > 0)  // If long
    strategy.exit("Take Profit Long", from_entry="DCA Buy", limit=close * (1 + takeProfitPercentage / 100))

if (strategy.position_size < 0)  // If short
    strategy.exit("Take Profit Short", from_entry="DCA Sell", limit=close * (1 - takeProfitPercentage / 100))

// Plot Buy/Sell Signals on the chart
plotshape(buySignal, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY", textcolor=color.white)
plotshape(sellSignal, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL", textcolor=color.white)

// Alerts for Buy/Sell Signals
alertcondition(buySignal, title="Buy Alert", message="Buy Signal Detected")
alertcondition(sellSignal, title="Sell Alert", message="Sell Signal Detected")

// Cumulative Profit Calculation
var float buyPrice = na
var float profit = na
var float cumulativeProfit = 0.0  // Cumulative profit tracker

if (buySignal)
    buyPrice := close
if (sellSignal and not na(buyPrice))
    profit := (close - buyPrice) / buyPrice * 100
    cumulativeProfit := cumulativeProfit + profit  // Update cumulative profit
    label.new(bar_index, high, text="P: " + str.tostring(profit, "#.##") + "%", color=color.blue, style=label.style_label_down)
    buyPrice := na  // Reset buyPrice after sell

// Plot cumulative profit on the chart
var label cumulativeLabel = na
if (not na(cumulativeProfit))
    if not na(cumulativeLabel)
        label.delete(cumulativeLabel)
    cumulativeLabel := label.new(bar_index, high + 10, text="Cumulative Profit: " + str.tostring(cumulativeProfit, "#.##") + "%", color=color.purple, style=label.style_label_up)

// Market Change over 3 months Calculation
threeMonthsBars = 3 * 30 * 24  // Approximation of 3 months in bars (assuming 1 hour per bar)
priceThreeMonthsAgo = request.security(syminfo.tickerid, "D", close[threeMonthsBars])
marketChange = (close - priceThreeMonthsAgo) / priceThreeMonthsAgo * 100

// Plot market change over 3 months
var label marketChangeLabel = na
if (not na(marketChange))
    if not na(marketChangeLabel)
        label.delete(marketChangeLabel)
    marketChangeLabel := label.new(bar_index, high + 20, text="Market Change (3 months): " + str.tostring(marketChange, "#.##") + "%", color=color.orange, style=label.style_label_up)

// Both labels (cumulative profit and market change) are displayed simultaneously
var label infoLabel = na
if (not na(cumulativeProfit) and not na(marketChange))
    if not na(infoLabel)
        label.delete(infoLabel)
    infoLabel := label.new(bar_index, high + 30, text="Cumulative Profit: " + str.tostring(cumulativeProfit, "#.##") + "% | Market Change (3 months): " + str.tostring(marketChange, "#.##") + "%", color=color.purple, style=label.style_label_upper_right)


関連性

もっと