Wyckoff method quantitative analysis system for A-shares
Project description
ðïž Wyckoff Trading Agent 3.1 â åšç§å€«äº€ææºèœäœ
ð¥ 3.1 å·²äžçº¿ â åšç§å€«å€§åžèµ°è¿äœ çåœä»€è¡
äžååªæ¯å·å°å°çéåçéèæ¬ã3.0 æäžäžªæŽ»çåšç§å€«å€§åžå¡è¿äºäœ çæµè§åšïŒ3.1 åæä»å¡è¿äºäœ çç»ç«¯ â ä»èœå¬æäœ çè¯ãè°åšä¹å€§æŠåšåºãèªäž»äž²è倿¥æšçïŒæç»ç»åº"æè¿æ¯äžæ"çæç¡®ç»è®ºã
äžå¥è¯æ»ç»ïŒäœ 诎人è¯ïŒä»è¯»çé¢ïŒå šèªåšãWeb å CLI åééã
ð ç»ç«¯çšæ·ïŒ
uv venv && source .venv/bin/activate && uv pip install youngcan-wyckoff-analysis && wyckoff
â¡ 3.1 æä»ä¹äžäžæ ·
| 绎床 | 2.xïŒèæ¬æ¶ä»£ïŒ | 3.0ïŒAgent æ¶ä»£ïŒ | 3.1ïŒåééïŒ |
|---|---|---|---|
| äº€äºæ¹åŒ | ç¹æé®ãå¡«åæ°ãçç»æ | 对è¯å³åœä»€ â Web 读ç宀 | Web + CLI åéé â ç»ç«¯éä¹èœå¯¹è¯ |
| å³çæµçš | 人工䞲èåæš¡å | LLM èªäž»çŒæ â èªåšè°è¯æâæ¥è¡æ â对æ¯âäžç»è®º | åå·ŠïŒCLI å®å šå€çš |
| å·¥å ·è°åºŠ | åºå®æµæ°Žçº¿ | 9 倧æŠåšéå«éå°ïŒè°å 次ãè°åªäžªïŒAI 宿¶å³ç | åå·Š |
| æš¡åæ¯æ | ååå | GeminiïŒADK åçïŒ | Gemini / Claude / OpenAI äžéäžïŒCLI åç倿š¡å |
| åºåº§ | æ Agent æ¡æ¶ | Google ADK â å·¥äžçº§ Agent è¿è¡æ¶ | CLI 端裞å Agent 埪ç¯ïŒé¶æ¡æ¶ |
| å®è£ | clone + pip | åå·Š | pip install youngcan-wyckoff-analysis && wyckoff |
2.x çå šéšèœåïŒäºå±æŒæãAI ç æ¥ãç§äººå³æãåæµïŒå šéšä¿çäžå·²æ¥å ¥ AgentïŒ3.x æ¯è¶ éèéæ¿ä»£ã
ð§š æ žå¿æŠåšåºïŒ9 䞪 FunctionToolïŒ
Agent äžæ¯ç©å ·ãä»¥äžæ¯åšç§å€«å€§åžæéç乿åïŒæ¯äžæéœè¿æ¥ççå®çéä»·åŒæåæ°æ®ç®¡çº¿ïŒ
| æŠåš | èœå | æäŒ€å |
|---|---|---|
ð search_stock_by_name |
åç§°/代ç /æŒé³æš¡ç³æçŽ¢ | äžç¥é代ç ïŒè¯Žååå°±è¡ |
𩺠diagnose_stock |
åè¡ Wyckoff ç»æåè¯æ | äžé®çç©¿åžç¹/掟å/markup |
ð diagnose_portfolio |
æ¹éæä»å¥åº·æ«æ | å šä»äœæ£ïŒè°è¯¥çè°è¯¥èµ° |
ð get_stock_price |
è¿æ OHLCV è¡æ | 宿¶éä»·æ°æ®çŽéå€§åžæ¡å€Ž |
ð¡ïž get_market_overview |
å€§çæ°Žæž©æŠè§ | ççäžç®äºç¶ |
ðïž screen_stocks |
äºå±æŒæå šåžåºçé | 4500â30ïŒæŽåå猩 |
ð° generate_ai_report |
äžéµè¥ AI æ·±åºŠç æ¥ | é»èŸç Žäº§/åšå€/èµ·è·³æ¿ïŒäžæ¯åºå± |
âïž generate_strategy_decision |
æä»å»ç + æ°æ ä¹°å ¥å³ç | äžèŸŸæç»äœææä»€ |
ð get_recommendation_tracking |
å岿šèååç»è¡šç° | äºåéªè¯ïŒç»äžç©é |
Agent çææéïŒäœ 诎"åž®æçç 000001 å 600519 åªäžªæŽåŒåŸä¹°"ïŒä»äŒèªäž»å³å®å
è° diagnose_stock 䞀次ãåè° get_stock_price 对æ¯è¡æ
ãæåç»Œåæšçç»åºç»è®ºãæŽäžªè¿çšæ éé¢çŒæïŒå·¥å
·è°çšé¡ºåºå次æ°ç± LLM 宿¶å³çã
äœ è¿èœåä»ä¹
| åèœ | 诎æ |
|---|---|
| ð¬ 读ç宀 | éŠé¡µå³å¯¹è¯çé¢ïŒåšç§å€«å€§åžåéââçšèªç¶è¯èšè®©ä»å®¡çãçéãè¯æãäžèŸŸå»çæä»€ïŒæ¯æäžäžæè®°å¿ |
| ð æ¯æ¥éè¡ | GitHub Actions 宿¶è· Wyckoff FunnelïŒä»äž»æ¿+åäžæ¿çéåéå¹¶æšéé£ä¹Š |
| ð çç¥æå | è§ README_STRATEGY.mdïŒå«æ žå¿éåéèæ¯è¯ã飿§å
¬åŒååå±çéææ æ§è¡å£åŸïŒ |
| ð§ æ²éæ·é | Web åå°æäº€åæ°ïŒGitHub Actions åå°æ§è¡å€å±æŒæçé |
| ð€ å€§åžæš¡åŒ | åè¡æ¬å°æ·±åºŠåæïŒé»è®€è¿ 320 äžªäº€ææ¥ïŒå«åŸè¡šçæïŒ |
| ð¶ïž ç§äººå³æ | ç»å䞪人æä»äžå€éšåéïŒçæ Buy/Hold/Sell ç§å¯æä»€ïŒTelegram åç¬åé |
| ð¡ïž RAG é²é· | åºäºæ°é»æ£çŽ¢èªåšè¿æ»€èŽé¢èæ è¡ç¥š |
| 𧪠æ¥çº¿åæµ | 蜻éåæŸ Funnel åœäžåç N æ¥æ¶çïŒèŸåºèç/åäœæ° |
| ð æ°æ®å¯Œåº | A è¡æ¥çº¿ + èªå®ä¹å¯ŒåºïŒETF/ææ°/å®è§ CPIïŒ |
| ðŒ æä»ç®¡ç | 宿¶åæ¥æä»è³äºç«¯ïŒå 眮 AI 订åå»ºè®®é¢æ¿ |
| ð¯ æšèè·èžª | å岿šèè¡ç¥šèªåšåæ¥æ¶ç价并计ç®çŽ¯è®¡æ¶ç |
| ð£ åžåºä¿¡å·æ | å€§çæ°Žæž©ãA50ïŒçåé£åæ ïŒäž VIXïŒææ ææ°ïŒé¡¶éšäžæ å°œè§ |
| ð ç»åœäžé 眮 | é£ä¹Š/äŒåŸ®/éé Webhook åå€åå API Key äºç«¯åæ¥ |
ð§ Wyckoff éä»·åæ Skills
åŠæäœ åªæ³æè¿å¥ Wyckoff éä»·åææè·¯ ä»¥èœ»éæ¹åŒå€çšå° OpenClaw / AI AgentïŒå¯ä»¥çŽæ¥äœ¿çšè¿äžªç®æ Skills ä»åºïŒ
- ä»åºå°åïŒ
YoungCan-Wang/wyckoff_skill - å®äœïŒå°åšç§å€«éä»·åæçæ žå¿æç€ºè¯ãå€ææ¡æ¶ãèŸåºå£åŸææå¯å€çšçç®æ Skill
- éååºæ¯ïŒåè¡å€çãæä»è¯æãåéè¡ç»æå€æãç» AI å©æå¿«éæèœœäžå¥"åšç§å€«è§è§"
ð å¿«éåŒå§
1. ç¯å¢
éèŠ Python 3.11+ã
cd Wyckoff-Analysis
python3 -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
python -m pip install -U pip
python -m pip install -r requirements.txt
2. é 眮
å€å¶ .env.example 䞺 .envïŒå¡«å
¥ïŒ
SUPABASE_URLãSUPABASE_KEYïŒç»åœçšïŒé¡¹ç®äŸèµ SupabaseïŒFEISHU_WEBHOOK_URLïŒå¯éïŒïŒé£ä¹Šæšéå°åïŒå¯éWECOM_WEBHOOK_URLãDINGTALK_WEBHOOK_URLå®ç°äŒåŸ®/ééæšé- 倧暡åïŒå¯é
眮
GEMINI_API_KEYæ OpenAI/æºè°±/Minimax/DeepSeek/Qwen çååç API Key äžæš¡åïŒè§è®Ÿçœ®é¡µïŒ
Tushare æ³šåæšèïŒå¯éè¿ æ€éŸæ¥æ³šåïŒåæ¹å¯äžèµ·æåè·åæŽé«çº§è¡ç¥šæ°æ®çæçã
3. è¿è¡
Web çé¢ïŒæåŒæµè§åšïŒçŽæ¥è·åšç§å€«å€§åžå¯¹è¯ã
streamlit run streamlit_app.py
ç»ç«¯ CLIïŒæšèïŒïŒè£ å®å³çšïŒäžéèŠ clone ä»åºã
# å®è£
uv venv
source .venv/bin/activate
uv pip install youngcan-wyckoff-analysis
# è¿è¡
wyckoff # å¯åšç»ç«¯è¯»ç宀
wyckoff update # åçº§å°ææ°ç
å¯åšååš TUI å 亀äºåŒé 眮ïŒ
/modelâ éæ© ProviderïŒGemini / Claude / OpenAI åå Œå®¹ç«¯ç¹ïŒãèŸå ¥ API Keyãéæ©æš¡åïŒé 眮èªåšä¿å/loginâ ç»åœèŽŠå·ïŒæéæä»åäºç«¯åè¯ïŒç»åœæèªåšä¿æ- çŽæ¥èŸå ¥é®é¢åŒå§å¯¹è¯
ç»ç«¯å
æ¯æïŒäžäžç®å€Žç¿»é
åå²ã/ åœä»€ Tab è¡¥å
šã/help /clear /quitã
åœä»€è¡å¯ŒåºïŒæ¹éå¯Œåº CSVã
python -m integrations.fetch_a_share_csv --symbol 300364
python -u -m integrations.fetch_a_share_csv --symbols 000973 600798 601390
ð æ¯æ¥éè¡ïŒWyckoff FunnelïŒ
ä»å šåžåºïŒäž»æ¿ + åäžæ¿ïŒå€èœ®è¿æ»€ïŒæç»èŸåºé«èççç²ŸèŠæ çïŒç»è¿éåå猩åäº€ç± AI ç å€å¹¶æšéå°é£ä¹Šã æ°Žæž©å€æåæ¶åèææ°è¶å¿ + åžåºå¹¿åºŠïŒç«äž MA20 å æ¯ïŒïŒåŒ±åžäŒèªåšæ¶çާçéäžä¹°å ¥å®¹å¿åºŠã
ä» v2.0.0 èµ·ïŒWeb 端äžåæ¬å°éç®æŒæã
Streamlit 页é¢èŽèŽ£æäº€è¡ç¥šæ± ååæ°ïŒçæ£çå
šéåæ°ãæŒæè®¡ç®ãAI åéæŽçç± GitHub Actions åå°æ§è¡ïŒé¡µé¢åªå±ç€ºè¿è¡ç¶æå蜻éç»ææèŠã
æŒæçéé»èŸïŒäºå±æŽåå猩ïŒ
| å±çº§ | åç§° | åä»ä¹ |
|---|---|---|
| Layer 1 | å¥çŠ»ååŸ | åé€ ST/å亀æ/ç§åæ¿ïŒä¿çåžåŒ ⥠35 äº¿ãæ¥åæäº€é¢ ⥠5000 äž |
| Layer 2 | å 倧ç¬ç«ééçé | â äž»å â¡ ç¹ç« ⢠æœäŒ ⣠åžç¹ †å°é ⥠æ€ç â å è·¯å æïŒæ æ»è§ |
| Layer 2.5 | Markup è¯å« | MA50 äžç©¿ MA200 + è§åºŠéªè¯ â æ 泚已è¿å ¥äžåè¶å¿ |
| Layer 3 | æ¿åå ±æ¯ | è¡äžååž Top-NïŒçéäžçéšæ¿åå ±æ¯çæ ç |
| Layer 4 | åšç§å€«åŸ®è§çå» | SpringïŒç»æéä»ïŒãLPSïŒæçŒ©éåèž©ïŒãSOSïŒäœäœæŸéç¹ç«ïŒãEVRïŒé«äœæŸéäžè·ïŒ |
| Layer 5/AI | äžéµè¥ AI å®¡å€ | LLM ç¬ç«å®¡è®¯ â "é»èŸç Žäº§ / åšå€è¥å° / å€äºèµ·è·³æ¿"äžæ¯åºå± |
å¯çšæ¹åŒ
ä»åºå
çœ®å·¥äœæµïŒ.github/workflows/wyckoff_funnel.yml
- 宿¶ïŒå京æ¶éŽåšæ¥å°åšå 18:25
- æåšïŒActions 页é¢éæ©
Wyckoff FunnelâRun workflow
Web 端åå°ä»»å¡æ¶æ
ä»åºå
眮äžéšç» Streamlit 页é¢äœ¿çšçåå°å·¥äœæµïŒ.github/workflows/web_quant_jobs.yml
Wyckoff Funnel页é¢ïŒæäº€åå°æŒæçéä»»å¡AI åæé¡µé¢ïŒæäº€åå°æ¹éç æ¥æèŸå ¥é¢æŒä»»å¡- 页é¢è莣ïŒè§Šåå·¥äœæµã蜮询è¿è¡ç¶æã读å artifact ç»æ
- åå°èèŽ£ïŒæå šé OHLCVãè·æŒæãè°çšæš¡åã产åºèœ»é JSON ç»æ
è¿æ ·åçç®çïŒæ¯ææèå åãæå®¹æè¶ æ¶çéŸè·¯ä» Streamlit Community Cloud è¿çšé移走ã
é 眮 GitHub Secrets
Settings â Secrets and variables â ActionsïŒæ·»å ïŒ
| åç§° | å¿ å¡« | 诎æ |
|---|---|---|
GEMINI_API_KEY |
æ¯ | AI ç æ¥äžå¯¹è¯ AgentïŒæäœ¿çš DEFAULT_LLM_PROVIDER + 对åºåå KeyïŒ |
TUSHARE_TOKEN |
æ¯ | è¡æ äžåžåŒæ°æ® |
DEFAULT_LLM_PROVIDER |
åŠ | 宿¶ä»»å¡äœ¿çšçååïŒgemini / openai / zhipu / minimax / deepseek / qwenïŒæªé
å gemini |
FEISHU_WEBHOOK_URL |
åŠ | é£ä¹Šæšéå°åïŒæªé åè·³è¿é£ä¹Šéç¥ (é 眮æçš) |
WECOM_WEBHOOK_URL |
åŠ | äŒåŸ®çŸ€æºåšäºº Webhook |
DINGTALK_WEBHOOK_URL |
åŠ | ééèªå®ä¹æºåšäºº Webhook |
GEMINI_MODEL |
åŠ | æªé
åçšé»è®€æš¡åïŒå
¶ä»ååå¯é
OPENAI_MODELãZHIPU_MODEL ç |
SUPABASE_URL |
Step4 çš | åŠïŒèµ° USER_LIVE:<user_id> è·¯åŸæ¶éèŠïŒ |
SUPABASE_KEY |
â | Supabase å¿å KeyïŒèæ¬äŸ§å¯äœäžºè¯»åå åºã |
SUPABASE_SERVICE_ROLE_KEY |
â | Supabase 管çå KeyïŒè¥ Step4 éèŠçš³å®è¯»åïŒå»ºè®®äŒå é 眮ã |
SUPABASE_USER_ID |
â | çšæ·éå®ïŒæå® Step4 è¿è¡çç®æ çšæ· IDã |
MY_PORTFOLIO_STATE |
â | æ¬å°èŽŠæ¬å
åºïŒè¥ USER_LIVE:<user_id> äžå¯çšïŒå¯çš JSON å笊䞲é
眮æä» (æ ŒåŒè§ .env.example)ã |
TG_BOT_TOKEN |
â | ç§å¯æšéïŒTelegram Bot TokenïŒçšäºæ¥æ¶ç§å¯äº€æå»ºè®®ã |
TG_CHAT_ID |
â | Telegram Chat IDã |
TAVILY_API_KEY |
â | é²é·ïŒçšäº RAG æ°é»æ£çŽ¢ (Tavily)ïŒæšèé 眮ã |
SERPAPI_API_KEY |
â | é²é·å€çšïŒTavily æäºæ¶èªåšåæ¢å° Google News (SerpApi)ã |
æç€ºïŒä»¥äžé 眮åªåšäœ éèŠå¯¹åºåèœæ¶æéå¡«åãæåºç¡è¿è¡ä» é
GEMINI_API_KEY+TUSHARE_TOKENãIM éç¥æž éïŒé£ä¹Š/äŒåŸ®/ééïŒå䞺å¯éïŒæªé 眮æ¶çéåç æ¥ä»æ£åžžæ§è¡ïŒä» è·³è¿æ¶æ¯æšéã
Web 端åå°ä»»å¡æé Streamlit Secrets
åŠæäœ åžæåš Streamlit 页é¢éçŽæ¥ç¹æé®è§Šååå°æŒææåå°æ¹é AIïŒè¿éèŠåš Streamlit Secrets äžé 眮ïŒ
| åç§° | å¿ å¡« | 诎æ |
|---|---|---|
GITHUB_ACTIONS_TOKEN |
æ¯ | GitHub API TokenïŒçšäºè§Šå workflow_dispatch 并读å Actions è¿è¡ç»æ artifact |
GITHUB_ACTIONS_REPO_OWNER |
åŠ | é»è®€ YoungCan-Wang |
GITHUB_ACTIONS_REPO_NAME |
åŠ | é»è®€ Wyckoff-Analysis |
GITHUB_ACTIONS_REF |
åŠ | é»è®€ main |
GITHUB_ACTIONS_WORKFLOW_FILE |
åŠ | é»è®€ web_quant_jobs.yml |
GITHUB_ACTIONS_ALLOWED_USER_IDS |
åŠ | éå·åéççšæ· ID çœååïŒé 眮åä» çœåå莊å·å¯åšé¡µé¢éè§Šååå°ä»»å¡ |
æšè䜿çšç»ç²åºŠåä»åº TokenïŒè³å°æäºïŒ
Actions: Read and writeContents: Read
éªè¯
è·äžæ¬¡æåšè§ŠååïŒæ£æ¥ïŒ
- æ¥å¿äžæ
é¶æ®µæ±æ»äžok=True - Artifacts äžæ
daily-job-logs-* - é£ä¹Šæ¶å°æŒæç»æ + ç æ¥
åžžè§è·å®çºŠ 90ïœ130 åéãæ¥éæ¶çæ¥å¿é猺åªäžªé 眮ã
æ¥çº¿åæµïŒèœ»éïŒ
äžäŸèµåé级åé«ä»·æ°æ®æºïŒçŽæ¥åæŸ Funnel åœäžåçæªæ¥ N æ¥è¡šç°ïŒ
python -m scripts.backtest_runner \
--start 2025-01-01 \
--end 2025-12-31 \
--hold-days 15 \
--top-n 3 \
--trading-days 320 \
--board all \
--exit-mode sltp \
--stop-loss -9 \
--take-profit 0 \
--sample-size 300 \
--output-dir analysis/backtest
åœåèæ¬é»è®€åŒæ¯ --hold-days 15 --top-n 3 --exit-mode sltp --stop-loss -9 --take-profit 0ã
äº€ææ¥çªå£é»è®€æ¯ --trading-days 320ãè¥èŠåææåšæå¯¹æ¯ïŒå»ºè®®åå«åæµ 15 / 30 / 45 / 60 åæ¡£ã
åæµåå·®å£åŸè¯ŽæïŒéèŠïŒïŒ
- é»è®€å ³éåœåæªé¢åžåŒ/è¡äžæ å°è¿æ»€ïŒéäœ look-ahead biasïŒã
- è¥äœ èŠå€ç°æ§å£åŸïŒå¯æŸåŒå
--use-current-metaïŒäŒåŒå ¥åè§åå·®ïŒä» çšäºå¯¹æ¯ïŒã - æ 论æ¯åŠåŒå¯ïŒä»ååšå¹žåè åå·®ïŒè¡ç¥šæ± æ¥èªåœååšåžååïŒã
- åæµé»è®€çº³å
¥åèŸ¹æ©æŠææ¬ïŒ
--buy-friction-pct 0.2 --sell-friction-pct 0.2ïŒå¯æåžåäžæ»ç¹å®åµè°æŽïŒã
èŸåºæä»¶ïŒ
summary_*.mdïŒæ¶çç»è®¡ + é£é©ç»è®¡ïŒæå€§åæ€ãVaR95ãCVaR95ãæé¿è¿äºïŒtrades_*.csvïŒéç¬ä¿¡å·æ¶çæç»
åžžè§æ¥é
é 眮猺倱: GEMINI_API_KEY- åå ïŒæªé 眮暡å Key æå·²å€±æ
- å€çïŒæŽæ°
GEMINI_API_KEYåéè·
åžåŒæ°æ®äžºç©ºïŒTUSHARE_TOKEN å¯èœçŒºå€±/倱æïŒ- åå ïŒ
TUSHARE_TOKEN猺倱/倱æ/é¢åºŠé®é¢ - å€çïŒæ£æ¥å¹¶æŽæ°
TUSHARE_TOKENïŒç¡®è®€èŽŠå·æé
- åå ïŒ
[step3] æš¡å ... 倱莥/llm_failed- åå ïŒæš¡åäžå¯çšãéæµãçœç»æåš
- å€çïŒæŽæ¢
GEMINI_MODELæçšåéè¯
[step3] é£ä¹Šæšé倱莥/feishu_failed- åå ïŒWebhook æ æãéæµãçœç»é®é¢
- å€çïŒéæ°çæé£ä¹Šæºåšäºº Webhook å¹¶æ¿æ¢ Secret
Step4 ç§äººå平衡: è·³è¿ïŒSUPABASE_USER_ID æªé 眮/çšæ·æä»çŒºå€±ïŒ- åå ïŒæªé
眮
SUPABASE_USER_IDïŒæUSER_LIVE:<user_id>/MY_PORTFOLIO_STATEéœäžå¯çš - å€çïŒåš Secrets é
眮
SUPABASE_USER_IDïŒäŒå ä¿è¯ Supabase æUSER_LIVE:<user_id>ïŒå¿ èŠæ¶æäŸMY_PORTFOLIO_STATEå åº
- åå ïŒæªé
眮
Step4 ç§äººå平衡: è·³è¿ïŒTG_BOT_TOKEN/TG_CHAT_ID æªé 眮ïŒ- åå ïŒTelegram Secret æªé 眮
- å€çïŒé
眮
TG_BOT_TOKENåTG_CHAT_IDåéè·
User location is not supported for the API use- åå ïŒæš¡åå°åéå¶
- å€çïŒæŽæ¢å¯çšçœç»åºå£æäŸåºå
Action è¶ æ¶æææŸæ ¢äº 2 å°æ¶- åå ïŒæ°æ®æºæåšãéè¯åå€
- å€çïŒæ¥çæ¹æ¬¡æ¥å¿å®äœå¡ç¹ïŒå¿ èŠæ¶æåšéè·
ç§äººå³æïŒå¯éïŒ
Step4 å®å
šç± GitHub Actions Secrets 驱åšïŒè¯»å SUPABASE_USER_ID å®äœ USER_LIVE:<user_id>ïŒè¯»å TG_BOT_TOKEN/TG_CHAT_ID æšé TelegramïŒæš¡åäœ¿çš GEMINI_API_KEY/GEMINI_MODELãè¥ Supabase æä»çŒºå€±å¯çš MY_PORTFOLIO_STATE åå
åºã
亀æµ
é£ä¹ŠçŸ€äºç»Žç
é£ä¹Šäžªäººäºç»Žç
â èµå©äžæ¯æ
åäœè¡åïŒè§åŸè¿äžªèæ¬çéçè¡ç¥šåœ¢æåŸåŸæšå¿ïŒèŸèŠç»äžªååïŒç¹äžªstarãåŠæè¿äžªåå©è¿äžªèæ¬èµå°é±äºïŒä¹æ¬¢è¿èµå©äœè äžé¡¿æ±å ¡ïŒå级äžå€§æš¡ååè¡ç¥šæ°æ®ïŒéåžžæè°¢
| æ¯ä»å® (Alipay) | 埮信æ¯ä» (WeChat) |
|---|---|
ð€ ç³»ç»æ¶æ
äžäžªäŒæèç倧è + äžæ¡äžç¥ç²åŠçæµæ°Žçº¿
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â ðïž WYCKOFF TRADING AGENT 3.1 · System Panorama â
ââââââââââââââââââââââââââââââââââââ€ââââââââââââââââââââââââââââââââââââââââââââââââââââ
â
ââââââââââââââââââââââŒâââââââââââââââââââââ
⌠⌠âŒ
ââââââââââââââââââââ ââââââââââââââââââââ ââââââââââââââââââââ
â Streamlit Web UI â â CLI Terminal â â GitHub Actions â
â Reading Room â â wyckoff cmd â â cron Pipeline â
ââââââââââ¬ââââââââââ ââââââââââ¬ââââââââââ ââââââââââ¬ââââââââââ
â â â
⌠⌠âŒ
âââââââââââââââââââââââââââââââââââââ âââââââââââââââââââââââââââââââââââââ
â ð§ AGENT BRAIN â â âïž ETL PIPELINE â
â Web: Google ADK · CLI: 裞å â â GitHub Actions · cron â
â â â â
â âââââââââââââââââââââââââââââââ â â âââââââââââââââââââââââââââââââ â
â â wyckoff_advisor â â â â Step 2 Funnel Screening â â
â â LlmAgent â â â â Step 3 AI Battle Report â â
â â Wyckoff Master Persona â â â â Step 4 Rebalance & Push â â
â â â â â âââââââââââââââââââââââââââââââ â
â â Intent â Tools â Reason â â â â
â â Autonomous Multi-step â â â Sun-Thu 18:25 CST · Manual â
â ââââââââââââââââ¬âââââââââââââââ â â Deterministic · No autonomy â
â â â ââââââââââââââââââ¬âââââââââââââââââââ
â ââââââââââââââââŽâââââââââââââââ â â
â â 9 FunctionTools Arsenal â â â
â â â â â
â â search diagnose port. â â â
â â price overview funnel â â â
â â report strategy track â â â
â ââââââââââââââââ¬âââââââââââââââ â â
âââââââââââââââââââŒââââââââââââââââââ â
â â
ââââââââââââââââ¬âââââââââââââââââââââââââââ
â
ââââââââââââââââââââŽâââââââââââââââââââ
â ð§ CORE ENGINE â
â â
â wyckoff_engine ····· 5-Layer Funnel â
â funnel_pipeline ··· Market Sweep â
â batch_report ······ 3-Camp Verdict â
â strategy ·········· Trade Decision â
â holding_diagnostic Health Check â
â prompts ··········· Prompt Arsenal â
â sector_rotation ··· Sector Radar â
âââââââââ¬âââââââââââââââ¬âââââââââ¬âââââââ
â â â
ââââââââââââ â ââââââââââââ
⌠⌠âŒ
ââââââââââââââââââââââ ââââââââââââââââââââââ ââââââââââââââââââââââ
â ð¡ DATA SOURCES â â ð€ LLM x 8 â â âïž CLOUD STORE â
â â â â â â
â tushare â
â â Gemini â
â â Supabase â
â â akshare â â OpenAI â â Portfolio â
â â baostock â â DeepSeek â â Recommendation â
â â efinance â â Qwen · Kimi â â Settings â
â â â Zhipu · Volc â â Hist Cache â
â auto-fallback â â Minimax â â â
ââââââââââââââââââââââ âââââââââââ¬âââââââââââ ââââââââââââââââââââââ
â
âââââââââââââââââââââŽââââââââââââââââââââ
â ð£ NOTIFICATIONS â
â â
â Feishu · WeCom · DingTalk · TG â
ââââââââââââââââââââââââââââââââââââââââââ
Agent å³çæµè¯Šè§£
çšæ·è¯Žäžå¥è¯ïŒAgent èªäž»å®æå šéšæšçââé¶é¢çŒæïŒçº¯ LLM 宿¶å³çïŒ
"åž®æçç 000001 å 600519 åªäžªæŽåŒåŸä¹°"
â
âŒ
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â wyckoff_advisor (Google ADK LlmAgent) â
â â
â 1. çè§£æåŸ âââ "çšæ·èŠå¯¹æ¯äž€åªè¡ç¥š" â
â â
â 2. èªäž»è°åºŠ âââ diagnose_stock("000001.SZ") âââ åžç¹æ«æ â
â âââ diagnose_stock("600519.SH") âââ Markup äžæ®µ â
â âââ get_stock_price("000001.SZ") âââ è¿æéä»· â
â âââ get_stock_price("600519.SH") âââ è¿æéä»· â
â â
â 3. ç»Œåæšç âââ 对æ¯ç»æãéä»·ãé£é©æ¶çæ¯ â
â â
â 4. èŸåºç»è®º âââ "000001 å€äº Spring ç¡®è®€é¶æ®µïŒèçæŽé«..." â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
äŒè¯ç®¡ç
| å±çº§ | å®ç° | 诎æ |
|---|---|---|
| Session | InMemorySessionService |
è¿çšå ååšïŒéå¯äž¢å€± |
| State | session.state |
ååš user_idãå奜 provider çäžäžæ |
Pipeline æ§è¡æµ
宿¶å
šåžåºçéïŒ.github/workflows/wyckoff_funnel.ymlïŒïŒç¡®å®æ§ ETL + 䞀次 LLM è°çšïŒ
cron (Sun-Thu 18:25 CST) / manual dispatch
â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
âââââ Step 2 · FUNNEL â
â â Market Regime + ~4500 A-shares OHLCV â 5-layer â ~30 â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
âââââ Step 3 · REPORT â
â â Prompt + 1x LLM call â 3-camp Markdown battle report â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
âââââ Step 4 · REBALANCE â
â Prompt + 1x LLM call â Hold/Sell/Buy JSON â OMS â Push â
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
| æ¥éª€ | ä»£ç æš¡å | æ¬èŽš |
|---|---|---|
| Funnel + Regime | core/funnel_pipeline.py â wyckoff_engine.py + market_regime.py |
ç¡®å®æ§éä»·è®¡ç® |
| Report | step3_batch_report.py â core/batch_report.py |
忬¡ LLM è°çš |
| Rebalance | step4_rebalancer.py â core/strategy.py |
忬¡ LLM + OMS 飿§ |
LLM ProviderïŒ8 倧ååå šéïŒ
- Web AgentïŒé»è®€ GeminiïŒADK åçïŒïŒå¯éè¿ LiteLLM æ¡¥æ¥åæ¢
- CLI AgentïŒGemini / Claude / OpenAI äžéäžïŒTUI å
/modelåæ¢ïŒæ¯æä»»æ OpenAI å Œå®¹ç«¯ç¹ - PipelineïŒéè¿
llm_client.pyå€ provider çŽè¿
| Provider | ç¶æ | 诎æ |
|---|---|---|
| Gemini | â äž»å | Agent gemini-2.5-flash / Pipeline gemini-3.1-flash-lite-preview |
| OpenAI | â | GPT-4o / GPT-4o-mini |
| DeepSeek | â | DeepSeek-Chat |
| Qwen | â | DashScope OpenAI-compatible |
| Kimi | â | moonshot-v1 |
| Zhipu | â | GLM-4 |
| Volcengine | â | Doubao/ARK |
| Minimax | â | abab ç³»å |
éåœ
ç®åœç»æ
.
âââ streamlit_app.py # Web å
¥å£ â æºèœå¯¹è¯éŠé¡µïŒGoogle ADK Chat AgentïŒ
âââ app/ # UI ç»ä»¶ïŒlayout/auth/navigationïŒ
â âââ background_jobs.py # Streamlit 䟧åå°ä»»å¡ç¶æç®¡ç
â âââ ...
âââ cli/ # ð¥ïž ç»ç«¯ CLI AgentïŒè£žåïŒé¶æ¡æ¶ïŒ
â âââ __main__.py # å
¥å£ïŒwyckoff åœä»€ / python -m cli
â âââ agent.py # æ žå¿ Agent 埪ç¯ïŒthink â tool_call â execute â thinkïŒ
â âââ providers/ # 倿š¡åéé
å±
â â âââ base.py # LLMProvider æœè±¡æ¥å£
â â âââ gemini.py # GeminiïŒgoogle-genai SDKïŒ
â â âââ claude.py # ClaudeïŒanthropic SDKïŒ
â â âââ openai.py # OpenAIïŒopenai SDKïŒæ¯æèªå®ä¹ base_urlïŒ
â âââ auth.py # 讀è¯ïŒSupabase ç»åœ + session æä¹
åïŒ
â âââ tools.py # å·¥å
·æ³šå衚ïŒå€çš chat_tools.pyïŒToolContext shimïŒ
â âââ ui.py # ç»ç«¯ UIïŒrich Markdown + prompt_toolkitïŒ
âââ agents/ # ð€ å¯¹è¯ Agent å±ïŒGoogle ADKïŒ
â âââ wyckoff_chat_agent.py # å¯¹è¯ Agent å®ä¹ïŒADK LlmAgentïŒåšç§å€«äººæ ŒïŒ
â âââ chat_tools.py # 9 䞪 FunctionTool â å
è£
åŒæèœåç»å¯¹è¯ Agent
â âââ session_manager.py # äŒè¯ç®¡çïŒADK Runner + InMemorySessionServiceïŒ
âââ core/ # æ žå¿çç¥äžé¢åé»èŸ
â âââ wyckoff_engine.py # Wyckoff å€å±æŒæåŒæïŒå
ééL2 + Markup L2.5ïŒ
â âââ prompts.py # AI æç€ºè¯ïŒæå§äŒ / æŒæ / ç§äººå³æ / å¯¹è¯ AgentïŒ
â âââ sector_rotation.py # æ¿å蜮åšåæ
â âââ holding_diagnostic.py # æä»è¯æ
â âââ stock_cache.py # è¡ç¥šæ°æ®çŒå
â âââ constants.py # åžžéå®ä¹
âââ integrations/ # æ°æ®æº/LLM/Supabase éé
å±
â âââ data_source.py # ç»äžæ°æ®æºïŒtushare â akshare â baostock â efinanceïŒ
â âââ llm_client.py # LLM 客æ·ç«¯ïŒåçå€ providerïŒ
â âââ stock_hist_repository.py # Supabase çŒå + gap-fill
â âââ supabase_client.py # Supabase äºç«¯åæ¥
â âââ supabase_portfolio.py # çç¥æä»åæ¥
â âââ supabase_recommendation.py # æšèè·èžª
â âââ rag_veto.py # RAG é²é·æš¡å
â âââ github_actions.py # GitHub Actions è§Šåäžç»ææ¥è¯¢
âââ pages/ # Streamlit 页é¢
â âââ Export.py # æ°æ®å¯ŒåºïŒA è¡ CSV + 跳蜬èªå®ä¹å¯ŒåºïŒ
â âââ AIAnalysis.py # å€§åžæš¡åŒïŒåè¡æ·±åºŠåæ + åŸè¡šçæïŒ
â âââ WyckoffScreeners.py # æ²éæ·éïŒåå°æŒæçéïŒé«çº§åæ°è°äŒïŒ
â âââ Portfolio.py # æä»ç®¡ç
â âââ RecommendationTracking.py # æšèè·èžª
â âââ CustomExport.py # èªå®ä¹å¯ŒåºïŒETF/ææ°/å®è§ CPIïŒ
â âââ Settings.py # 讟眮
â âââ Changelog.py # çæ¬æŽæ°æ¥å¿
âââ scripts/
â âââ daily_job.py # 宿¶ä»»å¡å
¥å£ïŒGH Actions cron è°çšïŒ
â âââ wyckoff_funnel.py # å
šåžåºæŒæçé
â âââ step3_batch_report.py # AI ç æ¥
â âââ step4_rebalancer.py # ç§äººå³æ
â âââ web_background_job.py # Web åå°ä»»å¡æ§è¡å
¥å£
â âââ premarket_risk_job.py # çå飿§é¢èŠ
â âââ backtest_runner.py # æ¥çº¿èœ»éåæµ
âââ tools/ # å¯å€çšå·¥å
·åœæ°ïŒAgent / scripts å
±äº«ïŒ
â âââ data_fetcher.py # æ°æ®æåèŸ
å©
â âââ report_builder.py # ç æ¥æŒè£
èŸ
å©
â âââ debug_io.py # æš¡åèŸå
¥èœçïŒDEBUG_MODEL_IOïŒ
â âââ ...
âââ tests/
â âââ agents/ # Agent 屿µè¯
â âââ ... # ç°æåå
æµè¯
âââ requirements.txt
âââ .env.example
çåé£é©äžåžåºä¿¡å·æ
- çå飿§ä»»å¡äŒç»Œå
A50 + VIX倿å€éšé£é©ïŒå¹¶èŸåºNORMAL / CAUTION / RISK_OFF / BLACK_SWANåæ¡£ç»æã - Web 端äŒå°"çåå€§çæ°Žæž©"äž"çåå€éšé£é©"èåæäžæ¡é¡¶éšåžåºä¿¡å·æ ïŒç»äžæ"ææ°äº€ææ¥"å£åŸå±ç€ºïŒäžèŠæ±çšæ·çè§£å éšå·¥çšæ çŸã
- 页é¢å±ç€ºéçš A è¡åžžçšé¢è²ä¹ æ¯ïŒäžæ¶šå红ãäžè·å绿ïŒVIX ææ æ¬åä¹äŒæé²å®æ¹åæŸç€ºã
äº€ææ¥äžæ¶éŽçªå£
æäº€ææ¥è®¡ç®ïŒèªåšè·³è¿åšæ«äžè忥ã
- ç»ææ¥ïŒå京æ¶éŽå£åŸïŒïŒ
17:00-23:59â åTïŒåœå€©ïŒ00:00-16:59â åT-1ïŒäžäžèªç¶æ¥ïŒ
- æç»äŒå¯¹éœå°æè¿äº€ææ¥ïŒèªåšè·³è¿åšæ«äžè忥ïŒ
- åŒå§æ¥ïŒä»ç»ææ¥åååæº¯ N äžªäº€ææ¥ïŒé»è®€ 320ïŒ
- åæ°ïŒ
--trading-daysã--end-offset-days
CSV èŸåºè¯Žæ
- hist_data.csvïŒakshare åå§åæ®µïŒæ¥æãåŒé«äœæ¶ãæäº€éãæäº€é¢ãæ¯å¹ ãæ¢æççïŒ
- ohlcv.csvïŒå¢åŒºçïŒOHLCV + åä»·ãè¡äžïŒïŒäŸ¿äºåæµäžå¯è§å
倿
--adjustïŒ"" äžå€æïŒqfq å倿ïŒhfq å倿ã
python -m integrations.fetch_a_share_csv --symbol 300364 --adjust qfq
åžžè§é®é¢
- ImportError: create_client from supabase â
pip install supabase>=2.0.0 - macOS pip externally-managed-environment â çšèæç¯å¢å®è£ äŸèµ
- æä»¶åæç©ºæ Œ â è¡ç¥šåæ¬èº«åžŠç©ºæ ŒïŒèæ¬äŒåå®å šæ¿æ¢
AI åæïŒAlpha èææå§äŒ
Web 端æäŸãAI åæã页é¢ïŒéçšãAlphaãèææå§äŒæš¡åŒïŒç±äžäœåå²çº§äº€æå€§åžäººæ Œå ±åå³çã
åœåæ§è¡å£åŸïŒ
- 对è¯åŒåæïŒéè¿éŠé¡µæºèœå¯¹è¯ïŒçšèªç¶è¯èšè§Šå䞪è¡è¯æãç æ¥çæçåæèœå
- åè¡åæïŒåš AI åæé¡µé¢å æ¬å°æ§è¡ïŒéå蜻éã峿¶äº€äº
- æ¹é代ç åæïŒæ¹äžº GitHub Actions åå°æ§è¡
- æŒæåéåæïŒå åšåå° Funnel 页åŸå°åéïŒååš AI 页æäº€åå°æ¹éç æ¥
对è¯åŒåæååè¡åæä¿ç峿¶æ§ïŒæ¹é OHLCV åæš¡åäžäžæä» Community Cloud å åé移走ã
倧åžåå·¥åŠäžïŒ
| å€§åž | è莣 |
|---|---|
| ð éæ°äžèŸç¥ç¹ | å®è§å®å¿ïŒå€æçåž/çåžäž»è¶å¿ |
| ð° 圌åŸÂ·æå¥ | ä»·åŒéè§ïŒPEG 䌰åŒïŒå 倧è¡ç¥šåç±» |
| ðµïž çæ¥åŸ·Â·åšç§å€« | äž»å䟊å¯ïŒåžç¹/掟åé¶æ®µå€æïŒäŸéæ³å |
| ð çŒ äžè¯ŽçŠ | ç»æç²Ÿç®ïŒäžæ¢ãèé©°ãä¹°åç¹æ°åŠå®äœ |
| ð¥ æ 绪æµéŸå€Žææ³ | æ 绪ååŒïŒåšæå®äœïŒéŸå€Žè¯å« |
| ð æ°è¥¿Â·å©åŒè«å° | å ³é®æ¶æºïŒå ³é®ç¹çªç Žç¡®è®€ |
| ð¯ïž å²è倫·尌森 | 埮è§ä¿¡å·ïŒè¡çåŸå蜬圢æ |
RAG é²é·ïŒèŽé¢èæ è¿æ»€ïŒ
æ¯æ¥éè¡æµçšäžéæ RAG é²é·æš¡åïŒèªåšè¿æ»€æèŽé¢èæ çè¡ç¥šïŒ
- æ°æ®æºïŒTavily æ°é»æçŽ¢ïŒåŠæªé 眮åè·³è¿ïŒ
- é»è®€èŽé¢å ³é®è¯ïŒç«æ¡ãè°æ¥ãè¯çäŒãå€çœãè¿è§ãé åãéåžãåæã莚æŒçä»ãåºå¡è¿çºŠãäžç»©é¢äºãäžç»©äžæ»ãåèªååŒãè¯è®Œã仲è£ãå»ç»ç
- é
眮ïŒ
TAVILY_API_KEYç¯å¢åé
æ°æ®æºé级æºå¶
äžªè¡æ¥çº¿äŒå äœ¿çš tushareïŒåºå®å倿 qfqïŒïŒå€±èŽ¥æ¶äŸæ¬¡é级ïŒ
tushare â akshare â baostock â efinance
TUSHARE_TOKENæªé 眮æ¶èªåšè·³è¿ïŒåéå° akshare äŒå - ææ°/å€§çæ°æ®å§ç» tushare çŽè¿ïŒç¡®ä¿çš³å®æ§
- å¯éè¿ç¯å¢åéæéçŠçšåæºïŒ
DATA_SOURCE_DISABLE_AKSHARE=1/DATA_SOURCE_DISABLE_BAOSTOCK=1
èªå®ä¹å¯Œåºæ¯æçæ°æ®æº
| æ°æ®æº | 诎æ | å€ææ¯æ |
|---|---|---|
| Aè¡äžªè¡åå² | æ¥çº¿ K 线ïŒ6 äœä»£ç | â |
| ææ°åå² | äžè¯/æ·±è¯/åäžæ¿/åè¯ | â |
| ETF åå² | 510300 / 159707 ç | â |
| å®è§ CPI | æåºŠ CPI ææ | â |
Fork äžéšçœ²
- Fork æ¬ä»åºïŒå éå°æ¬å°
- æäžæé
眮
.envåè¿è¡ - éšçœ²å° Streamlit CloudïŒå
¥å£é
streamlit_app.py - è³å°é
眮
SUPABASE_URLãSUPABASE_KEYãCOOKIE_SECRET - è¥èŠå¯çšé¡µé¢å
çåå°æŒæ/åå°æ¹é AIïŒåé¢å€é
眮
GITHUB_ACTIONS_TOKEN
çæ¬æŽæ°
è¯Šè§ CHANGELOG.mdãWeb 端ãçæ¬æŽæ°æ¥å¿ã页é¢çŽæ¥è¯»å该æä»¶ã
åŒæºåè®® | License
æ¬é¡¹ç®åºäº GNU Affero General Public License v3.0 (AGPL-3.0) åŒæºã
- â 䞪人åŠä¹ ãç ç©¶ãèªçšïŒèªç±äœ¿çš
- â ä¿®æ¹ååååïŒéä¿æåæ ·ç AGPL-3.0 åè®®å¹¶åŒæº
- â éè¿çœç»æäŸæå¡ïŒSaaSïŒïŒå¿ é¡»åçšæ·å ¬åŒå®æŽæºä»£ç
- ð§ èç³»æ¹åŒïŒå¯éè¿åŸ®ä¿¡/é£ä¹ŠïŒæ GitHub Issue èç³»
Copyright (c) 2024-2026 youngcan.
Star History
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file youngcan_wyckoff_analysis-0.1.1b2.tar.gz.
File metadata
- Download URL: youngcan_wyckoff_analysis-0.1.1b2.tar.gz
- Upload date:
- Size: 328.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.2 {"installer":{"name":"uv","version":"0.11.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
32af7bf1fffdadc1c88d8b250fad7cf9bfb6f00625fe83a7a96e2de7dd5bf2cb
|
|
| MD5 |
03842cf2dc7dcd219925bc03d927fdab
|
|
| BLAKE2b-256 |
c3ac9652b31a0666d923b32ba606d13453d27a3b233a318f205f3db2b73f52df
|
File details
Details for the file youngcan_wyckoff_analysis-0.1.1b2-py3-none-any.whl.
File metadata
- Download URL: youngcan_wyckoff_analysis-0.1.1b2-py3-none-any.whl
- Upload date:
- Size: 331.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.2 {"installer":{"name":"uv","version":"0.11.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b7f2ca5aea4f244d4f53838a7d600576212473adc77405fb3ad252890a573a49
|
|
| MD5 |
7d8beb191e56e92c9fa106ca103c0b6d
|
|
| BLAKE2b-256 |
1b559f8a7a025b8b45e3a367ea47cb946146e65a7e00f73edc43f5f06a3d023f
|