Circuit breakers za trading bots ni nini
Jua jinsi circuit breakers zinavyosimamisha trading bot kabla ya hasara ya siku kuongezeka, mara ngapi kikomo cha hasara huwashwa na volatility scaling hubadili ukubwa wa nafasi.
Circuit breakers za trading bots ni kanuni zinazozuia mkakati wa kiotomatiki kutuma orders mara tu kikomo kilichowekwa kinapofikiwa. Zinawekwa kwenye safu ya udhibiti wa hatari kati ya mkakati na broker, na hutumika kwenye kila order bila kujali kama mkakati unakubaliana nazo. Mkakati huamua nini cha kufanya trade. Safu ya udhibiti wa hatari huamua kama trading itafanyika kabisa.
Mgawanyo huo ndio msingi wa muundo mzima. Mkakati unaojidhibiti hauna ukaguzi huru wakati ambapo dhana zake zenyewe zinavunjika. Huo ndio wakati ambao ukaguzi unahitajika zaidi.
Kazi ya circuit breaker katika trading bot
Safu ya udhibiti wa hatari ina sehemu nne. Kila sehemu inalenga kuzuia hitilafu maalum na inayoweza kuzuilika.
- Vikomo vya lazima vya ukubwa wa nafasi, exposure ya notional kwa kila symbol, na kasi ya kuingiza orders. Hupunguza hasara inayoweza kusababishwa na hitilafu ambayo vinginevyo isingekuwa na kikomo.
- Circuit breaker ya drawdown inayosimamisha orders mpya akaunti inapopungua kwa kiasi kilichowekwa ndani ya session, au inapopungua kwa kiasi kilichowekwa kutoka kilele cha equity yake.
- Ukubwa wa order uliopimwa, unaowekwa kwa kutumia volatility ya hivi karibuni au sehemu ya Kelly bet badala ya idadi thabiti ya hisa. Hii hudumisha hatari ya kila trade karibu katika kiwango kilekile huku range ya soko ikibadilika.
- Audit log ya append-only ya kila uamuzi, ikiwemo orders ambazo safu ya udhibiti wa hatari ilikataa. Hiki ndicho kiashiria pekee kinachotenganisha “strategy ilikuwa na makosa” na “ukaguzi haukuendeshwa”.
Kila kitu hapa chini ni mojawapo ya sehemu hizo nne, kikiwa kimefafanuliwa kwa vitendo.
Je, kikomo kinachofaa cha hasara ya kila siku kwa bot ya trading ni kipi?
Kikomo cha hasara ya kila siku husitisha maagizo mapya mara tu hasara ya kipindi inapovuka kiwango kilichowekwa. Kuchagua namba hiyo ni suala la calibration, si ladha: ukiweka ndani ya mabadiliko ya kawaida ya soko, bot itabaki imesitishwa katika wiki nyingi; ukiweka mbali sana, haitawahi kuwashwa. Mahali pa kuanzia ni mara ngapi soko lenyewe hupata siku ya kushuka kwa kiwango fulani.
SQL halisi nyuma ya kila namba
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 yearVipindi vilivyoshuka kwa 1% au zaidi vilikuwa 15 katika 2019 na 45 katika 2020, kati ya takribani siku 250 za trading kwa mwaka. Idadi ya vipindi vilivyoshuka kwa 3% au zaidi ni tofauti kabisa: 0 katika 2019 dhidi ya 16 katika 2020. Mstari wa mwisho wa 9 unahusu vipindi hadi Julai 31, 2026 pekee.
Mstari huo una mafungu yasiyo sawa badala ya mtiririko thabiti, na huo ndio msingi wa muundo. Siku ngumu hujitokeza kwa makundi. Bot inayosimama siku ya kwanza ya kundi na kuanza tena siku ya pili haijasimama kwa maana halisi.
Viwango viwili vina majukumu tofauti. Kikomo cha hasara ya kila siku, ambacho kwa kawaida ni 2% ya equity ya akaunti, humaliza kipindi cha trading. Kikomo cha trailing drawdown kinachopimwa kutoka kiwango cha juu cha equity, kwa kawaida karibu 10%, hukomesha mkakati hadi ukaguliwe na binadamu. Cha kwanza ni cha kawaida, cha pili kimekusudiwa kutokea mara chache. Bot inayotumia kikomo cha kwanza pekee inaweza kupunguza akaunti kwa 2% kwa wakati mmoja bila kuwahi kuamsha kinga yoyote.
Je, kuongeza ukubwa kulingana na volatility hubadilishaje ukubwa wa nafasi?
Volatility targeting huamua ukubwa wa nafasi kinyume na realized volatility ya hivi karibuni: daily range inapoongezeka mara mbili, nafasi hupungua takribani kwa nusu, hivyo risk ya dola kwa kila trade hubaki karibu sawa. Realized volatility hapa ni standard deviation ya annualized ya returns za kila siku, na hubadilika kwa kiwango kikubwa kuliko watu wengi wanavyotarajia.
SQL halisi nyuma ya kila namba
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)Realized volatility iliyopimwa kwa 11.1% annualized katika 2024-01 na 12% katika 2026-07, kwa kipindi cha 31 miezi. Safu ya pili hubadilisha kila kipimo kuwa nafasi ambayo target ya volatility ya 12% ingebeba, ikiwa imewekewa kikomo cha mstari mzima: 100% katika 2024-01 dhidi ya 99.7% katika 2026-07. Ni mkakati uleule na conviction ileile, lakini idadi ya hisa inatofautiana sana.
Kelly criterion hukabili tatizo hilo kutoka upande mwingine, kwa kuamua ukubwa wa nafasi kulingana na edge inayokadiriwa na variance badala ya volatility pekee. Waendeshaji wengi wa systematic hutumia sehemu ya Kelly criterion, kama half Kelly au quarter Kelly, kwa sababu pembejeo zote mbili ni makadirio yanayotokana na sampuli yenye ukubwa mdogo. Ukubwa wa nafasi kwa kutumia Kelly criterion inaeleza hesabu hiyo.
Kwa nini trading bot huendelea kuingia tena baada ya stop?
Stop inatekelezwa. Nafasi inafungwa. Sekunde tisini baadaye, sharti la kuingia linakuwa kweli tena, bot inaingia upya, inapata hasara ileile, kisha inarudia. Hakuna kipengele kimoja kilichoharibika. Mkakati ulifanya kile ulichoandikwa ufanye, stop ilifanya kile ilichoandikwa ifanye, na akaunti bado inaendelea kupoteza fedha kwa kila mzunguko mmoja wa kuingia na kutoka.
Marudio hayo yanatokana moja kwa moja na mwenendo wa bei. Paneli hii huhesabu, kwa kila session, mara ngapi SPY ilisogea kutoka zaidi ya 0.1% juu ya bei yake ya kufungua hadi zaidi ya 0.1% chini yake, au kinyume chake.
SQL halisi nyuma ya kila namba
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)SPY ilivuka bendi hiyo kwa wastani wa mara 0.7 kwa kila session katika 2025-08 na mara 1.5 katika 2026-07, huku session moja katika 2026-07 ikirekodi misalaba 5. Kanuni yoyote inayofungua nafasi upande mmoja wa kiwango na kuweka stop upande mwingine ina fursa hizo nyingi za kutekelezwa ndani ya siku moja.
Mitambo minne huzuia hali hiyo.
- Kipindi cha kusubiri baada ya kila stop, kinachopimwa kwa dakika au bars, ambapo hakuna order mpya ya symbol hiyo inayopita kwenye safu ya udhibiti wa risk.
- Kikomo cha idadi ya trades kwa kila symbol kwa siku, ambacho hubadilisha mzunguko usio na kikomo kuwa mzunguko wenye kikomo.
- Alama ya kusitisha inayojifunga. Kikomo cha daily loss kikishawashwa, alama hiyo hubaki ikiwa imewashwa hadi mtu aiondoe.
- Kuhifadhi alama hiyo nje ya kumbukumbu ya process. Supervisor anayeanzisha upya bot iliyopata hitilafu huipa hali safi, na hali safi ndiyo hasa alama hiyo inalenga kuzuia.
Kipengele cha mwisho huwakamata wale waliofanya kila kitu kingine kwa usahihi. Bots za Grid trading huweka ngazi za orders kwa muundo wake, jambo linalofanya kikomo cha idadi ya trades kiwe muhimu kwa udhibiti, badala ya kuwa mapambo.
Nini hutokea bot inapofanya biashara kwa kutumia price feed iliyopitwa na wakati?
Quote ambayo haijasasishwa bado huonekana kama nambari. Bot huisoma, huweka bei ya order kwa kuitegemea, kisha hutuma order hiyo kwenye soko ambalo tayari limebadilika. Hitilafu hiyo hutokea bila kutambuliwa: hakuna kinachotoa hitilafu, hakuna error inayorekodiwa, na fills huonekana kuwa za ajabu baadaye tu.
Toleo linaloweza kupimwa kwa uwazi ni overnight gap, ambapo bei inayojulikana hubaki bila kubadilika kwa saa kadhaa huku bei inayoweza kuuzwa ikiendelea kusogea.
SQL halisi nyuma ya kila namba
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 DESCJina lililokuwa na gap pana zaidi katika percentile ya 95 lilikuwa TSLA kwa 4.41%, dhidi ya 1% kwa KO. Kwa kawaida, usiku ulikuwa na utulivu zaidi: median gaps zilikuwa 1.01% na 0.24%, mtawalia. Tails ndizo ambazo risk layer hujengwa kushughulikia, na gap kubwa zaidi ya mara moja kwenye TSLA katika kipindi kilichopimwa ilikuwa 14.57%. Hizo ndizo tofauti ambazo bot inaweza kukabili inapofanya kazi kwa kutumia bei iliyosoma muda fulani uliopita. Kwa nini hisa hupata gap usiku inaeleza mechanics.
Hatua za ulinzi ni rahisi na za gharama ndogo. Weka umri wa juu unaoruhusiwa kwa kila quote ambayo risk layer itatumia kuweka bei, kwa kawaida sekunde chache kwa mkakati wa intraday. Pokea heartbeat kutoka kwenye feed kando na data yenyewe; hii hutofautisha socket iliyonyamaza na soko lililotulia. Chukulia data inayokosekana kama halt, si kama hold, kwa sababu bot isiyokuwa na bei haiwezi kutathmini exits zake pia.
Ni vizuizi gani vikali vinapaswa kuwekwa kwenye tabaka la hatari?
- Notional ya juu zaidi kwa kila symbol kama sehemu ya equity ya akaunti. Kikomo cha 10% huzuia symbol moja yenye utendaji mbaya kuathiri akaunti nzima.
- Notional ya jumla ya juu zaidi katika nafasi zote zilizo wazi. Kukiweka kwenye 100% ya equity kunamaanisha hakuna leverage. Huu ni uamuzi unaopaswa kufanywa wazi badala ya kurithi mpangilio chaguo-msingi wa broker.
- Kiwango cha juu zaidi cha oda kwa dakika na kwa siku. Oda kumi kwa dakika ni kiwango kikubwa kwa mikakati mingi ya retail, lakini bado huzuia loop isiyodhibitiwa ndani ya dakika moja.
- Ukubwa wa juu zaidi wa oda kama sehemu ya volume ya wastani ya kila siku ya symbol. Kikomo cha 1% huzuia bot kusogeza bei ambayo inajaribu kufanya trade, na volume ya wastani ya kila siku ndiyo denominator.
Kila kimoja cha vizuizi hivi kinapaswa kuwa kwenye tabaka la hatari, si kwenye strategy. Kila kimoja kinapaswa kutumia njia ileile ya msimbo katika backtest, paper, na live. Kikomo kinachopatikana kwenye live pekee ni kikomo ambacho hakuna mtu amekifanyia majaribio.
Rekodi ya ukaguzi ya trading bot inahitaji nini?
Rekodi ya append-only huandika rekodi moja kwa kila uamuzi na kamwe haihariri wala kufuta. Kila rekodi huwa na timestamp, quote iliyotumika na umri wake, kila ukaguzi wa limit uliofanywa pamoja na uamuzi wake, order iliyotumwa, na jibu la broker. Order zilizokataliwa huandikwa kwa uzito sawa na zilizotekelezwa.
Lengo ni kuwezesha uundaji upya wa matukio. Wiki sita baada ya session mbaya, swali si kamwe P&L ilikuwa kiasi gani. Swali ni ukaguzi upi ulipita, na ulitumia input gani. Bila input iliyorekodiwa, huishia kujaribu kuunda upya hali ya bot kutoka kwenye hali ya soko. Hilo ni kosa lilelile la look-ahead bias katika backtesting: kutumia taarifa ambayo mfumo haukuwa nayo wakati wa kufanya uamuzi.
Mradi wa riskguard ni utekelezaji mmoja wa open-source wa utenganisho huu. Ukaguzi wa limit huwekwa kwenye component ambayo strategy huiita, badala ya logic kutawanywa ndani ya strategy yenyewe. Ni mojawapo ya miundo kadhaa, na inafaa kusomwa kabla ya kuipitisha moja kwa moja. Chochote unachotegemea, weka toleo lililotambulishwa kwa tag badala ya default branch. Branch inaweza kubadilika kati ya uendeshaji wawili wa backtest ileile. Risk layer iliyobadilika bila taarifa ni mbaya kuliko kutokuwa na risk layer kabisa.
Kwa nini utekelezaji wa kwanza hutumia broker wa majaribio
Kiunganishi cha broker hutumia paper trading kwa chaguo-msingi, na trading ya moja kwa moja huwashwa kwa kuweka flag mahsusi. Hatua hii huzuia kosa la kawaida: faili ya usanidi iliyonakiliwa, au environment variable ambayo haikubadilishwa, kutuma orders halisi kwa kutumia fedha halisi.
Paper run pia hutengeneza rekodi muhimu: decision log kutoka kwenye risk layer ileile, ikitumia bei za soko za wakati halisi. Rekodi hiyo huonyesha ni limits zipi zilianzisha hatua na ni zipi hazikufanya hivyo. Huu ni ushahidi kuhusu risk layer. Ni swali tofauti na kama strategy inapata faida. Paper trading kabla ya kutumia fedha halisi inaeleza rekodi ya paper trading inaweza kuthibitisha nini na haiwezi kuthibitisha nini. mifumo ya trading ya AI yenye mawakala wengi inaonyesha kwa nini mamlaka ya kusimamisha trading lazima iwe nje ya kila agent, mara tu mawakala kadhaa wanapoweza kuweka orders.
Maswali yanayoulizwa mara kwa mara kuhusu circuit breaker ya trading bot
Circuit breaker ni nini katika trading bot?
Ni kanuni kwenye safu ya udhibiti wa hatari inayosimamisha bot kutuma orders mpya baada ya kufikiwa kwa kikomo kilichowekwa. Mara nyingi kikomo hicho huwa ni threshold ya hasara ya siku au drawdown kutoka kilele cha equity ya akaunti. Kanuni hiyo huendesha kazi bila kutegemea strategy, kwenye kila order, na hubaki imewashwa hadi kitu fulani kiondoe hali hiyo.
Soko hupata siku ya kushuka kwa 2% mara ngapi?
SPY ilirekodi sessions 5 za kushuka kwa 2% au zaidi katika 2019 na 25 katika 2020, kati ya takribani siku 250 za trading kwa mwaka. Tofauti hiyo kati ya mwaka tulivu na mwaka wenye msukosuko ndiyo sababu loss limit inapaswa kusanidiwa kwa kutumia historia badala ya hisia.
Unamzuiaje bot kuingia tena baada ya stop?
Kipindi cha cooldown baada ya kila stop, pamoja na kikomo cha kila siku cha trades kwa kila symbol, hubadilisha mzunguko usio na kikomo kuwa mzunguko wenye kikomo. Halt flag pia inapaswa kubaki imewekwa na kuhifadhiwa nje ya process memory. Bila hivyo, supervisor anapoanzisha tena bot iliyokwama, huipa hali mpya ambayo haijasimamishwa.
Bot inaweza kutambuaje kwamba price feed imepitwa na wakati?
Kwa kuangalia umri wa kila quote kabla ya kuweka bei ya order kwa kuitumia, na kwa kufuatilia heartbeat ya feed kando na data yenyewe. Mapengo ya bei ya usiku yanaonyesha ukubwa wa kile ambacho stale price inaweza kuficha: overnight move ya asilimia 95 ya usambazaji ilifikia 4.41% kwenye TSLA kati ya Januari 2024 na Julai 2026.
Je, trading bot ndogo inahitaji kweli audit log?
Log ya fills hurekodi kilichotokea. Log ya decisions hurekodi kile ambacho bot iliamini kuwa inaruhusiwa kufanya. Hiyo ndiyo njia pekee ya kutofautisha strategy isiyo sahihi na risk check ambayo haikuwahi kuendeshwa. Toleo la chini kabisa lenye manufaa ni log ya append-only inayojumuisha pia rejections.
Kila figure hapo juu imetokana na stored query iliyotumia minute bars, na kila panel inafunguka na kuonyesha SQL iliyo nyuma yake. Elekeza queries hizo hizo kwenye orodha yako ya symbols kwenye terminal ya Strasmore.