Strasmore Research
Deep Dives · Matt ConnorBy Matt Connor ·

బ్యాక్‌టెస్ట్ కాన్ఫిడెన్స్ బ్యాండ్లను ఎలా నిర్మించాలి

ఒక ఈక్విటీ కర్వ్ కేవలం ఒక నమూనా మాత్రమే. బ్యాక్‌టెస్ట్ Sharpe రేషియోపై బూట్‌స్ట్రాప్ కాన్ఫిడెన్స్ ఇంటర్వల్ సున్నాను కలిగి ఉండే అవకాశం ఉంది. దీన్ని ఎలా నిర్మించాలో ఇక్కడ చూడండి.

బ్యాక్‌టెస్ట్ కాన్ఫిడెన్స్ ఇంటర్వల్ (విశ్వసనీయత అంతరం)

ఒక బ్యాక్‌టెస్ట్ కాన్ఫిడెన్స్ ఇంటర్వల్ ఒక ముఖ్యమైన ప్రశ్నకు సమాధానమిస్తుంది: ఈక్విటీ కర్వ్‌లో ఎంత భాగం వ్యూహం వల్ల వచ్చింది, ఎంత భాగం అది అమలు చేయబడిన చారిత్రక కాలం వల్ల వచ్చింది? ఒక బ్యాక్‌టెస్ట్‌ను బూట్‌స్ట్రాపింగ్ చేయడం ద్వారా, రిటర్న్ సిరీస్‌ను అనేకసార్లు రీ-శాంప్లింగ్ చేసి, ప్రతి శాంపిల్‌పై గణాంకాలను తిరిగి లెక్కించి, వచ్చే ఫలితాల పర్సంటైల్స్‌ను పరిశీలించడం ద్వారా ఈ అంతరాన్ని నిర్మిస్తారు. ఒక సంవత్సర కాలపు రోజువారీ పరిశీలనల ఆధారంగా లెక్కించిన 1.4 Sharpe రేషియో, సున్నాను కూడా కలిగి ఉండేంత విస్తృతమైన 95 శాతం విశ్వసనీయత అంతరాన్ని కలిగి ఉంటుంది. దీనికి గల కారణాలను కింద ఉన్న ప్యానెల్స్ వివరిస్తున్నాయి.

ఒక ఈక్విటీ కర్వ్ ఎందుకు ఒకే ఒక నమూనా అవుతుంది

ఒక బ్యాక్‌టెస్ట్ ప్రతి గణాంకానికి ఒకే సంఖ్యను ఇస్తుంది: ఒక Sharpe ratio, ఒక వార్షిక రాబడి, ఒక గరిష్ట డ్రాడౌన్, ఒక హిట్ రేట్. వీటిలో ఏదీ ఆ వ్యూహం యొక్క నిజమైన విలువ కాదు. ప్రతిదీ పరిమితమైన ట్రేడింగ్ రోజుల నుండి అంచనా వేయబడిన విలువ మాత్రమే. అదే కాలపరిమితి కలిగిన మరొక సమయం వేరే ఫలితాలను ఇచ్చే అవకాశం ఉంది.

కింద ఉన్న ప్యానెల్ వ్యూహాన్ని పూర్తిగా పక్కన పెట్టి, అత్యంత సరళమైన పొజిషన్‌ను కొలుస్తుంది. ఇది SPYని ఒక క్యాలెండర్ సంవత్సరానికి ఒకసారి, క్లోజ్-టు-క్లోజ్ ధరల రాబడుల ఆధారంగా కలిగి ఉంటుంది.

క్వెరీఒక పొజిషన్, ఏడాదికి ఒకటి: క్యాలెండర్ సంవత్సరం వారీగా SPY వార్షిక Sharpe నిష్పత్తి
ప్రతి సంఖ్య వెనుక ఉన్న ఖచ్చితమైన SQL
WITH daily AS
(
    SELECT
        date,
        toFloat64(close) / nullIf(lagInFrame(toFloat64(close), 1)
            OVER (ORDER BY date ROWS BETWEEN 1 PRECEDING AND CURRENT ROW), 0) - 1 AS ret
    FROM global_markets.stocks_daily_aggs
    WHERE ticker = 'SPY'
      AND date >= '2011-12-01'
      AND date <  '2026-01-01'
)
SELECT
    toString(toYear(date))                            AS year,
    count()                                           AS obs_count,
    round(avg(ret) * 252 * 100, 2)                    AS ann_return_pct,
    round(stddevSamp(ret) * sqrt(252) * 100, 2)       AS ann_vol_pct,
    round(avg(ret) / stddevSamp(ret) * sqrt(252), 2)  AS sharpe_ratio
FROM daily
WHERE date >= '2012-01-01'
  AND ret IS NOT NULL
GROUP BY year
ORDER BY year
Run this yourself

ప్రతి అడ్డు వరుస సుమారు 250 సెషన్లను కలిగి ఉంటుంది, ఇది ప్రామాణిక ట్రేడింగ్ సంవత్సరానికి దగ్గరగా ఉంటుంది. వీటిలో దేనిలోనూ పొజిషన్‌కు సంబంధించి ఏమీ మారలేదు. 2012లో వార్షిక Sharpe ratio 1.06గా నమోదైంది; 2025లో అది 0.88గా నమోదైంది, చార్టుపై 14 సంవత్సరాల డేటా ఉంది. ఒక బ్రాడ్ ఇండెక్స్‌ను ఒక సంవత్సరం పాటు కలిగి ఉండటమే ప్రధాన సంఖ్యను చాలా మంది పాఠకులు 'నాయిస్' (అనవసరమైన హెచ్చుతగ్గులు) అని భావించే దానికంటే ఎక్కువ మారుస్తుంది. అదే కాలపరిమితి కలిగిన వ్యూహ బ్యాక్‌టెస్ట్ కనీసం అంతటి అస్థిరతను కలిగి ఉంటుంది. ఈ కాలమ్ వెనుక ఉన్న వార్షికీకరణ పద్ధతి మా Sharpe ratio గైడ్లో ఉంది, మరియు పీరియడ్-రిటర్న్ మెకానిక్స్ నెలవారీ రాబడులను ఎలా కొలుస్తారు అనే విభాగంలో ఉన్నాయి.

బ్యాక్‌టెస్ట్ Sharpe నిష్పత్తి చుట్టూ ఉండే పరిధి ఎంత వెడల్పుగా ఉంటుంది?

Sharpe అంచనా యొక్క ప్రామాణిక దోషం (standard error), పరిశీలనల సంఖ్య యొక్క వర్గమూలానికి అనుగుణంగా తగ్గుతుంది. ఆ సూత్రంపైనే ఆధారపడకుండా, నేరుగా ఆ విస్తృతిని (spread) కొలవండి. ఇరవై సంవత్సరాల ట్రేడింగ్ సెషన్లను ఒకే నిడివి గల అతివ్యాప్తి చెందని విండోలుగా విభజించండి. ప్రతి విండోలో వార్షిక Sharpe నిష్పత్తిని లెక్కించి, ఆ సంఖ్యల మధ్య ఎంత వ్యత్యాసం ఉందో గమనించండి.

క్వెరీ2006 నుండి 2025 వరకు, ఒకదానితో ఒకటి సంబంధం లేని SPY విండోలలో కొలిచిన Sharpe విస్తరణ
ప్రతి సంఖ్య వెనుక ఉన్న ఖచ్చితమైన SQL
WITH daily AS
(
    SELECT
        date,
        toFloat64(close) / nullIf(lagInFrame(toFloat64(close), 1)
            OVER (ORDER BY date ROWS BETWEEN 1 PRECEDING AND CURRENT ROW), 0) - 1 AS ret
    FROM global_markets.stocks_daily_aggs
    WHERE ticker = 'SPY'
      AND date >= '2005-12-01'
      AND date <  '2026-01-01'
),
indexed AS
(
    SELECT
        ret,
        row_number() OVER (ORDER BY date) AS i
    FROM daily
    WHERE date >= '2006-01-01'
      AND ret IS NOT NULL
),
blocks AS
(
    SELECT
        w,
        intDiv(i, w)                                            AS blk,
        count()                                                 AS n,
        avg(ret) / nullIf(stddevSamp(ret), 0) * sqrt(252)        AS sharpe
    FROM indexed
    CROSS JOIN (SELECT arrayJoin([21, 63, 126, 252, 504]) AS w) AS ws
    GROUP BY w, blk
    HAVING n = w
)
SELECT
    concat(toString(w), ' sessions')                          AS horizon,
    count()                                                   AS block_count,
    round(quantileDeterministic(0.05)(sharpe, blk), 2)        AS sharpe_p05,
    round(quantileDeterministic(0.50)(sharpe, blk), 2)        AS sharpe_p50,
    round(quantileDeterministic(0.95)(sharpe, blk), 2)        AS sharpe_p95,
    round(quantileDeterministic(0.95)(sharpe, blk)
        - quantileDeterministic(0.05)(sharpe, blk), 2)        AS sharpe_band_width
FROM blocks
WHERE sharpe IS NOT NULL
GROUP BY w
ORDER BY w
Run this yourself

ప్రతి విండోకు 21 sessions చొప్పున, కొలిచిన Sharpe యొక్క ఐదవ శాతం నుండి తొంభై ఐదవ శాతం వరకు -3.37 నుండి 6.97 వరకు ఉంటుంది. ఇది 238 విండోలలో 10.34 Sharpe పాయింట్ల విస్తృతిని సూచిస్తుంది. ప్రతి విండోను 504 sessionsకి పెంచితే, ఆ విస్తృతి 1.67 పాయింట్లకు తగ్గుతుంది, ఇది ఇప్పుడు కేవలం 8 విండోలలో మాత్రమే లెక్కించబడుతుంది. ఇక్కడ రెండు అంశాలు ఏకకాలంలో మారుతున్నాయి. నమూనా పరిమాణం (sample size) పెరిగేకొద్దీ అంచనా మరింత ఖచ్చితంగా మారుతుంది, అదే సమయంలో చరిత్ర అందించగల స్వతంత్ర నమూనాల సంఖ్య తగ్గిపోతుంది. ఈ సమతుల్యతే మొత్తం విశ్లేషణకు మూలం.

బ్యాక్‌టెస్ట్ కాన్ఫిడెన్స్ ఇంటర్వల్‌ను బూట్‌స్ట్రాప్ చేయడం ఎలా

ఈ ప్రక్రియ పూర్తిగా వివరించడానికి తగినంత చిన్నది.

  1. వ్యూహం యొక్క వాస్తవ రాబడి శ్రేణితో ప్రారంభించండి; ప్రతి కాలానికి ఒక విలువ చొప్పున మొత్తం N విలువలు ఉండాలి.
  2. ఆ జాబితా నుండి N రాబడులను యాదృచ్ఛికంగా (random), తిరిగి చేర్చే పద్ధతిలో (with replacement) ఎంచుకోండి. కొన్ని విలువలు రెండుసార్లు రావచ్చు, కొన్ని అస్సలు రాకపోవచ్చు.
  3. ఈ రీశాంపిల్ (resample) పై గణాంకాలను తిరిగి లెక్కించండి.
  4. ప్రతి విలువను భద్రపరుస్తూ, ఈ ప్రక్రియను కొన్ని వేల సార్లు పునరావృతం చేయండి.
  5. భద్రపరిచిన విలువలను క్రమ పద్ధతిలో అమర్చి, 95 శాతం ఇంటర్వల్ కోసం 2.5వ మరియు 97.5వ పర్సంటైల్ విలువలను గుర్తించండి.

రెండవ దశకు ముందు రాండమ్ నంబర్ జనరేటర్‌ను సీడ్ (seed) చేయండి, మరియు ప్రచురించిన ఇంటర్వల్ పక్కనే ఆ సీడ్ విలువను నమోదు చేయండి. బూట్‌స్ట్రాప్ అనేది ఒక Monte Carlo అంచనా: సీడ్ చేయని రెండు రన్‌లు చివరి అంకెలలో భిన్నంగా ఉంటాయి. మీ ఇంటర్వల్‌ను తిరిగి రన్ చేయలేని సమీక్షకుడికి దానిని సరిచూసే అవకాశం ఉండదు. పునరుత్పత్తి చేయదగిన బ్యాక్‌టెస్ట్ సెటప్లో వివరించిన క్రమశిక్షణే దీనికి కూడా వర్తిస్తుంది.

Mean return మరియు Sharpe నిష్పత్తులు రెండవ దశలో సజావుగా అమలవుతాయి, ఎందుకంటే ఇవి రాబడి జాబితాను ఒక సెట్‌గా పరిగణిస్తాయి. Maximum drawdown అలా పనిచేయదు. డ్రాడౌన్ అనేది రాబడి క్రమాన్ని (path) వరుసగా చదువుతుంది. రాబడులను తిరిగి అమర్చే రీశాంపిల్, అసలు ట్రేడింగ్ క్రమంలో ఎన్నడూ లేని అత్యంత దారుణమైన డ్రాడౌన్‌ను చూపవచ్చు. అయినప్పటికీ, దీనిని బూట్‌స్ట్రాప్ చేయడం ఉపయోగకరమే. అయితే, ఫలితాన్ని స్పష్టంగా పేర్కొనాలి: ఇది తదుపరి ట్రేడింగ్ కోసం అంచనా కాదు, కేవలం తిరిగి అమర్చిన చరిత్రల ఆధారంగా డ్రాడౌన్ యొక్క విస్తృతి మాత్రమే. దీని నిర్వచనం maximum drawdownలో ఉంది.

మార్కెట్ రాబడులకు IID బూట్‌స్ట్రాప్ ఎందుకు తప్పు

రెండవ దశలో ప్రతి రాబడి స్వతంత్రంగా మరియు ఒకే విధమైన పంపిణీని (IID assumption) కలిగి ఉంటుందని భావిస్తారు. రోజువారీ రాబడులు ఈ ఊహను దెబ్బతీస్తాయి, ఇది విరామ పరిధిని (interval width) మారుస్తుంది. సంకేత రాబడులు (signed returns) కేవలం స్వల్పకాలిక ఒక-రోజు జ్ఞాపకశక్తిని మాత్రమే కలిగి ఉంటాయి. కానీ వాటి పరిమాణాలు సమూహాలుగా ఏర్పడతాయి: పెద్ద కదలికలు పెద్ద కదలికల పక్కనే ఉంటాయి, మరియు ప్రశాంతమైన రోజులు వరుసగా వస్తాయి.

క్వెరీలాగ్-వన్ ఆటోకోరిలేషన్: 2016 నుండి 2025 వరకు సైన్డ్ రిటర్న్స్ వర్సెస్ అబ్సల్యూట్ రిటర్న్స్
ప్రతి సంఖ్య వెనుక ఉన్న ఖచ్చితమైన SQL
WITH daily AS
(
    SELECT
        ticker,
        date,
        toFloat64(close) / nullIf(lagInFrame(toFloat64(close), 1)
            OVER (PARTITION BY ticker ORDER BY date ROWS BETWEEN 1 PRECEDING AND CURRENT ROW), 0) - 1 AS ret
    FROM global_markets.stocks_daily_aggs
    WHERE ticker IN ('SPY', 'MSFT', 'KO', 'XOM', 'JNJ', 'PG')
      AND date >= '2015-11-01'
      AND date <  '2026-01-01'
),
lagged AS
(
    SELECT
        ticker,
        date,
        ret,
        lagInFrame(ret, 1) OVER (PARTITION BY ticker ORDER BY date ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS ret_prev
    FROM daily
    WHERE ret IS NOT NULL
      AND abs(ret) < 0.35
)
SELECT
    ticker,
    count()                                AS obs_count,
    round(corr(ret, ret_prev), 3)          AS return_autocorr,
    round(corr(abs(ret), abs(ret_prev)), 3) AS abs_return_autocorr
FROM lagged
WHERE date >= '2016-01-01'
  AND ret_prev IS NOT NULL
GROUP BY ticker
ORDER BY abs_return_autocorr DESC
Run this yourself

SPY కోసం, 2514 సెషన్లలో కొలిచిన సంపూర్ణ రోజువారీ రాబడుల (absolute daily returns) లాగ్-వన్ ఆటోకోరిలేషన్ 0.366 వద్ద ఉంది, అదే రోజుల్లోని సంకేత రాబడుల కోసం ఇది -0.133 వద్ద ఉంది. చార్ట్‌లోని ఏదైనా పేరుపై ఉన్న రెండు బార్‌లను పోల్చి చూడండి. రాబడుల శ్రేణిని క్రమరహితం చేయడం (shuffling) ద్వారా ఆ సమూహీకరణ నశిస్తుంది, మరియు ఈ డేటాపై నిర్వహించిన IID బూట్‌స్ట్రాప్, నమూనా మద్దతు ఇచ్చే దానికంటే తక్కువ పరిధిని చూపుతుంది. ఈ పొరపాటు అత్యంత ప్రతికూల దిశలో జరుగుతుంది: ఇది వ్యూహాన్ని వాస్తవం కంటే మెరుగ్గా చూపిస్తుంది.

మూవింగ్ బ్లాక్ బూట్‌స్ట్రాప్ మరియు బ్లాక్ నిడివిని ఎంచుకోవడం

దీనికి పరిష్కారం ఏమిటంటే, విడివిడి రిటర్న్‌లకు బదులుగా వరుసగా ఉన్న బ్లాక్‌లను రీశాంపిల్ చేయడం. ఒక బ్లాక్ నిడివి Lని ఎంచుకుని, L వరుస రిటర్న్‌ల బ్లాక్‌లను యాదృచ్ఛికంగా (random) మరియు పునఃస్థాపనతో (with replacement) ఎంచుకోవాలి. ఆ తర్వాత, కృత్రిమ శ్రేణి N పొడవు వచ్చే వరకు వాటిని ఒకదానికొకటి జోడించాలి. ఒక బ్లాక్ లోపల ఉన్న డిపెండెన్స్ అలాగే ఉంటుంది: ఆ రిటర్న్‌లు వాటి అసలు క్రమంలోనే ఉంటాయి. కేవలం బ్లాక్‌ల మధ్య కలిపే చోట మాత్రమే కృత్రిమత్వం ఉంటుంది.

బ్లాక్ నిడివిని ఎంచుకునేటప్పుడు రెండు రకాల లోపాల మధ్య సమతుల్యత పాటించాలి, ఏ ఒక్క సెట్టింగ్ కూడా వీటి నుంచి తప్పించుకోలేదు. చిన్న బ్లాక్‌లు IID బూట్‌స్ట్రాప్ లాగా ప్రవర్తిస్తాయి మరియు ఇంటర్వల్ విలువను తక్కువగా చూపుతాయి, ఇది ఒక పక్షపాతం (bias). పొడవైన బ్లాక్‌లు ఎక్కువ డిపెండెన్స్‌ను కాపాడతాయి, కానీ ఎంచుకోవడానికి తక్కువ విభిన్న బ్లాక్‌లు మాత్రమే మిగులుతాయి. దీనివల్ల ప్రతి రీశాంపిల్ పాత చరిత్రలోని పెద్ద భాగాలను పదేపదే తీసుకుంటుంది, తద్వారా ఇంటర్వల్ విలువలో అస్థిరత (variance) పెరుగుతుంది. ప్రచురించబడిన సాధారణ నియమాల ప్రకారం, నిడివిని N యొక్క ఒకటి-మూడవ ఘాతానికి (one-third power) అనుగుణంగా నిర్ణయిస్తారు. వీటిని కేవలం ప్రారంభ సూచనలుగా మాత్రమే పరిగణించండి.

వేరియన్స్ అనేది హోరిజోన్‌తో ఎలా మారుతుందో తనిఖీ చేయడం ఒక సులభమైన విశ్లేషణ. స్వతంత్రత (independence) ఉన్నప్పుడు, k-రోజుల రిటర్న్ మొత్తం యొక్క వేరియన్స్, ఒక-రోజు వేరియన్స్‌కు k రెట్లు ఉంటుంది, మరియు ఈ రెండింటి నిష్పత్తి 1 వద్ద ఉంటుంది.

క్వెరీబ్లాక్ నిడివి వారీగా వేరియన్స్ నిష్పత్తి: SPY వేరియన్స్ స్వతంత్ర డ్రాల వలె స్కేల్ అవుతుందా?
ప్రతి సంఖ్య వెనుక ఉన్న ఖచ్చితమైన SQL
WITH daily AS
(
    SELECT
        date,
        toFloat64(close) / nullIf(lagInFrame(toFloat64(close), 1)
            OVER (ORDER BY date ROWS BETWEEN 1 PRECEDING AND CURRENT ROW), 0) - 1 AS ret
    FROM global_markets.stocks_daily_aggs
    WHERE ticker = 'SPY'
      AND date >= '2005-12-01'
      AND date <  '2026-01-01'
),
indexed AS
(
    SELECT
        ret,
        row_number() OVER (ORDER BY date) AS i
    FROM daily
    WHERE date >= '2006-01-01'
      AND ret IS NOT NULL
),
base AS
(
    SELECT varSamp(ret) AS var_1d FROM indexed
),
blocks AS
(
    SELECT
        k,
        intDiv(i, k)  AS blk,
        count()       AS n,
        sum(ret)      AS block_ret
    FROM indexed
    CROSS JOIN (SELECT arrayJoin([2, 3, 5, 10, 21, 42, 63]) AS k) AS ks
    GROUP BY k, blk
    HAVING n = k
)
SELECT
    concat(toString(k), ' sessions')                          AS block_length,
    count()                                                   AS block_count,
    round(varSamp(block_ret) / (k * any(var_1d)), 3)          AS variance_ratio
FROM blocks
CROSS JOIN base
GROUP BY k
ORDER BY k
Run this yourself

2 sessions వద్ద ఈ నిష్పత్తి 0.844గా నమోదైంది; 63 sessions వద్ద ఇది 0.584గా ఉంది, దీనిని 78 అతివ్యాప్తి చెందని (non-overlapping) బ్లాక్‌లపై లెక్కించారు. 1కి దగ్గరగా ఉన్న విలువలు, ఆ హోరిజోన్ వద్ద స్వతంత్ర డ్రాలు ఎలా ఉంటాయో అలాగే మొత్తం కూడా మారుతుందని సూచిస్తాయి. 1కి దూరంగా ఉన్న విలువలు, డిపెండెన్స్ ఇంకా ప్రభావం చూపుతున్న హోరిజోన్‌లను సూచిస్తాయి. బ్లాక్ నిడివి ఆ పరిధిని కవర్ చేయాలి. ఆ పరిధిని దాటే అతి తక్కువ బ్లాక్ నిడివిని ఎంచుకోండి, ఆపై బ్లాక్ సంఖ్య ఎంతకు తగ్గిందో గమనించండి.

బకెట్డ్ రీసాంప్లింగ్ మరియు ప్రతి విరామం పక్కన ఉండే గణన

అస్థిరత (volatility) పాలన లేదా క్యాలెండర్ నెలల వారీగా బకెట్లలో రీసాంప్లింగ్ చేయడం వల్ల, ప్రశ్నను ఆసక్తికరంగా మార్చిన కండిషనింగ్ అలాగే ఉంటుంది. ఒక వ్యూహం అధిక అస్థిరత ఉన్న సమయాల్లోనే తన Sharpe నిష్పత్తిని సాధిస్తుందని వాదిస్తే, కేవలం అధిక అస్థిరత ఉన్న రోజులను మాత్రమే ఎంచుకుని రూపొందించిన విరామం (interval) ఆ వాదనను పరీక్షిస్తుంది. దీనికి అయ్యే ఖర్చు అంకగణితపరమైనది. రెండు వందల యాభై పరిశీలనలను నాలుగు బకెట్లుగా విభజిస్తే, ఒక్కో బకెట్‌కు సుమారు అరవై పరిశీలనలు వస్తాయి. అరవై పరిశీలనల బూట్‌స్ట్రాప్, పూర్తి నమూనా వెర్షన్ కంటే సుమారు రెండు రెట్లు వెడల్పు ఉన్న విరామాన్ని ఇస్తుంది.

కాబట్టి, ప్రతిసారీ ప్రతి విరామం పక్కన బకెట్ గణనను తప్పనిసరిగా పేర్కొనండి. పైన ఉన్న ప్యానెల్స్‌లోని block_count కాలమ్ ఆ అలవాటును ప్రతిబింబిస్తుంది: తొమ్మిది విండోల నుండి సేకరించిన ఐదవ పర్సంటైల్ (5th percentile), రెండు వందల విండోల నుండి సేకరించిన దానికంటే భిన్నమైనది; రెండూ రెండు దశాంశ స్థానాల వరకు ముద్రించబడినప్పటికీ, వాటి విలువలు వేరుగా ఉంటాయి.

బూట్‌స్ట్రాప్ (bootstrap) సరిచేయలేని లోపాలు

ఒక బూట్‌స్ట్రాప్ కేవలం ఒకే విషయాన్ని లెక్కిస్తుంది: మీ వద్ద ఉన్న డేటా నుండి గణించిన గణాంకంలో ఉండే శాంప్లింగ్ నాయిస్ (sampling noise). ఆ డేటా వాస్తవంగా సాధించదగినదా కాదా అనే విషయంపై ఇది ఏమీ చెప్పదు.

look-ahead biasతో కూడిన బ్యాక్‌టెస్ట్, ఎన్నడూ ట్రేడ్ చేయడానికి వీలులేని రిటర్న్ సిరీస్‌ను ఉత్పత్తి చేస్తుంది. దానిపై బూట్‌స్ట్రాప్ నిర్వహించడం అంటే, ఒక కల్పిత గణాంకం చుట్టూ నమ్మకమైన పరిధిని నిర్మించుకోవడమే. నేటి ఇండెక్స్ సభ్యులతో కూడిన యూనివర్స్ survivorship biasను కలిగి ఉంటుంది, ఆ యూనివర్స్‌ను ఎన్నిసార్లు రీ-శాంపిల్ చేసినా అదే లోపం కొనసాగుతుంది. మూడవ లోపం సెలక్షన్ ఎఫెక్ట్: మీరు రెండు వందల వేరియంట్లను రన్ చేసి, అందులో ఉత్తమమైన దానిని ఎంచుకుంటే, దాని బూట్‌స్ట్రాప్ ఇంటర్వల్ ఆ ఒక్క వేరియంట్ యొక్క శాంప్లింగ్ నాయిస్‌ను మాత్రమే చూపుతుంది; కానీ దానిని ఎంచుకోవడానికి కారణమైన మిగిలిన నూట తొంభై తొమ్మిది ప్రయత్నాలను విస్మరిస్తుంది. నిజాయితీతో కూడిన పరిధులు ఉపయోగకరమే, కానీ అవి అవుట్-ఆఫ్-శాంపిల్ డేటాకు ప్రత్యామ్నాయం కావు.

డేటా నోట్స్ మరియు పద్ధతి
  • రిటర్న్స్ అనేవి డైలీ బార్స్ నుండి తీసుకున్న క్లోజ్-టు-క్లోజ్ ప్రైస్ రిటర్న్స్. డివిడెండ్లను మినహాయించడం జరిగింది, దీనివల్ల ప్రతి రిటర్న్ మరియు Sharpe ఫిగర్ స్థాయి సుమారుగా డివిడెండ్ యీల్డ్ (dividend yield) అంత తక్కువగా కనిపిస్తుంది. ఈ పోస్ట్ చర్చించే డిస్పర్షన్ (dispersion) పై దీని ప్రభావం దాదాపు ఉండదు.
  • విండోస్ మరియు బ్లాక్స్ ఒకదానిపై ఒకటి అతివ్యాప్తి చెందవు (non-overlapping), కాబట్టి ప్రతి కొలిచిన గణాంకం చరిత్రలోని విడిభాగాలను ఉపయోగిస్తుంది. ఓవర్లాపింగ్ విండోస్ ఉంటే, శాంపిల్స్ సంఖ్య కృత్రిమంగా పెరిగే అవకాశం ఉంటుంది.
  • క్వాంటైల్స్ (quantiles) ఒక డిటర్మినిస్టిక్ ఎస్టిమేటర్‌ను ఉపయోగిస్తాయి, కాబట్టి ప్యానెల్‌ను మళ్ళీ రన్ చేసినప్పుడు కొత్త అంచనా కాకుండా అదే పర్సంటైల్ వస్తుంది.
  • ఆటోకోరిలేషన్ ప్యానెల్ ఆరు పెద్ద కంపెనీల పేర్లను ఉపయోగిస్తుంది, విండోలో ఎటువంటి షేర్ స్ప్లిట్ జరగలేదు. ముప్పై ఐదు శాతం కంటే ఎక్కువ కదలిక ఉన్న రోజులను తొలగించడం జరిగింది, దీనివల్ల ప్రైస్-అడ్జస్ట్‌మెంట్ ఆర్టిఫాక్ట్స్ కోరిలేషన్‌లో చేరకుండా ఉంటాయి.

తరచుగా అడిగే ప్రశ్నలు (FAQ)

బ్యాక్‌టెస్ట్ గురించి బూట్‌స్ట్రాప్ కాన్ఫిడెన్స్ ఇంటర్వల్ ఏమి చెబుతుంది?

అదే ప్రక్రియను అదే సంఖ్యలో ఉన్న కాల వ్యవధులలో మళ్ళీ శాంపిల్ చేసినప్పుడు, ఆ గణాంకం (statistic) ఏ పరిధిలో ఉండే అవకాశం ఉందో ఇది తెలియజేస్తుంది. తొంభై ఐదు శాతం ఇంటర్వల్‌లో సున్నా ఉంటే, ఆ వ్యూహానికి ఎటువంటి ప్రత్యేకత (edge) లేదని చెప్పడానికి శాంపిల్ పరిమాణం చాలా తక్కువగా ఉందని అర్థం.

ఎన్ని బూట్‌స్ట్రాప్ రీశాంపిల్స్ సరిపోతాయి?

తొంభై ఐదు శాతం ఇంటర్వల్ కోసం, కొన్ని వేల రీశాంపిల్స్ సాధారణంగా స్థిరంగా ఉంటాయి. పది వేలు అనేది సాధారణంగా ఉపయోగించే డిఫాల్ట్ సంఖ్య, దీనికి ఖర్చు కూడా తక్కువ. మరింత లోతైన టెయిల్ క్వాంటైల్స్ (tail quantiles) కోసం ఎక్కువ రీశాంపిల్స్ అవసరం: వెయ్యి డ్రాల మొదటి పర్సంటైల్ కేవలం పది విలువలను మాత్రమే సూచిస్తుంది.

మూవింగ్ బ్లాక్ బూట్‌స్ట్రాప్ ఏ బ్లాక్ లెంగ్త్‌ను ఉపయోగించాలి?

దీనికి అందరికీ సరిపోయే ఒకే సరైన పొడవు అంటూ లేదు. సాధారణ నియమం ప్రకారం శాంపిల్ పరిమాణంలో మూడవ వంతు ఘాతాన్ని (one-third power) పరిగణనలోకి తీసుకుంటారు. పైన పేర్కొన్న వేరియన్స్ రేషియో ప్యానెల్ కొలిచే విధంగా, వేరియన్స్ ఏ కాలపరిమితి వద్ద లీనియర్‌గా పెరగడం ఆగిపోతుందో చూడటం ఒక ఆచరణాత్మక పరీక్ష. మీరు ఉపయోగించిన పొడవును ఇంటర్వల్‌తో పాటు ప్రచురించండి.

మాగ్జిమం డ్రాడౌన్‌ను బూట్‌స్ట్రాప్ చేయవచ్చా?

అవును, కానీ క్రమ పద్ధతిలో జాగ్రత్త వహించాలి. డ్రాడౌన్ అనేది రిటర్న్స్ క్రమంపై ఆధారపడి ఉంటుంది, కాబట్టి షఫుల్ చేయడం ద్వారా రూపొందించిన రీశాంపిల్, తిరిగి అమర్చిన చరిత్ర యొక్క డ్రాడౌన్‌ను మాత్రమే చూపుతుంది. బ్లాక్ బూట్‌స్ట్రాప్ చిన్న వరుసలను చెదరకుండా ఉంచుతుంది, కాబట్టి పాత్ స్టాటిస్టిక్స్ (path statistics) కోసం ఇది మెరుగైన సాధనం.

బూట్‌స్ట్రాప్ ఓవర్‌ఫిట్టింగ్‌ను సరిచేస్తుందా?

లేదు. ఇది ఒక రిటర్న్ సిరీస్‌లోని శాంపిలింగ్ నాయిస్‌ను మాత్రమే కొలుస్తుంది. లుక్-అహెడ్ బయాస్ (look-ahead bias) మరియు అనేక వేరియంట్‌లను పరీక్షించడం వల్ల కలిగే సెలక్షన్ ఎఫెక్ట్ వంటివి దీని పరిధిలోకి రావు.


ఇక్కడ ఉన్న ప్రతి ప్యానెల్ దానిని రూపొందించిన SQLను కలిగి ఉంటుంది. Strasmore టెర్మినల్‌లో టిక్కర్‌ను లేదా విండో లెంగ్త్‌ను మార్చి మీరే స్వయంగా రన్ చేయండి.

#backtesting#bootstrap#statistics#confidence intervals#sharpe ratio