OBV সূচকের উপর ভিত্তি করে ট্রেন্ড অনুসরণ কৌশল


সৃষ্টির তারিখ: 2024-02-20 15:35:08 অবশেষে সংশোধন করুন: 2024-02-20 15:35:08
অনুলিপি: 0 ক্লিকের সংখ্যা: 910
1
ফোকাস
1621
অনুসারী

OBV সূচকের উপর ভিত্তি করে ট্রেন্ড অনুসরণ কৌশল

ওভারভিউ

এই কৌশলটি ডাবল ইএমএ গড়রেখার স্পেসিফিকেশন ব্যবহার করে ওবিভি সূচকটির বহুমুখী প্রবণতা বিচার করে এবং প্রবণতার দিকনির্দেশের উপর ভিত্তি করে দীর্ঘ-স্বল্প পদ্ধতি গ্রহণ করে। যার মধ্যে ওবিভি সূচকটি মূল্য এবং লেনদেনের পরিমাণের সম্পর্ককে আরও স্পষ্টভাবে প্রতিফলিত করতে পারে এবং বাজারের অংশগ্রহণকারীদের ইচ্ছার বিষয়ে বিচার করতে পারে, তাই এটি বাজারের প্রবণতা ক্যাপচার করতে ব্যবহার করা যেতে পারে। এই কৌশলটি চলমান গড়ের সাথে সংযুক্ত সূচকের মসৃণ প্রক্রিয়াকরণকে কার্যকরভাবে বাজারের শব্দকে সরিয়ে দেয় এবং মূল প্রবণতা ক্যাপচার করে।

কৌশল নীতি

এই কৌশলটি মূলত ওবিভি সূচকটি উত্থানের প্রবণতায় রয়েছে কিনা তার উপর ভিত্তি করে মাল্টিহেড প্রবেশের সময় নির্ধারণ করে। বিশেষত, ওবিভির 6 দিনের ইএমএ এবং 24 দিনের ইএমএ গণনা করা হয়, যখন 6 দিনের ইএমএ 24 দিনের ইএমএ অতিক্রম করে তখন মাল্টিহেড সংকেত তৈরি হয়। একইভাবে, যখন 6 দিনের ইএমএ 24 দিনের ইএমএ অতিক্রম করে তখন খালি মাথা সংকেত তৈরি হয়। এছাড়াও, কৌশলটি 3% স্টপ লসও সেট করে।

এই কৌশলটি ট্রেন্ড নির্ধারণের জন্য গুরুত্বপূর্ণ যে OBV সূচকগুলি। OBV সূচকগুলি বড় তহবিলের সম্মিলিত ইচ্ছাকে প্রতিফলিত করে, যা কার্যকরভাবে বাজারের অংশগ্রহণকারীদের মনোভাবকে প্রতিফলিত করে। চলমান গড়ের সাথে মিলিত হয়ে, কিছু শব্দ মুছে ফেলা যেতে পারে, যা সংকেতকে আরও পরিষ্কার এবং নির্ভরযোগ্য করে তোলে। কৌশলটি দ্রুত EMA লাইন এবং ধীর EMA লাইন ব্যবহার করে ট্রেডিং সংকেত তৈরি করে, যা মূল্যের ডেটা মসৃণ করতে পারে এবং একই সাথে প্রবণতা পরিবর্তনকে আরও সংবেদনশীলভাবে ধরতে পারে।

সামর্থ্য বিশ্লেষণ

এই কৌশলটির বেশ কিছু সুবিধা রয়েছেঃ

  1. ওবিভি সূচকটি ব্যবসায়ের পরিমাণের উপর ভিত্তি করে বাজারের অংশগ্রহণকারীদের ইচ্ছাকে স্পষ্টভাবে নির্ধারণ করতে পারে, এবং সংকেতটি আরও নির্ভরযোগ্য।

  2. ডাবল ইএমএ সমান্তরাল প্রক্রিয়াকরণ আংশিক গোলমাল মুছে ফেলতে পারে, যাতে সংকেত আরও পরিষ্কার হয়।

  3. দ্রুত এবং ধীর ইএমএ লাইন সমন্বয় ব্যবহার করে সমতল মূল্য এবং প্রবণতা পরিবর্তন ক্যাপচার করতে পারে।

  4. কৌশলটি সহজ এবং বাস্তবায়িত করা সহজ।

ঝুঁকি বিশ্লেষণ

এই কৌশলটির কিছু ঝুঁকিও রয়েছেঃ

  1. OBV সূচকটি কিছু সময়ে ভুল সংকেত দেয়, যার ফলে কৌশলটি ক্ষতিগ্রস্ত হতে পারে।

  2. ইএমইএ লাইনগুলি তীব্র পরিস্থিতিতে বিলম্বিত হয় এবং সম্ভবত সর্বোত্তম প্রবেশের পয়েন্টগুলি মিস করে।

  3. স্থির স্টপ লস সেটিংগুলি বাজারের পরিবর্তনের সাথে খাপ খাইয়ে নিতে পারে না।

প্রতিকারঃ

  1. অন্য সূচকগুলির সাথে একত্রিত করে নিশ্চিত করুন, যাতে ভুল সংকেত এড়ানো যায়।

  2. EMA লাইনকে আরও সংবেদনশীল করার জন্য প্যারামিটার সেটিং অপ্টিমাইজ করা হয়েছে।

  3. গতিশীল ক্ষতি বন্ধ করুন।

অপ্টিমাইজেশান দিক

এই কৌশলটি নিম্নলিখিত দিকগুলি থেকে অপ্টিমাইজ করা যেতে পারেঃ

  1. ইএমএ প্যারামিটার সমন্বয়কে অপ্টিমাইজ করুন এবং আরও মিলে যাওয়া গড় লাইন প্যারামিটার খুঁজে বের করুন।

  2. সিগন্যাল নিশ্চিতকরণের জন্য অন্যান্য সূচক যেমন MACD, RSI ইত্যাদি যোগ করুন, যা সিগন্যালের নির্ভুলতা বাড়িয়ে তুলবে।

  3. ডায়নামিক স্টপ সেট করুন, যা বাজারের ওঠানামা অনুযায়ী রিয়েল টাইমে স্টপ পয়েন্টগুলিকে সামঞ্জস্য করতে পারে।

  4. প্যারামিটার সমন্বয় অপ্টিমাইজ করুন এবং সর্বোত্তম প্যারামিটার সমন্বয় খুঁজুন।

সারসংক্ষেপ

এই কৌশলটি সামগ্রিকভাবে একটি সহজ এবং নির্ভরযোগ্য প্রবণতা অনুসরণ কৌশল। এটি OBV সূচক এবং ডাবল ইএমএ সমান্তরালের সাথে মিলিত হয়ে প্রবণতা সম্পর্কে বিচার করে। এর সুবিধা হল অপারেশন সহজ, সংকেত পরিষ্কার, কার্যকরভাবে প্রবণতা অনুসরণ করতে পারে; অসুবিধা হ’ল ত্রুটিযুক্ত সংকেত হতে পারে এবং ইএমএ লাইনের প্রক্রিয়াটি পিছিয়ে রয়েছে। অন্যান্য সূচকগুলির সাথে মিলিত হয়ে অপ্টিমাইজ করা আরও ভাল ফলাফল অর্জন করতে পারে।

কৌশল সোর্স কোড
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("OBV EMA X BF 🚀", overlay=false, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.0)

/////////////// Time Frame ///////////////
testStartYear = input(2017, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)

testPeriod() => true

/////////////// OBV /////////////// 
src = close
atr = atr(input(title="ATR Period", defval=3, minval=1))
atrmult = input(title="ATR Mult", defval=1, minval=0)
obv = cum(change(src) > 0 ? volume * (volume / atr) : change(src) < 0 ? -volume * (volume / atr) : 0 * volume / atr)
e1 = ema(obv, input(24))
e2 = ema(obv, input(6))

///////////////  Strategy  /////////////// 
long = crossover(e2, e1)
short = crossunder(e2, e1)

last_long = 0.0
last_short = 0.0
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])

long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)

last_open_long_signal = 0.0
last_open_short_signal = 0.0
last_open_long_signal := long_signal ? open : nz(last_open_long_signal[1])
last_open_short_signal := short_signal ? open : nz(last_open_short_signal[1])

last_long_signal = 0.0
last_short_signal = 0.0
last_long_signal := long_signal ? time : nz(last_long_signal[1])
last_short_signal := short_signal ? time : nz(last_short_signal[1])

in_long_signal = last_long_signal > last_short_signal
in_short_signal = last_short_signal > last_long_signal

last_high = 0.0
last_low = 0.0
last_high := not in_long_signal ? na : in_long_signal and (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1])
last_low := not in_short_signal ? na : in_short_signal and (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1])

since_longEntry = barssince(last_open_long_signal != last_open_long_signal[1]) 
since_shortEntry = barssince(last_open_short_signal != last_open_short_signal[1]) 

//////////////// Stop loss /////////////// 
sl_inp = input(3.0, title='Stop Loss %') / 100
tp_inp = input(5000.0, title='Take Profit %') / 100
 
take_level_l = strategy.position_avg_price * (1 + tp_inp)
take_level_s = strategy.position_avg_price * (1 - tp_inp)

slLong = in_long_signal ? strategy.position_avg_price * (1 - sl_inp) : na
slShort = strategy.position_avg_price * (1 + sl_inp)
long_sl = in_long_signal ? slLong : na
short_sl = in_short_signal ? slShort : na

/////////////// Execution /////////////// 
if testPeriod()
    strategy.entry("L", strategy.long, when=long)
    strategy.entry("S", strategy.short, when=short)
    strategy.exit("L SL", "L", stop=long_sl, when=since_longEntry > 0)
    strategy.exit("S SL", "S", stop=short_sl, when=since_shortEntry > 0)

/////////////// Plotting /////////////// 
plot(e1, color = e1 > e1[1] ? color.lime : e1 < e1[1] ? color.red : color.white, linewidth = 2, offset = 0)
plot(e2, color = e2 > e2[1] ? color.lime : e2 < e2[1] ? color.red : color.white, linewidth = 1)
bgcolor(strategy.position_size > 0 ? color.lime : strategy.position_size < 0 ? color.red : color.white, transp=90)
bgcolor(long_signal ? color.lime : short_signal ? color.red : na, transp=60)