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

OBVとMAのクロスオーバー信号に基づいた戦略をフォローする傾向

作者: リン・ハーンチャオチャン,日付: 2024-04-29 13:48:58
タグ:OBVマルチSMA

img

概要

OBVious MA戦略: OBVとMAクロスオーバーシグナルに基づくトレンドフォロー戦略と呼ばれるこの戦略は,取引シグナルを生成するために,オンバランスボリューム (OBV) インジケーターと移動平均値のクロスオーバーを利用する.OBVは主要なトレンドシグナルを提供することができ,この戦略は,トレンドを把握するためのエントリーと出口条件として移動平均値以上のまたは以下のOBVブレイクを使用する.分離したエントリーと出口MAを使用して,保持期間に対するより柔軟な制御を可能にします.この戦略はシンプルなデモですが,ボリューム分析のためにOBVを効果的に使用する方法を示しています.

戦略の原則

  1. OBV指標値を計算する.現在の閉店価格が前のキャンドルより高くなった場合,現在のボリュームをOBVに追加する.そうでなければボリュームを引く.
  2. OBVの4つの移動平均を計算する:長期長期入口MA,長期長期出口MA,短期短期入口MA,短期短期出口MA.
  3. 取引信号を生成する:
    • OBVが長期ロングエントリーMAを超え,方向フィルタがショートに設定されていない場合,ロングポジションを開く.
    • OBVが長期長期出口MAを下回ると,ロングポジションを閉じる.
    • OBVが短期短入口MAを下回り,方向フィルタが長に設定されていない場合,ショートポジションを開く.
    • OBVが短期短出口MAを超えると,ショートポジションを閉じる.
  4. 取引管理:逆の信号が生成された場合,新しいポジションを開く前に元のポジションは閉鎖されます.

戦略 の 利点

  1. トレンドの開始時にポジションを確立するために OBV の主要なトレンド信号を完全に利用します
  2. 入口と出口MAsを分離することで,入口と出口のタイミングを独立して最適化できます.
  3. コードの論理は シンプルで明瞭で 分かりやすく 改善できます
  4. 方向フィルタを導入することで,頻繁に取引を避け,コストを削減できます.

戦略リスク

  1. 他の確認指標がないため,誤った信号を生む可能性があります.他の指標と併用することをお勧めします.
  2. ストップ損失とポジション管理が欠け,単一の取引損失の拡大のリスクに直面します.合理的なストップ損失とマネー管理措置を追加することができます.
  3. 不適切なパラメータ選択は,戦略のパフォーマンスに影響を与える.パラメータは,異なる市場特性と時間枠に基づいて最適化する必要があります.

戦略の最適化方向

  1. 信号の質を改善するために,MA方向,ATRなどトレンドフィルターを導入することを検討する.
  2. OBVでは,EMA,WMAなど,異なる速度のトレンドを把握するために,さまざまなタイプのMAsを使用できます.
  3. ポジション管理を最適化します.例えば,トレンド強度が上昇するときにポジションを追加し,減少するときにポジションを減らすためにスケーリング戦略を使用します.
  4. MVA,PVTなどの他の量と価格指標と組み合わせて,勝利率を改善するための共同信号を構築します.

概要

この戦略は,OBVとMAクロスオーバーに基づくシンプルなトレンドフォロー方法を示している.その利点は明確な論理,タイムリーなトレンドキャプチャ,そして別々のエントリーとエグジットMAを通じて柔軟な保持制御である.しかし,そのデメリットにはリスク制御対策や信号確認方法の欠如が含まれている.より強力な戦略パフォーマンスを獲得するために,トレンドフィルタリング,パラメータ最適化,ポジション管理,および共同信号などの分野では改善が可能である.この戦略は,他の戦略と組み合わせて使用されるガイド信号としてより適している.


/*backtest
start: 2023-04-23 00:00:00
end: 2024-04-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © ThousandX_Trader

//@version=5
strategy(title="OBVious MA Strategy [1000X]", overlay=false, 
         initial_capital=10000, margin_long=0.1, margin_short=0.1,
         default_qty_type=strategy.percent_of_equity, default_qty_value=100,
         slippage=1, commission_type=strategy.commission.percent, commission_value=0.1)

// Direction Input ///
tradeDirection = input.string("long", title="Direction", options=["long", "short"], group = "Direction Filter")

    ///////////////////////////////////////
   //  1000X OBV MA INDICATOR           //
  ///////////////////////////////////////

// OBV Trend Length Inputs //
long_entry_length = input(190, title="Long Entry MA Length", group = "Moving Average Settings")
long_exit_length = input(202, title="Long Exit MA Length", group = "Moving Average Settings")
short_entry_length = input(395, title="Short MA Entry Length", group = "Moving Average Settings")
short_exit_length = input(300, title="Short Exit MA Length", group = "Moving Average Settings")

// OBV Calculation
obv = ta.cum(ta.change(close) >= 0 ? volume : -volume)

// Calculate OBV Moving Averages
obv_ma_long_entry = ta.sma(obv, long_entry_length)
obv_ma_long_exit = ta.sma(obv, long_exit_length)
obv_ma_short_entry = ta.sma(obv, short_entry_length)
obv_ma_short_exit = ta.sma(obv, short_exit_length)

   ///////////////////////////////////////
  //         STRATEGY RULES            //
 ///////////////////////////////////////

longCondition = ta.crossover(obv, obv_ma_long_entry) and tradeDirection != "short" and strategy.position_size <= 0
longExitCondition = ta.crossunder(obv, obv_ma_long_exit)
shortCondition = ta.crossunder(obv, obv_ma_short_entry) and tradeDirection != "long" and strategy.position_size >= 0
shortExitCondition = ta.crossover(obv, obv_ma_short_exit)

  ///////////////////////////////////////
 //         ORDER EXECUTION           //
///////////////////////////////////////

// Close opposite trades before entering new ones
if (longCondition and strategy.position_size < 0)
    strategy.close("Short Entry")

if (shortCondition and strategy.position_size > 0)
    strategy.close("Long Entry")

// Enter new trades
if (longCondition)
    strategy.entry("Long Entry", strategy.long)

if (shortCondition)
    strategy.entry("Short Entry", strategy.short)

// Exit conditions
if (longExitCondition)
    strategy.close("Long Entry")

if (shortExitCondition)
    strategy.close("Short Entry")

  ///////////////////////////////////////
 //            PLOTTING               //
///////////////////////////////////////

// Plot OBV line with specified color
plot(obv, title="OBV", color=color.new(#2962FF, 0), linewidth=1)

// Conditionally plot Long MAs with specified colors based on Direction Filter
plot(tradeDirection == "long" ? obv_ma_long_entry : na, title="Long Entry MA", color=color.new(color.rgb(2, 130, 228), 0), linewidth=1)
plot(tradeDirection == "long" ? obv_ma_long_exit : na, title="Long Exit MA", color=color.new(color.rgb(106, 168, 209), 0), linewidth=1)

// Conditionally plot Short MAs with specified colors based on Direction Filter
plot(tradeDirection == "short" ? obv_ma_short_entry : na, title="Short Entry MA", color=color.new(color.rgb(163, 2, 227), 0), linewidth=1)
plot(tradeDirection == "short" ? obv_ma_short_exit : na, title="Short Exit MA", color=color.new(color.rgb(192, 119, 205), 0), linewidth=1)


関連性

もっと