Strasmore Research
నేర్చుకోండి Matt Connorద్వారా Matt Connor · అప్‌డేట్ చేయబడింది 2026-08-04

ట్రేడింగ్ బాట్ల కోసం సర్క్యూట్ బ్రేకర్లు

చెడు ట్రేడింగ్ సెషన్ నష్టాన్ని పెంచకముందే బాట్‌ను ఆపే సర్క్యూట్ బ్రేకర్లను తెలుసుకోండి. రోజువారీ నష్టం పరిమితి, volatility scaling పొజిషన్ పరిమాణంపై ప్రభావం చూడండి.

ట్రేడింగ్ బాట్ల కోసం circuit breakers అంటే నిర్దిష్ట పరిమితి చేరుకున్న వెంటనే automated strategy ఆర్డర్లు పంపకుండా ఆపే నియమాలు. ఇవి strategy మరియు బ్రోకర్ మధ్య risk layerగా పనిచేస్తాయి. Strategy అంగీకరించినా, అంగీకరించకపోయినా ప్రతి ఆర్డర్‌పై ఇవి అమలవుతాయి. ఏది ట్రేడ్ చేయాలో strategy నిర్ణయిస్తుంది. ట్రేడింగ్ అసలు జరగాలా వద్దా అనేది risk layer నిర్ణయిస్తుంది.

ఈ విభజనే మొత్తం డిజైన్‌కు ఆధారం. తనను తానే పర్యవేక్షించే strategy, తన స్వంత అంచనాలు విఫలమయ్యే సమయంలో స్వతంత్ర తనిఖీని కలిగి ఉండదు. కానీ అలాంటి తనిఖీ అత్యంత అవసరమయ్యేది కూడా అదే సమయంలో.

ట్రేడింగ్ బాట్‌లో circuit breaker చేసే పని

రిస్క్ లేయర్‌కు నాలుగు భాగాలు ఉంటాయి. ప్రతి భాగం ఒక నిర్దిష్టమైన, సాధారణ వైఫల్యాన్ని నివారించడానికి ఉంటుంది.

  • పొజిషన్ పరిమాణం, ప్రతి symbolపై notional exposure, order rateకు కఠిన పరిమితులు. ఇవి లేకపోతే పరిమితిలేని నష్టానికి దారితీసే బగ్ వల్ల కలిగే నష్టాన్ని ఇవి నియంత్రిస్తాయి.
  • సెషన్‌లో ఖాతా నిర్ణీత మొత్తానికి పడిపోయినప్పుడు లేదా equity peak నుంచి నిర్ణీత మొత్తానికి తగ్గినప్పుడు కొత్త ordersను నిలిపివేసే drawdown circuit breaker.
  • ఇటీవలి volatility ఆధారంగా లేదా fixed share countకు బదులుగా Kelly betలోని కొంత భాగంగా నిర్ణయించే పరిమాణానుసారమైన order sizing. మార్కెట్ పరిధి మారుతున్నప్పటికీ ప్రతి tradeకు సంబంధించిన రిస్క్‌ను ఇది సుమారుగా స్థిరంగా ఉంచుతుంది.
  • risk layer తిరస్కరించిన ordersతో సహా ప్రతి నిర్ణయాన్ని నమోదు చేసే మార్చలేని audit log. “strategy తప్పు చేసింది” మరియు “చెక్ అసలు అమలు కాలేదు” అనే రెండు పరిస్థితులను వేరు చేయగల ఏకైక ఆధారం ఇదే.

కిందివన్నీ ఈ నాలుగు భాగాల్లో ఒకదానికి సంబంధించినవే. వాటిని ఆచరణలో చూపించేవి.

ట్రేడింగ్ బాట్‌కు సహేతుకమైన రోజువారీ నష్ట పరిమితి ఎంత?

సెషన్‌లోని నష్టం నిర్ణయించిన పరిమితిని దాటిన తర్వాత రోజువారీ నష్ట పరిమితి కొత్త ఆర్డర్లను నిలిపివేస్తుంది. ఈ సంఖ్యను ఎంచుకోవడం అభిరుచికి సంబంధించిన విషయం కాదు; ఇది కాలిబ్రేషన్. పరిమితిని సాధారణ మార్కెట్ ఒడిదుడుకుల పరిధిలో ఉంచితే బాట్ చాలా వారాల్లో నిలిచిపోతుంది. దాన్ని చాలా దూరంగా ఉంచితే ఎప్పుడూ పనిచేయదు. ఒక నిర్దిష్ట పరిమాణంలో మార్కెట్ స్వయంగా ఎంత తరచుగా పడిపోతుందో పరిశీలించడం ప్రారంభ బిందువు.

క్వెరీSPY తగ్గుదల రోజుల పరిమాణం, సంవత్సరానికి; 2018 నుండి జూలై 2026 వరకు
ప్రతి సంఖ్య వెనుక ఉన్న ఖచ్చితమైన SQL
WITH daily AS (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d,
           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('2017-12-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 d
),
with_prev AS (
    SELECT d,
           close_px,
           any(close_px) OVER (ORDER BY d ASC ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS prev_close
    FROM daily
)
SELECT toYear(d) AS year,
       countIf(close_px / prev_close - 1 <= -0.01) AS down_1pct_days,
       countIf(close_px / prev_close - 1 <= -0.02) AS down_2pct_days,
       countIf(close_px / prev_close - 1 <= -0.03) AS down_3pct_days
FROM with_prev
WHERE prev_close > 0
  AND d >= toDate('2018-01-01')
GROUP BY year
ORDER BY year
Run this yourself

సుమారు 250 వార్షిక ట్రేడింగ్ రోజుల్లో, 1% లేదా అంతకంటే ఎక్కువ పడిపోయిన సెషన్లు 15 2019లో, 45 2020లో నమోదయ్యాయి. 3% లేదా అంతకంటే ఎక్కువ పతనాల సంఖ్య వేరు: 0 2019తో పోలిస్తే 16 2020లో నమోదయ్యాయి. 9లోని చివరి వరుస 2026 జూలై 31 వరకు ఉన్న సెషన్లను మాత్రమే కలిగి ఉంది.

ఈ రేఖ స్థిరంగా కాకుండా గుంపులుగా కనిపిస్తుంది. ఆ గుంపులుగా కనిపించడమే రూపకల్పనలో కీలక అంశం. తీవ్రమైన రోజులు వరుసగా రావచ్చు. ఒక గుంపులో మొదటి రోజున బాట్ నిలిచిపోయి, రెండో రోజున మళ్లీ ప్రారంభమైతే, అది వాస్తవంగా నిలిచినట్టుకాదు.

రెండు పరిమితులు వేర్వేరు పనులు చేస్తాయి. ఖాతా ఈక్విటీలో సాధారణంగా 2%గా నిర్ణయించే రోజువారీ నష్ట పరిమితి ఆ సెషన్‌ను ముగిస్తుంది. ఈక్విటీ high-water mark నుంచి కొలిచే trailing drawdown limit సాధారణంగా సుమారు 10%గా ఉంటుంది. ఇది మానవ సమీక్ష పూర్తయ్యే వరకు వ్యూహాన్ని నిలిపివేస్తుంది. మొదటి పరిమితి సాధారణ రక్షణ చర్య. రెండోది అరుదుగా మాత్రమే పనిచేయాలి. మొదటి పరిమితినే కలిగి ఉన్న బాట్, ప్రతిసారీ 2% చొప్పున ఖాతాను తగ్గిస్తూ, ఏ పరిమితినీ ఎప్పుడూ తాకకపోవచ్చు.

అస్థిరత స్కేలింగ్ పొజిషన్ పరిమాణాన్ని ఎలా మారుస్తుంది?

అస్థిరత లక్ష్యీకరణ ఇటీవలి వాస్తవ అస్థిరతకు విరుద్ధ నిష్పత్తిలో పొజిషన్ పరిమాణాన్ని నిర్ణయిస్తుంది: రోజువారీ పరిధి రెట్టింపు అయితే, ప్రతి ట్రేడ్‌పై డాలర్ రిస్క్ దాదాపు స్థిరంగా ఉండేలా పొజిషన్ సాధారణంగా సగానికి తగ్గుతుంది. ఇక్కడ వాస్తవ అస్థిరత అంటే రోజువారీ రాబడుల వార్షికీకరించిన ప్రామాణిక విచలనం. ఇది చాలామంది ఊహించే దానికంటే ఎక్కువగా మారుతుంది.

క్వెరీనెలవారీగా SPY వాస్తవ అస్థిరత, అలాగే 12% అస్థిరత లక్ష్యం కలిగి ఉండే పొజిషన్ పరిమాణం
ప్రతి సంఖ్య వెనుక ఉన్న ఖచ్చితమైన SQL
WITH daily AS (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d,
           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('2023-12-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 d
),
rets AS (
    SELECT d,
           close_px / any(close_px) OVER (ORDER BY d ASC ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) - 1 AS ret
    FROM daily
)
SELECT formatDateTime(toStartOfMonth(d), '%Y-%m') AS month,
       round(stddevSamp(ret) * sqrt(252) * 100, 1) AS realized_vol_pct,
       round(least(100.0, 1200.0 / (stddevSamp(ret) * sqrt(252) * 100)), 1) AS vol_target_size_pct
FROM rets
WHERE d >= toDate('2024-01-01')
  AND isFinite(ret)
GROUP BY toStartOfMonth(d)
HAVING count() >= 15
ORDER BY toStartOfMonth(d)
Run this yourself

2024-01లో 11.1% వార్షికీకరించిన వాస్తవ అస్థిరతను, 2026-07లో 12%గా, 31 నెలల కాలంలో కొలిచారు. రెండవ కాలమ్ ప్రతి రీడింగ్‌ను 12% అస్థిరత లక్ష్యంతో తీసుకునే పొజిషన్‌గా మారుస్తుంది. దీనికి పూర్తి లైన్ పరిమితి వర్తిస్తుంది: 2024-01లో 100%, 2026-07లో 99.7%తో పోలిస్తే. వ్యూహం అదే, నమ్మకం అదే, కానీ షేర్ల సంఖ్య మాత్రం చాలా భిన్నంగా ఉంటుంది.

Kelly criterion ఇదే సమస్యను మరో దిశ నుంచి పరిష్కరిస్తుంది. ఇది అస్థిరత ఒక్కదానిపై కాకుండా అంచనా వేసిన ప్రయోజనం మరియు variance ఆధారంగా పొజిషన్ పరిమాణాన్ని నిర్ణయిస్తుంది. ఈ రెండు ఇన్‌పుట్లు పరిమిత నమూనా ఆధారిత అంచనాలే కాబట్టి, చాలా systematic operators దానిలో కొంత భాగాన్నే ఉపయోగిస్తారు—సగం లేదా పావు Kelly. Kelly criterion పొజిషన్ పరిమాణ నిర్ణయం ఆ లెక్కలను వివరిస్తుంది.

ట్రేడింగ్ బాట్ స్టాప్ తర్వాత మళ్లీ ఎంటర్ అవుతూనే ఎందుకు ఉంటుంది?

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

ఈ పునరావృతం ధరల మార్గం నుంచే నేరుగా వస్తుంది. ఈ ప్యానెల్ ప్రతి సెషన్‌లో SPY తన ప్రారంభ ధర కంటే 0.1%కు పైగా ఎగబాకి, ఆ తర్వాత ప్రారంభ ధర కంటే 0.1%కు పైగా దిగువకు వెళ్లిన సందర్భాలను, లేదా తిరిగి వ్యతిరేక దిశలో వెళ్లిన సందర్భాలను లెక్కిస్తుంది.

క్వెరీప్రతి సెషన్‌లో SPY తన ప్రారంభ ధరను తిరిగి దాటే సార్లు, నెలవారీగా
ప్రతి సంఖ్య వెనుక ఉన్న ఖచ్చితమైన SQL
WITH mins AS (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d,
           window_start AS ts,
           toFloat64(close) AS px
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2025-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
),
opens AS (
    SELECT d, argMin(px, ts) AS open_px
    FROM mins
    GROUP BY d
),
zoned AS (
    SELECT m.d AS d,
           m.ts AS ts,
           multiIf(m.px >= o.open_px * 1.001, 1,
                   m.px <= o.open_px * 0.999, -1,
                   0) AS zone
    FROM mins AS m
    INNER JOIN opens AS o ON m.d = o.d
),
flips AS (
    SELECT d,
           zone,
           any(zone) OVER (PARTITION BY d ORDER BY ts ASC ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS prev_zone
    FROM zoned
    WHERE zone != 0
),
per_day AS (
    SELECT d, countIf(prev_zone != 0 AND zone != prev_zone) AS crossings
    FROM flips
    GROUP BY d
)
SELECT formatDateTime(toStartOfMonth(d), '%Y-%m') AS month,
       round(avg(crossings), 1) AS avg_crossings_per_session,
       max(crossings) AS max_crossings_in_a_session
FROM per_day
GROUP BY toStartOfMonth(d)
ORDER BY toStartOfMonth(d)
Run this yourself

2025-08లో SPY ఆ బ్యాండ్‌ను ప్రతి సెషన్‌కు సగటున 0.7 సార్లు దాటింది. 2026-07లో అది 1.5 సార్లు దాటింది. 2026-07లోని ఒక సెషన్‌లో 5 క్రాసింగ్‌లు నమోదయ్యాయి. ఒక స్థాయికి ఒక వైపున పొజిషన్ తెరిచి, మరో వైపున స్టాప్ చేసే ఏ నియమానికైనా ఒకే రోజులో అంతసార్లు ట్రిగర్ అయ్యే అవకాశం ఉంటుంది.

నాలుగు విధానాలు ఈ పునరావృతాన్ని నియంత్రిస్తాయి.

  • ప్రతి స్టాప్ తర్వాత కూల్‌డౌన్ వ్యవధి ఉండాలి. అది నిమిషాలు లేదా బార్‌లలో కొలుస్తారు. ఆ సమయంలో ఆ సింబల్‌కు సంబంధించిన కొత్త ఆర్డర్ రిస్క్ లేయర్‌ను దాటదు.
  • ప్రతి సింబల్‌కు రోజువారీ ట్రేడ్‌ల సంఖ్యపై పరిమితి ఉండాలి. ఇది అంతులేని లూప్‌ను పరిమితమైన ప్రక్రియగా మారుస్తుంది.
  • హాల్ట్ ఫ్లాగ్ ల్యాచ్ అయి ఉండాలి. రోజువారీ నష్టం పరిమితి చేరిన తర్వాత అది సక్రియంగానే ఉండాలి; ఎవరైనా దాన్ని క్లియర్ చేసే వరకు మారకూడదు.
  • ఆ ఫ్లాగ్‌ను ప్రాసెస్ మెమరీ వెలుపల కూడా నిల్వ చేయాలి. క్రాష్ అయిన బాట్‌ను సూపర్‌వైజర్ రీస్టార్ట్ చేసినప్పుడు దానికి కొత్తగా ప్రారంభించే స్థితి లభిస్తుంది. అయితే ఆ ఫ్లాగ్ నిరోధించాల్సింది అచ్చం అదే పరిస్థితి.

మిగతా చర్యలన్నీ సరిగ్గా చేసినవారిని చివరి అంశం తరచుగా ఇబ్బంది పెడుతుంది. Grid trading bots ఉద్దేశపూర్వకంగా ఆర్డర్ల మెట్లను ఏర్పాటు చేస్తాయి. అందువల్ల ట్రేడ్‌ల సంఖ్యపై పరిమితి కేవలం అలంకార నియమం కాదు; వ్యవస్థను నియంత్రించే కీలక భాగం.

బాట్ పాతబడిన ధర ఫీడ్‌పై ట్రేడ్ చేస్తే ఏమి జరుగుతుంది?

అప్‌డేట్ కావడం ఆగిపోయిన కోట్ కూడా ఒక సంఖ్యలా కనిపిస్తుంది. బాట్ దాన్ని చదివి, దాని ఆధారంగా ఆర్డర్ ధరను నిర్ణయించి, అప్పటికే మారిపోయిన మార్కెట్‌లోకి ఆ ఆర్డర్‌ను పంపుతుంది. ఈ వైఫల్యం నిశ్శబ్దంగా జరుగుతుంది: ఎలాంటి లోపం ఉత్పన్నం కాదు, ఎలాంటి ఎర్రర్ లాగ్‌ కావు, ఫిల్‌లు జరిగిన తర్వాత మాత్రమే అవి అసాధారణంగా కనిపిస్తాయి.

సులభంగా కొలవగల రూపం overnight gap. ఇందులో తెలిసిన ధర గంటల తరబడి మారకుండా ఉంటుంది, కానీ ట్రేడ్ చేయగల ధర మారిపోతుంది.

క్వెరీమునుపటి ముగింపు నుండి తదుపరి ప్రారంభం వరకు రాత్రికాల గ్యాప్: ఆరు పేర్లు, జనవరి 2024 నుండి జూలై 2026 వరకు
ప్రతి సంఖ్య వెనుక ఉన్న ఖచ్చితమైన SQL
WITH daily AS (
    SELECT ticker,
           toDate(toTimeZone(window_start, 'America/New_York')) AS d,
           argMin(toFloat64(open), window_start) AS open_px,
           argMax(toFloat64(close), window_start) AS close_px
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('SPY', 'KO', 'MSFT', 'AAPL', 'NVDA', 'TSLA')
      AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2024-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 ticker, d
),
gaps AS (
    SELECT ticker,
           d,
           open_px,
           any(close_px) OVER (PARTITION BY ticker ORDER BY d ASC ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS prev_close
    FROM daily
)
SELECT ticker,
       round(quantileDeterministic(0.5)(abs(open_px / prev_close - 1) * 100, cityHash64(ticker, d)), 2) AS median_gap_pct,
       round(quantileDeterministic(0.95)(abs(open_px / prev_close - 1) * 100, cityHash64(ticker, d)), 2) AS p95_gap_pct,
       round(max(abs(open_px / prev_close - 1) * 100), 2) AS max_gap_pct
FROM gaps
WHERE prev_close > 0
GROUP BY ticker
ORDER BY p95_gap_pct DESC
Run this yourself

95వ పర్సెంటైల్ gap ప్రకారం అత్యంత విస్తృతంగా ఉన్న పేరు TSLA. దాని gap 4.41%, ఇది KOకు చెందిన 1%తో పోల్చినప్పుడు. సాధారణ రాత్రుల్లో పరిస్థితి చాలా ప్రశాంతంగా ఉంటుంది: మధ్యస్థ gapలు వరుసగా 1.01% మరియు 0.24%. రిస్క్ లేయర్‌ను tailsను ఎదుర్కోవడానికే నిర్మిస్తారు. కొలిచిన కాలవ్యవధిలో TSLAన నమోదైన అతిపెద్ద single gap 14.57%. కొంత సమయం క్రితం చదివిన ధరపై పనిచేసే బాట్‌కు అందుబాటులో ఉండే ధర దూరాలు ఇవే. షేర్లు రాత్రిపూట gap ఎందుకు చూపిస్తాయిలో దీని విధానం వివరించబడింది.

రక్షణ చర్యలు ఖరీదైనవి కావు. రిస్క్ లేయర్ ధర నిర్ణయించడానికి ఉపయోగించే ప్రతి కోట్‌కు గరిష్ఠ వయస్సును నిర్ణయించండి. Intraday వ్యూహానికి సాధారణంగా ఇది కొన్ని సెకన్లు ఉంటుంది. డేటాతో సంబంధం లేకుండా ఫీడ్ నుంచి heartbeatను కూడా ప్రత్యేకంగా తీసుకోండి. దీని ద్వారా మౌనంగా ఉన్న socketను నిశ్శబ్ద మార్కెట్‌ నుంచి వేరు చేయవచ్చు. డేటా కనిపించకపోతే దాన్ని holdగా కాకుండా haltగా పరిగణించండి. ఎందుకంటే ధరలు లేకపోతే బాట్ తన exitలను కూడా అంచనా వేయలేడు.

రిస్క్ లేయర్‌లో ఏ హార్డ్ క్యాప్‌లు ఉండాలి?

  • ఖాతా ఈక్విటీలో ప్రతి సింబల్‌కు కేటాయించే గరిష్ఠ నామినల్ విలువ. 10% పరిమితి వల్ల ఒక సింబల్‌లోని చెడు ట్రేడ్ మొత్తం ఖాతాను ప్రభావితం చేయదు.
  • అన్ని ఓపెన్ పొజిషన్ల మొత్తం గరిష్ఠ గ్రాస్ నామినల్ విలువ. దీన్ని ఈక్విటీలో 100%గా నిర్ణయిస్తే leverage ఉండదు. ఈ నిర్ణయాన్ని బ్రోకర్ డిఫాల్ట్‌గానే స్వీకరించకుండా, స్పష్టంగా తీసుకోవాలి.
  • నిమిషానికి, రోజుకు గరిష్ఠ ఆర్డర్ రేటు. ఎక్కువ శాతం రిటైల్ వ్యూహాలకు నిమిషానికి పది ఆర్డర్లు సరిపడా ఉదార పరిమితి. అదే సమయంలో ఒక నిమిషంలో అదుపు తప్పే లూప్‌ను ఇది కట్టడి చేస్తుంది.
  • సింబల్ సగటు రోజువారీ ట్రేడింగ్ పరిమాణంలో ఆర్డర్ గరిష్ఠ పరిమాణం వాటా. 1% పరిమితి వల్ల బాట్ తాను ట్రేడ్ చేయాలనుకుంటున్న ధరను తానే గణనీయంగా మార్చకుండా ఉంటుంది. సగటు రోజువారీ ట్రేడింగ్ పరిమాణం దీనికి హారం.

వీటిలో ప్రతి పరిమితీ strategyలో కాకుండా risk layerలో ఉండాలి. ప్రతి పరిమితీ backtest, paper, liveలో ఒకే code path ద్వారా అమలవ్వాలి. liveలో మాత్రమే ఉన్న పరిమితిని ఎవరూ పరీక్షించలేదు.

ట్రేడింగ్ బాట్ ఆడిట్ లాగ్‌లో ఏమి ఉండాలి?

Append-only లాగ్ ప్రతి నిర్ణయానికి ఒక రికార్డును రాస్తుంది. ఆ రికార్డులను ఎప్పుడూ సవరించదు లేదా తొలగించదు. ప్రతి రికార్డులో టైమ్‌స్టాంప్, ఉపయోగించిన quote మరియు దాని వయస్సు, అమలు చేసిన ప్రతి limit check verdictతో సహా, పంపిన order, broker ఇచ్చిన సమాధానం ఉండాలి. తిరస్కరించిన ordersను కూడా నెరవేరిన ordersతో సమాన ప్రాధాన్యంతో నమోదు చేయాలి.

పునర్నిర్మాణమే ప్రధాన ఉద్దేశ్యం. ఒక చెడు ట్రేడింగ్ సెషన్ జరిగిన ఆరు వారాల తర్వాత అసలు ప్రశ్న P&L ఎంత అన్నది కాదు. ఏ inputపై ఏ check పాస్ అయిందన్నదే ప్రశ్న. నమోదు చేసిన input లేకపోతే, మార్కెట్ స్థితి ఆధారంగా బాట్ స్థితిని మళ్లీ అంచనా వేయాల్సి వస్తుంది. ఇది backtestingలోని look-ahead biasతో సమానమైన తప్పు: నిర్ణయం తీసుకున్న సమయంలో వ్యవస్థ వద్ద లేని సమాచారాన్ని ఉపయోగించడం.

riskguard ప్రాజెక్ట్ ఈ విభజనకు ఒక open-source అమలు. ఇందులో limit checks వ్యూహం అంతటా చెదరిపోయిన logicగా కాకుండా, strategy పిలిచే ప్రత్యేక componentలో ఉంటాయి. ఇది అనేక రూపకల్పనల్లో ఒకటి మాత్రమే. చూసిన వెంటనే స్వీకరించకుండా ముందుగా పరిశీలించడం మంచిది. మీరు ఏదిపై ఆధారపడినా, default branchకు బదులుగా tag చేసిన releaseను నిర్దిష్టంగా ఎంచుకోండి. ఒకే backtestను రెండుసార్లు నడిపినప్పుడు branch మధ్యలో మారవచ్చు. నిశ్శబ్దంగా మారిపోయిన risk layer, risk layer లేకపోవడం కంటే ప్రమాదకరమైనది.

మొదటి డిప్లాయ్‌మెంట్ paper brokerపై ఎందుకు నడుస్తుంది

బ్రోకర్ అడాప్టర్ డిఫాల్ట్‌గా paperకు సెట్ అయి ఉంటుంది. Live tradingను ఉద్దేశపూర్వకంగా స్పష్టమైన flag ద్వారా మాత్రమే ప్రారంభించాలి. ఇది నివారించే ప్రమాదం సాధారణమైనదే: కాపీ చేసిన config file లేదా మార్చకుండా మిగిలిపోయిన environment variable, నిజమైన డబ్బుతో నిజమైన orders పంపవచ్చు.

Paper run ద్వారా మరో ముఖ్యమైన artifact కూడా లభిస్తుంది. Live ధరలపై అదే risk layer నుంచి decision log తయారవుతుంది. ఏ పరిమితులు అమలయ్యాయో, ఏవి అమలుకాలేదో అందులో కనిపిస్తుంది. ఇది risk layer గురించి సాక్ష్యం. Strategy లాభం తెస్తుందా అనే ప్రశ్న వేరేది. నిజమైన డబ్బు పెట్టే ముందు paper tradingలో paper record ఏమి నిరూపిస్తుందో, ఏమి నిరూపించదో వివరిస్తుంది. అనేక agents orders పెట్టగలిగినప్పుడు halt authority ప్రతి agent వెలుపలే ఉండాల్సిన కారణాన్ని multi-agent AI trading systems చూపిస్తుంది.

Trading bot సర్క్యూట్ బ్రేకర్‌పై తరచుగా అడిగే ప్రశ్నలు

Trading botలో సర్క్యూట్ బ్రేకర్ అంటే ఏమిటి?

నిర్దిష్ట పరిమితి చేరుకున్న వెంటనే bot కొత్త ఆర్డర్లు పంపకుండా ఆపే risk layer నియమం. సాధారణంగా ఇది రోజువారీ నష్ట పరిమితి లేదా ఖాతా equity గరిష్ఠ స్థాయి నుంచి వచ్చిన drawdown ఆధారంగా ఉంటుంది. ఇది strategyకు స్వతంత్రంగా, ప్రతి ఆర్డర్‌పై పనిచేస్తుంది. ఏదైనా ప్రక్రియ దాన్ని క్లియర్ చేసే వరకు ఇది సక్రియంగానే ఉంటుంది.

మార్కెట్ 2% పడిపోయే రోజు ఎంత తరచుగా వస్తుంది?

SPYలో 5లో 2% లేదా అంతకంటే ఎక్కువ పతనం నమోదైన సెషన్లు 2019, 2020లో 25 ఉన్నాయి. ప్రతి సంవత్సరం సుమారు 250 trading days ఉంటాయి. ప్రశాంత సంవత్సరానికి, ఒత్తిడితో కూడిన సంవత్సరానికి మధ్య కనిపించే ఈ వ్యత్యాసం వల్ల loss limitను అంచనాపై కాకుండా చారిత్రక డేటా ఆధారంగా నిర్ణయించాలి.

Stop తర్వాత bot మళ్లీ ప్రవేశించకుండా ఎలా నిరోధించాలి?

ప్రతి stop తర్వాత cooldown window, అలాగే ఒక్కో symbolకు రోజువారీ trade cap పెట్టాలి. ఇవి పరిమితిలేని loopను నియంత్రిత loopగా మారుస్తాయి. Halt flagను process memory వెలుపల కూడా latch చేసి నిల్వ చేయాలి. లేకపోతే supervisor క్రాష్ అయిన botను restart చేసినప్పుడు, అది halt కాని కొత్త stateతో మళ్లీ ప్రారంభమవుతుంది.

Price feed పాతదైందని bot ఎలా గుర్తించగలదు?

ప్రతి quote వయస్సును తనిఖీ చేసి, దాని ఆధారంగా ఆర్డర్ ధర నిర్ణయించాలి. అదనంగా, data నుంచి వేరుగా feed heartbeatను పర్యవేక్షించాలి. Overnight gaps పాత price దాచే ప్రమాదం ఎంత పెద్దదో చూపిస్తాయి. January 2024 నుంచి July 2026 మధ్య TSLAన 95వ percentile overnight move 4.41%కు చేరుకుంది.

చిన్న trading botకు నిజంగా audit log అవసరమా?

Fillsకు సంబంధించిన logలో ఏమి జరిగిందో నమోదవుతుంది. Decisionsకు సంబంధించిన logలో bot తాను ఏమి చేయడానికి అనుమతించబడ్డానని భావించిందో నమోదవుతుంది. Strategy తప్పిదాన్ని, అమలు కాని risk checkను వేరు చేయడానికి ఇదే మార్గం. Append-only log, rejectionsతో సహా, ఉపయోగకరమైన కనీస రూపం.


పైన ఉన్న ప్రతి గణాంకం minute barsపై అమలు చేసిన stored query నుంచి వచ్చింది. ప్రతి panel దాని వెనుక ఉన్న SQLను తెరుస్తుంది. Strasmore terminalలోని అదే queriesను మీ స్వంత symbol జాబితాపై అమలు చేయండి.

#risk-management#trading-bots#drawdown#position-sizing#automation