অসিলেটর ডিফারেনশিয়াল মুভিং এভারেজ টাইমিং কৌশল


সৃষ্টির তারিখ: 2023-12-26 14:40:12 অবশেষে সংশোধন করুন: 2023-12-26 14:40:12
অনুলিপি: 0 ক্লিকের সংখ্যা: 656
1
ফোকাস
1621
অনুসারী

অসিলেটর ডিফারেনশিয়াল মুভিং এভারেজ টাইমিং কৌশল

ওভারভিউ

এই কৌশলটি একটি MACD অ্যাসোসিয়েটর তৈরি করে যা দ্রুত EMA এবং ধীর EMA এর পার্থক্য গণনা করে এবং তারপরে MACD এর সমান্তরাল গণনা করে একটি সংকেত লাইন তৈরি করে, যার ফলে একটি দ্বৈত ফিল্টার সিস্টেম তৈরি হয়। যখন MACD লাইনটি নীচের দিক থেকে সংকেত লাইনটি অতিক্রম করে তখন একটি কেনার সংকেত তৈরি করে এবং যখন MACD লাইনটি নীচের দিক থেকে সংকেত লাইনটি অতিক্রম করে তখন একটি বিক্রয় সংকেত তৈরি করে, দামের স্বল্প-মেয়াদী মধ্যবর্তী ওঠানামা ব্যবহার করে মুনাফা অর্জনের জন্য।

কৌশল নীতি

এই কৌশলটির কেন্দ্রীয় সূচক হল MACD কম্পক, যা একটি দ্রুত EMA (সাধারণত 12 দিনের EMA) থেকে একটি ধীর EMA (সাধারণত 26 দিনের EMA) কে বাদ দিয়ে গণনা করা হয়। দ্রুত EMA আরও সংবেদনশীল, যা মূল্যের স্বল্পমেয়াদী ওঠানামাকে ধরে রাখে; ধীর EMA মূল্য পরিবর্তনের প্রতি আরও ধীর প্রতিক্রিয়া দেয়। উভয়ই একটি কম্পক গঠন করে যা স্বল্প ও মধ্যমেয়াদী সময়ের মূল্য পরিবর্তনের মানকে প্রতিনিধিত্ব করে। তারপরে MACD কম্পকটি তার নিজস্ব EMA (সাধারণত 9 দিনের সেট) গণনা করে এবং একটি সংকেত লাইন পায়। যখন MACD সংকেত লাইনের নীচের দিক থেকে অতিক্রম করে, তখন স্বল্পমেয়াদী উত্তেজনা মধ্যমেয়াদী উত্তেজনার চেয়ে শক্তিশালী হয় এবং একটি ক্রয় সংকেত উত্পন্ন করে; যখন MACD সংকেত লাইনের নীচের দিক থেকে অতিক্রম করে, তখন স্বল্পমেয়াদী উত্তেজনার নিচে নেমে যাওয়ার চেয়ে শক্তিশালী হয় এবং একটি বিক্রয় সংকেত উত্পন্ন করে।

এই কৌশলটি ইনপুট প্যারামিটারগুলিকে দ্রুত লাইন দৈর্ঘ্য, ধীর লাইন দৈর্ঘ্য, মূল্য উত্স এবং সংকেত লাইনের দৈর্ঘ্যের মসৃণতার সময়কাল হিসাবে সেট করে। প্যারামিটারগুলিকে বিভিন্ন বাজারের সাথে সামঞ্জস্য করে এবং সর্বোত্তম প্যারামিটার সমন্বয় খুঁজে বের করতে পারে। ব্যাকগ্রাউন্ডের রঙের ব্লকটি পুনরাবৃত্তির সময়সীমা দেখায়। কৌশলটি এই সময়ের মধ্যে অবস্থান খোলার বাইরে কাজ করে না।

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

  1. MACD সূচকটি ক্লাসিক এবং সহজেই বোঝা যায়, যা স্বল্প ও মাঝারি মেয়াদে বিপরীতমুখী সুযোগকে কার্যকরভাবে কাজে লাগাতে পারে।

  2. ডাবল ইএমএ দ্বারা নির্মিত এমএসিডি সিস্টেমগুলি একক এমএ সিস্টেমের তুলনায় আরও ভাল মসৃণতা রয়েছে।

  3. বিভিন্ন বাজারের জন্য প্যারামিটার অপ্টিমাইজ করার জন্য অনেকগুলি প্যারামিটার রয়েছে

  4. সংমিশ্রিত ট্রাফিক মাপক উচ্চ মানের সংকেত সনাক্ত করতে পারে।

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

  1. ম্যাকডের সূচকটি ঝড়ের সময় আরও বেশি ত্রুটিপূর্ণ সংকেত দেয়।

  2. এই প্রবণতাকে মূল্যায়ন করতে না পারা, প্রবণতাকে অতিক্রম করে ক্ষতি হতে পারে।

  3. এই সময়সীমার সীমাবদ্ধতার কারণে চরম পরিস্থিতির কথা উপেক্ষা করা যেতে পারে।

  4. প্যারামিটার সেট করার জন্য আরও মার্কেট ডেটা অপ্টিমাইজ করা প্রয়োজন, অন্যথায় একটি মার্কেট সেগমেন্ট ওভারফিট হতে পারে।

ঝুঁকি নিয়ন্ত্রণের জন্য প্রবণতা নির্ধারণের সূচক এবং স্টপ লস ব্যবস্থা ব্যবহার করা যেতে পারে। একই সাথে, রিটার্নের পরিসীমা এবং বাজার নমুনা স্থান প্রসারিত করে প্যারামিটার অপ্টিমাইজেশন করা যেতে পারে।

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

  1. বিভিন্ন মূল্যের উৎস পরীক্ষা করা, যেমন বন্ধের মূল্য, গড় মূল্য, পুনরায় সেট মূল্য ইত্যাদি।

  2. আরও ঐতিহাসিক তথ্যের উপর ভিত্তি করে সর্বোত্তম প্যারামিটার সমন্বয় খুঁজে বের করা।

  3. অন্যান্য সূচকগুলি সংযুক্ত করে সংকেতের গুণমান নির্ধারণ করুন। যেমন ট্র্যাফিক সংকেত।

  4. প্রবণতা এবং তরঙ্গ বিচার একত্রিত করে, প্রবণতা সঙ্গে উল্লেখযোগ্য দ্বন্দ্ব এড়াতে।

সারসংক্ষেপ

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

কৌশল সোর্স কোড
/*backtest
start: 2022-12-19 00:00:00
end: 2023-12-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="MACD Histogram Backtest", shorttitle="MACD")

// Getting inputs
fast_length = input(title="Fast Length", type=input.integer, defval=12)
slow_length = input(title="Slow Length", type=input.integer, defval=26)
src = input(title="Source", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9)
sma_source = input(title="Simple MA(Oscillator)", type=input.bool, defval=false)
sma_signal = input(title="Simple MA(Signal Line)", type=input.bool, defval=false)

// Plot colors
col_grow_above = #26A69A
col_grow_below = #FFCDD2
col_fall_above = #B2DFDB
col_fall_below = #EF5350
col_macd = #0094ff
col_signal = #ff6a00

// Calculating
fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal

grow = (hist[1] < hist)
fall = (hist[1] > hist) and hist >= 0
stop = (hist[1] > hist)

plot(hist, title="Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below) ), transp=0 )
plot(macd, title="MACD", color=col_macd, transp=0)
plot(signal, title="Signal", color=col_signal, transp=0)

//Strategy Testing

// Component Code Start
// Example usage:
// if testPeriod()
//   strategy.entry("LE", strategy.long)
testStartYear = input(2017, "Backtest Start Year")
testStartMonth = input(01, "Backtest Start Month")
testStartDay = input(2, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

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

// A switch to control background coloring of the test period
testPeriodBackground = input(title="Color Background?", type=input.bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)

testPeriod() => true
// Component Code Stop

//Entry and Close settings
if testPeriod() 
    strategy.entry("grow", true, 10, when = grow, limit = close)
    strategy.close("grow", when = fall)
    strategy.close("grow", when = stop)
    
//if testPeriod() 
//   strategy.entry("fall", false, 1000, when = fall, limit = close)
//    strategy.close("fall", when = grow)