গতিশীল গড় ক্রসওভার ট্রেডিং কৌশল

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

img

সারসংক্ষেপ

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

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

এই কৌশলটি বাজারের প্রবণতা নির্ধারণের জন্য দ্রুত EMA (8 দিনের) এবং ধীর EMA (21 দিনের) এর মধ্যে ক্রসওভার ব্যবহার করে। নির্দিষ্ট যুক্তিটি হলঃ

  1. ৮ দিনের EMA এবং ২১ দিনের EMA গণনা করুন
  2. যখন ৮ দিনের EMA ২১ দিনের EMA এর উপরে চলে যায়, তখন এটি নির্ধারণ করা হয় যে বাজারের প্রবণতা বিপরীত হয়েছে এবং একটি উত্থান প্রবণতা শুরু হয়েছে।
  3. যখন ৮ দিনের EMA ২১ দিনের EMA এর নিচে চলে যায়, তখন নির্ধারিত হয় যে বাজারের প্রবণতা বিপরীত হয়েছে এবং একটি নিম্নমুখী প্রবণতা শুরু হয়েছে
  4. একটি আপট্রেন্ডের সময়, একটি ক্রয় সংকেত উৎপন্ন হয়। একটি ডাউনট্রেন্ডের সময়, একটি বিক্রয় সংকেত উৎপন্ন হয়
  5. প্রতিটি পজিশনের জন্য ঝুঁকি পরিচালনার জন্য স্টপ লস এবং লাভের দাম নির্ধারণ করুন

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

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

এই কৌশলটির প্রধান সুবিধাগুলো হল:

  1. দ্রুত এবং ধীর EMA ক্রসিং কার্যকরভাবে বাজার প্রবণতা এবং ট্রেডিং সংকেত নির্ধারণ করতে পারেন
  2. কৌশলগত পরামিতিগুলির জন্য বড় অপ্টিমাইজেশান স্পেস যেখানে EMA সময়কাল আরও সামঞ্জস্য করা যেতে পারে
  3. গতির সূচকগুলিকে অন্তর্ভুক্ত করে গোলমাল সংকেতগুলি কার্যকরভাবে ফিল্টার করা যায়
  4. স্টপ লস এবং লাভ গ্রহণের যুক্তি কনফিগার করে সক্রিয় ঝুঁকি নিয়ন্ত্রণ

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

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

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

  1. বিভিন্ন বাজারে, ঘন ঘন EMA ক্রসওভার সংকেতগুলি আরও মিথ্যা লেনদেন তৈরি করতে পারে
  2. ফাঁক ঝুঁকি কার্যকরভাবে পরিচালিত হয় না
  3. দীর্ঘমেয়াদী প্রবণতা দিক বিবেচনা করা হয় না

এই ঝুঁকি মোকাবেলায় কিছু অপ্টিমাইজেশন করা যেতে পারেঃ

  1. মিথ্যা সংকেত কমাতে বোলিংজার ব্যান্ড, কেডিজে এর মতো অন্যান্য ফিল্টার যুক্ত করুন
  2. দীর্ঘমেয়াদী প্রবণতা নির্ধারণের জন্য উচ্চতর সময়সীমার সূচক অন্তর্ভুক্ত করুন
  3. বিভিন্ন বাজারে অভিযোজিত করার জন্য EMA দৈর্ঘ্যের মত প্যারামিটার অপ্টিমাইজ করুন
  4. ফাঁক থেকে বিশাল স্লিপিং ক্ষতি এড়াতে ম্যানুয়াল হস্তক্ষেপ

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

এই কৌশলটি অপ্টিমাইজ করার জন্য এখনও অনেক জায়গা আছেঃ

  1. ঐতিহাসিক পারফরম্যান্সের উপর ভিত্তি করে EMA সময়ের পরামিতিগুলি অপ্টিমাইজ করুন
  2. সিগন্যাল ফিল্টারিংয়ের জন্য অন্যান্য প্রযুক্তিগত সূচক যোগ করুন, উদাহরণস্বরূপ KDJ, MACD নির্ভুলতা উন্নত করতে
  3. স্টপ লস এবং লাভের সেটিংগুলিকে বাজারের বৈশিষ্ট্যগুলির সাথে আরও ভালভাবে ফিট করার জন্য অপ্টিমাইজ করুন
  4. স্বয়ংক্রিয় প্যারামিটার অপ্টিমাইজেশনের জন্য মেশিন লার্নিং কৌশল ব্যবহার করুন

এই পদক্ষেপগুলি কৌশলটির স্থিতিশীলতা, অভিযোজনযোগ্যতা এবং লাভজনকতা ব্যাপকভাবে উন্নত করতে পারে।

সিদ্ধান্ত

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


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
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/
// © TradersPostInc

//@version=5
strategy('TradersPost Example MOMO Strategy', overlay=true)

startTime = input(defval = timestamp('01 Jan 2021 00:00 +0000'), title = 'Start Time', group = 'Date Range')
endTime = input(defval = timestamp('31 Dec 2023 23:59 +0000'), title = 'End Time', group = 'Date Range')
timeCondition = true
timeConditionEnd = timeCondition[1] and not timeCondition

fastEmaLength = input.int(defval = 8, title = 'Fast EMA Length')
slowEmaLength = input.int(defval = 21, title = 'Slow EMA Length')
sides = input.string(defval = 'Both', title = 'Sides', options = ['Long', 'Short', 'Both', 'None'])

fastEma = ta.ema(close, fastEmaLength)
slowEma = ta.ema(close, slowEmaLength)

isUptrend = fastEma >= slowEma
isDowntrend = fastEma <= slowEma
trendChanging = ta.cross(fastEma, slowEma)

ema105 = request.security(syminfo.tickerid, '30', ta.ema(close, 105)[1], barmerge.gaps_off, barmerge.lookahead_on)
ema205 = request.security(syminfo.tickerid, '30', ta.ema(close, 20)[1], barmerge.gaps_off, barmerge.lookahead_on)
plot(ema105, linewidth=4, color=color.new(color.purple, 0), editable=true)
plot(ema205, linewidth=2, color=color.new(color.purple, 0), editable=true)

aa = plot(fastEma, linewidth=3, color=color.new(color.green, 0), editable=true)
bb = plot(slowEma, linewidth=3, color=color.new(color.red, 0), editable=true)
fill(aa, bb, color=isUptrend ? color.green : color.red, transp=90)

tradersPostBuy = trendChanging and isUptrend and timeCondition
tradersPostSell = trendChanging and isDowntrend and timeCondition

pips = syminfo.pointvalue / syminfo.mintick

percentOrPipsInput = input.string('Percent', title='Percent or Pips', options=['Percent', 'Pips'])

stopLossLongInput = input.float(defval=0, step=0.01, title='Stop Loss Long', minval=0)
stopLossShortInput = input.float(defval=0, step=0.01, title='Stop Loss Short', minval=0)

takeProfitLongInput = input.float(defval=0, step=0.01, title='Target Profit Long', minval=0)
takeProfitShortInput = input.float(defval=0, step=0.01, title='Target Profit Short', minval=0)

stopLossPriceLong = ta.valuewhen(tradersPostBuy, close, 0) * (stopLossLongInput / 100) * pips
stopLossPriceShort = ta.valuewhen(tradersPostSell, close, 0) * (stopLossShortInput / 100) * pips

takeProfitPriceLong = ta.valuewhen(tradersPostBuy, close, 0) * (takeProfitLongInput / 100) * pips
takeProfitPriceShort = ta.valuewhen(tradersPostSell, close, 0) * (takeProfitShortInput / 100) * pips

takeProfitALong = takeProfitLongInput > 0 ? takeProfitLongInput : na
takeProfitBLong = takeProfitPriceLong > 0 ? takeProfitPriceLong : na

takeProfitAShort = takeProfitShortInput > 0 ? takeProfitShortInput : na
takeProfitBShort = takeProfitPriceShort > 0 ? takeProfitPriceShort : na

stopLossALong = stopLossLongInput > 0 ? stopLossLongInput : na
stopLossBLong = stopLossPriceLong > 0 ? stopLossPriceLong : na

stopLossAShort = stopLossShortInput > 0 ? stopLossShortInput : na
stopLossBShort = stopLossPriceShort > 0 ? stopLossPriceShort : na

takeProfitLong = percentOrPipsInput == 'Pips' ? takeProfitALong : takeProfitBLong
stopLossLong = percentOrPipsInput == 'Pips' ? stopLossALong : stopLossBLong
takeProfitShort = percentOrPipsInput == 'Pips' ? takeProfitAShort : takeProfitBShort
stopLossShort = percentOrPipsInput == 'Pips' ? stopLossAShort : stopLossBShort

buyAlertMessage = '{"ticker": "' + syminfo.ticker + '", "action": "buy", "price": ' + str.tostring(close) + '}'
sellAlertMessage = '{"ticker": "' + syminfo.ticker + '", "action": "sell", "price": ' + str.tostring(close) + '}'

exitLongAlertMessage = '{"ticker": "' + syminfo.ticker + '", "action": "exit", "price": ' + str.tostring(close) + '}'
exitShortAlertMessage = '{"ticker": "' + syminfo.ticker + '", "action": "exit", "price": ' + str.tostring(close) + '}'

if (sides != "None")
    if tradersPostBuy
        strategy.entry('Long', strategy.long, when = sides != 'Short', alert_message = buyAlertMessage)
        strategy.close('Short', when = sides == "Short" and timeCondition, alert_message = exitShortAlertMessage)

    if tradersPostSell
        strategy.entry('Short', strategy.short, when = sides != 'Long', alert_message = sellAlertMessage)
        strategy.close('Long', when = sides == 'Long', alert_message = exitLongAlertMessage)

exitAlertMessage = '{"ticker": "' + syminfo.ticker + '", "action": "exit"}'

strategy.exit('Exit Long', from_entry = "Long", profit = takeProfitLong, loss = stopLossLong, alert_message = exitAlertMessage)
strategy.exit('Exit Short', from_entry = "Short", profit = takeProfitShort, loss = stopLossShort, alert_message = exitAlertMessage)

strategy.close_all(when = timeConditionEnd)

আরো