在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称:foolcage/fooltrader开源软件地址:https://github.com/foolcage/fooltrader开源编程语言:Python 95.0%开源软件介绍:https://github.com/zvtvz/zvt该项目已停止更新,请移步新项目如果有人想继续该项目,只需要知道其核心点即可: 构建标准的数据schema,然后实现各种connector导入 你熟悉的系统 进行分析Read this in other languages: English. fooltrader:trade as a fool
fooltrader是一个利用大数据技术设计的量化分析交易系统,包括数据的抓取,清洗,结构化,计算,展示,回测和交易. 1. 能做什么1.1 自定义分析逻辑和视图
1.2 免费数据源和精心分类的统一apiapi输出结果具体字段含义请参考数据协议. A股数据In [1]:import fooltrader as ft
In [2]:ft.get_kdata('000778')
#试一试
#ft.get_kdata('300027',start_date='20170630',end_date='20170715')
#ft.get_kdata('300027',start_date='20170630',end_date='20170715')
timestamp code name low open close high volume turnover securityId ... mCap factor hfqClose hfqOpen hfqHigh hfqLow qfqClose qfqOpen qfqHigh qfqLow
timestamp ...
1997-06-06 1997-06-06 000778 新兴铸管 18.00 18.10 19.68 20.70 45335789 8.904533e+08 stock_sz_000778 ... 1.416960e+09 1.000 19.68000 18.10000 20.70000 18.00000 1.497375 1.377159 1.574983 1.369550
1997-06-09 1997-06-09 000778 新兴铸管 18.00 20.00 18.51 20.44 11333248 2.148290e+08 stock_sz_000778 ... 1.332720e+09 1.000 18.51000 20.00000 20.44000 18.00000 1.408354 1.521723 1.555200 1.369550
1997-06-10 1997-06-10 000778 新兴铸管 16.66 18.50 16.75 18.60 6641283 1.155679e+08 stock_sz_000778 ... 1.206000e+09 1.000 16.75000 18.50000 18.60000 16.66000 1.274443 1.407593 1.415202 1.267595
1997-06-11 1997-06-11 000778 新兴铸管 15.90 16.60 17.35 17.40 5560642 9.365633e+07 stock_sz_000778 ... 1.249200e+09 1.000 17.35000 16.60000 17.40000 15.90000 1.320094 1.263030 1.323899 1.209769
1997-06-12 1997-06-12 000778 新兴铸管 16.80 17.68 16.80 17.70 3022235 5.142033e+07 stock_sz_000778 ... 1.209600e+09 1.000 16.80000 17.68000 17.70000 16.80000 1.278247 1.345203 1.346724 1.278247 期货数据In [3]:ft.get_kdata('rb1601')
timestamp code name low open close high volume turnover securityId preClose change changePct openInterest settlement preSettlement change1 changePct1
timestamp
2015-01-16 20150116 rb1601 螺纹钢rb 2533.0 2545.0 2550.0 2568.0 96.0 244.468 future_shfe_rb1601 2518.0 32.0 0.012708 66.0 2546.0 2518.0 28.0 0.011120
2015-01-19 20150119 rb1601 螺纹钢rb 2515.0 2534.0 2541.0 2558.0 486.0 1231.174 future_shfe_rb1601 2550.0 -5.0 -0.001961 212.0 2533.0 2546.0 -13.0 -0.005106
2015-01-20 20150120 rb1601 螺纹钢rb 2521.0 2554.0 2529.0 2554.0 134.0 339.290 future_shfe_rb1601 2541.0 -4.0 -0.001574 286.0 2532.0 2533.0 -1.0 -0.000395
2015-01-21 20150121 rb1601 螺纹钢rb 2516.0 2520.0 2516.0 2540.0 294.0 743.266 future_shfe_rb1601 2529.0 -16.0 -0.006327 410.0 2528.0 2532.0 -4.0 -0.001580
2015-01-22 20150122 rb1601 螺纹钢rb 2515.0 2519.0 2521.0 2530.0 310.0 782.114 future_shfe_rb1601 2516.0 -7.0 -0.002782 576.0 2522.0 2528.0 -6.0 -0.002373
数字货币In [4]: ft.get_kdata('BTC-USD',exchange='kraken')
timestamp code name low open close high volume securityId preClose change changePct
timestamp
2016-07-08 2016-07-08 BTC-USD BTC/USD 634.0 640.4 671.4 671.4 1651.592635 cryptocurrency_kraken_BTC-USD NaN NaN NaN
2016-07-09 2016-07-09 BTC-USD BTC/USD 622.0 671.9 652.0 671.9 1908.295953 cryptocurrency_kraken_BTC-USD 671.4 -19.4 -0.029755
2016-07-10 2016-07-10 BTC-USD BTC/USD 642.4 652.0 650.0 655.6 429.290787 cryptocurrency_kraken_BTC-USD 652.0 -2.0 -0.003077
2016-07-11 2016-07-11 BTC-USD BTC/USD 645.3 652.5 650.7 663.3 814.157258 cryptocurrency_kraken_BTC-USD 650.0 0.7 0.001076
2016-07-12 2016-07-12 BTC-USD BTC/USD 647.1 650.7 666.0 675.9 923.800268 cryptocurrency_kraken_BTC-USD 650.7 15.3 0.022973
tick
基本面数据In [5]: ft.get_income_statement_items('300027',report_period='2017-06-30')
#试一试
#ft.get_balance_sheet_items('300027',,report_event_date='2017-01-01')
#ft.get_cash_flow_statement_items('300027')
Out[2]:
{'EPS': 0.15,
'ManagingCosts': 257005115.85,
'accumulatedOtherComprehensiveIncome': 471486112.3,
'assetsDevaluation': -21647912.31,
'attributableToMinorityShareholders': 90255906.93,
'attributableToOwnersOfParentCompany': 381230205.37,
'businessTaxesAndSurcharges': 80033207.21,
'code': '300027',
'dilutedEPS': 0.15,
'disposalLossOnNonCurrentLiability': 281050.25,
'exchangeGains': 0.0,
'financingExpenses': 132202866.43,
'id': 'stock_sz_300027_20170630',
'incomeFromChangesInFairValue': 0.0,
'incomeTaxExpense': 111864455.56,
'investmentIncome': 541478955.17,
'investmentIncomeFromRelatedEnterpriseAndJointlyOperating': '45035770.67',
'minorityInterestIncome': 91203287.92,
'netProfit': 521516997.38,
'netProfitAttributedToParentCompanyOwner': 430313709.46,
'nonOperatingExpenditure': 13775609.35,
'nonOperatingIncome': 27864700.17,
'operatingCosts': 679308123.4,
'operatingProfit': 619292362.12,
'operatingRevenue': 1465863805.45,
'operatingTotalCosts': 1388050398.5,
'otherComprehensiveIncome': -50030885.08,
'reportDate': '2017-06-30',
'reportEventDate': '2017-08-29',
'securityId': 'stock_sz_300027',
'sellingExpenses': 261148997.92,
'totalProfits': 633381452.94}
财务报表的勾稽关系验证# 营业利润=营业收入-营业成本-营业税金及附加-销售费用-管理费用-财务费用-资产减值损失+公允价值变动收益(损失的话用减)+投资收益
def check_operating_profit(security_item):
income_statement_list = get_income_statement_items(security_item=security_item)
for income_statement in income_statement_list:
operatingProfit = income_statement["operatingRevenue"] \
- income_statement["operatingCosts"] \
- income_statement["businessTaxesAndSurcharges"] \
- income_statement["sellingExpenses"] \
- income_statement["ManagingCosts"] \
- income_statement["financingExpenses"] \
- income_statement["assetsDevaluation"] \
+ income_statement["incomeFromChangesInFairValue"] \
+ income_statement["investmentIncome"]
diff = operatingProfit - income_statement["operatingProfit"]
if abs(diff) >= 1:
print("{} operating profit calculating not pass,calculating result:{},report result:{}".format(
income_statement['id'], operatingProfit, income_statement["operatingProfit"]))
else:
print("{} operating profit calculating pass".format(income_statement['id'])) 可以用该工具迅速检查财务报表的质量,同时也可以让你对财务报表有更深入的认识.更多例子 In [3]: from fooltrader.datamanager import finance_check
In [4]: finance_check.check_operating_profit('300027')
stock_sz_300027_20061231 operating profit calculating pass
...
stock_sz_300027_20170630 operating profit calculating pass
stock_sz_300027_20170930 operating profit calculating pass 我的博客介绍fooltrader投资之财务指标 事件(消息)数据In [12]: ft.get_finance_forecast_event('000002')
timestamp reportPeriod securityId type description preEPS changeStart change id
timestamp
2004-04-02 2004-04-02 2004-03-31 stock_sz_000002 预增 预计公司2004年第1季度净利润较去年同期增长幅度超过150%。 NaN NaN 1.50 stock_sz_000002_2004-04-02
2004-07-05 2004-07-05 2004-06-30 stock_sz_000002 预增 预计公司2004年上半年度净利润较去年同期增长幅度将超过50%。 NaN NaN 0.50 stock_sz_000002_2004-07-05
2005-01-12 2005-01-12 2004-12-31 stock_sz_000002 预增 预计本公司2004年全年净利润较去年增长50%-65%之间。 NaN NaN 0.65 stock_sz_000002_2005-01-12
2005-04-06 2005-04-06 2005-03-31 stock_sz_000002 预增 预计本公司2005年1季度净利润较上年同期增长100%-150%。 NaN NaN 1.50 stock_sz_000002_2005-04-06
2005-04-25 2005-04-25 2005-06-30 stock_sz_000002 预增 预计本公司2005年上半年净利润较去年同期增长150—200%。 NaN NaN 2.00 stock_sz_000002_2005-04-25
2005-08-01 2005-08-01 2005-09-30 stock_sz_000002 预增 预计2005年1~9月份可实现净利润将较去年同期增长110~130%。 NaN NaN 1.30 stock_sz_000002_2005-08-01
2006-01-06 2006-01-06 2005-12-31 stock_sz_000002 预增 预计本公司2005年全年净利润较去年增幅将超过50%。 NaN NaN 0.50 stock_sz_000002_2006-01-06
2006-03-21 2006-03-21 2006-03-31 stock_sz_000002 预增 经初步测算,预计本公司2006年第1季度净利润较上年同期增长超过50%。 NaN NaN 0.50 stock_sz_000002_2006-03-21
2006-06-23 2006-06-23 2006-06-30 stock_sz_000002 预增 预计本公司2006年半年度净利润较上年同期增长50%~60% NaN NaN 0.60 stock_sz_000002_2006-06-23
2006-09-28 2006-09-28 2006-09-30 stock_sz_000002 预增 预计2006年一至三季度净利润较上年同期增长50%-60%。 NaN NaN 0.60 stock_sz_000002_2006-09-28
2007-01-12 2007-01-12 2006-12-31 stock_sz_000002 预增 预计2006年全年净利润较去年增长50%-65%。 0.26 NaN 0.65 stock_sz_000002_2007-01-12
2007-04-04 2007-04-04 2007-03-31 stock_sz_000002 预增 预计2007年第一季度净利润较上年同期增长幅度为50-60%。 NaN NaN 0.60 stock_sz_000002_2007-04-04
2007-10-30 2007-10-30 2007-12-31 stock_sz_000002 预增 公司预计2007年全年净利润较去年增长100%-150%。 NaN NaN 1.50 stock_sz_000002_2007-10-30
2015-04-03 2015-04-03 2015-03-31 stock_sz_000002 预减 预计2015年1月1日-2015年3月31日归属于上市公司股东的净利润为盈利:60,000万... 0.14 -0.61 -0.54 stock_sz_000002_2015-04-03
In [13]: ft.get_finance_report_event('600338')
reportPeriod securityId timestamp title url id
timestamp
2010-02-12 2009-12-31 stock_sh_600338 2010-02-12 西藏珠峰工业股份有限公司2009年年度报告 http://vip.stock.finance.sina.com.cn/corp/view... stock_sh_600338_2010-02-12
2011-04-27 2010-12-31 stock_sh_600338 2011-04-27 ST珠峰:年报 http://vip.stock.finance.sina.com.cn/corp/view... stock_sh_600338_2011-04-27
2012-04-26 2011-12-31 stock_sh_600338 2012-04-26 西藏珠峰工业股份有限公司2011年年度报告 http://vip.stock.finance.sina.com.cn/corp/view... stock_sh_600338_2012-04-26
2013-03-06 2012-12-31 stock_sh_600338 2013-03-06 西藏珠峰工业股份有限公司年报 http://vip.stock.finance.sina.com.cn/corp/view... stock_sh_600338_2013-03-06
2014-04-30 2013-12-31 stock_sh_600338 2014-04-30 西藏珠峰工业股份有限公司2013年年度报告 http://vip.stock.finance.sina.com.cn/corp/view... stock_sh_600338_2014-04-30
2015-04-30 2014-12-31 stock_sh_600338 2015-04-30 西藏珠峰工业股份有限公司年报 http://vip.stock.finance.sina.com.cn/corp/view... stock_sh_600338_2015-04-30
2016-04-15 2015-12-31 stock_sh_600338 2016-04-15 西藏珠峰年报 http://vip.stock.finance.sina.com.cn/corp/view... stock_sh_600338_2016-04-15
2017-01-05 2015-12-31 stock_sh_600338 2017-01-05 西藏珠峰2015年年度报告(更正稿) http://vip.stock.finance.sina.com.cn/corp/view... stock_sh_600338_2017-01-05
2017-02-28 2016-12-31 stock_sh_600338 2017-02-28 西藏珠峰2016年年度报告 http://vip.stock.finance.sina.com.cn/corp/view... stock_sh_600338_2017-02-28
2018-03-10 2017-12-31 stock_sh_600338 2018-03-10 西藏珠峰2017年年度报告 http://vip.stock.finance.sina.com.cn/corp/view... stock_sh_600338_2018-03-10
各指数数据
技术指标In [15]: ft.macd('000778',start_date='20170101',end_date='20170301')
close close_ema12 close_ema26 diff dea macd
timestamp
2017-01-03 5.21 NaN NaN NaN NaN NaN
2017-01-04 5.24 NaN NaN NaN NaN NaN
2017-01-05 5.31 NaN NaN NaN NaN NaN
2017-01-06 5.28 NaN NaN NaN NaN NaN
2017-01-09 5.33 NaN NaN NaN NaN NaN
2017-01-10 5.30 NaN NaN NaN NaN NaN
2017-01-11 5.34 NaN NaN NaN NaN NaN
2017-01-12 5.21 NaN NaN NaN NaN NaN
2017-01-13 5.11 NaN NaN NaN NaN NaN
2017-01-16 4.95 NaN NaN NaN NaN NaN
2017-01-17 5.00 NaN NaN NaN NaN NaN
2017-01-18 5.05 5.146697 NaN NaN NaN NaN
2017-01-19 4.96 5.117975 NaN NaN NaN NaN
2017-01-20 5.00 5.099825 NaN NaN NaN NaN
2017-01-23 5.05 5.092159 NaN NaN NaN NaN
2017-01-24 5.06 5.087212 NaN NaN NaN NaN
2017-01-25 5.06 5.083025 NaN NaN NaN NaN
2017-01-26 5.07 5.081022 NaN NaN NaN NaN
2017-02-03 5.03 5.073172 NaN NaN NaN NaN
2017-02-06 5.03 5.066530 NaN NaN NaN NaN
2017-02-07 5.01 5.057833 NaN NaN NaN NaN
2017-02-08 5.05 5.056628 NaN NaN NaN NaN
2017-02-09 5.12 5.066378 NaN NaN NaN NaN
2017-02-10 5.27 5.097704 NaN NaN NaN NaN
2017-02-13 5.31 5.130365 NaN NaN NaN NaN
2017-02-14 5.84 5.239540 5.184121 0.055419 0.055419 0.000000
2017-02-15 6.09 5.370380 5.251223 0.119157 0.068166 0.101981
2017-02-16 5.98 5.464167 5.305206 0.158961 0.086325 0.145271
2017-02-17 5.70 5.500449 5.334450 0.165999 0.102260 0.127478
2017-02-20 5.78 5.543457 5.367454 0.176003 0.117009 0.117989
2017-02-21 5.81 5.584464 5.400235 0.184229 0.130453 0.107552
2017-02-22 5.95 5.640700 5.440959 0.199742 0.144310 0.110862
2017-02-23 5.81 5.666746 5.468295 0.198451 0.155139 0.086625
2017-02-24 5.69 5.670324 5.484718 0.185606 0.161232 0.048748
2017-02-27 5.59 5.657966 5.492516 0.165450 0.162076 0.006749
2017-02-28 5.66 5.658279 5.504922 0.153357 0.160332 -0.013950
2017-03-01 5.63 5.653928 5.514187 0.139741 0.156214 -0.032945
更多用法请查看api文档. 1.3 回测策略的编写,可以采用事件驱动或者时间漫步的方式,查看设计文档 class 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'])
# 5日线在10日线上,并且没有持仓,就买入
if ma5 > ma10 and not self.account_service.get_position(current_security):
self.buy(security_id=current_security, current_price=bar_item['close'])
# 5日线在10日线下,并且有持仓,就卖出
elif ma5 < ma10 and self.account_service.get_position(current_security):
self.sell(security_id=current_security, current_price=bar_item['close'])
current_df = current_df.loc[1:, ]
self.df_map[current_security] = current_df 2. 架构图fooltrader是一个层次清晰的系统,你可以在不同的层次对其进行使用,也可以扩展,改造或替换里面的模块. |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论