marketmyna 0.2.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (344) hide show
  1. marketmyna/__init__.py +14 -0
  2. marketmyna/agent/__init__.py +8 -0
  3. marketmyna/agent/agents.py +543 -0
  4. marketmyna/agent/context.py +69 -0
  5. marketmyna/agent/dashboard.py +55 -0
  6. marketmyna/agent/orchestrator.py +153 -0
  7. marketmyna/agent/sentiment.py +150 -0
  8. marketmyna/agent/skills.py +119 -0
  9. marketmyna/ai/__init__.py +1 -0
  10. marketmyna/ai/portfolio_optimizer.py +330 -0
  11. marketmyna/analysis/__init__.py +6 -0
  12. marketmyna/analysis/fundamental.py +329 -0
  13. marketmyna/analysis/sip_optimizer.py +81 -0
  14. marketmyna/analysis/technical.py +321 -0
  15. marketmyna/api/__init__.py +1 -0
  16. marketmyna/api/app.py +209 -0
  17. marketmyna/api/deps.py +63 -0
  18. marketmyna/api/middlewares/__init__.py +0 -0
  19. marketmyna/api/middlewares/auth.py +116 -0
  20. marketmyna/api/middlewares/csrf.py +66 -0
  21. marketmyna/api/middlewares/error_handler.py +38 -0
  22. marketmyna/api/middlewares/slashes.py +27 -0
  23. marketmyna/api/v1/__init__.py +0 -0
  24. marketmyna/api/v1/endpoints/__init__.py +0 -0
  25. marketmyna/api/v1/endpoints/account.py +166 -0
  26. marketmyna/api/v1/endpoints/agent.py +114 -0
  27. marketmyna/api/v1/endpoints/bot.py +38 -0
  28. marketmyna/api/v1/endpoints/calendar.py +269 -0
  29. marketmyna/api/v1/endpoints/data_sources.py +174 -0
  30. marketmyna/api/v1/endpoints/health.py +10 -0
  31. marketmyna/api/v1/endpoints/listings.py +564 -0
  32. marketmyna/api/v1/endpoints/macro.py +163 -0
  33. marketmyna/api/v1/endpoints/portfolio.py +530 -0
  34. marketmyna/api/v1/endpoints/push.py +119 -0
  35. marketmyna/api/v1/endpoints/reports.py +49 -0
  36. marketmyna/api/v1/endpoints/scheduler.py +219 -0
  37. marketmyna/api/v1/endpoints/stocks.py +400 -0
  38. marketmyna/api/v1/endpoints/system_config.py +157 -0
  39. marketmyna/api/v1/endpoints/thesis.py +112 -0
  40. marketmyna/api/v1/endpoints/trade.py +709 -0
  41. marketmyna/api/v1/endpoints/updates.py +394 -0
  42. marketmyna/api/v1/endpoints/watchlists.py +179 -0
  43. marketmyna/api/v1/router.py +43 -0
  44. marketmyna/bot/__init__.py +14 -0
  45. marketmyna/bot/commands/__init__.py +0 -0
  46. marketmyna/bot/commands/analyze.py +40 -0
  47. marketmyna/bot/commands/ask.py +51 -0
  48. marketmyna/bot/commands/base.py +35 -0
  49. marketmyna/bot/commands/batch.py +53 -0
  50. marketmyna/bot/commands/common.py +84 -0
  51. marketmyna/bot/commands/help.py +43 -0
  52. marketmyna/bot/commands/markets.py +153 -0
  53. marketmyna/bot/commands/portfolio.py +145 -0
  54. marketmyna/bot/commands/research.py +323 -0
  55. marketmyna/bot/commands/status.py +48 -0
  56. marketmyna/bot/commands/trade.py +176 -0
  57. marketmyna/bot/dispatcher.py +95 -0
  58. marketmyna/bot/formatting.py +25 -0
  59. marketmyna/bot/models.py +27 -0
  60. marketmyna/bot/registry.py +50 -0
  61. marketmyna/bot/telegram_listener.py +227 -0
  62. marketmyna/cli/__init__.py +1 -0
  63. marketmyna/cli/scheduled_run.py +292 -0
  64. marketmyna/core/__init__.py +6 -0
  65. marketmyna/core/compliance.py +53 -0
  66. marketmyna/core/config.py +377 -0
  67. marketmyna/core/constants.py +69 -0
  68. marketmyna/core/home.py +22 -0
  69. marketmyna/core/numbers.py +28 -0
  70. marketmyna/core/secret_store.py +104 -0
  71. marketmyna/core/tenant.py +130 -0
  72. marketmyna/data/__init__.py +8 -0
  73. marketmyna/data/base.py +36 -0
  74. marketmyna/data/categories.py +272 -0
  75. marketmyna/data/china.py +360 -0
  76. marketmyna/data/crypto.py +200 -0
  77. marketmyna/data/ecb_fx.py +131 -0
  78. marketmyna/data/extra_sources.py +569 -0
  79. marketmyna/data/india.py +241 -0
  80. marketmyna/data/india_filings.py +343 -0
  81. marketmyna/data/listings.py +1314 -0
  82. marketmyna/data/mutual_funds.py +34 -0
  83. marketmyna/data/news.py +98 -0
  84. marketmyna/data/news_search.py +346 -0
  85. marketmyna/data/nse_deals.py +138 -0
  86. marketmyna/data/resilience.py +173 -0
  87. marketmyna/data/sec_facts.py +252 -0
  88. marketmyna/data/shariah.py +283 -0
  89. marketmyna/data/social/__init__.py +9 -0
  90. marketmyna/data/social/base.py +100 -0
  91. marketmyna/data/social/browser.py +92 -0
  92. marketmyna/data/social/hackernews.py +53 -0
  93. marketmyna/data/social/reddit.py +397 -0
  94. marketmyna/data/social/stocktwits.py +63 -0
  95. marketmyna/data/social/valuepickr.py +53 -0
  96. marketmyna/data/stocks.py +197 -0
  97. marketmyna/data/yahoo_price.py +48 -0
  98. marketmyna/launcher.py +71 -0
  99. marketmyna/llm/__init__.py +33 -0
  100. marketmyna/llm/backend_factory.py +51 -0
  101. marketmyna/llm/backend_registry.py +19 -0
  102. marketmyna/llm/channels.py +447 -0
  103. marketmyna/llm/json_reply.py +63 -0
  104. marketmyna/llm/litellm_backend.py +197 -0
  105. marketmyna/llm/model_catalog.py +166 -0
  106. marketmyna/llm/model_health.py +193 -0
  107. marketmyna/llm/protocol.py +111 -0
  108. marketmyna/llm/providers.py +128 -0
  109. marketmyna/llm/store.py +128 -0
  110. marketmyna/notifiers/__init__.py +35 -0
  111. marketmyna/notifiers/apprise_sender.py +43 -0
  112. marketmyna/notifiers/astrbot.py +47 -0
  113. marketmyna/notifiers/bark.py +24 -0
  114. marketmyna/notifiers/base.py +80 -0
  115. marketmyna/notifiers/dingtalk.py +54 -0
  116. marketmyna/notifiers/discord.py +39 -0
  117. marketmyna/notifiers/dispatcher.py +153 -0
  118. marketmyna/notifiers/email.py +99 -0
  119. marketmyna/notifiers/feishu.py +57 -0
  120. marketmyna/notifiers/googlechat.py +24 -0
  121. marketmyna/notifiers/gotify.py +36 -0
  122. marketmyna/notifiers/matrix.py +28 -0
  123. marketmyna/notifiers/ntfy.py +36 -0
  124. marketmyna/notifiers/pushbullet.py +24 -0
  125. marketmyna/notifiers/pushover.py +41 -0
  126. marketmyna/notifiers/pushplus.py +41 -0
  127. marketmyna/notifiers/serverchan3.py +40 -0
  128. marketmyna/notifiers/settings_schema.py +119 -0
  129. marketmyna/notifiers/signal_messenger.py +25 -0
  130. marketmyna/notifiers/slack.py +36 -0
  131. marketmyna/notifiers/teams.py +37 -0
  132. marketmyna/notifiers/telegram.py +81 -0
  133. marketmyna/notifiers/twilio.py +33 -0
  134. marketmyna/notifiers/webhook.py +44 -0
  135. marketmyna/notifiers/webpush.py +222 -0
  136. marketmyna/notifiers/wechat.py +40 -0
  137. marketmyna/notifiers/whatsapp.py +27 -0
  138. marketmyna/portfolio/__init__.py +6 -0
  139. marketmyna/portfolio/analytics.py +336 -0
  140. marketmyna/portfolio/manager.py +383 -0
  141. marketmyna/portfolio/models.py +155 -0
  142. marketmyna/portfolio/optimizers.py +88 -0
  143. marketmyna/portfolio/review.py +411 -0
  144. marketmyna/services/__init__.py +1 -0
  145. marketmyna/services/accounts.py +278 -0
  146. marketmyna/services/ai_access.py +94 -0
  147. marketmyna/services/analysis_run.py +491 -0
  148. marketmyna/services/big_trades.py +335 -0
  149. marketmyna/services/brokers/__init__.py +0 -0
  150. marketmyna/services/brokers/angel.py +271 -0
  151. marketmyna/services/brokers/finnhub.py +209 -0
  152. marketmyna/services/byok_detect.py +196 -0
  153. marketmyna/services/calendar.py +748 -0
  154. marketmyna/services/central_banks.py +202 -0
  155. marketmyna/services/commodities.py +134 -0
  156. marketmyna/services/compare.py +307 -0
  157. marketmyna/services/cot.py +148 -0
  158. marketmyna/services/country_macro.py +135 -0
  159. marketmyna/services/crude_sensitivity.py +239 -0
  160. marketmyna/services/crypto_mood.py +135 -0
  161. marketmyna/services/crypto_screens.py +226 -0
  162. marketmyna/services/data_export.py +91 -0
  163. marketmyna/services/dcf.py +220 -0
  164. marketmyna/services/dcf_model.py +194 -0
  165. marketmyna/services/delivery.py +142 -0
  166. marketmyna/services/discovery.py +146 -0
  167. marketmyna/services/dividends.py +95 -0
  168. marketmyna/services/earnings.py +305 -0
  169. marketmyna/services/econ_calendar.py +495 -0
  170. marketmyna/services/eia_stocks.py +115 -0
  171. marketmyna/services/estimates.py +109 -0
  172. marketmyna/services/etf.py +236 -0
  173. marketmyna/services/etf_rotation.py +193 -0
  174. marketmyna/services/etf_screens.py +196 -0
  175. marketmyna/services/financials.py +639 -0
  176. marketmyna/services/fund_ai.py +181 -0
  177. marketmyna/services/fund_analytics.py +371 -0
  178. marketmyna/services/fund_cost.py +147 -0
  179. marketmyna/services/fund_holdings.py +664 -0
  180. marketmyna/services/fund_peers.py +247 -0
  181. marketmyna/services/fund_rotation.py +206 -0
  182. marketmyna/services/fund_style.py +179 -0
  183. marketmyna/services/funds.py +70 -0
  184. marketmyna/services/hot_stocks.py +358 -0
  185. marketmyna/services/india_flows.py +263 -0
  186. marketmyna/services/india_rates.py +258 -0
  187. marketmyna/services/investor_lenses.py +271 -0
  188. marketmyna/services/leadership.py +165 -0
  189. marketmyna/services/live_market.py +497 -0
  190. marketmyna/services/live_quotes.py +295 -0
  191. marketmyna/services/macro.py +182 -0
  192. marketmyna/services/market_calendar.py +399 -0
  193. marketmyna/services/market_mood.py +168 -0
  194. marketmyna/services/market_valuation.py +231 -0
  195. marketmyna/services/mf_holdings.py +199 -0
  196. marketmyna/services/mf_insights.py +132 -0
  197. marketmyna/services/mf_lumpsum.py +587 -0
  198. marketmyna/services/mf_portfolio_ai.py +195 -0
  199. marketmyna/services/nse_events.py +98 -0
  200. marketmyna/services/overview.py +366 -0
  201. marketmyna/services/ownership.py +143 -0
  202. marketmyna/services/quality_scores.py +199 -0
  203. marketmyna/services/rates.py +335 -0
  204. marketmyna/services/reconcile.py +343 -0
  205. marketmyna/services/report.py +584 -0
  206. marketmyna/services/report_i18n.py +678 -0
  207. marketmyna/services/rotation.py +224 -0
  208. marketmyna/services/runtime_scheduler.py +548 -0
  209. marketmyna/services/schedule_config.py +251 -0
  210. marketmyna/services/schedule_time.py +39 -0
  211. marketmyna/services/screens.py +398 -0
  212. marketmyna/services/sec_mdna.py +173 -0
  213. marketmyna/services/shariah.py +246 -0
  214. marketmyna/services/sip.py +148 -0
  215. marketmyna/services/sip_days.py +362 -0
  216. marketmyna/services/smart_file.py +595 -0
  217. marketmyna/services/smart_pdf.py +425 -0
  218. marketmyna/services/smart_report.py +370 -0
  219. marketmyna/services/social_sentiment.py +511 -0
  220. marketmyna/services/thesis.py +328 -0
  221. marketmyna/services/translate.py +146 -0
  222. marketmyna/services/valuation.py +173 -0
  223. marketmyna/services/worker_pool.py +149 -0
  224. marketmyna/services/world_markets.py +208 -0
  225. marketmyna/storage.py +722 -0
  226. marketmyna/strategies/README.md +51 -0
  227. marketmyna/strategies/bottom_volume.yaml +49 -0
  228. marketmyna/strategies/box_oscillation.yaml +69 -0
  229. marketmyna/strategies/bull_trend.yaml +49 -0
  230. marketmyna/strategies/chan_theory.yaml +58 -0
  231. marketmyna/strategies/dragon_head.yaml +44 -0
  232. marketmyna/strategies/emotion_cycle.yaml +79 -0
  233. marketmyna/strategies/event_driven.yaml +54 -0
  234. marketmyna/strategies/expectation_repricing.yaml +54 -0
  235. marketmyna/strategies/growth_quality.yaml +54 -0
  236. marketmyna/strategies/hot_theme.yaml +54 -0
  237. marketmyna/strategies/ma_golden_cross.yaml +46 -0
  238. marketmyna/strategies/one_yang_three_yin.yaml +37 -0
  239. marketmyna/strategies/shrink_pullback.yaml +46 -0
  240. marketmyna/strategies/volume_breakout.yaml +47 -0
  241. marketmyna/strategies/wave_theory.yaml +64 -0
  242. marketmyna/trading/__init__.py +2 -0
  243. marketmyna/trading/alerts.py +356 -0
  244. marketmyna/trading/backtest.py +317 -0
  245. marketmyna/trading/charges.py +82 -0
  246. marketmyna/trading/chart.py +197 -0
  247. marketmyna/trading/indicators.py +303 -0
  248. marketmyna/trading/journal.py +74 -0
  249. marketmyna/trading/knn.py +164 -0
  250. marketmyna/trading/lots.py +109 -0
  251. marketmyna/trading/market_hours.py +66 -0
  252. marketmyna/trading/options.py +554 -0
  253. marketmyna/trading/pairs.py +94 -0
  254. marketmyna/trading/risk.py +170 -0
  255. marketmyna/trading/scanner.py +500 -0
  256. marketmyna/trading/volatility.py +163 -0
  257. marketmyna/utils/__init__.py +1 -0
  258. marketmyna/utils/deadline.py +36 -0
  259. marketmyna/utils/log_redact.py +52 -0
  260. marketmyna/utils/yahoo_gate.py +183 -0
  261. marketmyna/utils/yf_lock.py +12 -0
  262. marketmyna/web/apple-touch-icon.png +0 -0
  263. marketmyna/web/assets/Account-CA9NFDKO.js +1 -0
  264. marketmyna/web/assets/Analyze-uM0srB_U.js +7 -0
  265. marketmyna/web/assets/AreaChart-2i67V6Jf.js +1 -0
  266. marketmyna/web/assets/BarChart-_yngarVl.js +3 -0
  267. marketmyna/web/assets/Bot-E4gpf1qZ.js +1 -0
  268. marketmyna/web/assets/CandleChart-CioqTqMV.js +1 -0
  269. marketmyna/web/assets/Compare-D6_2CPl4.js +1 -0
  270. marketmyna/web/assets/ExportMenu-DaZ1xVmW.js +1 -0
  271. marketmyna/web/assets/LineChart-BaOkD1Ta.js +57 -0
  272. marketmyna/web/assets/Markets-BMw_M1sJ.js +1 -0
  273. marketmyna/web/assets/Portfolio-DQEdHVc2.js +1 -0
  274. marketmyna/web/assets/ReportView-BzhdcqSh.js +1 -0
  275. marketmyna/web/assets/Scheduler-I9PDKxTd.js +1 -0
  276. marketmyna/web/assets/Settings-DpXfHolW.js +3 -0
  277. marketmyna/web/assets/SipDays-C9q3bNSx.js +1 -0
  278. marketmyna/web/assets/SymbolSearch-CBOVPEk1.js +1 -0
  279. marketmyna/web/assets/Trade-_CM7HC4H.js +2 -0
  280. marketmyna/web/assets/TradeChart-ZjsycacC.js +1 -0
  281. marketmyna/web/assets/WatchButton-ComYW56_.js +1 -0
  282. marketmyna/web/assets/Watchlist-DAjLb0jd.js +1 -0
  283. marketmyna/web/assets/app-BP1o7WZS.js +1 -0
  284. marketmyna/web/assets/app-BkIUKdld.js +1 -0
  285. marketmyna/web/assets/app-CKeSYhEt.js +1 -0
  286. marketmyna/web/assets/app-CN1OERYX.js +1 -0
  287. marketmyna/web/assets/app-DIQllha5.js +1 -0
  288. marketmyna/web/assets/app-DeiAW0tX.js +1 -0
  289. marketmyna/web/assets/br-Cu5YU29T.svg +45 -0
  290. marketmyna/web/assets/browser-CR-ks2Fp.js +19 -0
  291. marketmyna/web/assets/browser-D5K_K_gj.js +1 -0
  292. marketmyna/web/assets/common-0wvpAVpd.js +1 -0
  293. marketmyna/web/assets/common-3ghy53Us.js +1 -0
  294. marketmyna/web/assets/common-Bib2unjX.js +1 -0
  295. marketmyna/web/assets/common-BvSJP0w_.js +1 -0
  296. marketmyna/web/assets/common-CSfyC0Sp.js +1 -0
  297. marketmyna/web/assets/common-C_t-iZPf.js +1 -0
  298. marketmyna/web/assets/compare-DMcsx70H.js +1 -0
  299. marketmyna/web/assets/es-d5m8M5h8.svg +544 -0
  300. marketmyna/web/assets/exporter-DiMg2O5d.js +3 -0
  301. marketmyna/web/assets/files-CpgiZRbN.js +1 -0
  302. marketmyna/web/assets/format-d8InM0Zw.js +9 -0
  303. marketmyna/web/assets/html2canvas-Bw0OShmD.js +5 -0
  304. marketmyna/web/assets/index-CKAnq-Or.js +12 -0
  305. marketmyna/web/assets/index-D4U8E6LH.css +2 -0
  306. marketmyna/web/assets/index.es-iBEw7jOv.js +5 -0
  307. marketmyna/web/assets/ir-cCIgaNf6.svg +219 -0
  308. marketmyna/web/assets/jspdf.es.min-C4285IdL.js +79 -0
  309. marketmyna/web/assets/jspdf.plugin.autotable-2eOJeXl-.js +2 -0
  310. marketmyna/web/assets/lightweight-charts.production-BF2noug5.js +1 -0
  311. marketmyna/web/assets/listings-BefgXpb1.js +1 -0
  312. marketmyna/web/assets/liveQuotes-CtSmCUFA.js +1 -0
  313. marketmyna/web/assets/markets-BI4AhI9W.js +1 -0
  314. marketmyna/web/assets/markets-BUHUdYpT.js +1 -0
  315. marketmyna/web/assets/markets-BqvN1Bvf.js +1 -0
  316. marketmyna/web/assets/markets-DPO40TTe.js +1 -0
  317. marketmyna/web/assets/markets-bsiPo-Tk.js +1 -0
  318. marketmyna/web/assets/markets-ff1e792u.js +1 -0
  319. marketmyna/web/assets/montecarlo-BsNlH2qe.js +1 -0
  320. marketmyna/web/assets/options-BYAZnwzW.js +1 -0
  321. marketmyna/web/assets/preload-helper-BLdHbfdN.js +1 -0
  322. marketmyna/web/assets/purify.es-Dqk5qvad.js +3 -0
  323. marketmyna/web/assets/rolldown-runtime-XKyaHtl9.js +1 -0
  324. marketmyna/web/assets/sa-Dh79zbT9.svg +25 -0
  325. marketmyna/web/assets/toast-DDradTZw.js +1 -0
  326. marketmyna/web/assets/trade-fndw1Ql3.js +1 -0
  327. marketmyna/web/assets/ui-gsFb8B2m.js +1 -0
  328. marketmyna/web/assets/watchlists-B6YqwUIk.js +1 -0
  329. marketmyna/web/brand/logo-mark.webp +0 -0
  330. marketmyna/web/favicon.png +0 -0
  331. marketmyna/web/icon-192.png +0 -0
  332. marketmyna/web/icon-512.png +0 -0
  333. marketmyna/web/index.html +34 -0
  334. marketmyna/web/manifest.webmanifest +28 -0
  335. marketmyna/web/robots.txt +2 -0
  336. marketmyna/web/sw.js +40 -0
  337. marketmyna/web/theme-init.js +37 -0
  338. marketmyna-0.2.0.dist-info/METADATA +345 -0
  339. marketmyna-0.2.0.dist-info/RECORD +344 -0
  340. marketmyna-0.2.0.dist-info/WHEEL +5 -0
  341. marketmyna-0.2.0.dist-info/entry_points.txt +2 -0
  342. marketmyna-0.2.0.dist-info/licenses/LICENSE +202 -0
  343. marketmyna-0.2.0.dist-info/licenses/NOTICE +22 -0
  344. marketmyna-0.2.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,345 @@
1
+ Metadata-Version: 2.4
2
+ Name: marketmyna
3
+ Version: 0.2.0
4
+ Summary: Stock analysis, screening, portfolios and alerts with AI analysts: India, US, China, Hong Kong and crypto
5
+ Author: Balasubramanian Periannan
6
+ License-Expression: Apache-2.0
7
+ Project-URL: Homepage, https://marketmyna.com/
8
+ Project-URL: Source, https://github.com/pryndor/MarketMyna
9
+ Project-URL: Issues, https://github.com/pryndor/MarketMyna/issues
10
+ Project-URL: Changelog, https://github.com/pryndor/MarketMyna/releases
11
+ Keywords: stocks,stock-screener,investment,analysis,portfolio,shariah,nse,bse,mutual-funds,ai-agents,llm,finance
12
+ Classifier: Development Status :: 3 - Alpha
13
+ Classifier: Environment :: Web Environment
14
+ Classifier: Framework :: FastAPI
15
+ Classifier: Intended Audience :: End Users/Desktop
16
+ Classifier: Intended Audience :: Financial and Insurance Industry
17
+ Classifier: Operating System :: OS Independent
18
+ Classifier: Programming Language :: Python :: 3
19
+ Classifier: Programming Language :: Python :: 3.11
20
+ Classifier: Programming Language :: Python :: 3.12
21
+ Classifier: Topic :: Office/Business :: Financial :: Investment
22
+ Requires-Python: >=3.11
23
+ Description-Content-Type: text/markdown
24
+ License-File: LICENSE
25
+ License-File: NOTICE
26
+ Requires-Dist: fastapi>=0.110.0
27
+ Requires-Dist: uvicorn[standard]>=0.27.0
28
+ Requires-Dist: httpx>=0.27.0
29
+ Requires-Dist: pydantic>=2.0.0
30
+ Requires-Dist: sqlalchemy>=2.0.0
31
+ Requires-Dist: pandas>=2.0.0
32
+ Requires-Dist: numpy>=1.24.0
33
+ Requires-Dist: scipy>=1.11.0
34
+ Requires-Dist: yfinance>=0.2.30
35
+ Requires-Dist: ccxt>=4.0.0
36
+ Requires-Dist: requests>=2.31.0
37
+ Requires-Dist: pyyaml>=6.0
38
+ Requires-Dist: litellm==1.106.3
39
+ Requires-Dist: cryptography>=42.0.0
40
+ Requires-Dist: argon2-cffi>=23.1.0
41
+ Requires-Dist: pymupdf>=1.23.0
42
+ Requires-Dist: casparser<2,>=1.4
43
+ Requires-Dist: openpyxl>=3.1.0
44
+ Requires-Dist: xlrd>=2.0.1
45
+ Requires-Dist: playwright>=1.45
46
+ Requires-Dist: pypinyin>=0.51
47
+ Requires-Dist: multidict>=6.9.1
48
+ Provides-Extra: china
49
+ Requires-Dist: akshare>=1.14.0; extra == "china"
50
+ Provides-Extra: india
51
+ Requires-Dist: jugaad-data>=0.20; extra == "india"
52
+ Provides-Extra: dev
53
+ Requires-Dist: pytest>=7.4.0; extra == "dev"
54
+ Requires-Dist: black>=23.0.0; extra == "dev"
55
+ Requires-Dist: ruff>=0.1.0; extra == "dev"
56
+ Requires-Dist: mypy>=1.0.0; extra == "dev"
57
+ Dynamic: license-file
58
+
59
+ <p align="center">
60
+ <a href="https://marketmyna.com/"><img src="https://raw.githubusercontent.com/pryndor/MarketMyna/main/docs/images/banner.png" alt="MarketMyna: AI stock analysis and ethical screening" width="760"></a>
61
+ </p>
62
+
63
+ <p align="center">
64
+ <b>Stock analysis, screening, portfolios and alerts in one app.</b><br>
65
+ AI analysts, Shariah screening and alerts on Telegram, for India, the US, China, Hong Kong and crypto.
66
+ </p>
67
+
68
+ <p align="center">
69
+ <a href="https://github.com/pryndor/MarketMyna/actions/workflows/ci.yml"><img src="https://github.com/pryndor/MarketMyna/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
70
+ <a href="https://github.com/pryndor/MarketMyna/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-Apache--2.0-blue" alt="License: Apache 2.0"></a>
71
+ <a href="https://github.com/pryndor/MarketMyna/blob/main/pyproject.toml"><img src="https://img.shields.io/badge/dynamic/toml?url=https%3A%2F%2Fraw.githubusercontent.com%2Fpryndor%2FMarketMyna%2Fmain%2Fpyproject.toml&query=%24.project.version&label=version&color=blue" alt="Version"></a>
72
+ <a href="#quick-start"><img src="https://img.shields.io/badge/platform-Linux%20%7C%20macOS%20%7C%20Windows-lightgrey" alt="Platforms"></a>
73
+ <a href="https://github.com/pryndor/MarketMyna/stargazers"><img src="https://img.shields.io/github/stars/pryndor/MarketMyna?style=flat" alt="Stars"></a>
74
+ <a href="https://github.com/sponsors/pryndor"><img src="https://img.shields.io/badge/Sponsor-GitHub-EA4AAA?logo=githubsponsors&logoColor=white" alt="Sponsor"></a>
75
+ </p>
76
+
77
+ <p align="center">
78
+ <a href="https://marketmyna.com/"><b>Try it online</b></a> ·
79
+ <a href="#quick-start"><b>Run your own copy</b></a> ·
80
+ <a href="#features"><b>Features</b></a> ·
81
+ <a href="https://github.com/pryndor/MarketMyna/issues"><b>Report a bug</b></a>
82
+ </p>
83
+
84
+ Use it at **<https://marketmyna.com/>**, or run your own copy from this repo. Your copy has no sign-up,
85
+ no login, no plans and no limits: it has one owner (you), and every feature is on.
86
+
87
+ > MarketMyna is an analysis tool, not investment advice.
88
+
89
+ ## Features
90
+
91
+ <table>
92
+ <tr>
93
+ <td width="45%" valign="top">
94
+ <h3>🤖 AI analysis</h3>
95
+ A set of AI analysts (technical, risk, news) explains a stock in plain language, with a
96
+ bullish / neutral / bearish outlook, never a buy or sell call. Paste your own key (Gemini, OpenAI,
97
+ Claude, Groq, OpenRouter, DeepSeek, Mistral) or point it at a local Ollama.
98
+ </td>
99
+ <td width="55%"><img src="https://raw.githubusercontent.com/pryndor/MarketMyna/main/docs/images/analyze.webp" alt="AI analysis of a stock"></td>
100
+ </tr>
101
+ <tr>
102
+ <td width="55%"><img src="https://raw.githubusercontent.com/pryndor/MarketMyna/main/docs/images/screener.webp" alt="Markets: every listing with the ethical filter and the insights menu"></td>
103
+ <td width="45%" valign="top">
104
+ <h3>🔎 Screeners and Shariah screening</h3>
105
+ India (NSE, BSE, mutual funds, ETFs), US, China A-shares, Hong Kong and crypto, with ready-made
106
+ and custom screens. Ethical / Shariah checks for stocks, mutual funds and ETFs, with dividend
107
+ purification.
108
+ </td>
109
+ </tr>
110
+ <tr>
111
+ <td width="45%" valign="top">
112
+ <h3>🧭 Market insights</h3>
113
+ Sector and fund rotation, trending stocks, market mood, FII / DII flows, world markets, rates
114
+ and macro, all on one page.
115
+ </td>
116
+ <td width="55%"><img src="https://raw.githubusercontent.com/pryndor/MarketMyna/main/docs/images/sector-rotation.webp" alt="Sector rotation chart"></td>
117
+ </tr>
118
+ <tr>
119
+ <td width="55%"><img src="https://raw.githubusercontent.com/pryndor/MarketMyna/main/docs/images/bot-console.webp" alt="Bot console with chat commands"></td>
120
+ <td width="45%" valign="top">
121
+ <h3>💬 Telegram bot and console</h3>
122
+ Every tool is also a chat command. Ask the Telegram bot, or use the same commands in the
123
+ built-in console.
124
+ </td>
125
+ </tr>
126
+ </table>
127
+
128
+ | | |
129
+ | --- | --- |
130
+ | 📈 **Charts and trading tools** | Candlestick charts and indicators, scanner, backtesting, options payoff, pairs trading, position sizing, trading journal |
131
+ | 💼 **Portfolios and funds** | Holdings and returns, CAS import, fund overlap, SIP planner, XIRR |
132
+ | 🔔 **Alerts and scheduled reports** | Telegram, email, browser push, Discord, Slack, Teams, ntfy and more, on any schedule you like |
133
+ | 🔀 **Trader and Investor areas** | One switch flips the menus and pages between short-term trading tools and long-term investing |
134
+ | 🌍 **Seven languages** | The whole app, with light and dark themes |
135
+ | 🔒 **Private by default** | One SQLite file on your computer; nothing leaves it except calls to the data and AI providers you choose |
136
+
137
+ <details>
138
+ <summary><b>More screenshots</b></summary>
139
+ <br>
140
+
141
+ | Compare stocks side by side | Scheduled reports |
142
+ | --- | --- |
143
+ | <img src="https://raw.githubusercontent.com/pryndor/MarketMyna/main/docs/images/compare.webp" alt="Compare up to five stocks: performance, returns and risk"> | <img src="https://raw.githubusercontent.com/pryndor/MarketMyna/main/docs/images/scheduled-reports.webp" alt="Choosing what goes into scheduled reports"> |
144
+
145
+ </details>
146
+
147
+ ## Quick start
148
+
149
+ With [Python 3.11 or newer](https://www.python.org/downloads/) on Linux, macOS or Windows:
150
+
151
+ ```bash
152
+ pipx install marketmyna
153
+ marketmyna
154
+ ```
155
+
156
+ The app opens at <http://127.0.0.1:8001>. Paste an AI key in **Settings** and look up any stock.
157
+ Update with `pipx upgrade marketmyna`; your data is kept.
158
+
159
+ No pipx? `pip install marketmyna` inside a virtual environment works the same way
160
+ ([how to install pipx](https://pipx.pypa.io/stable/installation/)). Other options: `marketmyna --port 9000`,
161
+ `marketmyna --no-browser`.
162
+
163
+ ## Run it from the source code
164
+
165
+ To follow the latest code with `git pull`, or to change it. Runs on **Linux, macOS and Windows** (tested on all three on every change). Needs
166
+ [Python 3.12](https://www.python.org/downloads/) and [Node.js 22](https://nodejs.org/). All your data goes
167
+ into one SQLite file, so there is no database server to set up.
168
+
169
+ **1. Get the code and install** (one time)
170
+
171
+ Linux and macOS:
172
+
173
+ ```bash
174
+ git clone https://github.com/pryndor/MarketMyna.git marketmyna
175
+ cd marketmyna
176
+ python3 -m venv venv
177
+ . venv/bin/activate
178
+ pip install -r requirements-web.txt
179
+ ```
180
+
181
+ Windows (PowerShell):
182
+
183
+ ```powershell
184
+ git clone https://github.com/pryndor/MarketMyna.git marketmyna
185
+ cd marketmyna
186
+ py -m venv venv
187
+ venv\Scripts\Activate.ps1
188
+ pip install -r requirements-web.txt
189
+ ```
190
+
191
+ If PowerShell refuses to run the activate script, run
192
+ `Set-ExecutionPolicy -Scope CurrentUser RemoteSigned` once, or use Command Prompt with `venv\Scripts\activate.bat`.
193
+
194
+ **2. Start it** (every time; activate the venv first as above)
195
+
196
+ ```bash
197
+ python start.py
198
+ ```
199
+
200
+ The first start builds the frontend (about a minute), then the app opens in your browser at
201
+ <http://127.0.0.1:8001>. Other options: `--port 9000`, `--no-browser`, `--rebuild`.
202
+
203
+ **3. Update** (whenever you like)
204
+
205
+ ```bash
206
+ git pull
207
+ pip install -r requirements-web.txt
208
+ python start.py
209
+ ```
210
+
211
+ The frontend rebuilds by itself when it has changed, and your data is kept.
212
+
213
+ Then open <http://127.0.0.1:8001> and go to **Settings**:
214
+
215
+ - **AI keys**: paste a key; add several for automatic fallback.
216
+ - **Notifications**: Telegram, email and the other channels, and which messages go where.
217
+ - **Data sources** (optional): live US prices, backup price sources, Reddit.
218
+
219
+ Everything can also be set with environment variables; `.env.example` lists them.
220
+
221
+ Run only one copy at a time: the scheduler, price alerts and the Telegram bot run inside it.
222
+
223
+ ### Your data
224
+
225
+ Everything is under `~/.marketmyna` (on Windows `C:\Users\<you>\.marketmyna`; set `MARKETMYNA_HOME` to use
226
+ another folder):
227
+
228
+ - `marketmyna.db`: the SQLite database (watchlists, portfolios, alerts, journal, reports, settings).
229
+ The tables are created on first start, and columns are added on later updates.
230
+ - `config.json` and `secret.key`: your settings, and the key that encrypts saved API keys and passwords.
231
+
232
+ To back up or move the app, copy the whole folder while the API is stopped. An existing `stockpulse.db` from
233
+ before the rename is still used.
234
+
235
+ ### Keep it private
236
+
237
+ There is no login, so **anyone who can reach the port can use the app and see your data.**
238
+ The app listens on `127.0.0.1` only by default, so only this computer can reach it. To use it from your
239
+ phone, use a private network such as Tailscale or WireGuard. Don't open the port to the internet.
240
+
241
+ ## Troubleshooting
242
+
243
+ | Problem | Fix |
244
+ | --- | --- |
245
+ | `Install the requirements first` | Activate the venv, then `pip install -r requirements-web.txt` |
246
+ | `The frontend is built once with Node.js 22` | Install [Node.js 22](https://nodejs.org/) and run `python start.py` again |
247
+ | `marketmyna: command not found` after `pipx install` | Run `pipx ensurepath`, then open a new terminal |
248
+ | Port 8001 is already in use | Another copy is running, or use `--port 9000` |
249
+ | The page looks old after an update | Source install: `python start.py --rebuild`. pipx: reload the page with Ctrl+Shift+R |
250
+ | AI analysis says no key | Add a key in **Settings → AI keys**, or point it at a local Ollama |
251
+
252
+ Still stuck? [Open an issue](https://github.com/pryndor/MarketMyna/issues) with your OS, Python version
253
+ and the error text.
254
+
255
+ ## Development
256
+
257
+ Run the API on its own, and the Vite dev server for live reload of the frontend:
258
+
259
+ ```bash
260
+ python -m uvicorn marketmyna.api.app:app --port 8001 --reload
261
+ cd frontend && npm run dev # another terminal: http://localhost:5174, sends /api to :8001
262
+ ```
263
+
264
+ If the API runs on another port, start the frontend with `MARKETMYNA_API=http://127.0.0.1:<port> npm run dev`.
265
+
266
+ Tests: `pip install pytest && python -m pytest -q`. GitHub Actions runs them, builds the frontend and starts the
267
+ app on Linux, Windows and macOS for every push (`.github/workflows/ci.yml`).
268
+
269
+ ## Layout
270
+
271
+ | Folder | What's in it |
272
+ | --- | --- |
273
+ | `start.py` | Starts the app from the source code (builds the frontend when needed) |
274
+ | `marketmyna/` | The Python package: data, analysis, AI agents, scheduler, alerts, notifiers, SQLite storage |
275
+ | `marketmyna/api/` | FastAPI app and routes; it also serves the built frontend |
276
+ | `marketmyna/strategies/` | AI strategy playbooks |
277
+ | `frontend/` | React + Vite + Tailwind app |
278
+ | `tests/` | pytest suite |
279
+
280
+ ## Built with
281
+
282
+ [![FastAPI](https://img.shields.io/badge/FastAPI-009688?logo=fastapi&logoColor=white)](https://fastapi.tiangolo.com/)
283
+ [![React](https://img.shields.io/badge/React-19-61DAFB?logo=react&logoColor=black)](https://react.dev/)
284
+ [![TypeScript](https://img.shields.io/badge/TypeScript-3178C6?logo=typescript&logoColor=white)](https://www.typescriptlang.org/)
285
+ [![Vite](https://img.shields.io/badge/Vite-646CFF?logo=vite&logoColor=white)](https://vite.dev/)
286
+ [![Tailwind CSS](https://img.shields.io/badge/Tailwind_CSS-06B6D4?logo=tailwindcss&logoColor=white)](https://tailwindcss.com/)
287
+ [![SQLite](https://img.shields.io/badge/SQLite-003B57?logo=sqlite&logoColor=white)](https://www.sqlite.org/)
288
+ [![LiteLLM](https://img.shields.io/badge/AI-LiteLLM-8A2BE2)](https://github.com/BerriAI/litellm)
289
+ [![Python](https://img.shields.io/badge/python-3.12-3776AB?logo=python&logoColor=white)](https://www.python.org/downloads/)
290
+ [![Node.js](https://img.shields.io/badge/node.js-22-5FA04E?logo=nodedotjs&logoColor=white)](https://nodejs.org/)
291
+ [![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
292
+
293
+ ## Roadmap
294
+
295
+ - More options for scheduled reports: what goes in them, when they run, and where they are sent
296
+ - More markets and data sources
297
+ - More AI analysts and strategy playbooks
298
+
299
+ Ideas and requests are welcome in [Issues](https://github.com/pryndor/MarketMyna/issues).
300
+
301
+ ## Support
302
+
303
+ MarketMyna is free and open source. If it helps you, you can support its development:
304
+
305
+ - [GitHub Sponsors](https://github.com/sponsors/pryndor), monthly or one-time
306
+ - [Buy Me A Coffee](https://www.buymeacoffee.com/lixplore)
307
+
308
+ <a href="https://www.buymeacoffee.com/lixplore" target="_blank" rel="noopener noreferrer"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" height="50"></a>
309
+
310
+ ## License
311
+
312
+ MarketMyna is free and open source under the **[Apache License 2.0](https://github.com/pryndor/MarketMyna/blob/main/LICENSE)**.
313
+ Copyright 2026 Balasubramanian Periannan; see [NOTICE](https://github.com/pryndor/MarketMyna/blob/main/NOTICE).
314
+
315
+ In short (the [LICENSE](https://github.com/pryndor/MarketMyna/blob/main/LICENSE) file is what counts):
316
+
317
+ | You can | As long as you |
318
+ | --- | --- |
319
+ | Use it for anything, personal or commercial | Keep the copyright, license and [NOTICE](https://github.com/pryndor/MarketMyna/blob/main/NOTICE) |
320
+ | Change it, and keep your changes private if you want | Mark the files you changed when you share them |
321
+ | Run it as a website or service for other people | Don't use the MarketMyna name or logo for your copy |
322
+ | Share copies or build it into your own product, open or closed | Include a copy of the license |
323
+
324
+ The license also gives you a patent license from the contributors. It comes with no warranty, and the
325
+ authors are not liable for any loss.
326
+
327
+ ### Contributing
328
+
329
+ Pull requests are welcome. Contributions are accepted under the Apache License 2.0; see
330
+ [CONTRIBUTING.md](https://github.com/pryndor/MarketMyna/blob/main/CONTRIBUTING.md).
331
+
332
+ ### Name and logo
333
+
334
+ The license does not cover the MarketMyna name and logos (`frontend/public/brand/`).
335
+ If you publish a changed copy, give it your own name and logo.
336
+
337
+ ### Third-party software
338
+
339
+ Each package the app installs keeps its own license. The frontend packages and the Python packages are MIT,
340
+ BSD, ISC or Apache-2.0, except PyMuPDF (AGPL-3.0), which is used only to make PDF reports. If you ship
341
+ MarketMyna inside a closed product, check PyMuPDF's terms or remove it.
342
+
343
+ ### Not investment advice
344
+
345
+ MarketMyna is an analysis tool. Nothing it shows is investment advice, and you trade at your own risk.