ডায়নামিক মুভিং এভারেজ ডুয়াল স্ট্র্যাটেজি

লেখক:চাওঝাং, তারিখঃ 2023-12-13 16:37:05
ট্যাগঃ

img

সারসংক্ষেপ

এই কৌশলটি ট্রেডিং সিদ্ধান্তের জন্য চলমান গড় (এমএ) এবং গতির সূচকগুলির ঢাল ব্যবহার করে। এটি এমএ ঢাল এবং গতির ঢালকে সেট থ্রেশহোল্ডের সাথে তুলনা করে এবং উভয় ঢাল যখন থ্রেশহোল্ড অতিক্রম করে তখন ট্রেডিং সংকেত তৈরি করে। কৌশলটিতে একটি নিম্ন অস্থিরতা ফিল্টারও রয়েছে যা বাজারের অস্থিরতা কম হলে সংকেত তৈরি করতে একটি ভিন্ন এমএ ব্যবহার করে।

কৌশলগত যুক্তি

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

উদাহরণস্বরূপ, যখন এমএ ঢাল এবং গতির ঢাল উভয়ই উপরের রেখাকে ছাড়িয়ে যায়, তখন একটি ক্রয় সংকেত উত্পন্ন হয়; যখন উভয় বক্ররেখা নীচের লাইনের নীচে পড়ে, তখন একটি বিক্রয় সংকেত উত্পন্ন হয়। এটি কিছু মিথ্যা সংকেত ফিল্টার করতে পারে।

নিম্ন অস্থিরতা ফিল্টারটি বাজারের অস্থিরতা নির্ধারণের জন্য একটি দীর্ঘমেয়াদী এমএ ব্যবহার করে। যখন অস্থিরতা কম হয়, তখন বিভিন্ন বাজারের অবস্থার সাথে মানিয়ে নিতে বিভিন্ন পরামিতি সহ একটি এমএ ব্যবহার করা হয়।

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

এই কৌশল নিম্নলিখিত সুবিধাগুলি আছেঃ

  1. ট্রেডিং সিগন্যাল স্থাপনের জন্য দ্বৈত ফিল্টার কিছু গোলমাল ফিল্টার করতে পারে এবং সিগন্যালের গুণমান উন্নত করতে পারে।

  2. নিম্ন অস্থিরতা ফিল্টারটি কৌশলটিকে বিভিন্ন বাজারের অবস্থার সাথে স্থিতিস্থাপকতার সাথে মানিয়ে নিতে দেয়।

  3. বিভিন্ন প্যারামিটারগুলির জন্য উচ্চ কাস্টমাইজযোগ্যতা বিভিন্ন পণ্যের জন্য অনুকূলিত করা যেতে পারে।

  4. কার্ভ ফিটিংয়ের প্রভাব কমাতে এটিতে কোনও পুনর্নির্মাণ ফাংশন নেই।

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

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

  1. দ্বৈত ফিল্টার কিছু বাস্তব সংকেত ফিল্টার করতে পারে এবং সুযোগ মিস করতে পারে। এটি পরামিতিগুলি সামঞ্জস্য করে অপ্টিমাইজ করা যেতে পারে।

  2. নিম্ন অস্থিরতা ফিল্টারের থ্রেশহোল্ড নির্ধারণের জন্য সাবধানে পরীক্ষার প্রয়োজন। ভুল সেটিংস সংকেত বিচ্যুতি হতে পারে।

  3. এমএ এবং গতির সূচকগুলির পরামিতি সেটিংগুলি নির্দিষ্ট পণ্যগুলির জন্য অনুকূলিত করা দরকার এবং সর্বজনীন পরামিতিগুলি নির্ধারণ করা কঠিন।

  4. পুনরায় পেইন্টিং ফাংশন ব্যাকটেস্ট কার্ভ ফিটিং সমস্যা সম্পূর্ণরূপে এড়াতে পারে না, এবং বাস্তব ট্রেডিং কর্মক্ষমতা এখনও যাচাই করা প্রয়োজন।

  5. উচ্চ কাস্টমাইজযোগ্যতা প্যারামিটার স্পেসের জটিলতা এবং অপ্টিমাইজেশনের অসুবিধা বৃদ্ধি করে।

অপ্টিমাইজেশান নির্দেশাবলী

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

  1. সর্বোত্তম মেলে এমন সূচকগুলি খুঁজে পেতে এমএ এবং গতির সূচকগুলির আরও সংমিশ্রণ পরীক্ষা করুন।

  2. মেট্রিক্যাল ম্যানেজমেন্টের দৈর্ঘ্য পরামিতি এবং গতির সূচকগুলিকে বিলম্ব এবং গোলমালের ভারসাম্য বজায় রাখার জন্য অপ্টিমাইজ করুন।

  3. আরো স্থিতিশীল সূচক সমন্বয় খুঁজে পেতে ঢাল গণনার জন্য পরামিতি অপ্টিমাইজ করুন।

  4. ইলাস্টিকতা উন্নত করতে বিভিন্ন নিম্ন অস্থিরতা সূচক এবং পরামিতি পরীক্ষা করুন।

  5. সেরা প্রযোজ্য সুযোগ খুঁজে পেতে বিভিন্ন পণ্য এবং সময়সীমার উপর পরীক্ষা করুন।

  6. ম্যানুয়াল অপ্টিমাইজেশান কাজের চাপ কমাতে প্যারামিটার অভিযোজনশীল প্রক্রিয়া তৈরি করুন।

সিদ্ধান্ত

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

প্যারামিটার অপ্টিমাইজেশান এবং সূচক নির্বাচনের উন্নতির সাথে, এই কৌশল বাস্তব জীবনের ট্রেডিংয়ের জন্য একটি কার্যকর পছন্দ হয়ে উঠতে পারে। এটি এমএ এবং গতির সূচক ব্যবহার করে ট্রেডিং সিদ্ধান্তের জন্য একটি রেফারেন্স টেমপ্লেট সরবরাহ করে।


/*backtest
start: 2023-11-12 00:00:00
end: 2023-12-12 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Allenlk
//@version=4
strategy("DRSI DMA Scalping Strategy", shorttitle="DRSIDMA", overlay=false, initial_capital=1000, pyramiding=2, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

//Inputs
matype             = input(7, minval=1, maxval=8, title="1=SMA, 2=EMA, 3=WMA, 4=HullMA, 5=VWMA, 6=RMA, 7=TEMA, 8=Tilson T3", group="Moving Average")
masrc              = input(close, title="MA Source", group="Moving Average")
malen              = input(5, title="Moving Average Length - LookBack Period", group="Moving Average")
factorT3           = input(defval=7, title="Tilson T3 Factor - *.10 - so 7 = .7 etc.", minval=0, group="Moving Average")
maderiv            = input(3, title="MA Slope Lookback", minval=1, group="Moving Average")
masmooth           = input(5, title="MA Slope Smoothing", minval=1, group="Moving Average")
momtype            = input(3, minval=1, maxval=3, title="1=RSI, 2=CCI, 3=RSI/ROC", group="Momentum Moving Average")
momsrc             = input(close, title="Momentum Source", group="Momentum Moving Average")
momlen             = input(3, title="Momentum Length", minval=1, group="Momentum Moving Average")
momderiv           = input(8, title="Momentum Slope Lookback", minval=1, group="Momentum Moving Average")
momsmooth          = input(7, title="Momentum Slope Smoothing", minval=1, group="Momentum Moving Average")
higherTf           = input("1", title="Higher timeframe?", type = input.resolution, group="Time Resolution")
higherTfmult       = input(130, title="MA Slope multiplier for Alternate Resolutions (Make the waves of the blue line similar size as the orange line)", group="Time Resolution")
buffup             = input(0.02, title="Buy when both slopes cross this line", step=0.01, group="Buy and Sell Threshold")
bufflow            = input(-0.03, title="Sell when both slopes cross this line", step=0.01, group="Buy and Sell Threshold")
lowVolMALength     = input(28, title="Big MA Length", minval=1, group="Low Volatility Function")
MAlength           = input(10, title="Low Volatility Moving Average Length", minval=1, group="Low Volatility Function")
MAThresh           = input(0.05, title="Low Volatility Buy and Sell Threshold", step=0.01, group="Low Volatility Function")
Volminimum         = input(2.5, title="Minimum volatility to trade", minval=0, step=0.01, group="Low Volatility Function")

//Low Volatility Function
//When Volatility is low refer to the slope of a long moving average
low_vol_MA         = sma(close, lowVolMALength)
low_vol_down       = (low_vol_MA[3] - low_vol_MA[1]) > MAThresh
low_vol_up         = (low_vol_MA[3] - low_vol_MA[1]) < MAThresh * -1
percent_volatility = (1 - (low / high)) * 100
chng_MA            = sma(percent_volatility, MAlength)
bad_vol            = chng_MA < Volminimum

//No repaint function
nrp_funct(_symbol, _res, _src) => security(_symbol, _res, _src[barstate.isrealtime ? 1 : 0])

//hull ma definition
hullma = wma(2*wma(masrc, malen/2)-wma(masrc, malen), round(sqrt(malen)))

//TEMA definition
ema1 = ema(masrc, malen)
ema2 = ema(ema1, malen)
ema3 = ema(ema2, malen)
tema = 3 * (ema1 - ema2) + ema3

//Tilson T3
factor = factorT3 *.10
gd(masrc, malen, factor) => ema(masrc, malen) * (1 + factor) - ema(ema(masrc, malen), malen) * factor 
t3(masrc, malen, factor) => gd(gd(gd(masrc, malen, factor), malen, factor), malen, factor) 
tilT3 = t3(masrc, malen, factor) 
 
//MA Type 
avg = matype == 1 ? sma(masrc,malen) : matype == 2 ? ema(masrc,malen) : matype == 3 ? wma(masrc,malen) : matype == 4 ? hullma : matype == 5 ? vwma(masrc, malen) : matype == 6 ? rma(masrc,malen) : matype == 7 ? 3 * (ema1 - ema2) + ema3 : tilT3

//MA Slope Percentage
DeltaAvg      = (avg / avg[maderiv]) - 1
SmoothedAvg   = sma(DeltaAvg, masmooth) 
MAout         = nrp_funct(syminfo.tickerid, higherTf, SmoothedAvg) * higherTfmult

//Momentum indicators
Momentum = momtype == 1 ? rsi(momsrc, momlen) : momtype == 2 ? cci(momsrc, momlen) : momtype == 3 ? rsi(roc(momsrc,momlen),momlen) : na

//Momentum Slope Percentage
Deltamom = (Momentum / Momentum[momderiv]) - 1
SmoothedMom = sma(Deltamom, momsmooth) 
Momout   = nrp_funct(syminfo.tickerid, higherTf, SmoothedMom)

//Plottings
plot(buffup, color=color.green, title="Buy line")
plot(bufflow, color=color.red, title="Sell line")
plot(MAout, color=color.blue, linewidth=2, title="MA Slope")
plot(Momout, color=color.orange, linewidth=2, title="Momentum Slope")

longCondition = bad_vol ? low_vol_up : MAout > buffup and Momout > buffup
if (longCondition)
    strategy.entry("Buy", strategy.long)

shortCondition = bad_vol ? low_vol_down : MAout < bufflow and Momout < bufflow
if (shortCondition)
    strategy.entry("Sell", strategy.short)

আরো