ADR চলমান গড় ক্রসওভার কৌশল - একটি ট্রেডিং পদ্ধতি যা বহুমাত্রিক প্রযুক্তিগত সূচক এবং কঠোর স্টপ-প্রফিট এবং স্টপ-লসকে একীভূত করে


সৃষ্টির তারিখ: 2024-03-28 16:46:29 অবশেষে সংশোধন করুন: 2024-03-28 16:46:29
অনুলিপি: 0 ক্লিকের সংখ্যা: 762
1
ফোকাস
1617
অনুসারী

ADR চলমান গড় ক্রসওভার কৌশল - একটি ট্রেডিং পদ্ধতি যা বহুমাত্রিক প্রযুক্তিগত সূচক এবং কঠোর স্টপ-প্রফিট এবং স্টপ-লসকে একীভূত করে

ওভারভিউ

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

কৌশল নীতি

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

  2. এডিআর ওঠানামা ফিল্টারঃ কম ওঠানামা পরিবেশে লেনদেনের সংকেত তৈরি করা এড়াতে, কৌশলটি এডিআর সূচককে ওঠানামা ফিল্টার হিসাবে প্রবর্তন করে। ADR মানটি ডিফল্ট ন্যূনতম থ্রেশহোল্ডের চেয়ে বেশি হলেই পজিশন খোলার অনুমতি দেওয়া হয়।

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

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

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

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

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

সামর্থ্য বিশ্লেষণ

  1. প্রবণতা ট্র্যাকিং ক্ষমতা শক্তিশালীঃ ডবল সমান্তরাল ক্রস দ্বারা প্রবণতা বিচার, আপনি কার্যকরভাবে বাজারের প্রধান প্রবণতা ক্যাপচার করতে পারেন, যার ফলে কৌশল বিজয়ীতা এবং মুনাফা সম্ভাব্যতা বৃদ্ধি।

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

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

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

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

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

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

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

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

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

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

অপ্টিমাইজেশান দিক

  1. আরও মাত্রিক সূচক প্রবর্তন করাঃ বিদ্যমান দ্বিগুণ গড় এবং এডিআরের উপর ভিত্তি করে, সিগন্যালের নির্ভরযোগ্যতা এবং স্থিতিশীলতা বাড়ানোর জন্য আরও কার্যকর প্রযুক্তিগত সূচক যেমন এমএসিডি, আরএসআই ইত্যাদি প্রবর্তন করা বিবেচনা করা যেতে পারে।

  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)