ইএমএ ক্রস এডিআর কৌশল - কঠোর ঝুঁকি ব্যবস্থাপনা সহ একটি বহুমাত্রিক প্রযুক্তিগত সূচক ভিত্তিক ট্রেডিং পদ্ধতি

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

img

সারসংক্ষেপ

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

কৌশলগত নীতি

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

  2. ADR Volatility Filter: কম অস্থিরতার পরিবেশে ট্রেডিং সংকেত তৈরি করা এড়ানোর জন্য, কৌশলটি অস্থিরতা ফিল্টার হিসাবে ADR সূচকটি প্রবর্তন করে। ADR মান একটি পূর্বনির্ধারিত সর্বনিম্ন থ্রেশহোল্ডের উপরে হলেই অবস্থানগুলি খোলা অনুমোদিত।

  3. ট্রেডিং টাইম উইন্ডোঃ কৌশলটি ব্যবহারকারীদের দৈনিক ট্রেডিংয়ের জন্য শুরু এবং শেষ সময় নির্ধারণ করতে দেয়। ট্রেডগুলি কেবল নির্দিষ্ট সময় উইন্ডোর মধ্যে কার্যকর করা হয়, যা অনিয়মিত বা অত্যন্ত অস্থির সময়কাল এড়াতে সহায়তা করে।

  4. ডায়নামিক স্টপ-লস এবং টেক-প্রফিটঃ কৌশলটি গতিশীলভাবে সর্বাধিক সাম্প্রতিক এন মোমবাতিগুলির গড় সর্বোচ্চ এবং সর্বনিম্ন মূল্যের ভিত্তিতে স্টপ-লস এবং টেক-প্রফিট মূল্য গণনা করে, একটি পূর্বনির্ধারিত ঝুঁকি-প্রতিদান অনুপাতের সাথে মিলিত। এটি নিশ্চিত করে যে প্রতিটি ব্যবসায়ের ঝুঁকি-প্রতিদান নিয়ন্ত্রণযোগ্য।

  5. ব্রেক-ইভেন স্টপঃ যখন একটি পজিশন একটি নির্দিষ্ট মুনাফা স্তরে পৌঁছে যায় (ব্যবহারকারীর দ্বারা সংজ্ঞায়িত ঝুঁকি-পুরষ্কার অনুপাত), কৌশলটি স্টপ-লসকে ব্রেক-ইভেন পয়েন্টে (প্রবেশ মূল্য) নিয়ে যায়। এটি ইতিমধ্যে অর্জিত মুনাফা রক্ষা করতে সহায়তা করে।

  6. সর্বোচ্চ দৈনিক ক্ষতির সীমাঃ প্রতিদিনের সর্বোচ্চ ক্ষতি নিয়ন্ত্রণের জন্য, কৌশলটি একটি দৈনিক ক্ষতির সীমা নির্ধারণ করে। একবার দৈনিক ক্ষতি এই সীমাতে পৌঁছে গেলে, কৌশলটি পরের দিন খোলার আগ পর্যন্ত বাণিজ্য বন্ধ করে দেয়।

  7. দিনের শেষে সমস্ত পজিশন বন্ধ করুনঃ পজিশনগুলি লাভ বা স্টপ-লস স্তরে পৌঁছেছে কিনা তা নির্বিশেষে, কৌশলটি রাতারাতি ঝুঁকি এড়াতে প্রতিটি ট্রেডিং দিনের একটি নির্দিষ্ট সময়ে (যেমন, 16:00) সমস্ত পজিশন বন্ধ করে।

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

  1. প্রবণতা অনুসরণ করার ক্ষমতাঃ প্রবণতা নির্ধারণের জন্য দ্বৈত ইএমএ ক্রসওভার ব্যবহার করে, কৌশলটি কার্যকরভাবে প্রধান বাজারের প্রবণতা ক্যাপচার করতে পারে, যার ফলে জয় হার এবং মুনাফা সম্ভাবনা উন্নত হয়।

  2. ভাল অস্থিরতা অভিযোজনযোগ্যতাঃ অস্থিরতা ফিল্টার হিসাবে এডিআর সূচক প্রবর্তন কম অস্থিরতার পরিবেশে ঘন ঘন ট্রেডিং এড়াতে পারে, অবৈধ সংকেত এবং মিথ্যা ব্রেকআউট দ্বারা সৃষ্ট ক্ষতি হ্রাস করে।

  3. কঠোর ঝুঁকি নিয়ন্ত্রণঃ কৌশলটি গতিশীল স্টপ-লস এবং লাভ গ্রহণ, ব্রেক-ইভেন স্টপ এবং সর্বাধিক দৈনিক ক্ষতির সীমা সহ একাধিক মাত্রার ঝুঁকি নিয়ন্ত্রণ ব্যবস্থা নির্ধারণ করে, কার্যকরভাবে ডাউনসাইড ঝুঁকি নিয়ন্ত্রণ করে এবং ঝুঁকি-সমন্বিত রিটার্ন উন্নত করে।

  4. নমনীয় প্যারামিটার সেটিংঃ কৌশলটির বিভিন্ন প্যারামিটার যেমন EMA সময়কাল, ADR দৈর্ঘ্য, ঝুঁকি-প্রতিদান অনুপাত, ট্রেডিং সময় উইন্ডো ইত্যাদি ব্যবহারকারীর পছন্দ এবং বাজারের বৈশিষ্ট্য অনুসারে কৌশলটির কার্যকারিতা অনুকূল করার জন্য নমনীয়ভাবে সেট করা যেতে পারে।

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

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

  1. পরামিতি অপ্টিমাইজেশান ঝুঁকিঃ যদিও কৌশলটির পরামিতিগুলি নমনীয়ভাবে সামঞ্জস্য করা যায়, তবে অতিরিক্ত অপ্টিমাইজেশান অতিরিক্ত ফিটিং এবং নমুনার বাইরে দুর্বল পারফরম্যান্সের দিকে পরিচালিত করতে পারে। অতএব, পরামিতিগুলি সেট করার সময়, কৌশলটির দৃust়তা নিশ্চিত করার জন্য পর্যাপ্ত ব্যাকটেস্টিং এবং বিশ্লেষণ প্রয়োজন।

  2. অপ্রত্যাশিত ইভেন্টের ঝুঁকিঃ কৌশলটি মূলত প্রযুক্তিগত সূচকগুলির উপর ভিত্তি করে ট্রেড করে এবং কিছু হঠাৎ বড় মৌলিক ইভেন্টের মতো যেমন নীতি পরিবর্তন বা উল্লেখযোগ্য অর্থনৈতিক তথ্যের ওঠানামা, যা বড় পরিমাণে ড্রাউনডাউন হতে পারে।

  3. প্রবণতা বিপরীত হওয়ার ঝুঁকিঃ প্রবণতা বিপরীত হওয়ার মূল সময়কালে, দ্বৈত EMA ক্রসওভার সংকেত বিলম্বিত হতে পারে, যার ফলে কৌশলটি অবস্থান স্থাপনের জন্য সেরা সময়টি মিস করতে পারে বা প্রবণতা বিপরীত হওয়ার শুরুতে ক্ষতিগ্রস্থ হতে পারে।

  4. তরলতা ঝুঁকিঃ যদিও কৌশলটি একটি ট্রেডিং সময় উইন্ডো নির্ধারণ করে, যদি ট্রেড করা যন্ত্রগুলির তরলতা দুর্বল হয় তবে এটি এখনও স্লিপ এবং ট্রেডিং বিলম্বের মতো ঝুঁকিগুলির মুখোমুখি হতে পারে, যা কৌশলটির কার্যকারিতাকে প্রভাবিত করে।

  5. প্রযুক্তিগত সূচক ব্যর্থতার ঝুঁকিঃ কৌশলটি প্রযুক্তিগত সূচকগুলির উপর নির্ভর করে। যদি বাজারের পরিস্থিতি উল্লেখযোগ্যভাবে পরিবর্তিত হয়, যার ফলে সূচকগুলি তাদের মূল অর্থ হারাতে পারে, তবে কৌশলটির কার্যকারিতা হ্রাস পেতে পারে।

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

  1. আরও মাত্রিক সূচক প্রবর্তন করুনঃ বিদ্যমান দ্বৈত EMA এবং ADR এর ভিত্তিতে, সিগন্যালগুলির নির্ভরযোগ্যতা এবং দৃঢ়তা উন্নত করার জন্য MACD এবং RSI এর মতো আরও কার্যকর প্রযুক্তিগত সূচক প্রবর্তন বিবেচনা করুন।

  2. ডায়নামিক প্যারামিটার অপ্টিমাইজেশানঃ একটি প্যারামিটার অপ্টিমাইজেশান প্রক্রিয়া স্থাপন করুন যা বাজারের পরিবর্তনের সাথে খাপ খাইয়ে নেওয়ার জন্য বিভিন্ন বাজারের অবস্থার (যেমন প্রবণতা বা দোলন) উপর ভিত্তি করে মূল কৌশল প্যারামিটারগুলিকে গতিশীলভাবে সামঞ্জস্য করে।

  3. মৌলিক কারণগুলি অন্তর্ভুক্ত করুনঃ অর্থনৈতিক তথ্য এবং নীতিগত দিকগুলির মতো কিছু গুরুত্বপূর্ণ মৌলিক সূচকগুলি যথাযথভাবে বিবেচনা করুন, যা কৌশলকে বাজারের প্রবণতা আরও ভালভাবে বুঝতে এবং সময়মতো সিস্টেমিক ঝুঁকি এড়াতে সহায়তা করতে পারে।

  4. স্টপ-লস এবং টেক-প্রফিট প্রক্রিয়া উন্নত করাঃ লাভের সুরক্ষা এবং ঝুঁকি নিয়ন্ত্রণের জন্য আরও ভালভাবে স্টপ-লস এবং টেক-প্রফিটের যুক্তিকে আরও অনুকূল করা হবে।

  5. একাধিক ইনস্ট্রুমেন্ট এবং সময়সীমাঃ একাধিক ট্রেডিং ইনস্ট্রুমেন্ট এবং সময়সীমার জন্য কৌশলটি প্রসারিত করুন এবং বৈচিত্র্যময় বিনিয়োগ এবং সময়সীমার অপ্টিমাইজেশনের মাধ্যমে কৌশলটির অভিযোজনযোগ্যতা এবং স্থিতিশীলতা উন্নত করুন।

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

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


/*backtest
start: 2024-02-26 00:00:00
end: 2024-03-27 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Sameh_Hussein

//@version=5
strategy('EMA Cross ADR Strategy with Stats', overlay=true)

// Adjustable Parameters
shortEmaLength = input(10, title='Short EMA Length')
longEmaLength = input(50, title='Long EMA Length')
adrLength = input(14, title='ADR Length')
riskRewardRatio = input(2.0, title='Risk/Reward Ratio')
lookbackCandles = input(10, title='Lookback Candles for Stop Loss')
startTime = input(0900, title='Start Time')
endTime = input(1600, title='End Time')
minAdrValue = input(10, title='Minimum ADR Value for Entry')
breakEvenProfit = input.float(1.0, title='Break-Even Profit', minval=0.0)
breakEvenRR = input.float(1.0, title='Break-Even Risk-Reward Ratio', minval=0.0)
dailyLossLimit = input(-2000.0, title='Daily Loss Limit')

// Exponential Moving Averages
shortEma = ta.ema(close, shortEmaLength)
longEma = ta.ema(close, longEmaLength)

// Average Daily Range
adr = ta.sma(ta.tr, adrLength)

// Time Filter Function
timeFilter() => true

// Entry Conditions with ADR filter
longCondition = ta.crossover(shortEma, longEma) and timeFilter() and adr > minAdrValue
shortCondition = ta.crossunder(shortEma, longEma) and timeFilter() and adr > minAdrValue

// Calculate the average low and average high of the previous 'lookbackCandles' candles
averageLow = ta.sma(low, lookbackCandles)
averageHigh = ta.sma(high, lookbackCandles)

// Risk and Reward Calculation
stopLossLong = averageLow
takeProfitLong = close + (close - averageLow) * riskRewardRatio
stopLossShort = averageHigh
takeProfitShort = close - (averageHigh - close) * riskRewardRatio

// Entry Control Variables
var longEntryAllowed = true
var shortEntryAllowed = true

// Update entry price on trade execution
var float entryPriceLong = na
var float entryPriceShort = na

if (strategy.position_size > 0)
    if (strategy.position_size[1] <= 0)
        entryPriceLong := strategy.opentrades.entry_price(strategy.opentrades - 1)
    else
        entryPriceLong := entryPriceLong
else
    entryPriceLong := na

if (strategy.position_size < 0)
    if (strategy.position_size[1] >= 0)
        entryPriceShort := strategy.opentrades.entry_price(strategy.opentrades - 1)
    else
        entryPriceShort := entryPriceShort
else
    entryPriceShort := na

// Adjust stop loss to break-even plus the defined profit when the specified risk-reward ratio is reached
breakEvenTriggerLong = entryPriceLong + (entryPriceLong - stopLossLong) * breakEvenRR
breakEvenTriggerShort = entryPriceShort - (stopLossShort - entryPriceShort) * breakEvenRR

if (longEntryAllowed and close >= breakEvenTriggerLong)
    stopLossLong := entryPriceLong + breakEvenProfit

if (shortEntryAllowed and close <= breakEvenTriggerShort)
    stopLossShort := entryPriceShort - breakEvenProfit

// Close all trades at 1600
if (hour == 15 and minute == 59)
    strategy.close_all(comment='Close at 1600')

// Define the daily loss variable and last trade day
var float[] dailyLossArray = array.new_float(1, 0.0)
var int[] lastTradeDayArray = array.new_int(1, na)

// Function to update the daily loss
updateDailyLoss() =>
    _dailyLoss = array.get(dailyLossArray, 0)
    _lastTradeDay = array.get(lastTradeDayArray, 0)
    if na(_lastTradeDay) or dayofmonth != _lastTradeDay
        _dailyLoss := 0.0
        array.set(lastTradeDayArray, 0, dayofmonth)
    if not na(strategy.closedtrades.entry_bar_index(strategy.closedtrades - 1))
        _dailyLoss += strategy.closedtrades.profit(strategy.closedtrades - 1)
    array.set(dailyLossArray, 0, _dailyLoss)

// Call the function to update the daily loss
updateDailyLoss()

// Execute Strategy
if longCondition and longEntryAllowed
    strategy.entry('Long', strategy.long)
    strategy.exit('Take Profit/Stop Loss', 'Long', stop=stopLossLong, limit=takeProfitLong)
    longEntryAllowed := false

if shortCondition and shortEntryAllowed
    strategy.entry('Short', strategy.short)
    strategy.exit('Take Profit/Stop Loss', 'Short', stop=stopLossShort, limit=takeProfitShort)
    shortEntryAllowed := false

// Reset entry control variables on position close
if strategy.position_size == 0
    longEntryAllowed := true
    shortEntryAllowed := true

// // Statistics
// winRate = strategy.wintrades / strategy.closedtrades * 100
// totalTrades = strategy.closedtrades
// averageProfit = strategy.grossprofit / strategy.wintrades
// averageLoss = strategy.grossloss / strategy.losstrades

// // Plotting
// plot(shortEma, color=color.new(color.red, 0), title='Short EMA')
// plot(longEma, color=color.new(color.blue, 0), title='Long EMA')

// // Display Table
// table statsTable = table.new(position=position.top_right, columns=2, rows=4, bgcolor=color.gray, border_width=1)
// table.cell(statsTable, column=0, row=0, text='Win Rate (%)', bgcolor=color.blue)
// table.cell(statsTable, column=1, row=0, text=str.tostring(winRate), bgcolor=color.blue)
// table.cell(statsTable, column=0, row=1, text='Total Trades', bgcolor=color.blue)
// table.cell(statsTable, column=1, row=1, text=str.tostring(totalTrades), bgcolor=color.blue)
// table.cell(statsTable, column=0, row=2, text='Average Profit', bgcolor=color.blue)
// table.cell(statsTable, column=1, row=2, text=str.tostring(averageProfit), bgcolor=color.blue)
// table.cell(statsTable, column=0, row=3, text='Average Loss', bgcolor=color.blue)
// table.cell(statsTable, column=1, row=3, text=str.tostring(averageLoss), bgcolor=color.blue)


আরো