
Strategi ini dinamakan “OBVious MA Strategy berdasarkan OBV dan MA silang isyarat strategi trend pengesanan”, terasnya adalah menggunakan OBV ((On Balance Volume) penunjuk dengan silang bergerak rata-rata untuk menghasilkan isyarat perdagangan. OBV boleh memberikan isyarat trend terkemuka, strategi ini menggunakan OBV memecahkan bergerak rata-rata sebagai masuk dan keluar syarat untuk menangkap trend.
Strategi ini mempamerkan satu kaedah yang mudah untuk mengesan trend berdasarkan OBV dan MA bersilang. Kelebihan adalah kejernihan logik, mampu menangkap trend tepat pada masanya, dengan pemisahan masuk dan keluar MA dapat mengawal kedudukan dengan fleksibel. Tetapi kelemahan adalah kekurangan langkah-langkah kawalan risiko dan cara pengesahan isyarat.
/*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)