
이 전략은 “OBV와 MA의 교차 신호에 기반한 OBVious MA 전략”이라고 불리며, 핵심은 OBV (On Balance Volume) 지표와 이동 평균의 교차를 사용하여 거래 신호를 생성하는 것입니다. OBV는 선도적인 트렌드 신호를 제공 할 수 있으며, 이 전략은 OBV를 이동 평균을 뚫고 진입 및 출퇴근 조건으로 사용하여 트렌드를 포착합니다. 독립적인 진입 MA와 출퇴근 MA를 동시에 사용하여 포지션 시간을 더 유연하게 제어 할 수 있습니다.
이 전략은 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)