Strasmore Research
শেখা Matt Connorদ্বারা Matt Connor · আপডেট করা হয়েছে 2026-08-05

Maximum Drawdown কী? গভীরতা ও পুনরুদ্ধারের সময়

Maximum drawdown হলো peak থেকে trough পর্যন্ত সর্ববৃহৎ পতন। কতটা গভীর পতনকে বড় ধরা হয় এবং নতুন high-এ ফিরতে কেন বেশি সময় লাগে, তা জানুন।

Maximum drawdown হলো কোনো value series-এ চলমান peak থেকে trough পর্যন্ত সর্ববৃহৎ পতন, যা running peak-এর শতাংশ হিসেবে মাপা হয়। কোনো account $120,000-এ উঠে $84,000-এ নেমে গেলে এবং পরে পুনরুদ্ধার করলে, তার maximum drawdown হবে 30%। এই পরিসংখ্যানটি চিরকাল 30%ই থাকবে, কারণ এটি বর্তমান অবস্থা নয়, বরং পুরো ইতিহাসের সবচেয়ে খারাপ পর্যায়টি নথিবদ্ধ করে। বেশিরভাগ মানুষ শুধু পতনের গভীরতাই উল্লেখ করেন। কিন্তু একই পরিসংখ্যানের মধ্যে আরও দুটি সংখ্যা থাকে: peak থেকে low-তে নামতে যে সময় লাগে, এবং low থেকে নতুন high-এ ফিরতে যে তুলনামূলকভাবে অনেক বেশি সময় লাগে।

সর্বোচ্চ ড্রডাউন কীভাবে হিসাব করা হয়?

পুরো হিসাবটি সিরিজের ওপর একবার লুপ চালিয়েই করা যায়। প্রতিটি পর্যবেক্ষণে চলমান সর্বোচ্চ মান হালনাগাদ করতে হবে, বর্তমান মানকে সেই সর্বোচ্চ মানের সঙ্গে তুলনা করতে হবে এবং এখন পর্যন্ত পাওয়া সবচেয়ে খারাপ ফলটি সংরক্ষণ করতে হবে।

  1. চলমান সর্বোচ্চ মান হিসেবে প্রথম মানটি নির্ধারণ করুন।
  2. প্রতিটি নতুন মানের ক্ষেত্রে, সেটি বেশি হলে সর্বোচ্চ মানটি বাড়ান।
  3. ওই পর্যায়ের ড্রডাউন হিসাব করুন: বর্তমান মানকে সর্বোচ্চ মান দিয়ে ভাগ করে 1 বিয়োগ করুন।
  4. সবচেয়ে ঋণাত্মক ফলটি সংরক্ষণ করুন। সেটিই সর্বোচ্চ ড্রডাউন।

এতে কোনো রিটার্নস সিরিজ, ভোলাটিলিটি অনুমান বা বণ্টন-সংক্রান্ত অনুমান লাগে না। Python standard library ব্যবহার করে সংখ্যার একটি সাধারণ তালিকার ওপর লুপটি চালানো যায়। নতুন Ubuntu সিস্টেমে প্রথমে interpreter ইনস্টল করুন:

apt-get update && apt-get install -y python3

লুপটি maxdd.py হিসেবে সংরক্ষণ করুন। নিচের দামগুলো 10টি পয়েন্টের একটি কাল্পনিক সিরিজ। হাতে যাচাই করা সহজ রাখার জন্য সংখ্যাগুলো ছোট রাখা হয়েছে:

prices = [100.0, 104.0, 98.0, 92.0, 95.0, 88.0, 90.0, 101.0, 99.0, 106.0]

peak = prices[0]
max_dd = 0.0

for price in prices:
    if price > peak:
        peak = price
    drawdown = price / peak - 1.0
    if drawdown < max_dd:
        max_dd = drawdown

print(f"maximum drawdown: {max_dd * 100:.1f}%")

python3 maxdd.py চালালে ফল হিসেবে maximum drawdown: -15.4% দেখা যাবে। হাতে যাচাই করুন: নিম্নতম মানের আগে সর্বোচ্চ মান ছিল 104, নিম্নতম মান 88, এবং 88-কে 104 দিয়ে ভাগ করলে ফল হয় 0.846। এরপর সিরিজটি 106-এ শেষ হয়েছে, যা সর্বকালের সর্বোচ্চ মান। তবু 15.4% ড্রডাউনই বহাল থাকে। সর্বোচ্চ ড্রডাউন কোনো নমুনায় দেখা সবচেয়ে খারাপ মুহূর্তের স্থায়ী রেকর্ড। সিরিজটি বর্তমানে কোথায় অবস্থান করছে, সে সম্পর্কে এটি কিছু বলে না। একই লুপে আরও 2টি ভেরিয়েবল যোগ করলে সময় নির্ধারণ করা যায়: যে ইনডেক্সে সর্বোচ্চ মান নির্ধারিত হয়েছিল এবং যে ইনডেক্সে সবচেয়ে খারাপ ফলটি দেখা গিয়েছিল।

ড্রডাউন কার্ভ দেখতে কেমন

ড্রডাউন কার্ভ প্রতিটি পর্যায়ে ধাপ 3-এর হিসাব ধরে রাখে; এটিকে একটি মাত্র সর্বনিম্ন মানে নামিয়ে আনে না। সিরিজটি যখনই নতুন সর্বোচ্চ স্তর ছোঁয়, রেখাটি শূন্যে থাকে। এর মধ্যবর্তী সময়ে রেখাটি শূন্যের নিচে থাকে। তাই এই ব্যবধানকে “underwater” বলা হয়। 2016 সালের January থেকে মাসের শেষের ক্লোজিং দামের ভিত্তিতে S&P 500 অনুসরণকারী একটি exchange traded fund SPY-এর সেই কার্ভ নিচে দেখানো হলো।

কুয়েরিSPY আন্ডারওয়াটার কার্ভ: চলমান শীর্ষের তুলনায় মাস-শেষের ক্লোজ, 2016 থেকে 2026
প্রতিটি সংখ্যার পেছনের সঠিক SQL
WITH monthly AS (
    SELECT toStartOfMonth(toDate(toTimeZone(window_start, 'America/New_York'))) AS month_start,
           argMax(toFloat64(close), window_start) AS close_px
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2016-01-01')
      AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-07-31')
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
           + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY month_start
),
runs AS (
    SELECT month_start,
           close_px,
           max(close_px) OVER (ORDER BY month_start
                               ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS running_peak
    FROM monthly
)
SELECT formatDateTime(month_start, '%Y-%m') AS month,
       round(100 * (close_px / running_peak - 1), 2) AS drawdown_pct
FROM runs
ORDER BY month_start
Run this yourself

127 মাসের শেষের রিডিংয়ের মধ্যে রেখাটি দীর্ঘ সময় শূন্যের কাছাকাছি স্থির থাকে এবং কয়েকটি গভীর খাঁজে নেমে যায়। নথিভুক্ত সর্বশেষ মাসে চলমান সর্বোচ্চ স্তরের তুলনায় মান ছিল -1.27%। এই আকৃতির দুটি বৈশিষ্ট্য বিষয়টি স্পষ্ট করে। পুনরুদ্ধার তীব্র বাউন্সের বদলে ধীর ঊর্ধ্বমুখী অগ্রগতি হিসেবে আসে। আর প্রতিটি নতুন সর্বোচ্চ স্তর কার্ভটিকে আবার শূন্যে ফিরিয়ে দেয় এবং এর আগের পতনের দৃশ্যমান স্মৃতি মুছে দেয়।

ড্রডাউন থেকে পুনরুদ্ধার হতে কত সময় লাগে?

একটি ড্রডাউনের মধ্যে তিনটি পৃথক সংখ্যা থাকে। পারফরম্যান্স টেবিল পড়ার সময় এগুলোকে একত্রে দেখা সবচেয়ে সাধারণ ভুল:

  1. গভীরতা: শীর্ষমূল্যের তুলনায় মূল্য কত শতাংশ কমেছে।
  2. সর্বনিম্ন পর্যায়ে পৌঁছাতে সময়: শীর্ষমূল্য থেকে তলানিতে পৌঁছানো পর্যন্ত ক্যালেন্ডার দিন।
  3. পুনরুদ্ধারের সময়: তলানি থেকে নতুন শীর্ষমূল্যে পৌঁছানো পর্যন্ত ক্যালেন্ডার দিন।

সাধারণত তৃতীয় সময়কালটিই সবচেয়ে দীর্ঘ। কিন্তু শিরোনামে দেওয়া কোনো একটি সংখ্যা এটি কখনও দেখায় না। নিচের প্যানেলে 2016 সাল থেকে SPY-এর দৈনিক ক্লোজিং মূল্য ব্যবহার করে শেষ হওয়া প্রতিটি underwater পর্যায় পুনর্গঠন করা হয়েছে। কোনো শীর্ষমূল্য নির্ধারিত হওয়ার দিন একটি পর্যায় শুরু হয়। ফান্ডটি প্রথমবার সেই শীর্ষমূল্যের ওপরে ক্লোজ করার দিন পর্যায়টি শেষ হয়।

কুয়েরি2016 থেকে সম্পূর্ণ হওয়া SPY ড্রডাউন: গভীরতা, পতনের দিন, পুনরুদ্ধারের দিন
প্রতিটি সংখ্যার পেছনের সঠিক SQL
WITH daily AS (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS session_date,
           argMax(toFloat64(close), window_start) AS close_px
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2016-01-01')
      AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-07-31')
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
           + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY session_date
),
runs AS (
    SELECT session_date,
           close_px,
           max(close_px) OVER (ORDER BY session_date
                               ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS running_peak
    FROM daily
),
episodes AS (
    SELECT running_peak AS peak_px,
           min(session_date) AS peak_date,
           argMin(session_date, close_px) AS trough_date,
           min(close_px) AS trough_px
    FROM runs
    GROUP BY running_peak
),
sequenced AS (
    SELECT peak_px,
           peak_date,
           trough_date,
           trough_px,
           leadInFrame(peak_date, 1) OVER (ORDER BY peak_date
                                           ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) AS recovery_date
    FROM episodes
)
SELECT formatDateTime(peak_date, '%b %Y') AS episode_label,
       round(100 * (1 - trough_px / peak_px), 1) AS fall_from_peak_pct,
       dateDiff('day', peak_date, trough_date) AS days_to_trough,
       dateDiff('day', trough_date, recovery_date) AS days_to_new_high,
       dateDiff('day', peak_date, recovery_date) AS days_underwater
FROM sequenced
WHERE recovery_date > trough_date
  AND round(100 * (1 - trough_px / peak_px), 1) >= 5
ORDER BY fall_from_peak_pct DESC
LIMIT 8
Run this yourself

তালিকার সবচেয়ে গভীরভাবে সম্পন্ন হওয়া পর্যায়টি Feb 2020-এ শুরু হয় এবং আগের শীর্ষমূল্যের তুলনায় 34.2% নিচে নেমে যায়। মূল্য কমতে 33 ক্যালেন্ডার দিন এবং পুনরুদ্ধারে 148 দিন লেগেছে। অর্থাৎ ফান্ডটি মোট 181 দিন underwater ছিল। পরের এন্ট্রিটি Jan 2022-এর। এটি তুলনামূলকভাবে কম গভীর, 25.4%, এবং ফান্ডটিকে 746 দিন পুরনো শীর্ষমূল্যের নিচে রেখেছে।

গভীরতা ও সময়কাল সম্পূর্ণ ভিন্ন বিষয়। দ্রুত পতন ও দ্রুত পুনরুদ্ধার, কিংবা বছরের পর বছর ধরে চলা সামান্য পতন—দুটিই একটি শতাংশে সংকুচিত হয়ে যায়। March 2020-এর ধস প্রথম ধরনের পরিস্থিতির আদর্শ উদাহরণ। আর বাজার কীভাবে ধসের পর পুনরুদ্ধার করে তা এই যাত্রার দ্বিতীয় ধাপ ব্যাখ্যা করে।

দীর্ঘ সময় ধরে পরিমাপ করলে maximum drawdown কেন আরও খারাপ দেখায়

Maximum drawdown একটি সর্বোচ্চ পতনের পরিমাপ। তাই অতীতের আরও তথ্য যোগ করলে এটি অপরিবর্তিত থাকতে পারে বা আরও গভীর হতে পারে। দীর্ঘ সময়ের window-তে প্রতিটি পর্যায়ে running peak, ছোট window-র peak-এর সমান বা তার চেয়ে বেশি হয়। এ কারণেই হিসাবটি এমন ফল দেখায়। 2026 সালের July 31-এ শেষ হওয়া পাঁচটি window-তে একই fund পরিমাপ করলে বিষয়টি স্পষ্ট হয়।

কুয়েরিএকই ফান্ড, পাঁচটি লুকব্যাক উইন্ডো: 2026 সালের 31 July পর্যন্ত নমুনার দৈর্ঘ্য অনুযায়ী SPY সর্বাধিক ড্রডাউন
প্রতিটি সংখ্যার পেছনের সঠিক SQL
WITH daily AS (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS session_date,
           argMax(toFloat64(close), window_start) AS close_px
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2016-07-01')
      AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-07-31')
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
           + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY session_date
),
scoped AS (
    SELECT arrayJoin([1, 2, 3, 5, 10]) AS lookback_years,
           session_date,
           close_px
    FROM daily
),
windowed AS (
    SELECT lookback_years, session_date, close_px
    FROM scoped
    WHERE session_date >= subtractYears(toDate('2026-07-31'), lookback_years)
),
runs AS (
    SELECT lookback_years,
           session_date,
           close_px,
           max(close_px) OVER (PARTITION BY lookback_years ORDER BY session_date
                               ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS running_peak
    FROM windowed
)
SELECT concat(toString(lookback_years), if(lookback_years = 1, ' year', ' years')) AS lookback,
       round(100 * max(1 - close_px / running_peak), 1) AS max_drawdown_pct,
       formatDateTime(argMax(session_date, 1 - close_px / running_peak), '%b %Y') AS worst_point
FROM runs
GROUP BY lookback_years
ORDER BY lookback_years
Run this yourself

গত 1 year window-তে সর্বোচ্চ পতন ছিল 9.1%। একই series-কে 10 years পর্যন্ত বাড়ালে পরিমাপ দাঁড়ায় 34.2%, এবং সর্বনিম্ন বিন্দুটি পড়ে Mar 2020-এ। Fundটির ঝুঁকি বাড়েনি। শুধু sample-এর সময়কাল দীর্ঘ হয়েছে।

একই হিসাব strategy তুলনাকেও বিকৃত করে। তিন বছরের backtest এবং 20 বছরের backtest একই আচরণ বর্ণনা করতে পারে, তবু তাদের reported drawdown অনেক আলাদা হতে পারে। তাই window উল্লেখ না থাকলে এই সংখ্যার অর্থ সীমিত। Backtesting-এ look-ahead bias এমন আরেকটি পদ্ধতি ব্যাখ্যা করে, যার মাধ্যমে দেখতে পরিচ্ছন্ন backtest নিজেকেই অতিরিক্ত ভালোভাবে উপস্থাপন করতে পারে।

সর্বোচ্চ পতন বনাম অস্থিরতা

অস্থিরতা উভয় দিকের দৈনিক দামের সাধারণ পরিবর্তনের আকার মাপে। সর্বোচ্চ পতন দামের একটি নির্দিষ্ট নিম্নমুখী গতিপথ মাপে। দুটিই ঝুঁকির পরিমাপ, তবে এগুলো ভিন্ন প্রশ্নের উত্তর দেয়। প্যানেলে 8টি বহুলপরিচিত কোম্পানির 31 জুলাই, 2026 পর্যন্ত 5 বছরের তথ্য পাশাপাশি দেখানো হয়েছে। দৈনিক ক্লোজিং দামের ভিত্তিতে অস্থিরতাকে বার্ষিকীকরণ করা হয়েছে।

কুয়েরিবার্ষিকীকৃত ভোলাটিলিটির তুলনায় সর্বাধিক ড্রডাউন: 2026 সালের 31 July পর্যন্ত পাঁচ বছরে আটটি লার্জ-ক্যাপ
প্রতিটি সংখ্যার পেছনের সঠিক SQL
WITH daily AS (
    SELECT ticker,
           toDate(toTimeZone(window_start, 'America/New_York')) AS session_date,
           argMax(toFloat64(close), window_start) AS close_px
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('SPY', 'AAPL', 'MSFT', 'KO', 'JNJ', 'CVX', 'VZ', 'PG')
      AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2021-08-01')
      AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-07-31')
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
           + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY ticker, session_date
),
runs AS (
    SELECT ticker,
           session_date,
           close_px,
           max(close_px) OVER (PARTITION BY ticker ORDER BY session_date
                               ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS running_peak,
           lagInFrame(close_px, 1) OVER (PARTITION BY ticker ORDER BY session_date
                                         ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_close
    FROM daily
)
SELECT ticker,
       round(100 * max(1 - close_px / running_peak), 1) AS max_drawdown_pct,
       round(100 * sqrt(252) * stddevSampIf(close_px / prev_close - 1, prev_close > 0), 1) AS annualized_volatility_pct
FROM runs
GROUP BY ticker
HAVING countIf(prev_close > 0) > 20
ORDER BY max_drawdown_pct DESC
Run this yourself

দুটি কলাম একসঙ্গে পড়ুন। VZ গোষ্ঠীর মধ্যে 45.4%-এ সবচেয়ে গভীর পতনের মুখে পড়েছে, যেখানে বার্ষিকীকৃত অস্থিরতা ছিল 22.6%। বিপরীত প্রান্তে, KO-এর পতন ছিল 20.9% এবং অস্থিরতা ছিল 16.7%। অস্থিরতা পুরো সময়সীমার প্রতিটি দিনের গড় হিসাব, আর গড় দীর্ঘ ও ধীর পতনের প্রভাব কমিয়ে দেখাতে পারে। Drawdown হলো দামের বাস্তবে অনুসরণ করা একক সবচেয়ে খারাপ গতিপথ। কোনো শান্ত ধরনের হোল্ডিং 2 বছর ধরে ধীরে ধীরে কমলেও উল্লেখযোগ্য অস্থিরতা ছাড়াই গভীর drawdown তৈরি করতে পারে।

কম অস্থিরতার ব্যতিক্রম দীর্ঘ সময়ে শান্ত ধরনের শেয়ারগুলোর আচরণ বিশ্লেষণ করে, আর Kelly criterion অনুযায়ী পজিশনের আকার নির্ধারণ দেখায় কীভাবে drawdown সহনশীলতা একটি পজিশনের আকারে রূপ নেয়।

সংখ্যাটি যা বলতে পারে না

চারটি সীমাবদ্ধতা মনে রাখা জরুরি:

  1. এটি একটি বাস্তবে ঘটা পথের ফল। একই প্রক্রিয়ায় অন্য একটি ফলন হলে সংখ্যা অনেক খারাপও হতে পারত।
  2. এটি নমুনার দৈর্ঘ্যের ওপর নির্ভর করে। তাই দুটি drawdown কেবল একই দৈর্ঘ্যের সময়সীমায় তুলনা করা যায়।
  3. এটি sampling frequency-এর ওপর নির্ভর করে। মাসের শেষের ক্লোজিং মূল্য intraday নিম্নস্তরগুলো আড়াল করে। ফলে একই সময়সীমায় daily closing price ব্যবহার করলে যে সংখ্যা পাওয়া যায়, মাসশেষের ক্লোজিং মূল্য ব্যবহার করলে সংখ্যা তার চেয়ে কম হয়।
  4. এতে ভবিষ্যৎ সম্পর্কে কোনো তথ্য নেই। কোনো শীর্ষস্তরের 30% নিচে অবস্থান করা থেকে বোঝা যায় না যে 31তম পয়েন্ট আগামীকালই আসবে কি না।

এই শেষ সীমাবদ্ধতার কারণেই automated system-এর drawdown threshold নয়, drawdown policy প্রয়োজন। “20%-এ halt করুন” বললে একটি প্রশ্নের উত্তর পাওয়া যায়, কিন্তু দুটি প্রশ্নের উত্তর পাওয়া যায় না: halt-এর সময় open positions-এর কী হবে, এবং কোন প্রমাণের ভিত্তিতে system আবার চালু হবে। ট্রেডিং বটের জন্য Circuit breakers সেই policy-এর কাঠামো ব্যাখ্যা করে। ইচ্ছামতো নির্ধারিত একটি সরল নিয়মের খরচ recovery leg-এ দেখা যায়। কারণ system যদি নিম্নস্তরের কাছাকাছি বন্ধ হয়ে যায় এবং দেরিতে আবার চালু হয়, তাহলে ঊর্ধ্বমুখী পুনরুদ্ধারের একটি বড় অংশে সেটি বাজারের বাইরে থাকে। সেরা দিনগুলো বাদ পড়ার প্রভাব এই হিসাবের পরিমাণ দেখায়।

দুটি সংখ্যা তুলনা করার আগে একটি measurement detail গুরুত্বপূর্ণ: কোনো fund-এর price series-এ drawdown এবং বাস্তব account-এ drawdown এক নয়, যখন cash account-এ ঢোকে বা account থেকে বেরিয়ে যায় এবং যখন dividend জমা হয়। মাসিক রিটার্ন কীভাবে পরিমাপ করা হয় এই বিষয়টি সম্পূর্ণভাবে ব্যাখ্যা করে।

সর্বোচ্চ পতন নিয়ে সাধারণ জিজ্ঞাসা

ভালো maximum drawdown কত হওয়া উচিত?

এর কোনো সার্বজনীন মাত্রা নেই। তুলনার জন্য একটি benchmark এবং পরিমাপের একটি সময়সীমা দরকার। 31 July 2026-এ শেষ হওয়া আগের ten years-এ SPY-এর চলমান শীর্ষ থেকে দৈনিক closing price-এর ভিত্তিতে সর্বোচ্চ পতন ছিল 34.2%। কোনো কৌশল ছোট সময়সীমায় এর চেয়ে কম পতন দেখালেই সেটি যে বেশি নিরাপদ, তা নয়।

maximum drawdown কি volatility-এর সমান?

না। Volatility সাধারণ দৈনিক ওঠানামা বোঝায়। Maximum drawdown বোঝায় শীর্ষ থেকে তলানি পর্যন্ত একক সবচেয়ে খারাপ পতনের পথ। দুই বছর ধরে ধীরে ধীরে কমতে থাকা কম-volatility-এর কোনো holding, বারবার নতুন উচ্চতা তৈরি করা কিন্তু বেশি ওঠানামাপূর্ণ কোনো holding-এর চেয়ে গভীর drawdown বহন করতে পারে।

maximum drawdown থেকে পুনরুদ্ধার হতে কত সময় লাগে?

এটি ভিন্ন হতে পারে। প্রায়ই পুনরুদ্ধারে পতনের চেয়ে বেশি সময় লাগে। 2016 থেকে SPY-এর ক্ষেত্রে, আগের উচ্চতার নিচে সম্পূর্ণ হওয়া সবচেয়ে দীর্ঘ সময়কালটি peak থেকে নতুন high-এ ফিরতে 181 calendar days স্থায়ী হয়েছিল। এর মধ্যে 33 দিন পতন চলেছিল।

maximum drawdown কি ভবিষ্যৎ ক্ষতির পূর্বাভাস দেয়?

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


উপরের প্রতিটি panel-এর পেছনের SQL সংরক্ষিত আছে। একটি খুলে ticker বা সময়সীমা বদলান, তারপর Strasmore terminal-এ একই drawdown হিসাব চালান।

#risk#drawdown#backtesting#performance metrics#python