AI এজেন্টের জন্য লোকাল A-share ডেটা লেক তৈরি
ashare-lake আপনার ডিস্কে 39টি ডেটাসেট, ডিলিস্টিং রেকর্ড ও পয়েন্ট-ইন-টাইম কোয়েরি সুবিধা প্রদান করে। এতে থাকা MCP সার্ভার এআই এজেন্টদের সরাসরি ডেটা ব্যবহারের সুযোগ দেয়।
লোকাল A-share ডেটা লেক কী?
একটি লোকাল A-share ডেটা লেক হলো চীনের মূল ভূখণ্ডের ইকুইটি মার্কেটের ঐতিহাসিক ডেটা, যা আপনার নিজের ডিস্কে কলামার Parquet ফাইল হিসেবে সংরক্ষিত থাকে। এটি DuckDB বা Polars-এর মাধ্যমে পড়া যায়। ভেন্ডর এন্ডপয়েন্ট থেকে একবারে একটি পেজ কল করার পরিবর্তে এই পদ্ধতিতে ডেটা ব্যবহার করা হয়। ashare-lake হলো একটি ওপেন-সোর্স প্রজেক্ট যা এই ধরনের ডেটা লেক তৈরি করে। এর সাথে একটি ডেইলি জব থাকে যা ডেটাকে আপ-টু-ডেট রাখে এবং একটি Model Context Protocol সার্ভার থাকে, যার মাধ্যমে এআই এজেন্ট ডেটা কোয়েরি করতে পারে। দুটি ডিজাইন পছন্দের কারণে এটি এখানে আলোচনার যোগ্য: এতে ডিলিস্টেড নামগুলো রাখা হয় এবং অতীতের যেকোনো নির্দিষ্ট তারিখের ফান্ডামেন্টাল ডেটা পড়া সম্ভব।
কেন একটি এআই এজেন্টের জন্য স্থানীয় A-share ডেটা লেক প্রয়োজন
যে এজেন্ট স্থানীয় কপি ছাড়াই চীনা ইকুইটি নিয়ে গবেষণা করে, তার সামনে দুটি পথ খোলা থাকে। হয় সে ফিন্যান্স পেজগুলো স্ক্র্যাপ করে, যেখানে তার কনটেক্সট উইন্ডো এইচটিএমএল (HTML) কোডেই শেষ হয়ে যায় এবং এমন সব সংখ্যা তৈরি হয় যা পরের মাসে আর কেউ যাচাই করতে পারে না। অথবা সে কোনো রেজিস্ট্রেশন-গেটেড ভেন্ডরের শরণাপন্ন হয়, যারা ডেটা রো (row) সীমিত করে রাখে এবং প্রতিটি ফলাফলকে একটি নির্দিষ্ট অ্যাকাউন্টের সাথে যুক্ত করে দেয়।
স্কেল বা পরিমাপের বিষয়টি প্রায়ই অবমূল্যায়িত হয়। আমাদের নিজস্ব ওয়্যারহাউসে মিনিটের রেজোলিউশনে ইউএস (US) টেপ সংরক্ষিত থাকে, এবং একটি সাধারণ সপ্তাহে এর চিত্রটি এমন হয়:
প্রতিটি সংখ্যার পেছনের সঠিক SQL
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS session,
formatDateTime(toDate(toTimeZone(window_start, 'America/New_York')), '%b %e') AS session_label,
uniqExact(ticker) AS tickers_count,
round(count() / 1000000, 2) AS minute_bars_millions
FROM global_markets.delayed_stocks_minute_aggs
WHERE toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-07-20')
AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-07-24')
GROUP BY session, session_label
ORDER BY sessionJul 20 তারিখে টেপটি 11737 সংখ্যক সিম্বলের জন্য 1.79 মিলিয়ন মিনিটের বার তৈরি করেছে এবং প্যানেলের অন্য চারটি সেশনেও একই চিত্র দেখা যায়। একটি জাতীয় বাজার, এক সপ্তাহ, একটি রেজোলিউশন। অন্য একটি বাজারের এক দশকের ডেইলি বার, ফান্ডামেন্টালস, ইনডেক্স মেম্বারশিপ এবং মানি-ফ্লো রেকর্ডের আকারও একই রকম, আর এইচটিটিপি (HTTP)-এর মাধ্যমে তা পেজিং করতে গেলে এজেন্টের রান বা কাজের সময় নষ্ট হয়।
একটি স্থানীয় ডেটা লেক একই সাথে দুটি পরিবর্তন আনে। রিড বা পড়া তখন কোটার পরিবর্তে একটি ফাইল স্ক্যান হয়ে দাঁড়ায়, এবং আজ লেখা একটি কুয়েরি ছয় মাস পরেও একই ফলাফল দেয়, যা একটি ব্যাকটেস্ট যাচাইযোগ্য হওয়ার জন্য অপরিহার্য। এআই এজেন্টদের জন্য মার্কেট ডেটা দক্ষতা এবং মার্কেট ডেটার ওপর একটি এসকিউএল (SQL) এপিআই-এর বিষয়ে আমাদের নোটগুলো ইউএস (US) ডেটার ক্ষেত্রেও একই যুক্তি তুলে ধরে।
ইনস্টল করুন, একটি ভার্সনে পিন করে রাখুন
Python 3.10 বা তার পরবর্তী ভার্সন। ভার্সনটি পিন করে রাখুন: 2026 সালের 27 জুলাই থেকে 2 আগস্টের মধ্যে ছয়টি রিলিজ এসেছে, তাই কোনো এজেন্টের সেটআপ স্ক্রিপ্টে পিন না করা ইনস্টল একটি পরিবর্তনশীল লক্ষ্যবস্তুর মতো। কোডটি rootSunc/ashare-lake-এ Apache 2.0 লাইসেন্সের অধীনে রয়েছে।
pip install ashare-lake==0.5.02026 সালের আগস্টের শুরুর দিকের বর্তমান রিলিজটি ইনস্টল করে।asl --versionইনস্টল করা বিল্ডটি প্রিন্ট করে।asl config init --data-root /path/to/ashare-lakeআপনার ডেটা রুট পূরণ করে প্যাকেজ করা TOML ফাইলটি লেখে, এর জন্য কোনো রিপোজিটরি চেকআউটের প্রয়োজন নেই।--configআউটপুট পাথ সেট করে,--forceওভাররাইট করে।asl doctorকোনো ডেটা সরানোর আগেই অফলাইনে এর চেকগুলো চালায়।asl servers testআপস্ট্রিম কোট হোস্টগুলোকে প্রোব করে।asl sourcesপ্রতিটি সোর্সকে প্রোব করে, যার একটি--vantageহলোcn,overseas, অথবাlocal।
এখানেই থামুন। পরবর্তী কমান্ডটি হলো ব্যাকফিল, এবং এটি পড়ার সময় চালু করার মতো কোনো বিষয় নয়।
ব্যাকফিল যা করে
asl init ডিরেক্টরি লেআউট তৈরি করে এবং হিস্ট্রি বা অতীতের তথ্য পূরণ করে। প্রকল্পের নথিপত্র অনুযায়ী, একটি পূর্ণাঙ্গ রান সম্পন্ন করতে কয়েক ঘণ্টা সময় এবং ডিস্কে কয়েক GB জায়গার প্রয়োজন হয়। এর জন্য একটি আপস্ট্রিম Tongdaxin কোট হোস্টের সাথে লাইভ সংযোগ থাকা আবশ্যক, যা asl servers test যাচাই করে। asl init --profile quick এর পরিবর্তে সাম্প্রতিক তিন বছরের তথ্য কয়েক মিনিটের মধ্যে সংগ্রহ করে এবং ওই সময়ের মধ্যে লেনদেন হওয়া প্রতিটি নাম সংরক্ষণ করে, এমনকি যেসব কোম্পানি বর্তমানে বাজার থেকে সরে গেছে তাদের তথ্যও এতে থাকে। asl run daily হলো পরবর্তী ইনক্রিমেন্টাল জব, asl status --datasets প্রতিটি ডেটাসেটের কভারেজ এবং ফ্রেশনেস রিপোর্ট করে এবং asl serve 127.0.0.1:8787 ঠিকানায় একটি রিড-অনলি ড্যাশবোর্ড চালু করে।
এই রিপোজিটরিতে কোনো ডেটা আগে থেকে থাকে না। প্রতিটি Parquet ফাইল আপনার মেশিনে তৈরি হয় এবং প্রতিটি সারিতে রো-লেভেল লিনিয়েজ থাকে, যা রেকর্ড করে কোন সোর্স থেকে এটি এসেছে এবং কখন তা সংগ্রহ করা হয়েছে।
39টি ডেটাসেট কী কী?
এগুলো স্তরভিত্তিক, রেফারেন্স ডেটা থেকে শুরু করে বাইরের দিকে বিস্তৃত: 36টি কিউরেটেড টেবিল এবং 3টি ডিরাইভড বা উদ্ভূত টেবিল।
- রেফারেন্স: ইনস্ট্রুমেন্ট, 2016 থেকে 2027 সাল পর্যন্ত একটি ট্রেডিং ক্যালেন্ডার এবং ট্রেডিং স্ট্যাটাস।
- মার্কেট ডেটা: ডেইলি বার, ইনডেক্স বার, 1-মিনিট ও 5-মিনিটের বার, ট্রেড টিক, কমোডিটি বার, অ্যাডজাস্টমেন্ট ফ্যাক্টর এবং ডিলিস্টিং ইভেন্ট।
- কর্পোরেট ইভেন্ট: কর্পোরেট অ্যাকশন, একটি অ্যানাউন্সমেন্ট ইনডেক্স এবং আয়ের তথ্য প্রকাশের সময়সূচী।
- ফান্ডামেন্টালস এবং ভ্যালুয়েশন: আর্থিক বিবরণীর আইটেম, ভ্যালুয়েশন মেট্রিক্স এবং অ্যানালিস্ট কনসেনসাস।
- ক্যাপিটাল ফ্লো: ফান্ড ফ্লো, মার্জিন ট্রেডিং, নর্থবাউন্ড ফ্লো এবং হোল্ডিংস, লার্জ-অর্ডার ডিসক্লোজারের ড্রাগন-টাইগার বোর্ড, ব্লক ট্রেড এবং প্রাতিষ্ঠানিক হোল্ডিং।
- স্ট্রাকচার এবং ইন্ডাস্ট্রি: সেক্টর মেম্বার, ইনডেক্স কনস্টিটুয়েন্ট, ইন্ডাস্ট্রি মেম্বার এবং ইন্ডাস্ট্রি ইনডেক্স।
- ম্যাক্রো: ম্যাক্রো ইন্ডিকেটর, মার্কেট ব্রেডথ এবং একটি ইকোনমিক ক্যালেন্ডার।
- সেন্টিমেন্ট এবং রোটেশন: সেন্টিমেন্ট স্কোর, হট র্যাঙ্ক, সেক্টর বার, সেক্টর ফান্ড ফ্লো, নিউজের শিরোনাম এবং একটি ফ্ল্যাশ নিউজ ওয়্যার।
- রিস্ক এবং কমপ্লায়েন্স: শেয়ার আনলক শিডিউল এবং রেগুলেটরি ইভেন্ট।
একটি ডেটাসেট কোথায় অবস্থান করছে তা থেকে বোঝা যায় লেখক কোন বিষয়গুলোকে গুরুত্ব দিচ্ছেন। অ্যাডজাস্টমেন্ট ফ্যাক্টর এবং ডিলিস্টিং ইভেন্টগুলোকে কোনো পরিশিষ্টে না রেখে ডেইলি বারের পাশাপাশি মার্কেট-ডেটা স্তরে রাখা হয়েছে। যারা ঐতিহাসিক তথ্যের ভিত্তিতে বিভিন্ন আইডিয়া পরীক্ষা করেন, তাদের কাছে এই বিন্যাসটিই পুরো প্রজেক্টের সবচেয়ে মূল্যবান অংশ।
How a local lake handles survivorship bias
Survivorship bias is what you get when the universe of a study is drawn from the names that are still listed today. Every company that merged, went private, or was delisted is silently absent, and the names that vanish are rarely the winners.
Our warehouse can size that hole for the US market, the same arithmetic in a different alphabet. For each year, take every symbol that printed a minute bar in the second week of March, then check which of them were still printing in the last two weeks of July 2026:
প্রতিটি সংখ্যার পেছনের সঠিক SQL
WITH on_tape_now AS (
SELECT ticker
FROM global_markets.delayed_stocks_minute_aggs
WHERE toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-07-20')
AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-07-31')
GROUP BY ticker
),
cohort AS (
SELECT toYear(toTimeZone(window_start, 'America/New_York')) AS cohort_year,
ticker
FROM global_markets.delayed_stocks_minute_aggs
WHERE toYear(toTimeZone(window_start, 'America/New_York')) BETWEEN 2016 AND 2025
AND toMonth(toTimeZone(window_start, 'America/New_York')) = 3
AND toDayOfMonth(toTimeZone(window_start, 'America/New_York')) BETWEEN 10 AND 14
GROUP BY cohort_year, ticker
)
SELECT c.cohort_year AS year,
count() AS names_on_tape_count,
countIf(n.ticker != '') AS still_trading_count,
count() - countIf(n.ticker != '') AS gone_count,
round(100 * countIf(n.ticker != '') / count(), 1) AS still_trading_pct
FROM cohort AS c
LEFT JOIN on_tape_now AS n ON c.ticker = n.ticker
GROUP BY year
ORDER BY yearOf the 8101 symbols trading that week in 2016, 50.1% were still on the tape in late July 2026, and 4040 were not. The 2025 cohort reads 86.7%. Run a screen built from today's listings backwards across those 10 years and it drops a widening share of the market as it goes.
The comfortable assumption is that the missing names were all penny stocks. Sorting the March 2021 cohort into tiers by its average daily dollar volume that month says otherwise:
প্রতিটি সংখ্যার পেছনের সঠিক SQL
WITH on_tape_now AS (
SELECT ticker
FROM global_markets.delayed_stocks_minute_aggs
WHERE toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-07-20')
AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-07-31')
GROUP BY ticker
),
march_2021 AS (
SELECT ticker,
sum(toFloat64(close) * toFloat64(volume))
/ uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS avg_daily_dollar_volume
FROM global_markets.delayed_stocks_minute_aggs
WHERE toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2021-03-01')
AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2021-03-31')
GROUP BY ticker
)
SELECT multiIf(d.avg_daily_dollar_volume >= 1000000000, '$1B or more',
d.avg_daily_dollar_volume >= 100000000, '$100M to $1B',
d.avg_daily_dollar_volume >= 10000000, '$10M to $100M',
d.avg_daily_dollar_volume >= 1000000, '$1M to $10M',
'under $1M') AS liquidity_bucket,
count() AS names_count,
countIf(n.ticker = '') AS gone_count,
round(100 * countIf(n.ticker = '') / count(), 1) AS gone_pct
FROM march_2021 AS d
LEFT JOIN on_tape_now AS n ON d.ticker = n.ticker
GROUP BY liquidity_bucket
ORDER BY min(d.avg_daily_dollar_volume)The under $1M tier lost the largest share, 57.5% of 3968 names. The busiest tier was not exempt: 3.4% of the 89 symbols trading $1B or more a day in March 2021 had left by late July 2026. Mergers, take-privates, bankruptcies, and index exits all end the same way in a price table: the rows stop.
ashare-lake treats that as a first-class problem. The instruments dataset retains delisted symbols rather than filtering down to live ones, a delisting_events table records how each departed name ended, and universe="all_a" in the Python API resolves a historical snapshot that includes them. The project's own docs report roughly a two-fold gap between a survivor-only backtest and a delisting-inclusive one over 2016 to 2021. That is the mirror image of the trap in our look-ahead bias in backtesting notes: a universe that quietly knows the future.
Point-in-time reads
load("financial_statement_items", as_of="2018-04-30") returns the latest version of each line item announced on or before that date, not the number as later restated. Bars carry an adjust argument: hfq for backward adjustment, qfq normalized inside the query window, or raw prices. A factor fitted on numbers the market had not published yet measures nothing, which is the first thing to check in any LLM generated alpha factor pipeline.
MCP সার্ভার হিসেবে নিবন্ধন
Model Context Protocol হলো সেই মাধ্যম যার মাধ্যমে একটি এজেন্ট টুলগুলো ব্যবহার করে। asl mcp এটি stdio-এর মাধ্যমে পরিচালনা করে এবং ক্লায়েন্ট প্রক্রিয়াটি চালু করে:
claude mcp add ashare-lake -- asl mcp --config /abs/path/to/ashare-lake.toml- অন্য যেকোনো MCP ক্লায়েন্ট একই দুটি উপাদান গ্রহণ করে: কমান্ড হিসেবে
aslএবং আর্গুমেন্ট হিসেবেmcp --configও একটি অ্যাবসোলিউট পাথ। পাথটি অবশ্যই অ্যাবসোলিউট হতে হবে, কারণ ক্লায়েন্ট যেকোনো ডিরেক্টরি থেকে প্রক্রিয়াটি শুরু করতে পারে।
এখানে ছয়টি টুল রয়েছে, যা ডেটাসেটের পরিবর্তে প্রশ্নের ভিত্তিতে সাজানো হয়েছে: কী বিদ্যমান এবং কীভাবে তা পড়তে হয় তার জন্য describe_lake, নামের বিপরীতে কোড পাওয়ার জন্য resolve_symbol (ডিলিস্ট হওয়া নামসহ), query_bars, as_of আর্গুমেন্টসহ query_fundamentals, অন্য সবকিছুর জন্য query_dataset এবং ডেটাসেটজুড়ে একটি রিড-অনলি DuckDB SELECT চালানোর জন্য run_sql। একটি --live ফ্ল্যাগ সার্ভারকে লেকে কোনো কিছু না লিখে আপস্ট্রিম থেকে সিম্বল লুকআপ এবং আনঅ্যাডজাস্টেড ডেইলি বারগুলোর উত্তর দেওয়ার সুযোগ দেয়।
প্রথমে যে সীমাবদ্ধতাগুলো জানা প্রয়োজন
- শুধুমাত্র A-shares। হংকং বা মার্কিন তালিকাভুক্ত কোনো শেয়ার নয়, মূল ভূখণ্ড চীনের বাইরের কোনো কিছুই এর অন্তর্ভুক্ত নয়।
- এটি একটি ব্যক্তিগত প্রকল্প। ইস্যু এবং পুল রিকোয়েস্টগুলো সাধ্যমতো দেখা হয়, তবে নথিপত্রে স্পষ্টভাবে উল্লেখ আছে যে এর কোনো নিশ্চয়তা নেই: আপস্ট্রিম সাইটগুলো পরিবর্তিত হতে পারে এবং কোনো IP ব্লক হয়ে যেতে পারে, যার ফলে কেউ প্যাচ না দেওয়া পর্যন্ত ডেটা ইনজেস্ট বন্ধ থাকবে।
- Apache 2.0 লাইসেন্স কোডের ক্ষেত্রে প্রযোজ্য, ডেটার ক্ষেত্রে নয়। প্রতিটি আপস্ট্রিম সোর্স তাদের নিজস্ব শর্তাবলী বজায় রাখে এবং মেইনটেইনার আপনার তৈরি করা Parquet ফাইলগুলো পুনঃবিতরণ বা পুনঃবিক্রির কোনো অধিকার প্রদান করেন না। যেকোনো বাণিজ্যিক ব্যবহারের আগে সোর্সের শর্তাবলী পড়ে নিন।
- এটি যেসব সোর্স থেকে ডেটা পড়ে তার জন্য কোনো অ্যাকাউন্ট বা টোকেনের প্রয়োজন হয় না, যা এর যেমন আকর্ষণীয় দিক, তেমনি এর দুর্বলতাও।
- Windows সাপোর্ট 0.3.0 ভার্সনে যুক্ত হয়েছে এবং 0.3.1 ভার্সনে Python-এর সর্বনিম্ন ভার্সন 3.10 করা হয়েছে।
এই প্রকল্পের তথ্যগুলো যেখান থেকে নেওয়া হয়েছে
ভার্সন 0.5.0, ছয়টি রিলিজের তারিখ এবং Python-এর সর্বনিম্ন ভার্সনের তথ্য প্রকল্পের PyPI রিলিজ হিস্ট্রি এবং CHANGELOG থেকে নেওয়া হয়েছে, যা 4 আগস্ট, 2026 তারিখে দেখা হয়েছে। ডেটাসেট ক্যাটালগ, ডিলিস্টিং এবং পয়েন্ট-ইন-টাইম আচরণ, CLI ফ্ল্যাগ, MCP টুলের তালিকা এবং লাইসেন্সিং ও সাপোর্টের ভাষা রিপোজিটরি ডক্স থেকে নেওয়া হয়েছে: docs/datasets/catalog.md, docs/reference/cli.md, docs/reference/mcp.md, এবং docs/legal-and-data-sources.md। সফটওয়্যার পোস্টের চেয়ে দ্রুত পরিবর্তিত হয়, তাই আপনি যে ভার্সনটি ইনস্টল করছেন তার জন্য ডক্স চেক করে নিন। দুটি সারভাইভারশিপ প্যানেল আমাদের নিজস্ব ওয়্যারহাউসে থাকা মার্কিন সিম্বলগুলো পরিমাপ করে, চীনা তালিকাভুক্ত শেয়ারগুলো নয়, এবং এগুলো A-share বাজারের পরিমাপের পরিবর্তে মেকানিজমটির একটি উদাহরণ হিসেবে কাজ করে।
সচরাচর জিজ্ঞাসিত প্রশ্নাবলী
লোকাল A-share ডেটা লেক তৈরির জন্য কি কোনো API কী (API key) প্রয়োজন?
এই ক্ষেত্রে প্রয়োজন নেই। এটি যে আপস্ট্রিম সোর্স থেকে ডেটা সংগ্রহ করে তাতে কোনো রেজিস্ট্রেশন বা টোকেনের প্রয়োজন হয় না এবং ডেটা লেকটি আপনার নিজস্ব মেশিনে সংরক্ষিত থাকে। প্রতিটি সোর্সের নিজস্ব ব্যবহারের শর্তাবলী রয়েছে, যা যেকোনো বাণিজ্যিক কাজের আগে যাচাই করে নেওয়া জরুরি।
ashare-lake ব্যাকফিল করতে কত সময় লাগে?
ডকুমেন্টেশন অনুযায়ী, সম্পূর্ণ হিস্টোরিক্যাল ডেটা ব্যাকফিল করতে কয়েক ঘণ্টা সময় এবং কয়েক GB ডিস্ক স্পেস প্রয়োজন হয়। এই পুরো প্রক্রিয়ায় আপস্ট্রিম কোট হোস্টের সাথে একটি সক্রিয় সংযোগ থাকা আবশ্যক। asl init --profile quick সাম্প্রতিক তিন বছরের ডেটা কয়েক মিনিটের মধ্যেই সংগ্রহ করে এবং এতে এমন সব কোম্পানির নামও অন্তর্ভুক্ত থাকে যেগুলো ইতিমধ্যে তালিকাচ্যুত (delisted) হয়েছে।
লোকাল A-share ডেটা লেকে কি তালিকাচ্যুত শেয়ার অন্তর্ভুক্ত থাকে?
হ্যাঁ, এতে থাকে। তালিকাচ্যুত সিম্বলগুলো ইনস্ট্রুমেন্ট ডেটাসেটে থেকে যায়, একটি delisting_events টেবিলে প্রতিটি কোম্পানির তালিকাচ্যুতির কারণ রেকর্ড করা থাকে এবং universe="all_a" একটি ঐতিহাসিক স্ন্যাপশট তৈরি করে যাতে এগুলো অন্তর্ভুক্ত থাকে। আমাদের নিজস্ব US পরিমাপ থেকে দেখা যায় যে, শুধুমাত্র টিকে থাকা কোম্পানিগুলোর ডেটা ব্যবহার করলে কতটা তথ্য বাদ পড়ে যায়।
কোনো AI এজেন্ট কি সরাসরি ashare-lake কোয়েরি করতে পারে?
হ্যাঁ। asl mcp মডেল কন্টেক্সট প্রোটোকলের (Model Context Protocol) মাধ্যমে ছয়টি টুল উন্মুক্ত করে, যার মধ্যে একটি হলো রিড-অনলি SQL টুল। ফলে এজেন্ট স্ক্র্যাপিংয়ের পরিবর্তে সরাসরি লোকাল Parquet ফাইল থেকে কোয়েরি করতে পারে। এটি claude mcp add ashare-lake -- asl mcp --config /abs/path/to/ashare-lake.toml-এর মাধ্যমে রেজিস্টার করুন।
ashare-lake কি AkShare বা Baostock-এর বিকল্প?
না। এটি তাদের ওপরের স্তরে কাজ করে। ওই লাইব্রেরিগুলো আপস্ট্রিম থেকে ডেটা সংগ্রহ করে; আর এই প্রজেক্টটি সেই সংগৃহীত ডেটাকে কিউরেটেড Parquet ফরম্যাটে সংরক্ষণ, ভার্সনিং এবং রিকনসাইল করে, যেখানে প্রতিটি ডেটাসেটের জন্য রো-লেভেল লিনিয়েজ এবং নির্দিষ্ট কন্ট্রাক্ট থাকে।
উপরে উল্লিখিত প্রতিটি সংখ্যা প্রকৃত বাজার ডেটার ওপর ভিত্তি করে সংরক্ষিত এবং ভার্সন করা কোয়েরি। যেকোনো প্যানেল প্রসারিত করে SQL দেখুন অথবা Strasmore টার্মিনালে আপনার নিজস্ব ইউনিভার্সের ওপর একই সারভাইভারশিপ চেক রান করুন।