ডাবল ইএমএ ক্রসওভার ওসিলেশন ট্র্যাকিং কৌশল

লেখক:চাওঝাং, তারিখঃ ২০২৪-০১-০৩ ১১ঃ৩৮ঃ৫১
ট্যাগঃ

img

সারসংক্ষেপ

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

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

এই কৌশলটি প্রবণতা মূল্যায়নের জন্য একটি সূচক হিসাবে 20 পিরিয়ড EMA ব্যবহার করে। যখন মূল্য EMA এর উপরে অতিক্রম করে, এটি একটি আপ ট্রেন্ডের সংকেত দেয়, এবং যখন মূল্য নীচে অতিক্রম করে, এটি একটি ডাউন ট্রেন্ডের সংকেত দেয়।

যখন মূল্য EMA এর উপরে অতিক্রম করে, তখন গত ২০টি সময়ের মধ্যে সর্বোচ্চ মূল্যকে লাভ হিসাবে এবং ক্রসওভারের পর সর্বনিম্ন সর্বনিম্নকে স্টপ লস হিসাবে ব্যবহার করে একটি লং পজিশন প্রবেশ করা হয়। যখন মূল্য EMA এর নীচে অতিক্রম করে, তখন সর্বশেষ ২০টি সময়ের মধ্যে সর্বনিম্ন মূল্যকে লাভ হিসাবে এবং ক্রসওভারের পর সর্বোচ্চ সর্বোচ্চকে স্টপ লস হিসাবে ব্যবহার করে একটি শর্ট পজিশন প্রবেশ করা হয়।

একই সময়ে, কৌশলটি ADX 30 এর উপরে কিনা তাও পরীক্ষা করে। ট্রেডগুলি কেবল তখনই নেওয়া হয় যখন প্রবণতা যথেষ্ট শক্তিশালী হয়, অর্থাৎ যখন ADX 30 এর উপরে থাকে। এটি বাজারের দোলের সময় স্টপ আউটগুলি এড়ায়।

ওপেন ট্রেডিংয়ের সময়, ট্রেলিং স্টপ বাজার অবস্থার উপর ভিত্তি করে আরও লাভের লক করার জন্য সামঞ্জস্য করে।

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

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

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

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

এই কৌশলটির মূল ঝুঁকি হ'ল তীব্রতর দোলের সময় আরও ঘন ঘন স্টপ আউট হওয়ার সম্ভাবনা। এখানেই এডিএক্স খেলতে আসে। এডিএক্স কম হওয়ার সময় ট্রেডিং অক্ষম করে, একটি স্পষ্ট প্রবণতার অনুপস্থিতিতে ক্ষতি এড়ানো যায়।

এছাড়াও, সঠিক স্টপ লস প্লেসমেন্টও মূল বিষয়। অত্যধিক প্রশস্ত স্টপগুলি একক বাণিজ্যের ক্ষতির পরিমাণ বাড়িয়ে তুলতে পারে। অত্যধিক সংকীর্ণ স্টপগুলি খুব সংবেদনশীল হতে পারে এবং স্টপ আউট সম্ভাবনা বাড়িয়ে তুলতে পারে। লাভের লক্ষ্য এবং স্টপ লসের ঝুঁকিগুলির মধ্যে একটি ভারসাম্য খুঁজে পাওয়া দরকার।

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

এই কৌশলটির সম্ভাব্য অপ্টিমাইজেশানগুলির মধ্যে রয়েছেঃ

  1. সর্বোত্তম সমন্বয় খুঁজে বের করার জন্য আরো EMA সময়ের পরীক্ষা।

  2. এডিএক্স সময়কাল এবং থ্রেশহোল্ড মান সহ এডিএক্স পরামিতিগুলি অপ্টিমাইজ করা।

  3. মুনাফা গ্রহণ এবং স্টপ লস অ্যালগরিদম উন্নত করা, উদাহরণস্বরূপ গতিশীল স্টপ চালু করে।

  4. কেডিজে এবং এমএসিডি-র মতো অতিরিক্ত সূচককে একত্রিত করে একটি মাল্টি-ইন্ডিকেটর নিশ্চিতকরণ ব্যবস্থা তৈরি করা।

সংক্ষিপ্তসার

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


/*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()


আরো