
এই কৌশলটি একটি চলমান গড় ক্রস এবং গতিশীলতার সূচককে একত্রিত করে, যাতে প্রবণতাটি কার্যকরভাবে অনুসরণ করা যায় এবং সময়মতো বিপরীত হয়। কৌশলটি প্রথমে দ্রুত চলমান গড় এবং ধীর চলমান গড় ব্যবহার করে একটি গোল্ড ফর্ক ওভার এবং ডাই ফর্ক বন্ধের সংকেত তৈরি করে। তারপরে একটি নির্দিষ্ট প্যারামিটারের গতিশীলতার সূচককে একত্রিত করে, যখন গোল্ড ফর্কের ওভার হয়, যদি দ্রুত চলমান গড়ের গতিশীলতার সূচকটি আবার উঠে যায়, তবে এটি ট্রেন্ডটি চালিয়ে যায় এবং ওভারটি ধরে রাখে; যখন গতিশীলতার সূচকটি নেমে আসে, তখন এটি ট্রেন্ডের বিপরীত হিসাবে বিবেচিত হয়, সমতল। যখন ডাই ফর্ক খালি থাকে, একই নীতিটি ট্রেন্ড ট্র্যাকিংয়ের জন্যও ব্যবহৃত হয়। একই সাথে কৌশলটি এডিএক্স সূচককে পুনর্নির্দেশ করে, যা অ-ট্রেন্ডিংয়ের ত্রুটিযুক্ত সংকেতকে ওভার করতে ব্যবহৃত হয়।
এই কৌশলটির মূল যুক্তিটি একটি প্রবণতা সংকেত যা একটি চলমান গড়ের ক্রস গঠন করে এবং একটি গতিশীল সূচক যা একটি প্রবণতা বিপরীত নির্ধারণ করে। কোডের মূল অংশের যুক্তিটি নিম্নরূপঃ
দ্রুত চলমান গড় price1 এবং ধীর চলমান গড় price2 গণনা করুন। যার মধ্যে price1 হল 5 পিরিয়ডের HMA, price2 হল 7 পিরিয়ডের HMA।
যখন price1 price2 অতিক্রম করে তখন একটি মাল্টিসিগন্যাল তৈরি হয় এবং যখন price1 price2 অতিক্রম করে তখন একটি খালি সিগন্যাল তৈরি হয়। এটি একটি চলমান গড়ের উপর ভিত্তি করে একটি সাধারণ ব্যবহার।
মাল্টি সিগন্যাল ট্রিগার করার পর, যদি দ্রুত চলন্ত গড় price1 এর গতিশীল সূচকroc1 আবার উপরে উঠে যায়, তাহলে ট্রেন্ডটি চলতে থাকবে এবং মাল্টি অবস্থা বজায় থাকবে।
যখন গতিশীলতার সূচকroc1 হ্রাস পায়, তখন প্রবণতা বিপরীত বলে মনে করা হয় এবং সমতল অবস্থান কার্যকর করা হয়। খালি সংকেতগুলির একই প্রক্রিয়াকরণ লজিক রয়েছে।
এডিএক্স থ্রেশহোল্ডের প্রবর্তন, যা প্রবণতাহীন অবস্থায় ত্রুটিপূর্ণ সংকেতগুলিকে ফিল্টার করার জন্য ব্যবহৃত হয়, কেবলমাত্র যখন এডিএক্স থ্রেশহোল্ডের চেয়ে বেশি থাকে তখনই একটি প্রকৃত অতিরিক্ত শূন্য সংকেত তৈরি হয়।
সরল চলমান গড় কৌশলগুলির তুলনায়, এই কৌশলটির সবচেয়ে বড় সুবিধা হ’ল গতিশীলতার সূচকগুলি প্রবণতা বিপরীতকরণের জন্য প্রবর্তিত হয়েছে, যা প্রবণতা এবং বিপরীতকরণের আরও সময়মত এবং নির্ভুলভাবে অনুসরণ করতে পারে। এর সুবিধাগুলি নিম্নরূপঃ
মুভিং এভারেজ নিজেই দামের পরিবর্তনের প্রতি প্রতিক্রিয়াশীল, যখন গতিশীলতা সূচকগুলি বিপরীত সংকেতকে আরও দ্রুত ধরতে পারে, যা সময়মতো স্টপ লস বা বিপরীত পোজিশন খোলার পক্ষে উপকারী।
ডায়নামিক সূচকের উপর ভিত্তি করে নির্ধারিত বিপরীতমুখী সংকেত আরও নির্ভরযোগ্য, যা ট্রেন্ড ট্রেডিংয়ে অপ্রয়োজনীয় পুনরাবৃত্তি পজিশন খোলার পরিমাণ কমাতে পারে।
এডিএক্স সূচকটি প্রয়োগ করা হয়েছে যাতে ট্রেন্ডিং বাজারগুলিতে ভুল সংকেতগুলি এড়ানো যায় এবং কৌশলগুলিকে ট্রেন্ডিং পর্যায়ে আরও বেশি ফোকাস করা যায়, যার ফলে মুনাফার সম্ভাবনা বৃদ্ধি পায়।
কৌশলগত লজিক পরিষ্কার এবং সহজ, সহজেই বোঝা এবং অনুসরণ করা যায়, যা অ্যালগরিদম ট্রেডিংয়ের জন্য উপযুক্ত।
সূচক প্যারামিটার অপ্টিমাইজেশনের জন্য প্রচুর জায়গা রয়েছে, যা বিভিন্ন বাজারের জন্য অপ্টিমাইজেশনের জন্য ব্যবহার করা যেতে পারে, যেমন মুভিং এভারেজ চক্র, গতিশীল প্যারামিটার ইত্যাদি।
এই কৌশলটির প্রধান ঝুঁকিগুলো নিম্নলিখিত বিষয়গুলো থেকে উদ্ভূতঃ
মুভিং এভারেজ নিজেই দামের পরিবর্তনের জন্য প্রতিক্রিয়াশীল, যার ফলে সংকেতটি বিলম্বিত হতে পারে এবং সেরা প্রবেশের সময়টি মিস করতে পারে।
মিথ্যা ব্রেকআপের ফলে অপ্রয়োজনীয় পজিশন খোলার বা পজিশন খালি হওয়ার ফলে সূচক প্যারামিটারগুলিকে আরও অপ্টিমাইজ করা বা অতিরিক্ত ফিল্টার শর্তগুলি প্রবর্তন করা প্রয়োজন।
প্রবণতা বিপরীত বিচার গতিশীলতা সূচকের উপর নির্ভর করে, যখন বাজার তীব্রভাবে পরিবর্তিত হয়, গতিশীলতা সূচকের কার্যকারিতা হ্রাস পেতে পারে।
ADX সূচকটি প্রবণতা এবং সমন্বয়কে পুরোপুরি বিচার করতে পারে না, এবং থ্রেশহোল্ডটি খুব বেশি বা খুব কম সেট করা সমস্যার কারণ হতে পারে।
কৌশলটি লেনদেনের ব্যয়কে বিবেচনা করে না, তবে ঝুঁকি নিয়ন্ত্রণের জন্য স্টপ লস সেট করার বিষয়ে সতর্কতা অবলম্বন করুন।
এই কৌশলটি নিম্নলিখিত দিকগুলি থেকে আরও উন্নত করা যেতে পারেঃ
অন্য ধরনের চলমান গড় চেষ্টা করুন, অথবা চলমান গড়ের প্যারামিটারগুলিকে সামঞ্জস্য করুন যাতে সূচকটি মসৃণ হয়।
ডায়নামিক সূচকের দৈর্ঘ্য প্যারামিটারটি অপ্টিমাইজ করা হয়েছে যাতে এটি মূল্যের বিপরীতমুখীতাকে আরও সংবেদনশীলভাবে ধরতে পারে।
চেষ্টা করুন দাম ফিল্টার করার জন্য যখন গতিশীলতার সূচকটি বিপরীত হয়, যাতে স্বল্পমেয়াদী ছোটখাট ওঠানামা দ্বারা বিভ্রান্ত না হয়।
ADX এর ব্যবহারকে আরও উন্নত করা, যেমন ADX এর বিভিন্ন স্তরের জন্য বিভিন্ন প্যারামিটার ব্যবহার করা ইত্যাদি
ট্রেডিং ভলিউম ইন্ডিকেটর, সিগন্যাল কোয়ালিটির উন্নতি, ফেক ব্রেকিং ফিল্টারিং ইত্যাদির মতো সহায়ক শর্তাবলী প্রবর্তন করা।
একক ক্ষতি নিয়ন্ত্রণের জন্য স্টপ লস ম্যানেজমেন্ট যুক্ত করুন। বাস্তব বাজারের ফি স্তরের মূল্যায়ন করুন এবং যুক্তিসঙ্গত স্টপ লস সেট করুন।
এই কৌশলটি চলমান গড় এবং গতিশীলতার সূচকগুলির সুবিধাগুলিকে সংহত করে, ট্রেন্ডের ট্র্যাকিং এবং বিপরীতের ক্যাপচার করে। খাঁটি ট্রেন্ড ট্র্যাকিংয়ের তুলনায়, এই কৌশলটি বাজারের বিভিন্ন পর্যায়ে আরও নমনীয়ভাবে প্রতিক্রিয়া জানাতে পারে, ট্রেন্ড ট্রেডিং বজায় রাখার সময়, ওভারহেড রিটার্নের ক্ষতি এড়াতে পারে। প্যারামিটার অপ্টিমাইজেশন এবং সহায়ক শর্তাবলী প্রবর্তনের মাধ্যমে কৌশলটির কার্যকারিতা আরও বাড়ানোর জন্য জায়গা রয়েছে। সামগ্রিকভাবে, কৌশলটির যুক্তিটি পরিষ্কার, সহজ এবং নির্ভরযোগ্য এবং অ্যালগরিদম ট্রেডিংয়ের নতুনদের শেখার এবং ব্যবহারের জন্য উপযুক্ত।
/*backtest
start: 2023-09-23 00:00:00
end: 2023-10-23 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
//study(title="MA Crossover Strategy", overlay = true)
strategy("MA Crossover Strategy with MA Turning Point Exits", overlay=true)
src = input(open, title="Source")
price = request.security(syminfo.tickerid, timeframe.period, src)
ma1 = input(5, title="1st MA Length")
type1 = input("HMA", "1st MA Type", options=["SMA", "EMA", "HMA"])
ma2 = input(7, title="2nd MA Length")
type2 = input("HMA", "2nd MA Type", options=["SMA", "EMA", "HMA"])
adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
adxthreshold = input(20, title="ADX threshold")
dirmov(len) =>
up = change(high)
down = -change(low)
plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
truerange = rma(tr, len)
plus = fixnan(100 * rma(plusDM, len) / truerange)
minus = fixnan(100 * rma(minusDM, len) / truerange)
[plus, minus]
adx(dilen, adxlen) =>
[plus, minus] = dirmov(dilen)
sum = plus + minus
adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
sig = adx(dilen, adxlen)
//study("Average Directional Index", shorttitle="ADX", format=format.price, precision=2, resolution="")
//plot(sig, color=color.red, title="ADX")
f_hma(_src, _length)=>
_return = wma((2*wma(_src, _length/2))-wma(_src, _length), round(sqrt(_length)))
price1 = if (type1 == "SMA")
sma(price, ma1)
else
if (type1 == "EMA")
ema(price, ma1)
else
f_hma(price, ma1)
price2 = if (type2 == "SMA")
sma(price, ma2)
else
if (type2 == "EMA")
ema(price, ma2)
else
f_hma(price, ma2)
//plot(series=price, style=line, title="Price", color=black, linewidth=1, transp=0)
plot(series=price1, style=line, title="1st MA", color=blue, linewidth=2, transp=0)
plot(series=price2, style=line, title="2nd MA", color=green, linewidth=2, transp=0)
//longCondition = price1> price2
longCondition = price1> price2 and sig > adxthreshold
if (longCondition)
strategy.entry("Long", strategy.long)
shortCondition = price1 < price2 and sig > adxthreshold
if (shortCondition)
strategy.entry("Short", strategy.short)
lookback1 = input(1, "Lookback 1")
roc1 = roc(price1, lookback1)
ma1up = false
ma1down = false
ma2up = false
ma2down = false
ma1up := nz(ma1up[1])
ma1down := nz(ma1down[1])
ma2up := nz(ma2up[1])
ma2down := nz(ma2down[1])
trendStrength1 = input(2, title="Minimum slope magnitude * 100", type=float) * 0.01
if crossover(roc1, trendStrength1)
ma1up := true
ma1down := false
if crossunder(roc1, -trendStrength1)
ma1up := false
ma1down := true
shortexitCondition = ma1up and ma1down[1] and sig > adxthreshold
if (shortexitCondition)
strategy.close("Short")
longexitCondition = ma1down and ma1up[1] and sig > adxthreshold
if (longexitCondition)
strategy.close("Long")