
ডায়নামিক ইন্ডিকেটর সিদ্ধান্ত ট্রেডিং কৌশল একটি প্রবণতা ট্র্যাকিং কৌশল। এটি একটি ডায়নামিক ইন্ডিকেটর তৈরি করতে দ্বি-সূচক চলমান গড় ব্যবহার করে এবং তারপরে দামের পরিবর্তনের হারের সূচককে একত্রিত করে একটি ট্রেডিং সিগন্যাল তৈরি করে। যখন ডায়নামিক ইন্ডিকেটর বৃদ্ধি পায়, তখন একটি মাল্টিসিগন্যাল তৈরি করে; যখন ডায়নামিক ইন্ডিকেটর হ্রাস পায়, তখন একটি শূন্য সিগন্যাল তৈরি করে। এই কৌশলটি বাজারের মাঝারি সময়ের প্রবণতা অনুসরণকারী ব্যবসায়ীদের জন্য উপযুক্ত।
এই কৌশলটি ডাবল ইন্ডেক্সাল মুভিং এভারেজ ডিসিশন পয়েন্ট ওসিলিয়েটর ব্যবহার করে গতিশীলতা পরিমাপ করে। প্রথমে দামের দৈনিক পরিবর্তনের হার গণনা করা হয়, তারপরে 31 দিন এবং 20 দিনের দৈর্ঘ্যের ডাবল ইন্ডেক্সাল মুভিং এভারেজ ব্যবহার করে দামের পরিবর্তনের হারকে মসৃণ করা হয়, এবং শেষ পর্যন্ত 9 দিনের মসৃণ মুভিং এভারেজ দিয়ে ট্রেডিং সিগন্যাল দেওয়া হয়। যখন দ্রুত লাইনটি ধীর লাইনের চেয়ে বেশি থাকে তখন এটি একটি মাল্টি-হেড বাজার এবং যখন দ্রুত লাইনটি ধীর লাইনের চেয়ে কম থাকে তখন এটি একটি খালি বাজার।
এই কৌশলটি মূল্য পরিবর্তনের হারের সূচকও প্রবর্তন করে যাতে বাজারে ভুল সংকেত তৈরি না হয়। বিশেষত, এটি প্রায় 30 দিনের দামের শতাংশের পরিবর্তন গণনা করে এবং এর চলমান গড় দ্বারা বাজারটি সক্রিয় অবস্থায় রয়েছে কিনা তা বিচার করে। কেবলমাত্র যখন বাজার সক্রিয় থাকে তখনই একটি লেনদেনের সংকেত দেওয়া হয়।
এই কৌশলটি গতিশীলতার সূচক এবং মূল্য পরিবর্তনের হারের সূচকগুলির সাথে মিলিত হয়, যা মধ্যমেয়াদী প্রবণতাকে কার্যকরভাবে সনাক্ত করতে পারে এবং অস্থিরতার সময় ঘন ঘন বাণিজ্য এড়াতে পারে। সরল সরল গড়ের মতো ট্রেডিং কৌশল অনুসরণ করার তুলনায় এটি ভুল ব্যবসায়ের সম্ভাবনাকে উল্লেখযোগ্যভাবে হ্রাস করতে পারে। এছাড়াও, ঝুঁকি নিয়ন্ত্রণের দিক থেকে একটি স্টপ লস সেট করা হয়েছে, যা সময়মতো স্টপ লস করতে পারে এবং কার্যকরভাবে একক ক্ষতি নিয়ন্ত্রণ করতে পারে।
এই কৌশলটি মূলত BASE ট্রেডিংয়ের মাঝারি এবং দীর্ঘ লাইনের প্রবণতার উপর ভিত্তি করে এবং স্বল্পমেয়াদী মূল্যের ওঠানামা ধরতে পারে না। তীব্র পরিস্থিতিতে, স্টপ লস পয়েন্টটি ভেঙে যেতে পারে, যার ফলে বড় ক্ষতি হতে পারে। এছাড়াও, প্যারামিটার সেটিংয়ের ভুলটি কৌশলটির উপর প্রভাব ফেলতে পারে। উদাহরণস্বরূপ, দ্বিগুণ সূচকীয় চলমান গড় প্যারামিটারটি খুব ছোট সেট করা হয়েছে, যা ভুল ব্যবসায়ের সম্ভাবনা বাড়িয়ে তোলে।
ঝুঁকি প্রতিরোধের জন্য, আপনি যথাযথভাবে স্টপ পয়েন্টটি সামঞ্জস্য করতে পারেন, স্টপ প্রস্থটি প্রসারিত করতে পারেন। বা তীব্র পরিস্থিতির আগমনের সময়, সাময়িকভাবে কৌশলটি বন্ধ করতে পারেন, যাতে স্টপ ক্ষতির সম্ভাব্যতা অতিক্রম করা যায় না। প্যারামিটার সামঞ্জস্যের দিক থেকে, একটি বিশদ ফিডব্যাক করা উচিত এবং সর্বোত্তম প্যারামিটার নির্বাচন করা উচিত।
এই কৌশলটি নিম্নলিখিত দিকগুলি থেকে অপ্টিমাইজ করা যেতে পারেঃ
অন্যান্য ফিল্টারিং সূচক, যেমন অস্থিরতা সূচক, বাজারের তীব্র অস্থিরতার সময় ট্রেডিং এড়াতে পারে।
মেশিন লার্নিং মডেল যুক্ত করা হয়েছে, যা ট্রেন্ডের দিকনির্দেশনা এবং শক্তি নির্ধারণে সহায়তা করে এবং সংকেতের নির্ভুলতা বাড়ায়।
বিভিন্ন গতিশীল সূচক যেমন তুলনামূলকভাবে দুর্বল সূচক, স্টোক্যাস্টিক দোলক ইত্যাদি চেষ্টা করুন এবং ক্রয়-বিক্রয় সময়কে অনুকূলিত করুন।
রিয়েল-ডিস্ক অপারেশন চলাকালীন, সাম্প্রতিক সময়ের পরিস্থিতির বৈশিষ্ট্যগুলি সংযুক্ত করে, গতিশীলভাবে প্যারামিটারগুলি সামঞ্জস্য করুন, সর্বোত্তম প্যারামিটার সমন্বয় অনুসরণ করুন।
ডায়নামিক সূচক সিদ্ধান্ত ট্রেডিং কৌশল সামগ্রিকভাবে একটি শক্তিশালী মাঝারি এবং দীর্ঘমেয়াদী প্রবণতা ট্র্যাকিং কৌশল। এটি দ্বি-সূচক মুভিং এভারেজ ডায়নামিক সূচক এবং মূল্য পরিবর্তনের হার সূচককে একত্রিত করে যা প্রবণতাকে কার্যকরভাবে সনাক্ত করতে পারে এবং ভুল ট্রেডিং এড়াতে পারে। একই সাথে, ঝুঁকি নিয়ন্ত্রণের জন্য স্টপ লস সেট করুন। যদি প্যারামিটারগুলি যুক্তিসঙ্গতভাবে সামঞ্জস্য করা হয় এবং রিটার্ন কার্যকারিতা ভাল হয় তবে এটি মাঝারি এবং দীর্ঘমেয়াদী অতিরিক্ত লাভের সন্ধানকারী বিনিয়োগকারীদের জন্য উপযুক্ত। অবশ্যই, ব্যবসায়ীদের এখনও কৌশলটির জন্য তীব্র ওঠানামাটির ঝুঁকির বিষয়ে সতর্ক থাকতে হবে।
/*backtest
start: 2022-12-08 00:00:00
end: 2023-11-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("Decision 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.075)
/////////////// 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
/////////////// Decision ///////////////
src = input(ohlc4, title="Source")
length1 = input(31, title="First Smoothing")
length2 = input(20, title="Second Smoothing")
siglength = input(9, title="Signal Smoothing")
fr = input(true, title="Fill Region")
calc_csf(src, length) =>
sm = 2.0 / length
csf = 0.0
csf := (src - nz(csf[1])) * sm + nz(csf[1])
csf
i = (src / nz(src[1], src)) * 100
pmol2 = calc_csf(i - 100, length1)
pmol = calc_csf(10 * pmol2, length2)
pmols = ema(pmol, siglength)
d = pmol - pmols
duml = plot(fr ? (d > 0 ? pmol : pmols) : na, style=plot.style_circles, color=color.yellow, linewidth=0, title="DummyL")
hc = d > 0 ? d > d[1] ? color.lime : color.green : d < d[1] ? color.red : color.orange
///////////// Rate Of Change /////////////
source = close
roclength = input(30, minval=1)
pcntChange = input(7, minval=1)
roc = 100 * (source - source[roclength]) / source[roclength]
emaroc = ema(roc, roclength / 2)
isMoving() => emaroc > (pcntChange / 2) or emaroc < (0 - (pcntChange / 2))
/////////////// Strategy ///////////////
long = d > 0 and isMoving()
short = d < 0 and isMoving()
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])
sl_inp = input(2.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)
since_longEntry = barssince(last_open_long_signal != last_open_long_signal[1])
since_shortEntry = barssince(last_open_short_signal != last_open_short_signal[1])
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("Long", strategy.long, when=long)
strategy.entry("Short", strategy.short, when=short)
strategy.exit("L Ex", "Long", stop=long_sl, limit=take_level_l, when=since_longEntry > 0)
strategy.exit("S Ex", "Short", stop=short_sl, limit=take_level_s, when=since_shortEntry > 0)
/////////////// Plotting ///////////////
sigl = plot(false ? na : pmols, title="PMO Signal", color=color.gray, linewidth=2, title="Signal")
mdl = plot(false ? na : pmol, title="PMO", color=color.black, linewidth=2, title="PMO")
fill(duml, sigl, color.green, transp=20, title="PosFill")
fill(duml, mdl, color.red, transp=20, title="NegFill")
bgcolor(isMoving() ? long ? color.lime : short ? color.red : na : color.white, transp=70)
bgcolor(long_signal ? color.lime : short_signal ? color.red : na, transp=50)