Strasmore Research
Matuto Matt ConnorNi Matt Connor

Self-Hosted A-Share Quant Workbench, Ipinaliwanag

Ang self-hosted A-share quant workbench ay nagso-screen at nagba-backtest sa sarili mong machine. Alamin ang dependencies nito at apat na unang dapat suriin.

Ang self-hosted A-share quant workbench ay isang web page na nagso-screen ng market, sumusubaybay sa listahan ng mga stock, nagpapatakbo ng backtests, at nagsusulat ng post-market review sa machine na kontrolado mo, sa halip na sa terminal ng broker. Isang MIT-licensed project, ang tickflow-stock-panel, ang naglalagay ng lahat ng ito sa iisang port. May humigit-kumulang 2,800 GitHub stars na ito noong August 2026. Madaling basahin ang feature list. Ang nasa ilalim na layer ang magpapasya kung gagana pa ang mga ito sa susunod na quarter.

Mga bahagi ng isang self-hosted na A-share quant workbench

Sapat na maikli ang architecture para matandaan agad. Batay sa code at docs mula sa August 2026 commit, ganito ito:

  • Isang web page na binuo gamit ang React at TypeScript.
  • Isang Python service na gumagamit ng FastAPI, kasama ang scheduler na nagre-refresh ng data ayon sa itinakdang timer.
  • Isang local store: mga Parquet file sa disk, na tina-query gamit ang DuckDB at kino-compute gamit ang Polars.
  • Isang backtesting engine na vectorbt, na nakaturo sa mga file na iyon.
  • Isang vendor SDK na kumukuha ng bawat presyong ipinapakita ng panel.

Pansinin kung ano ang wala rito. Walang bahagi ng stack na kumokonekta sa isang exchange. Ang panel ang nagko-compute; ang vendor ang nagsu-supply. Inilalarawan ng “self-hosted” kung saan tumatakbo ang code, at wala itong sinasabi tungkol sa pinagmumulan ng mga numero. Ang pagmamay-ari sa raw bars ay trabaho ng layer sa ibaba, ang local A-share market data lake, at ito ang dahilan kung bakit maaaring palitan ang lahat ng nasa ibabaw nito.

Ano ang saklaw ng free tier ng data source

Isang environment variable ang nagpapasya kung ano ang makikita ng panel. Iwanang blangko ang vendor key at tatakbo ang project sa tinatawag ng documentation nito na None mode: makasaysayang daily bars mula sa isang libreng endpoint, kung saan dumarating ang kasalukuyang session one to two hours pagkatapos ng pagsasara. Ilagay ang key at magbubukas ang access ayon sa paid tier. Magagamit ang free tier para sa end-of-day na trabaho, pero malinaw na hindi ito para sa intraday na paggamit. Nakasaad din ang mga tuntunin sa paraang maaaring muling ipahayag ng vendor sa bawat renewal.

Direkta ang paliwanag ng maintainer tungkol sa arrangement:

Ang project na ito ay para lamang sa pag-aaral at quantitative research, at hindi bumubuo ng anumang investment advice. Hindi kumakatawan sa future returns ang resulta ng backtest.
Personal na open-source project ang project na ito, batay sa TickFlow data source at hindi opisyal na project ng TickFlow.
README, shy3130/tickflow-stock-panel, binasa noong 13 August 2026

Sa madaling sabi, para sa pag-aaral at quantitative research ang project, “hindi ito bumubuo ng investment advice,” hindi kumakatawan sa future returns ang resulta ng backtest, at isa itong “personal open-source project, hindi opisyal na produkto ng TickFlow.” Iyan ang mahalagang aral sa buong ganitong uri ng project. Inaalis ng zero-ops ang operational work sa iyong desk. Ngunit nananatili ang dependency: umuupa ka ng data mula sa isang kumpanyang hindi kailanman nangakong susuporta sa panel na ito. Nililimitahan din ng README ang paggamit sa pag-aaral at research, habang MIT ang licence file.

Bakit commit SHA ang dapat i-pin sa halip na version number

Ang commit SHA ay 40-character na fingerprint na itinatalaga ng git sa bawat na-save na pagbabago. Tinutukoy nito ang isang eksaktong state ng code, nang permanente.

Noong 13 August 2026, walang laman ang GitHub Releases page ng repository. Mayroon itong 31 version tag, mula v0.1.31 hanggang v0.1.88, ngunit may mga puwang sa numbering at walang nakalakip na notes. Ang pinakabagong tag ay tumutukoy sa commit na may petsang 31 July 2026, habang ang default branch ay umusad na sa mga work na may petsang 6 August 2026. Hindi masasabi ng tag na nahuhuli sa branch at walang notes kung ano ang aktuwal mong makukuha.

Kaya itala ang SHA. Ang head ng default branch noong 6 August 2026 ay ecfddb451e97f6fc9a7e43ac33e4ef0e69933b33. I-check out ang commit na iyon at itala ito sa tabi ng anumang konklusyong makukuha mo mula sa backtests. Pagkalipas ng anim na linggo, walang tiyak na kahulugan ang pahayag na “I ran the latest.”

Dalawang linya ang nakadokumentong simula: kopyahin ang example environment file sa .env, pagkatapos ay patakbuhin ang docker compose up --build, na nagsisilbi sa panel sa port 3018. Iyan ang instructions ng maintainer para sa commit na iyon, hindi isang nasubukang proseso; kumukuha ang build ng images at nangangailangan ng network access na hindi pa nasubukan ng pahinang ito. Ang development route (./dev.sh, o .\dev.ps1 sa Windows) ay nangangailangan ng Python 3.11 o mas bago, Node 20 o mas bago, at ng uv at pnpm package manager.

Ano ang ipinapadala ng LLM strategy feature, at kung saan

Opsyonal ang strategy generation, single-stock commentary, at review write-up. Iwanang blangko ang AI_API_KEY at mananatiling hindi aktibo ang buong feature. Kapag pinunan ito, itatakda rin ang AI_PROVIDER (isang OpenAI-compatible endpoint o Ollama), AI_BASE_URL, AI_MODEL, at AI_DAILY_TOKEN_BUDGET. Ihihinto nito ang mga request kapag nagamit na ang token allowance para sa araw na iyon.

Mahalaga kung saan patungo ang data. Ang iyong prompt, pati ang anumang context na ikinakabit ng panel dito, ay umaalis sa iyong machine patungo sa endpoint na iyong itinakda. Kung ituturo mo ang base URL sa isang hosted API, mapupunta ang request sa kumpanyang nagpapatakbo nito. Kung ituturo mo ito sa runtime sa sarili mong network, mananatili ito sa iyong network. Hindi nangangahulugang self-hosted ang model dahil self-hosted ang panel. Naka-store ang mga key sa plaintext .env sa project root. Maaari rin itong i-edit mula sa settings page, na protektado ng dashboard password na may minimum na anim na character. Tinutukoy ng aming note tungkol sa mga alpha factor na binuo ng LLM kung saan karaniwang pumapalya ang mga strategy na isinulat ng machine.

Ini-model ba ng backtester ang mga gastos sa trading?

Ina-advertise ng backtester ang T+1 handling, commissions, slippage, at stop-losses. Ngunit hindi nangangahulugang naka-set ang mga switch dahil umiiral ang mga ito. Ang backtest na gumagamit ng printed close bilang fill at zero ang costs ay nagsasabing libre ang trading. Hindi ito totoo. Ang basis point ay isang sandaang bahagi ng isang porsiyento. Sinusukat ng panel sa ibaba ang average na agwat sa pagitan ng best bid at best offer, sa basis points, sa anim na US listings sa loob ng isang midday hour noong 17 June 2026.

QueryGastos sa pagtawid sa spread: average quoted spread, anim na US listings, tanghali 17 June 2026
Ang eksaktong SQL sa likod ng bawat numero
SELECT
    ticker                                                                       AS symbol,
    round(avg(toFloat64(ask_price) - toFloat64(bid_price))
          / avg((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000, 2)   AS spread_bps
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('SPY', 'AAPL', 'MSFT', 'NVDA', 'KO', 'F')
  AND sip_timestamp >= toDateTime('2026-06-17 15:00:00', 'UTC')
  AND sip_timestamp <  toDateTime('2026-06-17 16:00:00', 'UTC')
  AND bid_price > 0
  AND ask_price > bid_price
GROUP BY ticker
ORDER BY spread_bps
Run this yourself

Ang may pinakamakitid na spread sa panel, SPY, ay may average na quote na 0.29 bps sa loob ng oras na iyon. Ang pinakamalawak, F, ay may quote na 6.98 bps. Tatawirin mo ang agwat na iyon nang dalawang beses—isang beses sa pagpasok at isang beses sa paglabas—kaya ang round trip ay nagkakahalaga ng humigit-kumulang doble sa ipinakitang halaga, bago ang commissions.

Kasinghalaga ng pagpili ng asset ang timing. Kumuha ang susunod na panel ng isa sa mga listing na iyon at sinusukat kung gaano kalayo ang nilakbay ng presyo nito sa loob ng isang minuto, na in-average sa half-hour buckets sa parehong araw.

QueryGaano kalayo ang galaw ng presyo sa loob ng isang minuto: KO, ayon sa oras sa New York, 17 June 2026
Ang eksaktong SQL sa likod ng bawat numero
SELECT
    formatDateTime(
        toStartOfInterval(toTimeZone(window_start, 'America/New_York'), INTERVAL 30 MINUTE),
        '%H:%i')                                                                 AS et_time,
    round(avg((toFloat64(high) - toFloat64(low)) / toFloat64(close)) * 10000, 1)  AS range_bps
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'KO'
  AND window_start >= toDateTime('2026-06-17 12:00:00', 'UTC')
  AND window_start <  toDateTime('2026-06-17 21:00:00', 'UTC')
  AND volume > 0
  AND close > 0
GROUP BY et_time
ORDER BY et_time
Run this yourself

Nagsisimula ang panel sa 08:00, bago ang regular session, kung saan ang average minute bar ay nagtala ng 0 bps na galaw: ang mga minutong may naging trading ay nanatili sa iisang presyo. Ang huling bucket, 16:30, ay pagkatapos ng close at nagtala ng average na 4.2 bps. Pumipili ang backtest ng isang punto mula sa bawat saklaw na iyon at itinuturing iyon bilang fill. Basahin ang curve, hindi lamang ang mga endpoint: mapagbigay ang parehong assumption sa ilang oras at mabigat naman sa iba. May sarili ring epekto ang A-share rules, dahil pinipigilan ng T+1 na maibenta hanggang sa susunod na session ang shares na binili ngayon, at maaaring tuluyang mawala ang modeled exit dahil sa daily price limits. Ipinapakita ng aming walkthrough ng isang reproducible backtest kung ano ang dapat itala sa isang defensible setup, at tinatalakay ng look-ahead bias ang isa pang paraan kung paano nagkakamali ang isang mukhang malinis na curve.

Adjusted o hindi adjusted: ang pinagmulan ng data

Sa corporate actions madalas tahimik na naililigaw ng screener ang user. Ang stock na nagkaroon ng ten-for-one split ay maaaring magpakita ng 90% na pagbagsak sa araw ng split kahit walang nawalan ng kahit isang sentimo. Inililista sa panel sa ibaba ang labindalawang pinakamalalaking forward split sa US listings mula 1 January hanggang 13 August 2026.

QueryLabindalawang pinakamalalaking forward stock splits sa US listings, 1 January hanggang 13 August 2026
Ang eksaktong SQL sa likod ng bawat numero
SELECT
    ticker                                                            AS symbol,
    formatDateTime(execution_date, '%b %e, %Y')                       AS effective_on,
    round(any(toFloat64(split_to)) / any(toFloat64(split_from)), 2)   AS shares_after_per_share
FROM global_markets.stocks_splits
WHERE execution_date >= toDate('2026-01-01')
  AND execution_date <= toDate('2026-08-13')
  AND split_from > 0
  AND split_to > split_from
  AND ticker NOT IN ('SPCX')
GROUP BY ticker, execution_date
ORDER BY shares_after_per_share DESC, execution_date DESC
LIMIT 12
Run this yourself

Ang pinakamalaki ay ginagawang 10000 shares ang isang share, na naging epektibo noong Feb 10, 2026. Ang ganitong kalalaking ratio ay hindi karaniwang four-for-one. Sa halip, inilalagay ng corporate-action feed ang buong range sa iisang column. Kahit ang pinakamaliit sa labindalawa ay ginagawang 20 shares ang isang share. Sapat na iyon para magmukhang collapse ang isang unadjusted chart. Kapag raw prices ang binabasa ng momentum screen, mamamarkahan nitong crash ang bawat isa sa mga ito. Pareho ang problema sa Chinese feeds, bagaman iba ang terminong ginagamit nila. Nagpapadala ang mga ito ng tatlong variant ng bawat series: unadjusted, forward-adjusted, at back-adjusted. Tiyaking alam mo kung alin ang na-load ng iyong panel. Ipinapaliwanag ng Kasaysayan ng presyo na adjusted para sa split ang kalkulasyon.

Mga dapat suriin bago ikaw mismo ang mag-host ng ganitong sistema

  • Pinagmulan ng data. Aling vendor ang nagbigay nito, anong licence ang nalalapat, at saklaw ba ng free tier ang nilalayon mong paggamit.
  • Pangangasiwa ng key. Saan naka-save sa disk ang API keys, sino ang makaka-access sa settings page, at nakalantad ba ang machine sa labas ng sarili mong network.
  • Pagmomodelo ng gastos. Kasama ba sa backtester ang commissions, slippage, at sariling rules ng market, at ano ang laman ng mga field na iyon kapag hindi mo binago ang mga ito.
  • Paraan ng pag-update. Itala ang eksaktong commit na dineploy mo kasama ng mga resulta upang ma-reproduce ito makalipas ang ilang buwan.

Mga Madalas Itanong

Libre bang patakbuhin ang isang self-hosted na A-share quant workbench?

Libre ang code sa ilalim ng MIT license. Hiwalay na usapin ang data: kapag walang vendor key, gumagamit ang project na ito ng libreng historical daily bars, at dumarating ang data para sa kasalukuyang session one to two hours pagkatapos ng market close. Ang mas mabilis o mas malalim na data ay nasa paid tiers ng vendor.

Ano talaga ang ibig sabihin ng self-hosted dito?

Tumatakbo sa sarili mong machine o server ang web page, scheduler, mga naka-save na file, at backtester. Wala itong account sa platform ng ibang provider. Hindi ibig sabihin nito na pagmamay-ari mo ang data. Mananatiling remote ang optional AI features maliban kung ituturo mo ang mga ito sa model na nasa sarili mong network.

Ipinapadala ba ng LLM feature ang data ko sa third party?

Kapag naka-on ito, oo, sa alinmang OpenAI-compatible endpoint na iko-configure mo. Naka-disable ang feature bilang default. Kapag blangko ang AI key, walang data na lumalabas sa machine.

Bakit mag-pin ng commit SHA sa halip na version tag?

Noong 13 August 2026, walang published releases o release notes ang repository na ito. Mas lumang code naman ang tinuturo ng pinakabagong tag kaysa sa default branch. Sa ganitong sitwasyon, ang ibig sabihin ng “Latest” ay kung ano man ang laman ng branch noong araw na ni-clone mo ito. Eksakto naman ang commit SHA. Ganoon din ang prinsipyo sa open-source quant trading material sa pangkalahatan: i-pin ang aktuwal na pinatakbo mo.

Mga tala sa verification

Ang bawat detalye tungkol sa architecture at configuration sa itaas ay kinuha mula sa public repository noong 13 August 2026, sa commit ecfddb451e97f6fc9a7e43ac33e4ef0e69933b33, na siyang head ng default branch at may petsang 6 August 2026. Walang nakalista sa Releases page. May 31 version tags sa tag list, mula v0.1.31 hanggang v0.1.88. Ang pinakabago ay tumuturo sa commit na may petsang 31 July 2026. Ang mga siniping linya ay mismong isinulat ng maintainer at kinopya mula sa README, hindi ni-rephrase. Ang container start command ay sinipi mula sa README at hindi pinatakbo rito.

Ang market panels ay US listings na naka-pin sa mga nakalipas na fixed date upang manatiling pareho ang mga figure. Layunin ng mga ito na ipakita ang dalawang pagsusuring mahalaga sa anumang market—execution cost at corporate-action adjustment—hindi upang ilarawan ang Chinese market.


May kasamang SQL ang bawat panel dito na gumawa sa datos nito at maaaring i-expand sa ibaba. Para patakbuhin ang parehong spread check sa sarili mong listahan ng mga pangalan bago ito ikabit sa isang screener, hilingin ito sa plain English sa Strasmore terminal.

#open-source#backtesting#screening#a-shares#self-hosted