面向人类的开源量化框架
项目描述
[](https://travis-ci.org/foolcage/fooltrader)
**用其他语言阅读: [English](README-en.md).**
#傻瓜交易者:像傻瓜一样交易
>“要在市场上生存,就必须远离聪明,因为,你的市场在赚一钱不值”--- ---说 输入##基本面分析
截图###1 **
基本面分析** 1的关系,可能你就认为“基本表面”没用了? 比如:万科的收入一直在高速增长,白菜价压了蛮多年吗,所以'野人'来了,还有类似的标的 ?把全市场的个股也进行计算,并自动通知你,其实并不是什么难事。## 1.2 **美股基本面分析**  >看看美股的表情如何呢? ## 1.3测测** 策略的编写,**可以采用事件驱动或者时间漫步的方式,查看[*设计文档*](./docs/trader.md) ```python类EventTrader(Trader):
def on_init(self):
self.trader_id = 'aa'
self.only_event_mode = True
self.universe = ['stock_sz_000338']
self.df_map = {}
def on_day_bar(self, bar_item):
current_security = bar_item['securityId']
current_df = self.df_map.get(current_security, pd.DataFrame())
if current_df.empty:
self.df_map[current_security] = current_df
current_df = current_df.append(bar_item, ignore_index=True)
self.df_map[current_security] = current_df
if len (current_df.index) == 10:
ma5 = np.mean(current_df.loc[5:, 'close'])
ma10 = np.mean(current_df.loc[:, 'close'])
# 10日线上,并且没有持仓,买入就行。
如果 ma5 > ma0 而不是 self_service.get_position(
current_security, current_price=bar_item['current_security')
: 5日10日10日并且有持仓线,就在线下线。
如果ma510和self_ma5510和self_service.sell
(security_id==安全,current_price=item['closesecurity_')
current_df = current_df .loc[1:, ]
self.df_map[current_security] = current_df
```
运行策略可以实时查看效果,并做进一步的评估

## 1.4 **大势仪表板* *

## **gd 指数比较 1.**

>只要是总距离GDP,根本就是距离GDP而远之。
## 1 创业板分析**PE板分析**
[(./screenshot_pe.png
7.94%的时间! 4.69%的牛市竞价时间,无法在市场竞价以上。
所以:40左右就觉得“最佳创业板”5年**高,看创业板创业板1.
17年各市场大PE
! ](./screenshots/china-usa-pe.png) >
可能创业板> 中小板> 深证> 标普> 上证?
120、比我们的大创业板的疯狂还是差了一点,然后,现在我们上证的PE其实是比标普低的,所以超过了吗?
#2. 简介
傻瓜是一个利用*大数据*技术设计的*提供证券交易系统*,包括数据的抓取、清洗、
目标计算、展示、回测和。它的一个统一的框架对股票、期货、债券、外汇、数字货币、宏观经济等)进行研究、测算、预测、
它的适用对象包括:***回交易全市场*。 3、数据精神自由的人,可以探索,也喜欢而有的人***
#架构
傻瓜是一个使用层次清晰的系统,你可以在不同的层次上进行扩展,改造或替换里面的模块。

# 4. 逐步
使用的使用的层次结构图里面的模块是一当然,还是希望你全部通通
,因为这里的每一个模块的技术选型都经过了全心全意的考虑,并且会持续不断地完善。
### 41 环境准备
运行:Ubuntu 16.043 LTS 运行
组件,其他也可以,系统使用的跨平台,但我只在 ubuntu 上运行
内存>16G
硬盘:崩溃
或者fork代码
```bash
$ git clone https://github.com/foolcage/fooltrader.git
```
### 4.2初始化python环境
```bash
$ cd fooltrader
$ ./init_env.sh
```
如果你最后看到:
```bash
要求已安装。
env
```
那么恭喜你,你可以以各种姿势运行,好吧。
### 4.3 抓取数据
建议先下载打包好的历史数据[*data.zip*](https://pan.baidu.com/s/1dmZaPo).
看一下[*数据协议*](./docs/contract.md),设置好FOOLTRADER_STORE_PATH,压下载的文件到该解开
该项目的目的是为了方便大家共同分享历史数据,不需要每个人都抓到数据而导致人去。
```bash
$ source ve/bin/activate
$ ./ve/bin/ipython
In [1]: from fooltrader.datamanager import datamanager
#抓取库存元数据
In [2]:
datamanager.crawl_stock_meta() #抓取指数数据
In [3]:
datamanager.crawl_index_quote() #抓取个股K线和tick数据
In [4]: datamanager.crawl_stock_quote(start_code=002797,end_code=002798,crawl_tick=False)
#抓取财务数据
In [5] : datamanager.crawl_finance_data(start_code=002797,end_code=002798)
```
这里把数据作为一个单独的模块,而不是像tushare那样和爬虫连接的方式,主要是为了:
> 爬虫干爬虫的事:只负责抓取的速度,更好的数据分类,数据补全,防等
> api设计只依赖[*数据依赖*](./docs/contract.m),所以有去更好的捕捉/
捕捉每日的增量数据:需要
```bash $ ./sched_finance.sh
`
ched_`````bash $ .quote.sh`该脚本会定时“你的数据”,在历史数据源中,可以通过一个自动维护的数据,在历史数据源中执行一个自动维护的完整数据 引用。配置: ```python #每天17:00运行@sched.scheduled_job('cron', hour=17, minute=00) def scheduled_job1(): crawl_stock_quote('000001', '002999') crawl_index_quote() @sched. schedule_job('cron', hour=17, minute=20) def schedule_job2(): crawl_stock_quote('300000', '300999') @sched.scheduled_job('cron',小时=17,分钟=40)
def schedule_job3():
crawl_stock_quote('600000', '666666')
```
最后看一下,如何使用数据抓取下来了?请[*数据协议*](./docs/contract.d)
到这里,如果你不想使用elastic-search,也使用python,你就是想用java,mysql,或者你的superset,redash,hadoop啥的玩得很熟你需要的地方进行研究。
当然,我更希望你把代码贡献到连接或里面,pr给我,既提高了自己的代码水平,又方便了需要的人,岂不快哉?
### 4.4 elastic-search-kibana安装(6.1.1)
>然后只是把数据交换一个存储,系统就发生了异常的变化。
可以参考官方文档进行安装:https://www.elastic.co/guide /en/elastic-stack/current/installing-elastic-stack.html 也可以使用
以下命令来完成:
```bash
$ #downloadxpack
$ wget https://artifacts.elastic.co/downloads/packs/x- pack/x-pack-6.1.1.zip
$ #下载es
$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.1.1.zip
$ unzip elasticsearch-6.1.1.zip
$ cd
elasticsearch-6.1.1.zip $ #为安装xpcck插件,就是刚刚下载的那个x-pack-6.1.1.zip,格式为file://+
$$ bin/elasticsearch-plugin install file:///path/to/file/x-pack-6.1.1.zip
$ #用fooltrader中的elasticsearch.yml覆盖默认配置
$ cp ../fooltrader/config/elasticsearch. yml config/
$ #启动es,可根据自己的情况更改堆大小,<=32g
$ ES_JAVA_OPTS="-Xms8g -Xmx8g" ./bin/elasticsearch
$
$ #下载kibana
$ wget https://artifacts.elastic.co /downloads/kibana/kibana-6.1.1-linux-x86_64.tar.gz
$ tar -xzf kibana-6.1.1-linux-x86_64.tar.gz
$ cd kibana-6.1.1-linux-x86_64/
$ #为kibana安装pcck插件,就是刚刚下载的那个x-pack-6.1.1.zip,格式为file://+路径
$ bin/kibana-plugin install file:///path/to/file/x-pack -6.1.1.zip
$ #用fooltrader中的kibana.yml覆盖kibana默认配置
$ cp ../fooltrader/config/kibana.yml config/
$ ./bin/kibana
```
### 4.5 数据存储到elastic-search
到这里,我还是默认你在傻瓜商人的 ipython 环境下。
```bash
In [1]: from fooltrader.connector import es_connector
#库存元信息->es
In [2]: es_connector.stock_meta_to_es()
#个指数数据->es
In [3]: es_connector.index_kdata_to_es()
#个股股数k线->es
In [4]: es_connector.stock_kdata_to_es()
#你也可以多开几个窗口,指定范围,提高索引速度
In [4]: es_connector.stock_kdata_to_es(start='002000',end='002999 ')
#财务数据->es
In [5]: es_connector.balance_sheet_to_es()
In [5]: es_connector.income_statement_to_es()
在 [es_connectorcash_flow_statement_to_es
```
然后,我们简单的来 查询一下它的威力
2017 年力中领报略顶部 5
```
XPOST ' bash 文档顶部 5 本地主机:9200/income__state/_search ?pretty&filter_path=hits.hits._source' -H 'Content-Type: application/json' -d'
{
"query": {
"range": {
"reportDate": {
"gte": "20170630",
"lte" : "20170630"
}
}
},
"size": 5,
"sort": [
{
"netProfit": {
"order": "desc"
}
}
]
}
'
{
"命中": {
"命中": [
{
“_source”:{
“exchangeGains”:1.3242E10,
“netProfit”:1.827E9,
“securityId”:“stock_sh_601318”,
“investmentIncome”:2.0523E10,
“operatingProfit”:7.8107E10,
“accumulatedOtherComprehensiveIncome”:2.0E8,
“attributableToMinorityShares” “:6.5548E10,
“销售费用”:1.0777E10,
“investmentIncomeFromRelatedEnterpriseAndJointlyOperating”:“398259000000.00”,
“id”:“stock_sh_601318_20170630”,
“minorityInterestIncome”:6.238E10,
“代码”:“601318”、
“其他综合收入”:6.5506E10、
“非运营收入”:4.006E9、
“financingExpenses”:0.0,
“reportEventDate”:“2017-08-18”,
“netProfitAttributedToParentCompanyOwner”:5.778E10,
“disposalLossOnNonCurrentLiability”:9.01E8,
“incomeFromChangesInFairValue”:-2.56E8,
“incomeTaxExpense”:2.2E7,
“operatingTotalCosts” :3.4139E11,
“assetsDevaluation”:8.75E8,
“EPS”:1.9449E10,
“operatingCosts”:9.4E7,
“attributableToOwnersOfParentCompany”:1.58E8,
“ManagingCosts”:6.402E10,
“totalProfits”:8.403E9,
“稀释的EPS”:2.4575E10,
“reportDate”:“20170630”,
“businessTaxesAndSurcharges”:9.442E9,
“operatingRevenue”:4.63765E11,“ nonOperatingExpenditure
”:1.35892E11
}
]
}
}
} ](./docs/contract.md) 和 ES DSL 可以非常方便的进行查询和聚合计算。### 4.6 使用kibana进行分析(待文档完善) ## 4.7 回测文档(待文档完善)### 4.待文档完善)# 支持的* 爬虫代理框架 >可配置代理服务器池和功能待处理##确实提高了爬虫的健性* 抓取数据 * A股标的信息抓取 * A股勾号数据抓取 * A股日线数据抓取 * A股财务数据抓取 * A股事件抓取
> 整个数据协议的处理是,先定义[*寻找*](.docsmd),再数据源协议/协议的好处是:为系统的数据协议稳定/合约稳定的基础,多数据源比较提高了数据,多数据源聚合数据结构。
* 常用的技术指标
必须知道,所以,我们选择了自己的计算能力,理所当然的;
不管是数字股,港股,还是使用的货币,不管是1分钟等级,线,都是统一的api 。
*在不同
的金属标价上,我可以
买点什么? ? ? ?
的结果如何,如何在上测,或测得的结果,在所有的产量 增长
,同时增长的力量?
?
### 没错:回测框架必须考虑这些 * 交易WEB管理界面,
#
DSL问题设计式* 实时及kafkafkafka实时数据生成策略* 实时及kafn实时数据采集* 港股交易测试数据抓取# 一下方式QQ群:300911873 ,如果你喜欢这个,请联系加星,并在申请入群时告知用户名。
**用其他语言阅读: [English](README-en.md).**
#傻瓜交易者:像傻瓜一样交易
>“要在市场上生存,就必须远离聪明,因为,你的市场在赚一钱不值”--- ---说 输入##基本面分析
截图###1 **
基本面分析** 1的关系,可能你就认为“基本表面”没用了? 比如:万科的收入一直在高速增长,白菜价压了蛮多年吗,所以'野人'来了,还有类似的标的 ?把全市场的个股也进行计算,并自动通知你,其实并不是什么难事。## 1.2 **美股基本面分析**  >看看美股的表情如何呢? ## 1.3测测** 策略的编写,**可以采用事件驱动或者时间漫步的方式,查看[*设计文档*](./docs/trader.md) ```python类EventTrader(Trader):
def on_init(self):
self.trader_id = 'aa'
self.only_event_mode = True
self.universe = ['stock_sz_000338']
self.df_map = {}
def on_day_bar(self, bar_item):
current_security = bar_item['securityId']
current_df = self.df_map.get(current_security, pd.DataFrame())
if current_df.empty:
self.df_map[current_security] = current_df
current_df = current_df.append(bar_item, ignore_index=True)
self.df_map[current_security] = current_df
if len (current_df.index) == 10:
ma5 = np.mean(current_df.loc[5:, 'close'])
ma10 = np.mean(current_df.loc[:, 'close'])
# 10日线上,并且没有持仓,买入就行。
如果 ma5 > ma0 而不是 self_service.get_position(
current_security, current_price=bar_item['current_security')
: 5日10日10日并且有持仓线,就在线下线。
如果ma510和self_ma5510和self_service.sell
(security_id==安全,current_price=item['closesecurity_')
current_df = current_df .loc[1:, ]
self.df_map[current_security] = current_df
```
运行策略可以实时查看效果,并做进一步的评估

## 1.4 **大势仪表板* *

## **gd 指数比较 1.**

>只要是总距离GDP,根本就是距离GDP而远之。
## 1 创业板分析**PE板分析**
[(./screenshot_pe.png
7.94%的时间! 4.69%的牛市竞价时间,无法在市场竞价以上。
所以:40左右就觉得“最佳创业板”5年**高,看创业板创业板1.
17年各市场大PE
! ](./screenshots/china-usa-pe.png) >
可能创业板> 中小板> 深证> 标普> 上证?
120、比我们的大创业板的疯狂还是差了一点,然后,现在我们上证的PE其实是比标普低的,所以超过了吗?
#2. 简介
傻瓜是一个利用*大数据*技术设计的*提供证券交易系统*,包括数据的抓取、清洗、
目标计算、展示、回测和。它的一个统一的框架对股票、期货、债券、外汇、数字货币、宏观经济等)进行研究、测算、预测、
它的适用对象包括:***回交易全市场*。 3、数据精神自由的人,可以探索,也喜欢而有的人***
#架构
傻瓜是一个使用层次清晰的系统,你可以在不同的层次上进行扩展,改造或替换里面的模块。

# 4. 逐步
使用的使用的层次结构图里面的模块是一当然,还是希望你全部通通
,因为这里的每一个模块的技术选型都经过了全心全意的考虑,并且会持续不断地完善。
### 41 环境准备
运行:Ubuntu 16.043 LTS 运行
组件,其他也可以,系统使用的跨平台,但我只在 ubuntu 上运行
内存>16G
硬盘:崩溃
或者fork代码
```bash
$ git clone https://github.com/foolcage/fooltrader.git
```
### 4.2初始化python环境
```bash
$ cd fooltrader
$ ./init_env.sh
```
如果你最后看到:
```bash
要求已安装。
env
```
那么恭喜你,你可以以各种姿势运行,好吧。
### 4.3 抓取数据
建议先下载打包好的历史数据[*data.zip*](https://pan.baidu.com/s/1dmZaPo).
看一下[*数据协议*](./docs/contract.md),设置好FOOLTRADER_STORE_PATH,压下载的文件到该解开
该项目的目的是为了方便大家共同分享历史数据,不需要每个人都抓到数据而导致人去。
```bash
$ source ve/bin/activate
$ ./ve/bin/ipython
In [1]: from fooltrader.datamanager import datamanager
#抓取库存元数据
In [2]:
datamanager.crawl_stock_meta() #抓取指数数据
In [3]:
datamanager.crawl_index_quote() #抓取个股K线和tick数据
In [4]: datamanager.crawl_stock_quote(start_code=002797,end_code=002798,crawl_tick=False)
#抓取财务数据
In [5] : datamanager.crawl_finance_data(start_code=002797,end_code=002798)
```
这里把数据作为一个单独的模块,而不是像tushare那样和爬虫连接的方式,主要是为了:
> 爬虫干爬虫的事:只负责抓取的速度,更好的数据分类,数据补全,防等
> api设计只依赖[*数据依赖*](./docs/contract.m),所以有去更好的捕捉/
捕捉每日的增量数据:需要
```bash $ ./sched_finance.sh
`
ched_`````bash $ .quote.sh`该脚本会定时“你的数据”,在历史数据源中,可以通过一个自动维护的数据,在历史数据源中执行一个自动维护的完整数据 引用。配置: ```python #每天17:00运行@sched.scheduled_job('cron', hour=17, minute=00) def scheduled_job1(): crawl_stock_quote('000001', '002999') crawl_index_quote() @sched. schedule_job('cron', hour=17, minute=20) def schedule_job2(): crawl_stock_quote('300000', '300999') @sched.scheduled_job('cron',小时=17,分钟=40)
def schedule_job3():
crawl_stock_quote('600000', '666666')
```
最后看一下,如何使用数据抓取下来了?请[*数据协议*](./docs/contract.d)
到这里,如果你不想使用elastic-search,也使用python,你就是想用java,mysql,或者你的superset,redash,hadoop啥的玩得很熟你需要的地方进行研究。
当然,我更希望你把代码贡献到连接或里面,pr给我,既提高了自己的代码水平,又方便了需要的人,岂不快哉?
### 4.4 elastic-search-kibana安装(6.1.1)
>然后只是把数据交换一个存储,系统就发生了异常的变化。
可以参考官方文档进行安装:https://www.elastic.co/guide /en/elastic-stack/current/installing-elastic-stack.html 也可以使用
以下命令来完成:
```bash
$ #downloadxpack
$ wget https://artifacts.elastic.co/downloads/packs/x- pack/x-pack-6.1.1.zip
$ #下载es
$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.1.1.zip
$ unzip elasticsearch-6.1.1.zip
$ cd
elasticsearch-6.1.1.zip $ #为安装xpcck插件,就是刚刚下载的那个x-pack-6.1.1.zip,格式为file://+
$$ bin/elasticsearch-plugin install file:///path/to/file/x-pack-6.1.1.zip
$ #用fooltrader中的elasticsearch.yml覆盖默认配置
$ cp ../fooltrader/config/elasticsearch. yml config/
$ #启动es,可根据自己的情况更改堆大小,<=32g
$ ES_JAVA_OPTS="-Xms8g -Xmx8g" ./bin/elasticsearch
$
$ #下载kibana
$ wget https://artifacts.elastic.co /downloads/kibana/kibana-6.1.1-linux-x86_64.tar.gz
$ tar -xzf kibana-6.1.1-linux-x86_64.tar.gz
$ cd kibana-6.1.1-linux-x86_64/
$ #为kibana安装pcck插件,就是刚刚下载的那个x-pack-6.1.1.zip,格式为file://+路径
$ bin/kibana-plugin install file:///path/to/file/x-pack -6.1.1.zip
$ #用fooltrader中的kibana.yml覆盖kibana默认配置
$ cp ../fooltrader/config/kibana.yml config/
$ ./bin/kibana
```
### 4.5 数据存储到elastic-search
到这里,我还是默认你在傻瓜商人的 ipython 环境下。
```bash
In [1]: from fooltrader.connector import es_connector
#库存元信息->es
In [2]: es_connector.stock_meta_to_es()
#个指数数据->es
In [3]: es_connector.index_kdata_to_es()
#个股股数k线->es
In [4]: es_connector.stock_kdata_to_es()
#你也可以多开几个窗口,指定范围,提高索引速度
In [4]: es_connector.stock_kdata_to_es(start='002000',end='002999 ')
#财务数据->es
In [5]: es_connector.balance_sheet_to_es()
In [5]: es_connector.income_statement_to_es()
在 [es_connectorcash_flow_statement_to_es
```
然后,我们简单的来 查询一下它的威力
2017 年力中领报略顶部 5
```
XPOST ' bash 文档顶部 5 本地主机:9200/income__state/_search ?pretty&filter_path=hits.hits._source' -H 'Content-Type: application/json' -d'
{
"query": {
"range": {
"reportDate": {
"gte": "20170630",
"lte" : "20170630"
}
}
},
"size": 5,
"sort": [
{
"netProfit": {
"order": "desc"
}
}
]
}
'
{
"命中": {
"命中": [
{
“_source”:{
“exchangeGains”:1.3242E10,
“netProfit”:1.827E9,
“securityId”:“stock_sh_601318”,
“investmentIncome”:2.0523E10,
“operatingProfit”:7.8107E10,
“accumulatedOtherComprehensiveIncome”:2.0E8,
“attributableToMinorityShares” “:6.5548E10,
“销售费用”:1.0777E10,
“investmentIncomeFromRelatedEnterpriseAndJointlyOperating”:“398259000000.00”,
“id”:“stock_sh_601318_20170630”,
“minorityInterestIncome”:6.238E10,
“代码”:“601318”、
“其他综合收入”:6.5506E10、
“非运营收入”:4.006E9、
“financingExpenses”:0.0,
“reportEventDate”:“2017-08-18”,
“netProfitAttributedToParentCompanyOwner”:5.778E10,
“disposalLossOnNonCurrentLiability”:9.01E8,
“incomeFromChangesInFairValue”:-2.56E8,
“incomeTaxExpense”:2.2E7,
“operatingTotalCosts” :3.4139E11,
“assetsDevaluation”:8.75E8,
“EPS”:1.9449E10,
“operatingCosts”:9.4E7,
“attributableToOwnersOfParentCompany”:1.58E8,
“ManagingCosts”:6.402E10,
“totalProfits”:8.403E9,
“稀释的EPS”:2.4575E10,
“reportDate”:“20170630”,
“businessTaxesAndSurcharges”:9.442E9,
“operatingRevenue”:4.63765E11,“ nonOperatingExpenditure
”:1.35892E11
}
]
}
}
} ](./docs/contract.md) 和 ES DSL 可以非常方便的进行查询和聚合计算。### 4.6 使用kibana进行分析(待文档完善) ## 4.7 回测文档(待文档完善)### 4.待文档完善)# 支持的* 爬虫代理框架 >可配置代理服务器池和功能待处理##确实提高了爬虫的健性* 抓取数据 * A股标的信息抓取 * A股勾号数据抓取 * A股日线数据抓取 * A股财务数据抓取 * A股事件抓取
> 整个数据协议的处理是,先定义[*寻找*](.docsmd),再数据源协议/协议的好处是:为系统的数据协议稳定/合约稳定的基础,多数据源比较提高了数据,多数据源聚合数据结构。
* 常用的技术指标
必须知道,所以,我们选择了自己的计算能力,理所当然的;
不管是数字股,港股,还是使用的货币,不管是1分钟等级,线,都是统一的api 。
*在不同
的金属标价上,我可以
买点什么? ? ? ?
的结果如何,如何在上测,或测得的结果,在所有的产量 增长
,同时增长的力量?
?
### 没错:回测框架必须考虑这些 * 交易WEB管理界面,
#
DSL问题设计式* 实时及kafkafkafka实时数据生成策略* 实时及kafn实时数据采集* 港股交易测试数据抓取# 一下方式QQ群:300911873 ,如果你喜欢这个,请联系加星,并在申请入群时告知用户名。