কৌশল অনুসরণ করে OBV EMA ক্রসওভার ট্রেন্ড

লেখক:চাওঝাং, তারিখঃ ২০২৪-০২-২০ ১৫ঃ৩৫ঃ০৮
ট্যাগঃ

img

সারসংক্ষেপ

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

কৌশল নীতি

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

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

সুবিধা বিশ্লেষণ

এই কৌশলটির নিম্নলিখিত সুবিধা রয়েছে:

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

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

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

  4. কৌশল অপারেশন সহজ এবং বাস্তবায়ন করা সহজ।

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

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

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

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

  3. ফিক্সড স্টপ লস সেটিং বাজার পরিবর্তনের সাথে মানিয়ে নিতে খুব শক্ত হতে পারে।

প্রতিরোধ ব্যবস্থাঃ

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

  2. ইএমএ লাইন আরো সংবেদনশীল করতে পরামিতি সেটিংস অপ্টিমাইজ করুন।

  3. ডায়নামিক স্টপ লস সেট করুন।

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

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

  1. EMA প্যারামিটার সংমিশ্রণটি অপ্টিমাইজ করুন আরও ভাল মিলে যাওয়া চলমান গড় প্যারামিটারগুলি খুঁজে পেতে।

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

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

  4. সেরা প্যারামিটার সমন্বয় খুঁজে পেতে প্যারামিটার সমন্বয় অপ্টিমাইজেশান।

সিদ্ধান্ত

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


/*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)

আরো