Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

A&B professional platform for quantitative finance. God is Asking & Bidding Me. ABQ 基于 通达信 数据的量化.

License

Unknown and 2 other licenses found

Licenses found

Unknown
LICENSE
GPL-3.0
LICENSE.GPL3
LGPL-3.0
LICENSE.LGPL3
Notifications You must be signed in to change notification settings

yssource/abquant-data

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

148 Commits
# -*- mode:org; org-confirm-babel-evaluate: nil -*-
#+TITLE: abquant
#+AUTHOR: Jimmy M. Gong
#+EMAIL: yssource@163.com
#+LANGUAGE: zh-Hans
#+OPTIONS: H:3 num:nil toc:nil \n:t ::t |:t ^:nil -:nil f:t *:t <:t html-postamble:nil html-preamble:t tex:t
#+URI: /blog/%y/%m/%d/
#+DATE: 2020年01月01日
#+LAYOUT: post
#+TAGS: OFFICE(o) COMPUTER(c) HOME(h) PROJECT(p) READING(r)
#+CATEGORIES:
#+DESCRIPTON: A&B professional platform for quantitative finance. God is asking & bidding Me. ABQ. GABQ. GABM.
#+KEYWORDS: quant c++
#+STARTUP: overview
#+STARTUP: logdone
* Description
A&B professional platform for quantitative finance. God is asking & bidding Me.
ABQ.
abquant 分为三大模块 a) 数据获取 b) 策略回测 c) 模拟/实盘交易
- abquant-data ::
 开源项目, 快速对 *通达信* 数据的获取,除权除息,各种指数的计算
- abquant-strategy ::
 闭源项目,基于 zeromg/nanomsg
- abquant-trade ::
 [[https://github.com/yssource/rqalpha-mod-xtrade][xtrade]]
 闭源项目
* Note
 [WIP]
 开发中 ...
 ABQuant is an early developer preview, and is not suitable for general usage yet. Features and implementation are subject to change.
* 构建
 作者本人是在 x86_64 Linux 4.19.105-1-MANJARO 上构建本项目,暂时不支持
 Windows. \\
 你需要安装好 clang++/llvm ccache ninja python pip poetry conan cmake/qmake 等基础开发工具
 - 核心模块 cpp
 - 中间层 binding ([[https://github.com/pybind/pybind11.git][pybind11]] [[https://doc.qt.io/qtforpython/shiboken2/][ +shiboken2+ ]])
 - 用户接口层 python
** cpp 依赖
 - ORM 层 [[https://github.com/yssource/treefrog-framework.git][treefrog-framework]] ::
#+name: treefrog-framework
#+begin_src shell :exports code
 git clone -b feature/withConan https://github.com/yssource/treefrog-framework.git
 cd treefrog-framework && mkdir -v qbuild && cd qbuild
 conan install .. --build missing --profile ../tf.profile
 conan build ..
 sudo make install
 sudo ldconfig
#+end_src
 - abquant 核心应用层 ::
#+name: abquant-building
#+begin_src shell :exports code
 git clone https://github.com/yssource/abquant-data.git
 cd abquant-data && mkdir -v qbuild && cd qbuild
 conan install .. --build missing --profile ../abquant.profile
 conan build ..
 sudo make install
 sudo ldconfig
 # binding
 cd abquant-data && mkdir -v cbuild && cd cbuild
 conan install .. --build missing --profile ../abquant.profile
 conan build ..
 # todo:: qbuild, cbuild 将来会直接放在 setup.py 中作为 ext_modules 完成。
 # 用户只需 poetry install
#+end_src
** python 依赖安装
 #+begin_src python :exports code
 poetry install
 poetry update
 #+end_src
** 环境变量
 请参照 .envrc 文件, 推荐使用 direnv 管理环境变量
 #+begin_src shell :exports code
 export ABQ_HOME=${PWD}
 export ABQ_CXX_HOME="${ABQ_HOME}/cxx"
 export LD_LIBRARY_PATH="${ABQ_HOME}/lib:${LD_LIBRARY_PATH}"
 export PYTHONPATH="${ABQ_HOME}/lib:${PYTHONPATH}"
 #+end_src
* Usage
** abquant config
 #+name: config
 #+begin_src shell :exports code
 # 当前项目根目录下,拷贝 config 文件夹
 mkdir -pv ~/.config/abquant && cp -rfv $PWD/cxx/config ~/.config/abquant/
 #+end_src
** abquant 数据获取
 - python 层获取数据源,支持 mongodb
 #+name: data-saving
 #+begin_src shell :exports code
 # 保存所有数据
 # 但是不包含除权数据,除权数据不是经常更新,请手动 "abquant stock xdxr"
 abquant save base
 # 股票和指数列表获取
 abquant stock list
 # 保存所有股票日线,日线指数
 abquant stock day
 abquant stock day --add '["000001", "300001", "600001"]'
 # 保存所有股票分钟线,分钟指数
 # Default 保存所有频率 (1min, 5min, 15min, 30min, 60min)
 abquant stock min
 abquant stock min --add '["000001", "300001", "600001"]'
 # 保存股票分钟线,分钟指数不同频率数据 (1min, 5min, 15min, 30min, 60min)
 # 1min 一分钟
 abquant stock min "1min"
 abquant stock min -f '["1min"]' --add '["000001", "300001", "600001"]'
 # 5min 五分钟
 abquant stock min -f '["5min"]'
 abquant stock min -f '["5min"]' --add '["000001", "300001", "600001"]'
 # ...
 # 1min 一分钟和 5min 五分钟
 abquant stock min -f '["1min", "5min"]'
 abquant stock min -f '["1min", "5min"]' --add '["000001", "300001", "600001"]'
 # 股票除权除息
 abquant stock xdxr
 abquant stock xdxr --add '["000001", "300001", "600001"]'
 # 股票数据板块
 abquant stock block
 # 股票数据明细信息
 abquant stock info
 abquant stock info --add '["000001", "300001", "600001"]'
 # 股票财务数据
 abquant stock financial
 # ETF 列表获取
 abquant etf list
 # 保存所有 ETF 日线,日线指数
 abquant etf day
 abquant etf day --add '["159001", "510010", "510300"]'
 # 保存所有 etf 分钟线,分钟指数
 # Default 保存所有频率 (1min, 5min, 15min, 30min, 60min)
 abquant etf min
 abquant etf min --add '["159001", "510010", "510300"]'
 # 保存 etf 分钟线,分钟指数不同频率数据 (1min, 5min, 15min, 30min, 60min)
 # 1min 一分钟
 abquant etf min "1min"
 abquant etf min -f '["1min"]' --add '["159001", "510010", "510300"]'
 # 5min 五分钟
 abquant etf min -f '["5min"]'
 abquant etf min -f '["5min"]' --add '["159001", "510010", "510300"]'
 # ...
 # 1min 一分钟和 5min 五分钟
 abquant etf min -f '["1min", "5min"]'
 abquant etf min -f '["1min", "5min"]' --add '["159001", "510010", "510300"]'
 # ...
 #+end_src
 #+name: error-data-saving
 #+begin_src shell :results output :exports both
 # 查看保存数据后的错误信息
 bat ~/.config/abquant/log/error_codes.json
 #+end_src
 #+RESULTS: error-data-saving
 : {"Stock_index_day": ["395005"], "Stock_index_min": ["395041", "395005"], "Stock_stock_min": ["300822", "603949", "603353", "300819", "300821", "002976", "688051"], "Stock_xdxr": ["002976", "603949", "300822", "688051", "603353"]}
 #+name: error-data-saving
 #+begin_src shell :results output :exports both
 # 如果在保存数据后,发现数据错误,可以使用
 abquant stock day --add '["395005"]'
 abquant stock min --add '["395041", "395005", "300822", "603949", "603353", "300819", "300821", "002976", "688051"]'
 abquant stock xdxr --add '["002976", "603949", "300822", "688051", "603353"]'
 # 注意:这些数据错误可能是退市,已经不存在的数据。也有可能是网络原因,数据不完整,你需要具体分析。
 # 在下一次保存数据时,最好先
 echo "" 1> ~/.config/abquant/log/error_codes.json
 #+end_src
** abquant 数据使用
 #+name: cpp-data-using
 #+begin_src C++ :exports code
 #include <chrono>
 #include "abquant/actions/abquant.hpp"
 #include "abquant/actions/stockmin.hpp"
 #include "abquant/actions/utils.hpp"
 using namespace abq;
 int main(int argc, char* argv[])
 {
 // abq entry_point
 Abquant::start();
 // QStringList codes = {"000001", "000002", "000003"};
 QStringList codes = {"000001"};
 const char* start = "2017-01-01";
 const char* end = "2019-12-01";
 MIN_FREQ freq = MIN_FREQ::FIVE;
 StockMinAction sma(codes, start, end, freq);
 int N = 10;
 auto begin = std::chrono::high_resolution_clock::now();
 for (int i = 0; i < N; ++i) {
 // 分钟前复权
 sma.to_fq_type(FQ_TYPE::PRE);
 // 分钟后复权
 // sma.to_fq_type(FQ_TYPE::POST);
 }
 auto finish_ = std::chrono::high_resolution_clock::now();
 std::chrono::duration<double> elapsed = finish_ - begin;
 qDebug() << "Elapsed time: " << elapsed.count() << " s\n";
 // abq exit_point
 Abquant::finish();
 return 0;
 }
 #+end_src
** binding 层
 #+name: binding-plot
 #+begin_src shell :exports both
 python ./bind11/test/test_plot.py
 #+end_src
 #+RESULTS: binding-plot
 #+begin_example
 open close high low vol amount date_stamp
 code date
 000001 2019年01月02日 9.39 9.19 9.42 9.16 539386.0 4.986951e+08 1.546358e+09
 2019年01月03日 9.18 9.28 9.33 9.15 415537.0 3.844577e+08 1.546445e+09
 2019年01月04日 9.24 9.75 9.82 9.22 1481159.0 1.422150e+09 1.546531e+09
 2019年01月07日 9.84 9.74 9.85 9.63 865687.0 8.411664e+08 1.546790e+09
 2019年01月08日 9.73 9.66 9.74 9.62 402388.0 3.892478e+08 1.546877e+09
 2019年01月09日 9.74 9.94 10.08 9.70 1233486.0 1.229465e+09 1.546963e+09
 2019年01月10日 9.87 10.10 10.20 9.86 1071817.0 1.079711e+09 1.547050e+09
 2019年01月11日 10.11 10.20 10.22 10.05 696364.0 7.080018e+08 1.547136e+09
 2019年01月14日 10.22 10.11 10.25 10.07 500443.0 5.078629e+08 1.547395e+09
 2019年01月15日 10.11 10.24 10.28 10.09 542160.0 5.530273e+08 1.547482e+09
 #+end_example
*** 注意 entry_point && exit_point
 #+name: note_c++
 #+begin_src C++ :exports code
 int main(int argc, char* argv[])
 {
 // abq entry_point
 Abquant::start();
 // Your C++ code here.
 // abq exit_point
 Abquant::finish();
 return 0;
 }
 #+end_src
 #+name: note_python
 #+begin_src python :exports code
 from pyabquant import PyAbquant
 # abq entry_point
 PyAbquant.start()
 # Your python code here.
 code = "000001.XSHE"
 start = "2020-01-01 00:00:00"
 end = "2020-01-01 23:55:00"
 fields = ["open", "close"]
 actual = get_price(code, start, end, frequency="5min", fields=fields, adjust_type="pre")
 ulog.debug(actual)
 assert isinstance(actual, (pd.DataFrame))
 assert actual.empty is True
 # abq exit_point
 PyAbquant.finish()
 #+end_src
*** plotting
 [[file:./screenshot/pyabqstockday.png]]
* DONE Development:
 CLOSED: [2021年01月01日 Fri 00:00]
 :LOGBOOK:
 - State "DONE" from "STARTED" [2021年01月01日 Fri 00:00]
 :END:
 - 兼容 rqalpha apis ::
 1. [X] get_price
 2. [X] get_fundamentals[fn:1]
 - 兼容 jointquant apis ::
 1. [X] get_all_securities
 2. [X] get_security_info
 - 东方财富 概念 apis ::
 1. [X] easymoney concept base get_blocks
 2. [X] easymoney concept history get_price
* WAITING Development:
 :LOGBOOK:
 - State "STARTED" from "DONE" [2021年02月13日 Sat 00:00]
 :END:
 - 对 Docker, K8s 的支持 ::
* 开发初衷
 作者本人专业是理论物理,工作经验则是程序开发,很偶然在网上了解到了量化交易,觉得可以利用上以前的知识和经验,于是乎喜欢上了量化交易。
交易三部曲,a) 数据获取 b) 策略回测 c) 模拟/实盘交易 \\
市面上开源的 a,b,c 项目大部分都是 python 开发,但是在实践过程中性能都不理想,于是想
到站在巨人肩上利用 C++ 造轮子。核心模块 C++,通过中间层 binding 交给用户 python 层。
* 感谢
- [[https://github.com/QUANTAXIS/QUANTAXIS.git][QUANTAXIS]]
 abquant-data 兼容 quantaxis 数据库
* 打赏
 欢迎请作者喝杯咖啡 👍
 | 微信 | 支付宝 |
 |------------------------------------+------------------------------------|
 | [[file:./screenshot/jimmy.wechat.png]] | [[file:./screenshot/jimmy.alipay.png]] |
* LICENSE
Copyright (c) 2020-present Jimmy M. Gong \\
All rights reserved.
除非遵守当前许可,否则不得使用本软件。
** 非商业用途(非商业用途指个人出于非商业目的使用本软件,或者高校、研究所等非营利机构出于教育、科研等目的使用本软件):
 遵守 [[https://www.tldrlegal.com/l/gpl-3.0][GPL3]] 和 [[https://www.tldrlegal.com/l/lgpl-3.0][LGPL3]]
 除非法律有要求或以书面形式达成协议,否则本软件分发时需保持当前许可"原样"不变,且不得附加任何条件。
** 商业用途(商业用途指个人出于任何商业目的使用本软件,或者法人或其他组织出于任何目的使用本软件):
 未经原作者授权,任何个人不得出于任何商业目的使用本软件(包括但不限于向第三方
 提供、销售、出租、出借、转让本软件、本软件的衍生产品、引用或借鉴了本软件功能
 或源代码的产品或服务),任何法人或其他组织不得出于任何目的使用本软件,否则原
 作者有权追究相应的知识产权侵权责任。 \\
 在此前提下,对本软件的使用同样需要遵守 [[https://www.tldrlegal.com/l/gpl-3.0][GPL3]] 和 [[https://www.tldrlegal.com/l/lgpl-3.0][LGPL3]] 许可, [[https://www.tldrlegal.com/l/gpl-3.0][GPL3]] 和 [[https://www.tldrlegal.com/l/lgpl-3.0][LGPL3]] 许可与本
 许可冲突之处,以本许可为准。
 详细的授权流程,请联系 yssource@163.com 获取。
* Footnotes
[fn:1]闭源

About

A&B professional platform for quantitative finance. God is Asking & Bidding Me. ABQ 基于 通达信 数据的量化.

Topics

Resources

License

Unknown and 2 other licenses found

Licenses found

Unknown
LICENSE
GPL-3.0
LICENSE.GPL3
LGPL-3.0
LICENSE.LGPL3

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

AltStyle によって変換されたページ (->オリジナル) /