Giter VIP home page Giter VIP logo

stockholm's Introduction

Stockholm

一个股票数据(沪深)爬虫和选股策略测试框架,数据基于雅虎YQL和新浪财经。

  • 根据选定的日期范围抓取所有沪深两市股票的行情数据。
  • 根据指定的选股策略和指定的日期进行选股测试。
  • 计算选股测试实际结果(包括与沪深300指数比较)。
  • 保存数据到JSON文件、CSV文件。
  • 支持使用表达式定义选股策略。
  • 支持多线程处理。

能干什么

如果你想基于沪深股市行情数据进行一些工作,它可以帮助你导出指定时间范围内所有沪深A股的行情数据和一些技术指标,包括代码、名称、开盘、收盘、最高、最低、成交量、均线、KDJ等。
如果你对于技术分析有兴趣,它可以帮你根据你自定义的策略在所有沪深A股的范围内进行选股,并回测选股策略的收益情况(详细说明后面会有)。这样就能够非常方便快捷地测试和调整基于技术分析的选股策略。

还有些什么问题

行情数据目前来源于雅虎YQL,每日数据的更新时间不太稳定(一般在**时间午夜左右)。
目前支持的技术指标还不多,还有一些指标如MACD和BOLL后续会增加。
在回测中,如果有在选定时间内发生过除权的股票,收益计算会有问题。
导出格式目前只支持CSV和JSON文本。MongoDB和MySQL会考虑后续加入。

环境

Python 3.4以上
Requests
PyMongo
OSX和CentOS已测。Windows尚未测试,输出路径可能有问题。

pip install requests
pip install pymongo

使用

python main.py [-h] [--reload {Y,N}] [--portfolio {Y,N}] 
               [--output {json,csv,all}] [--storepath PATH] [--thread NUM] 
               [--startdate yyyy-MM-dd] [--enddate yyyy-MM-dd] 
               [--targetdate yyyy-MM-dd] [--testrange NUM] [--testfile PATH]

可选参数

  -h, --help                  查看帮助并退出
  --reload {Y,N}              是否重新抓取股票数据,默认值:Y
  --portfolio {Y,N}           是否生成选股测试结果,默认值:N
  --output {json,csv,all}     输出文件格式,默认值:json
  --charset {utf-8,gbk}       输出文件编码,默认值:utf-8
  --storepath PATH            输出文件路径,默认值:~/tmp/stockholm_export
  --thread NUM                线程数,默认值:10
  --startdate yyyy-MM-dd      抓取数据的开始日期,默认值:当前系统日期-100天(例如2015-01-01)
  --enddate yyyy-MM-dd        抓取数据的结束日期,默认值:当前系统日期
  --targetdate yyyy-MM-dd     测试选股策略的目标日期,默认值:当前系统日期
  --testrange NUM             测试日期范围天数,默认值:50
  --testfile PATH             测试文件路径,默认值:./portfolio_test.txt

可用数据/格式

行情数据:

[
	{"Symbol": "600000.SS", 
	 "Name": "浦发银行""Data": [
				 {"Vol_Change": null, "MA_10": null, "Date": "2015-03-26", "High": 15.58, "Open": 15.15, "Volume": 282340700, "Close": 15.36, "Change": null, "Low": 15.04}, 
				 {"Vol_Change": -0.22726, "MA_10": null, "Date": "2015-03-27", "High": 15.55, "Open": 15.32, "Volume": 218174900, "Close": 15.36, "Change": 0.0, "Low": 15.17}
			 ]
	}
]

Date(日期); Open(开盘价); Close(收盘价); High(当日最高); Low(当日最低); Change(价格变化%); Volume(成交量); Vol_Change(成交量较前日变化); MA_5(5日均线); MA_10(10日均线); MA_20(20日均线); MA_30(30日均线); KDJ_K(KDJ指标K); KDJ_D(KDJ指标D); KDJ_J(KDJ指标J);
以上数据都可以用于制定选股策略,后面会介绍具体方法。

选股策略测试数据:

[
	{
		"Symbol": "600000.SS", 
		"Name": "浦发银行", 
		"Close": 14.51, 
		"Change": 0.06456,
		"Vol_Change": 2.39592, 
		"MA_10": 14.171, 
		"KDJ_K": 37.65, 
		"KDJ_D": 33.427, 
		"KDJ_J": 46.096, 
		"Data": [
					{"Day_5_Differ": 0.01869, "Day_9_Profit": 0.08546, "Day_1_Profit": -0.02826, "Day_1_INDEX_Change": -0.00484, "Day_3_INDEX_Change": 0.01557, "Day_5_INDEX_Change": 0.04747, "Day_3_Differ": 0.02647, "Day_9_INDEX_Change": 0.1003, "Day_5_Profit": 0.06616, "Day_3_Profit": 0.04204, "Day_1_Differ": -0.02342, "Day_9_Differ": -0.014840000000000006}
				]
	}
]

Close(收盘价); Change(价格变化%); Vol_Change(成交量较前日变化); MA_10(十天均价); KDJ_K(KDJ指标K); KDJ_D(KDJ指标D); KDJ_J(KDJ指标J); Day_1_Profit(后一天利润率%); Day_1_INDEX_Change(后一天沪深300变化率%); Day_1_Differ(后一天相对利润率%——即利润率-沪深300变化率); Day_n_Profit(后n天利润率%); Day_n_INDEX_Change(后n天沪深300变化率%); Day_n_Differ(后n天相对利润率%——即利润率-沪深300变化率);

行情数据抓取范例

获取从当前日期倒推100天(不是100个交易日)的所有沪深股票行情数据。
执行完成后,数据在当前用户文件夹下./tmp/stockholm_export/stockholm_export.json

python main.py

如果想导出csv文件

python main.py --output=csv

选股策略测试范例

选股策略范例文件内容如下(包括在源码中)
选股策略"method 1"是:前前个交易日的KDJ指标的J值小于20+前个交易日的KDJ指标J值小于20+当前交易日的KDJ指标J值比上个交易日大40+当前交易日成交量变化大于100%

## Portfolio selection methodology sample file

[method 1]:day(-2).{KDJ_J}<20 and day(-1).{KDJ_J}<20 and day(0).{KDJ_J}-day(-1).{KDJ_J}>=40 and day(0).{Vol_Change}>=1

以当前系统日期为目标日期进行倒推60天得选股策略测试。
不重新抓取行情数据并执行测试命令。
执行完毕后,会将测试结果按照每天一个文件的方式保存在./tmp/stockholm_export/。
文件名格式为result_yyyy-MM-dd.json(例如result_2015-03-24.json)。

python main.py --reload=N --portfolio=Y

通过更改测试文件中的选股策略公式,可以随意测试指定时间范围内的选股效果。

stockholm's People

Contributors

benitoro avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

stockholm's Issues

中文出现乱码

我在ubuntu14.04LTS上跑,CSV文件的中文都是乱码。。。还没仔细研究是咋回事

KeyError: 'Data'

Traceback (most recent call last):
File "main.py", line 34, in
main()
File "main.py", line 30, in main
stockh.run()
File " stockholm/stockholm/stockholm.py", line 671, in run
self.data_test(self.target_date, self.test_date_range, output_types)
File " stockholm/stockholm/stockholm.py", line 647, in data_test
is_date_valid = self.check_date(all_quotes, date)
File " stockholm/stockholm/stockholm.py", line 471, in check_date
for quote_data in quote['Data']:
KeyError: 'Data'

The same problem with KeyError:'Data'

Dear Mr/ms benitoro
I am interested in your project. While i run your code, there come out the same problem with KeyError:'Data' as last visitor. Let me introduce my environment: Centos 6.5 64bit--Python 3.5.2 | Anaconda 4.1.1(64-bit). The error code is as below:
[root@www stockholm]# python main.py --reload=N --portfolio=Y
Stockholm is starting...

Start portfolio testing...

file_data_load start...

file_data_load end... time cost: 2s

Traceback (most recent call last):
File "main.py", line 34, in
main()
File "main.py", line 30, in main
stockh.run()
File "/dl1/stockholm-master/stockholm/stockholm.py", line 669, in run
self.data_test(self.target_date, self.test_date_range, output_types)
File "/dl1/stockholm-master/stockholm/stockholm.py", line 645, in data_test
is_date_valid = self.check_date(all_quotes, date)
File "/dl1/stockholm-master/stockholm/stockholm.py", line 469, in check_date
for quote_data in quote['Data']:
KeyError: 'Data'

Please help us out and work out this problem, or email me: [email protected] Thank you for your kind help in advance.
Best Regards
A New hobbier

pip/pip3

pip3 已经出现,是否可以注明pip3

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.