
ডাবল ইএমএ গোল্ড ক্রস শক ট্র্যাকিং কৌশলটি এমন একটি কৌশল যা ইএমএ সূচককে ট্রেন্ড সনাক্তকরণ এবং শক ট্রেডিংয়ের জন্য ব্যবহার করে। এই কৌশলটি প্রবণতা ট্র্যাকিং এবং শক ক্যাপচারের ধারণাগুলিকে সমন্বিত করে, শক্তিশালী ট্রেডিংয়ের সময় দীর্ঘ লাইন ট্র্যাকিং এবং শক ট্রেডিংয়ের সময় সংক্ষিপ্ত লাইন ট্রেডিংয়ের জন্য।
এই কৌশলটি 20 টি চক্রের ইএমএকে ট্রেন্ডিংয়ের সূচক হিসাবে ব্যবহার করে। যখন দাম ইএমএ অতিক্রম করে তখন বাজারটি বাড়তে শুরু করে বলে মনে করা হয়; যখন দাম ইএমএ অতিক্রম করে তখন বাজারটি হ্রাস পায় বলে মনে করা হয়।
দামের উপরে EMA পরা হলে, 20 পিরিয়ডhighest এর সর্বোচ্চ দামকে স্টপ হিসেবে ব্যবহার করে, দামের উপরে EMA পরা হওয়ার পর low এর সর্বনিম্ন দামকে স্টপ হিসেবে ব্যবহার করে, অতিরিক্ত প্রবেশ করুন; দামের নিচে EMA পরা হলে, 20 পিরিয়ডlowest এর সর্বনিম্ন দামকে স্টপ হিসেবে ব্যবহার করে, দামের নিচে EMA high এর পর সর্বোচ্চ দামকে স্টপ হিসেবে ব্যবহার করে, ফাঁকা প্রবেশ করুন।
একই সময়ে, কৌশলটি নির্ধারণ করে যে ADX 30 এর চেয়ে বড় কিনা। ট্রেডিংটি কেবল তখনই করা হয় যখন ট্রেন্ডটি যথেষ্ট স্পষ্ট হয়, অর্থাৎ ADX 30 এর চেয়ে বেশি। এটি স্টপ লস এড়াতে পারে।
ট্রেল স্টপগুলি বাজারের বাস্তব সময়ের পরিস্থিতির সাথে সামঞ্জস্য করে এবং আরও বেশি লাভের জন্য লক করা হয়।
এই কৌশলটি প্রবণতা ট্র্যাকিং এবং ঝড়ের ব্যবসায়ের সুবিধাগুলিকে একত্রিত করে, যা প্রবণতা পরিস্থিতিতে আরও বেশি লাভজনক এবং ঝড়ের পরিস্থিতিতে আরও স্থিতিশীল লাভের সাথে শক্তিশালী অভিযোজনযোগ্যতা দেয়।
EMA এর প্রয়োগ কৌশলকে কম প্যারামিটারযুক্ত করে তোলে, যার ফলে ওভার অপ্টিমাইজেশনের ঝুঁকি কম হয়, যার ফলে কৌশলটির স্থিতিশীলতা নিশ্চিত হয়।
এই কৌশলটির প্রধান ঝুঁকি হল যে, ঝড়ের তীব্রতা বাড়ার সাথে সাথে আরও বেশি ক্ষতি হতে পারে। এই সময়ে ADX এর কার্যকারিতা তুলে ধরা হয়। যখন ADX মান কম থাকে, তখন ট্রেড বন্ধ করে দেওয়া হয়, যাতে কোন স্পষ্ট প্রবণতা না থাকলে ক্ষতি হয়।
এছাড়াও, যুক্তিসঙ্গতভাবে স্টপ লস সেট করাও গুরুত্বপূর্ণ। স্টপ লস সেট করা খুব বড়, যা একক ক্ষতি বাড়িয়ে তুলতে পারে; স্টপ লস সেট করা খুব ছোট, যা খুব সংবেদনশীল হতে পারে, যা স্টপ লস সম্ভাব্যতা বাড়িয়ে তুলতে পারে। এখানে লাভের লক্ষ্য এবং স্টপ লস ঝুঁকির মধ্যে ভারসাম্য খুঁজে বের করা দরকার।
এই কৌশলটি নিম্নলিখিত দিকগুলি থেকে উন্নত করা যেতে পারেঃ
ইএমএ চক্রের পছন্দ আরও ইএমএ চক্রের প্যারামিটার পরীক্ষা করে সেরা প্যারামিটার সমন্বয় খুঁজে পাওয়া যায়
ADX এর প্যারামিটারগুলি অপ্টিমাইজ করা যায়। ADX চক্র এবং ADX এর থ্রেশহোল্ডগুলি বিভিন্ন সেটিংসে চেষ্টা করা যেতে পারে।
স্টপ লস অ্যালগরিদম উন্নত করা যেতে পারে, যেমন গতিশীল স্টপ লস চালু করা।
KDJ, MACD ইত্যাদির মতো অন্যান্য সূচকগুলিকে একত্রিত করার জন্য বিবেচনা করা যেতে পারে, যাতে বহু-নির্ধারিত যাচাইকরণ কৌশল তৈরি হয়।
ডাবল ইএমএ গোল্ড ক্রস শক ট্র্যাকিং কৌশলটি সামগ্রিকভাবে একটি খুব ব্যবহারিক কৌশল। এটি প্রবণতা কৌশল এবং শক কৌশলগুলির বৈশিষ্ট্যগুলিকে একত্রিত করে, যা দীর্ঘ লাইন ট্র্যাকিংয়ের জন্য এবং সংক্ষিপ্ত লাইনের জন্য ব্যবহার করা যেতে পারে। প্যারামিটার অপ্টিমাইজেশন এবং সমন্বয় সূচক যাচাইয়ের মাধ্যমে এই কৌশলটির কার্যকারিতা আরও বাড়ানো যেতে পারে। এটি বাজারের বিষয়ে কিছু গবেষণা এবং বিচার করার ক্ষমতা থাকা বিনিয়োগকারীদের জন্য উপযুক্ত।
/*backtest
start: 2023-12-26 00:00:00
end: 2024-01-02 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy("Linda Raschke's Holy Grail", shorttitle="RHG", default_qty_type = strategy.percent_of_equity, default_qty_value = 100, overlay = true)
adxlen = input(14, title="ADX period")
adxMin = input(30)
dilen = adxlen
f_highest(_src, _length)=>
_adjusted_length = _length < 1 ? 1 : _length
_value = _src
for _i = 0 to (_adjusted_length-1)
_value := _src[_i] >= _value ? _src[_i] : _value
_return = _value
f_lowest(_src, _length)=>
_adjusted_length = _length < 1 ? 1 : _length
_value = _src
for _i = 0 to (_adjusted_length-1)
_value := _src[_i] <= _value ? _src[_i] : _value
_return = _value
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)
emaLength = input(20)
curEma = ema(close, emaLength)
highPeriod = input(20)
d = na
takeProfitLong = highest(high, highPeriod)
stopLossLong = f_lowest(low, barssince(low >= curEma))
if strategy.position_size == 0
if adx(dilen, adxlen) <= adxMin or high < curEma
strategy.cancel("Long")
if adx(dilen, adxlen) > adxMin and low < curEma and high > curEma and curEma > curEma[highPeriod / 2] and curEma > curEma[highPeriod] and takeProfitLong > high
strategy.order("Long", strategy.long, stop = high)
strategy.exit("Exit", "Long", limit = takeProfitLong, stop = stopLossLong)
d := high
takeProfitShort = lowest(low, highPeriod)
stopLossShort = f_highest(high, barssince(high <= curEma))
if strategy.position_size == 0
if adx(dilen, adxlen) <= adxMin or low > curEma
strategy.cancel("Short")
if adx(dilen, adxlen) > adxMin and high > curEma and low < curEma and curEma < curEma[highPeriod / 2] and curEma < curEma[highPeriod] and takeProfitShort < low
strategy.order("Short", strategy.short, stop = low)
strategy.exit("Exit", "Short", limit = takeProfitShort, stop = stopLossShort)
d := low
strategy.close("Exit")
plot(d == high ? stopLossLong : d == low ? stopLossShort : na, style = circles, linewidth = 4, color = red)
plot(d == high ? takeProfitLong : d == low ? takeProfitShort : na, style = circles, linewidth = 4, color = green)
plot(d, style = circles, linewidth = 4, color = yellow)
plot(curEma, color = black, linewidth = 2)
// === Backtesting Dates ===
testPeriodSwitch = input(false, "Custom Backtesting Dates")
testStartYear = input(2018, "Backtest Start Year")
testStartMonth = input(3, "Backtest Start Month")
testStartDay = input(6, "Backtest Start Day")
testStartHour = input(08, "Backtest Start Hour")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,testStartHour,0)
testStopYear = input(2018, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(14, "Backtest Stop Day")
testStopHour = input(14, "Backtest Stop Hour")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,testStopHour,0)
testPeriod() =>
time >= testPeriodStart and time <= testPeriodStop ? true : false
isPeriod = testPeriodSwitch == true ? testPeriod() : true
// === /END
if not isPeriod
strategy.cancel_all()
strategy.close_all()