1 Star 0 Fork 237

生活淡笔 / 股票分析

forked from wking / 股票分析 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MPL-2.0

说明文档

项目无Wiki,此说明文档包含了项目所有相关内容。包括项目介绍、使用说明等。

GitHub主站:https://github.com/wkingnet/stock-analysis Gitee镜像:https://gitee.com/wkingnet/stock-analysis

前言

一切有为法,如梦幻泡影;如露亦如电,应作如是观。

缘起

  我自己多年来一直使用通达信公式选股。近期越发感觉到通达信公式的局限性(大智慧同花顺公式和通达信都有同样局限性),比如变量无法二次赋值、没有循环、IF语句简陋,且软件自带公式评测功能鸡肋。更重要的是通达信公式都是基于短周期的判断,比如不管是MACD金叉、cross上穿还是创历史新高,皆为“当前周期日”的结果,无法判断类似“此为上涨第几浪,每个浪的高低价各是多少”。而如果用周线周期选股,那只有每周五收盘以后才可以选,会错失先机。月线更是不可能用到。

  因此,我有了两个核心需求:盘中选股以及策略回测。这又延伸出了数据采集、数据加工、行情监视等需求。另外为了隐私考虑,所有第三方导入库、借鉴的代码都需开源,本地化,不云端。

  我本身侧重于研究股票或期货的趋势、逻辑、投机,不做价投,不做超短,可以耐心持股,也可以耐心空仓。

什么是量化

  我的理解,“量化”一词有两层释义。狭义上是指把思路变为计算机代码,包括通达信公式、python代码等;广义上是指在狭义释义的基础上,通过计算机自动完成整个选股和交易的过程。

为什么量化

  然而量化又是投资过程中必须要完成的阶段。你有了一个选股思路,不管是长线投资的还是短线投机、不论是看基本面还是看技术面,总之你想把思路转化为选股策略,把思想转变为选股公式,这一过程本身就是量化。再之后,为了确定策略是否有效、收益率如何,又必然需要做策略回测来验证。最后,为了防止人性对交易过程的干扰,可以考虑使用自动化交易。

量化的优点

  1. 选股。当把选股思路量化为代码后,计算机可以快速准确的帮你选出你想要的股票。
  2. 下单速度。触发买入、卖出条件后,计算机可以在毫秒级别内完成下单操作。人为操作需要“打开交易软件-填股票代码-填金额-填数量-点下单”。这还没有考虑下单前,人们会来回犹豫所浪费的时间。

量化了就能赚钱?

  python、量化过程、量化平台都只是工具,核心是交易策略,是交易思想。交易的目的是赚钱,不是学编程当程序员,也不是沉迷于玩数据中不可自拔,代码写的再高级精炼,不赚钱统统白搭。现在网上很多收费课程、量化平台,都是“卖铲子”的,核心的可以能稳定赚钱的量化策略,绝无一家提供。

  就我个人而言,我不赞同完全把重心放在全自动量化交易上,而忽视基本面和技术面。对于短线来说,不确定性太多。比如,1分钟K线几乎处于“混沌”状态,根本没有逻辑和趋势可言。而周期越大的K线,越能体现出趋势和力度,突然反转的可能性越小。对于长线来说……还未听说过有把程序化交易用于长线的事例。然而就目前我所了解见到的,都是将量化应用于短线的实战。我觉得,对于短线而言,量化的优点是抢先发现买点、抢先下单,先敌制胜。但这个前提是你在做量化之前,就本身已经有了一套“短线不败法宝”,换言之就是你短线本身就一直在赚钱,上量化只不过是为了减少选股和下单时间。如果之前做短线一直亏钱,那上了量化后就赚钱是绝无可能的。对于中长线而言,量化也是侧重于选股方面。下单可以自己手动下单,中长线是不在乎那几分钟下单时间的区别的。

  引用一段网友的话:

交易这门手艺发展了这么多年,流派可谓五花八门,有看基本面搞价值投资的,有看K线搞技术指标的,有学江恩,缠论数波浪画中枢的,有分析资金面的,分析市场情绪的,有结合原始数据做日内波段的,有恨不得把服务器架在交易所对面做高频的,有搞一箱子GPU做automl,深度学习和强化学习的,有搞对冲的,搞多因子的,搞指数增强的,有搞MOM组合管理的,有搞一堆艰深晦涩的微分方程做衍生品套利的,当然,也有靠求神拜佛和拍脑门跺地板的。每种流派都有一些人奉为圭臬,还有一批人弃如敝履,而且时不时的还会冒出几个新的流派出来,令人眼花缭乱,有些摸不到头脑。

不知道哪个著名的人曾说过,如果你没有自己的思想,那你的脑子注定会成为其他人思想的跑马场。上面的这一堆思想和流派,既然能够出现并且流传下来,还能够有一批拥趸和死忠,也就表明它们确实是市场的本质或者圣杯在某个维度的一个映射或投影,但也仅仅只是一个投影而已。学习它们只是为了能够从更多的角度去窥视那个交易的圣杯,进而一点点的深化,完善和验证自己的交易思想和理论体系,最终通过一个承载着自己思想体系的工具来将思想兑换成实际的收益。在这个市面上出现的每一种付费编译的或者免费开源的交易软件都是固定的,即使在不断更新迭代也只是按照开发团队的思路来进行,包括QA在内,不可能有一个软件或者项目能够满足所有可能的交易思想,自然也就无法让你自由的学习,验证,归纳和吸收这些思想中的精华。因此,如果你没有定制化的开发交易工具的能力,而只能使用现有的工具的话,你的思想和自由意志就这样被别人的工具所局限住了。——对QUANTAXIS的设计理念的思考和一些感悟

项目介绍

  • 使用python进行股票历史数据下载和分析选股。除了选股策略以外,其他都可公开。

  • git网站上有很多优秀开源量化平台项目。本项目与其他项目的区别是,本项目侧重于选股、回测所需数据的导入工作。有了历史数据和选股策略,选择哪个量化平台做回测都是很轻松的事情了。

  • 业余编程水平,需求导向。才疏学浅,刚学python几个月时间。git主要作为云端git库使用。无任何解答服务。

  • 力求选择最稳定可靠的数据获取方式。虽然网上有很多数据源平台,但都受制于“积分”、带宽、平台是否更新等,完全是把程序主动权交到了对方手里。因此本项目所有数据依靠本地通达信软件导出提供。感谢通达信,真是个好公司!不止数据容易提取,各种和谐加强版也很好用。

功能截图

软件运行截图

盘中选股截图

盘中选股截图

回测系统截图

回测系统截图

显示策略持仓区域

高亮显示策略历史持仓区域,红赚绿亏

项目进度

已完成功能

  • 读取本机通达信文件,导出未除权日线数据、股本变迁数据、全A股全年份财务报告数据。
  • 财务报告数据自动判断是否需要更新
  • 日线数据本地前复权计算处理。日线数据只追加当日数据,加快数据更新速度。
  • 在当天数据更新后的盘后选股(选股策略你得自己写)
  • 当天盘中选股【2021年2月10日19:03:24完成】
  • 数据存储方式优化。目前使用csv文件,性能略差。但这个也不是特别需要。【2021年2月10日完成,使用pickle格式保存】
  • 回测(是指本项目提供数据和策略,接入本地化的量化回测平台进行回测,使用rqalpha)【2021年3月2日完成】
  • 多进程处理优化【2021年3月5日完成】

待完成功能

需求优先级由高到低排序

  • 暂无

数据来源

基础数据来源:

数据名称 数据来源路径 数据本身更新方式
日线数据 解析本机通达信离线数据/vipdoc/sh(sz)/lday 完整数据通过通达信软件手动更新,当日数据可在通达信设置自动更新
财务报告数据 解析本机通达信离线数据 /vipdoc/cw 代码自动维护更新
股本变迁数据 解析本机通达信离线数据 /T0002/hq_cache/gbbq 运行通达信时,通达信可自动更新

其他数据可以由基础数据本机计算得出。比如前复权、流通市值、市盈率等。

使用说明

初次使用

  1. 项目本身只有几个python文件,不占硬盘空间。但通达信导出的日线数据需要4G的硬盘空间。并且强烈建议使用固态硬盘存储通达信导出数据,可极大提升性能。
  2. 通达信软件菜单-系统-盘后数据下载,下载沪深日线数据,日期从19900101至当天。
  3. 通达信软件菜单-系统-专业财务数据,下载全部财务数据包。
  4. 克隆/下载项目zip包,解压缩。项目无需pip安装
  5. 查看软件架构章节,自行安装支持库
  6. 打开user_config.py,配置好各路径
  7. 参照CeLue模板.py,照猫画虎自己写策略,保存为celue.py
  8. 接着看数据更新章节

数据更新

每天16时以后,通达信才会更新当日日线数据。你可手动更新,或在通达信设置-设置1标签,勾选“定时提示下载日线”并设置为16点。在通达信软件运行的情况下,每天16点通达信自动更新当日数据。

本机通达信软件更新数据后,再进行下面的操作:

  1. 运行readTDX_cw.py,更新财报和股权变迁数据

  2. 运行readTDX_lday.py,自动更新需要更新的数据。使用命令行参数 del 可删除现有数据文件,强制重新生成全部数据。

python readTDX_lday.py del

有了历史数据文件,你也可以利用数据自行发挥你的想象力做任何事情。

本项目导出的数据自动进行了前复权处理,可与通达信软件内显示的价格完全一致,一分钱都不差(你需要在通达信软件的设置1里勾选“复权采用等比方式”,否则很多股票多年前的价格是负的)。

选股

盘中或盘后,都可通过运行xuangu.py选股。xuangu.py会自动调用celue.py的策略选股并显示结果。

盘后选股

盘后(周一~周五16:01~8:59,或周六周日)使用 readTDX_lday.py 生成的本机数据选股。当日16点以后,自己手动控制通达信更新完当日数据,运行xuangu.py进行选股。xuangu.py文件里有日期变量的设置。如果不指定日期,按照当天数据选股。如果指定日期,按照日期区间的数据选股。

盘中选股

盘中(周一~周五,9:00~16:00)使用昨日之前的本机数据 + 当天在线实时数据选股。程序会获取当日实时最新行情,整合到具体股票日线数据中(不保存到文件,只在内存操作),并判断是否需要前复权(前复权的特性是如果今天除权,那么以前的数据全需要变)。

策略信号及回测

保存策略信号

保存策略信号是为了方便查看策略的买卖点,以及方便回测。

生成的celue汇总.csv可以极大的提升回测效率。回测如果不使用 celue汇总.csv 而是直接循环,每天4000多只股票都需要循环一遍,循环5年就需要半个小时多。而使用 celue汇总.csv 只需要1分钟就可获得结果。

  1. 运行 celue_save.py 文件为本机数据文件添加策略买卖信号。并生成一个独立的 celue汇总.csv 文件。

  2. 默认只更新缺少策略信号的交易日,使用命令行参数 del 完全重新生成策略信号(比如当你修改了策略时就需要全部重新生成策略信号)

python celue_save.py del
  1. 默认使用多进程执行,效率高。使用命令行参数 single 单进程执行。
python celue_save.py single

回测

生成策略信号文件之后你就可以拿着 celue汇总.csv 文件去任意一个回测框架回测,只需要在回测框架里导入 celue汇总.csv 内容即可。具体如何导入可借鉴 huice_rq.py 文件。

我自己使用了开源量化回测框架 rqalpha ,运行 huice_rq.py 即可直接进行回测。

使用网页查看策略信号

运行 plot.py 后打开同目录的 pyecharts.html 可以直观查看策略在具体股票历史K线图上的买卖区间。

显示策略持仓区域 高亮显示策略历史持仓区域,红赚绿亏

二次开发

想给日线计算添加自己的数据,在func_TDX.py的make_fq函数,加到下面语句前。

if flag_attach:  # 追加模式,则附加最新处理的数据
data = df_code_original.append(data)

财报文件所有字段释义,查看“util_docs\专业财务文件字段含义对照表.txt”

自动化交易

本项目不包含自动化交易模块。但你可以对接任何有python接口的自动化交易软件。

买入对接

xuangu.py 最后的变量“已选出股票列表”保存的就是策略当天发出买入信号,可买入的股票列表。只需对“已选出股票列表”下达买入命令即可。

卖出对接

缺少获取当前持仓股部分的代码,需要自行编写。

获取持仓股列表后,加工下面的核心代码:

stock_code = '000887'
df_stock = pd.read_csv(ucfg.tdx['csv_lday'] + os.sep + stock_code + '.csv',
                       index_col=None, encoding='gbk', dtype={'code': str})
df_stock['date'] = pd.to_datetime(df_stock['date'], format='%Y-%m-%d')  # 转为时间格式
df_stock.set_index('date', drop=False, inplace=True)  # 时间为索引。方便与另外复权的DF表对齐合并

if '09:00:00' < time.strftime("%H:%M:%S", time.localtime()) < '16:00:00':
    df_today = get_tdx_lastestquote(stock_code)
    df_stock = update_stockquote(stock_code, df_stock, df_today)

celue_sell = 卖策略(df_stock)

软件架构

软件/库 版本
windows 10 20H2
通达信开心果版本 v2020.12
python (anaconda) 3.8.5
pytdx 1.72
pyecharts 1.9.0
RQalpha 4.2.5
ta-lib(安装方法:在cmd上使用“pip install talib”命令一般会报错,正确安装方法是,进入*https://www.lfd.uci.edu/~gohlke/pythonlibs/*,下拉选择TA_Lib-0.4.17-cp37-cp37m-win_amd64.whl(win系统64位,python3.7版本,根据自己系统和python版本选择相应的安装包),将下载包放在当前工作路径中,然后在Anaconda Prompt(或windows的cmd)里面输入命令:pip install TA_Lib-0.4.17-cp27-cp27m-win_amd64.whl) 0.4.19

其他都是辅助库。缺什么库运行时报错自己pip安装一下即可

开发日志

点我打开

Mozilla Public License Version 2.0 ================================== 1. Definitions -------------- 1.1. "Contributor" means each individual or legal entity that creates, contributes to the creation of, or owns Covered Software. 1.2. "Contributor Version" means the combination of the Contributions of others (if any) used by a Contributor and that particular Contributor's Contribution. 1.3. "Contribution" means Covered Software of a particular Contributor. 1.4. "Covered Software" means Source Code Form to which the initial Contributor has attached the notice in Exhibit A, the Executable Form of such Source Code Form, and Modifications of such Source Code Form, in each case including portions thereof. 1.5. "Incompatible With Secondary Licenses" means (a) that the initial Contributor has attached the notice described in Exhibit B to the Covered Software; or (b) that the Covered Software was made available under the terms of version 1.1 or earlier of the License, but not also under the terms of a Secondary License. 1.6. "Executable Form" means any form of the work other than Source Code Form. 1.7. "Larger Work" means a work that combines Covered Software with other material, in a separate file or files, that is not Covered Software. 1.8. "License" means this document. 1.9. "Licensable" means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently, any and all of the rights conveyed by this License. 1.10. "Modifications" means any of the following: (a) any file in Source Code Form that results from an addition to, deletion from, or modification of the contents of Covered Software; or (b) any new file in Source Code Form that contains any Covered Software. 1.11. "Patent Claims" of a Contributor means any patent claim(s), including without limitation, method, process, and apparatus claims, in any patent Licensable by such Contributor that would be infringed, but for the grant of the License, by the making, using, selling, offering for sale, having made, import, or transfer of either its Contributions or its Contributor Version. 1.12. "Secondary License" means either the GNU General Public License, Version 2.0, the GNU Lesser General Public License, Version 2.1, the GNU Affero General Public License, Version 3.0, or any later versions of those licenses. 1.13. "Source Code Form" means the form of the work preferred for making modifications. 1.14. "You" (or "Your") means an individual or a legal entity exercising rights under this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with You. For purposes of this definition, "control" means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity. 2. License Grants and Conditions -------------------------------- 2.1. Grants Each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license: (a) under intellectual property rights (other than patent or trademark) Licensable by such Contributor to use, reproduce, make available, modify, display, perform, distribute, and otherwise exploit its Contributions, either on an unmodified basis, with Modifications, or as part of a Larger Work; and (b) under Patent Claims of such Contributor to make, use, sell, offer for sale, have made, import, and otherwise transfer either its Contributions or its Contributor Version. 2.2. Effective Date The licenses granted in Section 2.1 with respect to any Contribution become effective for each Contribution on the date the Contributor first distributes such Contribution. 2.3. Limitations on Grant Scope The licenses granted in this Section 2 are the only rights granted under this License. No additional rights or licenses will be implied from the distribution or licensing of Covered Software under this License. Notwithstanding Section 2.1(b) above, no patent license is granted by a Contributor: (a) for any code that a Contributor has removed from Covered Software; or (b) for infringements caused by: (i) Your and any other third party's modifications of Covered Software, or (ii) the combination of its Contributions with other software (except as part of its Contributor Version); or (c) under Patent Claims infringed by Covered Software in the absence of its Contributions. This License does not grant any rights in the trademarks, service marks, or logos of any Contributor (except as may be necessary to comply with the notice requirements in Section 3.4). 2.4. Subsequent Licenses No Contributor makes additional grants as a result of Your choice to distribute the Covered Software under a subsequent version of this License (see Section 10.2) or under the terms of a Secondary License (if permitted under the terms of Section 3.3). 2.5. Representation Each Contributor represents that the Contributor believes its Contributions are its original creation(s) or it has sufficient rights to grant the rights to its Contributions conveyed by this License. 2.6. Fair Use This License is not intended to limit any rights You have under applicable copyright doctrines of fair use, fair dealing, or other equivalents. 2.7. Conditions Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in Section 2.1. 3. Responsibilities ------------------- 3.1. Distribution of Source Form All distribution of Covered Software in Source Code Form, including any Modifications that You create or to which You contribute, must be under the terms of this License. You must inform recipients that the Source Code Form of the Covered Software is governed by the terms of this License, and how they can obtain a copy of this License. You may not attempt to alter or restrict the recipients' rights in the Source Code Form. 3.2. Distribution of Executable Form If You distribute Covered Software in Executable Form then: (a) such Covered Software must also be made available in Source Code Form, as described in Section 3.1, and You must inform recipients of the Executable Form how they can obtain a copy of such Source Code Form by reasonable means in a timely manner, at a charge no more than the cost of distribution to the recipient; and (b) You may distribute such Executable Form under the terms of this License, or sublicense it under different terms, provided that the license for the Executable Form does not attempt to limit or alter the recipients' rights in the Source Code Form under this License. 3.3. Distribution of a Larger Work You may create and distribute a Larger Work under terms of Your choice, provided that You also comply with the requirements of this License for the Covered Software. If the Larger Work is a combination of Covered Software with a work governed by one or more Secondary Licenses, and the Covered Software is not Incompatible With Secondary Licenses, this License permits You to additionally distribute such Covered Software under the terms of such Secondary License(s), so that the recipient of the Larger Work may, at their option, further distribute the Covered Software under the terms of either this License or such Secondary License(s). 3.4. Notices You may not remove or alter the substance of any license notices (including copyright notices, patent notices, disclaimers of warranty, or limitations of liability) contained within the Source Code Form of the Covered Software, except that You may alter any license notices to the extent required to remedy known factual inaccuracies. 3.5. Application of Additional Terms You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, You may do so only on Your own behalf, and not on behalf of any Contributor. You must make it absolutely clear that any such warranty, support, indemnity, or liability obligation is offered by You alone, and You hereby agree to indemnify every Contributor for any liability incurred by such Contributor as a result of warranty, support, indemnity or liability terms You offer. You may include additional disclaimers of warranty and limitations of liability specific to any jurisdiction. 4. Inability to Comply Due to Statute or Regulation --------------------------------------------------- If it is impossible for You to comply with any of the terms of this License with respect to some or all of the Covered Software due to statute, judicial order, or regulation then You must: (a) comply with the terms of this License to the maximum extent possible; and (b) describe the limitations and the code they affect. Such description must be placed in a text file included with all distributions of the Covered Software under this License. Except to the extent prohibited by statute or regulation, such description must be sufficiently detailed for a recipient of ordinary skill to be able to understand it. 5. Termination -------------- 5.1. The rights granted under this License will terminate automatically if You fail to comply with any of its terms. However, if You become compliant, then the rights granted under this License from a particular Contributor are reinstated (a) provisionally, unless and until such Contributor explicitly and finally terminates Your grants, and (b) on an ongoing basis, if such Contributor fails to notify You of the non-compliance by some reasonable means prior to 60 days after You have come back into compliance. Moreover, Your grants from a particular Contributor are reinstated on an ongoing basis if such Contributor notifies You of the non-compliance by some reasonable means, this is the first time You have received notice of non-compliance with this License from such Contributor, and You become compliant prior to 30 days after Your receipt of the notice. 5.2. If You initiate litigation against any entity by asserting a patent infringement claim (excluding declaratory judgment actions, counter-claims, and cross-claims) alleging that a Contributor Version directly or indirectly infringes any patent, then the rights granted to You by any and all Contributors for the Covered Software under Section 2.1 of this License shall terminate. 5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user license agreements (excluding distributors and resellers) which have been validly granted by You or Your distributors under this License prior to termination shall survive termination. ************************************************************************ * * * 6. Disclaimer of Warranty * * ------------------------- * * * * Covered Software is provided under this License on an "as is" * * basis, without warranty of any kind, either expressed, implied, or * * statutory, including, without limitation, warranties that the * * Covered Software is free of defects, merchantable, fit for a * * particular purpose or non-infringing. The entire risk as to the * * quality and performance of the Covered Software is with You. * * Should any Covered Software prove defective in any respect, You * * (not any Contributor) assume the cost of any necessary servicing, * * repair, or correction. This disclaimer of warranty constitutes an * * essential part of this License. No use of any Covered Software is * * authorized under this License except under this disclaimer. * * * ************************************************************************ ************************************************************************ * * * 7. Limitation of Liability * * -------------------------- * * * * Under no circumstances and under no legal theory, whether tort * * (including negligence), contract, or otherwise, shall any * * Contributor, or anyone who distributes Covered Software as * * permitted above, be liable to You for any direct, indirect, * * special, incidental, or consequential damages of any character * * including, without limitation, damages for lost profits, loss of * * goodwill, work stoppage, computer failure or malfunction, or any * * and all other commercial damages or losses, even if such party * * shall have been informed of the possibility of such damages. This * * limitation of liability shall not apply to liability for death or * * personal injury resulting from such party's negligence to the * * extent applicable law prohibits such limitation. Some * * jurisdictions do not allow the exclusion or limitation of * * incidental or consequential damages, so this exclusion and * * limitation may not apply to You. * * * ************************************************************************ 8. Litigation ------------- Any litigation relating to this License may be brought only in the courts of a jurisdiction where the defendant maintains its principal place of business and such litigation shall be governed by laws of that jurisdiction, without reference to its conflict-of-law provisions. Nothing in this Section shall prevent a party's ability to bring cross-claims or counter-claims. 9. Miscellaneous ---------------- This License represents the complete agreement concerning the subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not be used to construe this License against a Contributor. 10. Versions of the License --------------------------- 10.1. New Versions Mozilla Foundation is the license steward. Except as provided in Section 10.3, no one other than the license steward has the right to modify or publish new versions of this License. Each version will be given a distinguishing version number. 10.2. Effect of New Versions You may distribute the Covered Software under the terms of the version of the License under which You originally received the Covered Software, or under the terms of any subsequent version published by the license steward. 10.3. Modified Versions If you create software not governed by this License, and you want to create a new license for such software, you may create and use a modified version of this License if you rename the license and remove any references to the name of the license steward (except to note that such modified license differs from this License). 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses If You choose to distribute Source Code Form that is Incompatible With Secondary Licenses under the terms of this version of the License, the notice described in Exhibit B of this License must be attached. Exhibit A - Source Code Form License Notice ------------------------------------------- This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. If it is not possible or desirable to put the notice in a particular file, then You may include the notice in a location (such as a LICENSE file in a relevant directory) where a recipient would be likely to look for such a notice. You may add additional accurate notices of copyright ownership. Exhibit B - "Incompatible With Secondary Licenses" Notice --------------------------------------------------------- This Source Code Form is "Incompatible With Secondary Licenses", as defined by the Mozilla Public License, v. 2.0.

简介

使用python进行股票分析和选股 展开 收起
Python
MPL-2.0
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Python
1
https://gitee.com/alans2014/stock-analysis.git
git@gitee.com:alans2014/stock-analysis.git
alans2014
stock-analysis
股票分析
master

搜索帮助