All Projects → mapicccy → funcat

mapicccy / funcat

Licence: Apache-2.0 license
Using very simple code to compute indicator of stock\crytocurrency. For example, MA(C, 5) means average closed-price for last 5 days.

Programming Languages

Jupyter Notebook
11667 projects
python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to funcat

wallstreet
Stock Quotes and Charts for the Terminal
Stars: ✭ 75 (+294.74%)
Mutual labels:  stock, financial-analysis
stocklist
Stock data collection and analysis
Stars: ✭ 27 (+42.11%)
Mutual labels:  stock, financial-analysis
Beibo
🤖 Predict the stock market with AI 用AI预测股票市场
Stars: ✭ 46 (+142.11%)
Mutual labels:  stock, stock-price-prediction
Paper-Implementation-DSTP-RNN-For-Stock-Prediction-Based-On-DA-RNN
基於DA-RNN之DSTP-RNN論文試做(Ver1.0)
Stars: ✭ 62 (+226.32%)
Mutual labels:  stock, stock-price-prediction
Gekko Strategies
Strategies to Gekko trading bot with backtests results and some useful tools.
Stars: ✭ 1,022 (+5278.95%)
Mutual labels:  stock, stock-price-prediction
Steward
A stock portfolio manager that provides neural net based short-term predictions for stocks and natural language processing based analysis on community sentiments.
Stars: ✭ 25 (+31.58%)
Mutual labels:  stock, stock-price-prediction
stocktwits-sentiment
Stocktwits market sentiment analysis in Python with Keras and TensorFlow.
Stars: ✭ 23 (+21.05%)
Mutual labels:  stock, stock-price-prediction
mlp stock
Stock price prediction using ensemble MLP in PyTorch.
Stars: ✭ 25 (+31.58%)
Mutual labels:  stock, stock-price-prediction
trading sim
📈📆 Backtest trading strategies concurrently using historical chart data from various financial exchanges.
Stars: ✭ 21 (+10.53%)
Mutual labels:  stock, financial-analysis
IEX CPP API
Unofficial C++ Lib for the IEXtrading API
Stars: ✭ 34 (+78.95%)
Mutual labels:  stock, financial-analysis
Chase
Automatic trading bot (WIP)
Stars: ✭ 73 (+284.21%)
Mutual labels:  stock, stock-price-prediction
Personae
📈 Personae is a repo of implements and environment of Deep Reinforcement Learning & Supervised Learning for Quantitative Trading.
Stars: ✭ 1,140 (+5900%)
Mutual labels:  stock, stock-price-prediction
R-code-for-finance
R code for finance
Stars: ✭ 19 (+0%)
Mutual labels:  stock, financial-analysis
robinhood-python
Robinhood module in Python
Stars: ✭ 103 (+442.11%)
Mutual labels:  stock
Stocksera
Web application that provides alternative data to retail investors
Stars: ✭ 426 (+2142.11%)
Mutual labels:  stock
trading-bot
Trading bot for cryptocurrencies and stocks
Stars: ✭ 21 (+10.53%)
Mutual labels:  stock
pyEX
Python interface to IEX and IEX cloud APIs
Stars: ✭ 407 (+2042.11%)
Mutual labels:  financial-analysis
alpha-vantage-api
Alpha Vantage PHP Client
Stars: ✭ 57 (+200%)
Mutual labels:  stock
tesla-stocks-prediction
The implementation of LSTM in TensorFlow used for the stock prediction.
Stars: ✭ 51 (+168.42%)
Mutual labels:  stock-price-prediction
Stock-Market-Predictor
Stock Market Predictor with LSTM network. Web scraping and analyzing tools (ohlc, mean)
Stars: ✭ 28 (+47.37%)
Mutual labels:  stock-price-prediction

Funcat

Funcat 将同花顺、通达信、文华财经等的指标公式移植到了 Python 中。

Funcat 适合做股票、期货、合约、加密数字货币的量化分析与量化交易。

策略

基于funcat实现选股策略,在每个交易日14:00左右推送当日推荐股票。感兴趣可以关注本人微信推送服务

更新计划

  • 增加加密数字货币后端,创建实例时需要填入api_key\seceret_key\passphrase, 了解详情(已完成)
  • 增加对tushare pro接口支持,使用需要注册获取token(已完成)
  • 优化tushare pro数据存储方式(已完成)
  • 优化DataFrame数据,降低内存占用(进行中...)
  • 增加实时数据获取(已完成,实时数据来自腾讯股票接口,http://qt.gtimg.cn/q=sh601360)
  • 更新个人选股策略,并使用回测系统回测(进行中...)
  • 由于tushare pro某些数据获取频次有特殊限制,所以计划将数据整体搬移至mysql(未开始)
  • 适配更高的python版本,并且提供docker容器部署方案(未开始)

安装

当前推荐Python版本为3.6.8,推荐通过miniconda管理环境。

创建python==3.6.8的虚拟环境:

conda create -n py36 python=3.6.8

激活虚拟环境:

conda activate py36

安装funcat:

python setup.py install

注意:使用该仓库必须安装TA-lib (v0.4.9), TA-lib没办法通过pip安装, 请通过minconda\anaconda来管理环境、安装依赖。安装命令:

conda install -c quantopian ta-lib

如有其他安装问题,请提issue,并附上足够的环境信息。

notebooks 教程

API

行情变量

  • 开盘价:OPEN O
  • 收盘价:CLOSE C
  • 最高价:HIGH H
  • 最低价:LOW L
  • 成交量:VOLUME V VOL

工具函数

  • n天前的数据:REF
REF(C, 10)  # 10天前的收盘价
  • 金叉判断:CROSS
CROSS(MA(C, 5), MA(C, 10))  # 5日均线上穿10日均线
  • 两个序列取最小值:MIN
MIN(O, C)  # K线实体的最低价
  • 两个序列取最大值:MAX
MAX(O, C)  # K线实体的最高价
  • n天都满足条件:EVERY
EVERY(C > MA(C, 5), 10)  # 最近10天收盘价都大于5日均线
  • n天内满足条件的天数:COUNT
COUNT(C > O, 10)  # 最近10天收阳线的天数
  • n天内最大值:HHV
HHV(MAX(O, C), 60)  # 最近60天K线实体的最高价
  • n天内最小值:LLV
LLV(MIN(O, C), 60)  # 最近60天K线实体的最低价
  • 求和n日数据 SUM
SUM(C, 10)  # 求和10天的收盘价
  • 求绝对值 ABS
ABS(C - O)
  • 条件 IF
IF(OPEN > CLOSE, OPEN, CLOSE)

条件「和」与「或」

因为语法的问题,我们需要使用 & 代替 and 「和」,用 | 代替 or 「或」。

# 收盘价在10日均线上 且 10日均线在20日均线上
(C > MA(C, 10)) & (MA(C, 10) > MA(C, 20))

# 收阳线 或 收盘价大于昨收
(C > O) | (C > REF(C, 1))

指标

  • 均线:MA
MA(C, 60)  # 60日均线

其他更多请见:指标库

还有更多的技术指标还在实现中,欢迎提交pr一起实现。

自定义公式示例

KDJ指标。随机指标(KDJ)由 George C.Lane 创制。它综合了动量观念、强弱指标及移动平均线的优点,用来度量股价脱离价格正常范围的变异程度。

N, M1, M2 = 9, 3, 3

RSV = (CLOSE - LLV(LOW, N)) / (HHV(HIGH, N) - LLV(LOW, N)) * 100
K = EMA(RSV, (M1 * 2 - 1))
D = EMA(K, (M2 * 2 - 1))
J = K * 3 - D * 2

print(K, D, J)

DMI指标。动向指数又叫移动方向指数或趋向指数。是属于趋势判断的技术性指标,其基本原理是通过分析股票价格在上升及下跌过程中供需关系的均衡点,即供需关系受价格变动之影响而发生由均衡到失衡的循环过程,从而提供对趋势判断的依据。

对于 DMI 这个指标,你会发现 TALib 算出来的结果,和同花顺等软件的结果不一样,我对比了下实现方式,发现,是因为同花顺的公式和 TALib 的计算公式不一样,对于这种情况,我们把同花顺的公式搬过来,就可以算出和同花顺一样的结果。

M1, M2 = 14, 6

TR = SUM(MAX(MAX(HIGH - LOW, ABS(HIGH - REF(CLOSE, 1))), ABS(LOW - REF(CLOSE, 1))), M1)
HD = HIGH - REF(HIGH, 1)
LD = REF(LOW, 1) - LOW

DMP = SUM(IF((HD > 0) & (HD > LD), HD, 0), M1)
DMM = SUM(IF((LD > 0) & (LD > HD), LD, 0), M1)
DI1 = DMP * 100 / TR
DI2 = DMM * 100 / TR
ADX = MA(ABS(DI2 - DI1) / (DI1 + DI2) * 100, M2)
ADXR = (ADX + REF(ADX, M2)) / 2

print(DI1, DI2, ADX, ADXR)

选股

from funcat import *


# 选出涨停股
select(
    lambda : C / C[1] - 1 >= 0.0995,
    start_date=20161231,
	end_date=20170104,
)

'''
[20170104]
20170104 000017.XSHE 000017.SZ[深中华A]
20170104 000026.XSHE 000026.SZ[飞亚达A]
20170104 000045.XSHE 000045.SZ[深纺织A]
20170104 000585.XSHE 000585.SZ[东北电气]
20170104 000595.XSHE 000595.SZ[宝塔实业]
20170104 000678.XSHE 000678.SZ[襄阳轴承]
...
'''


# 选出最近30天K线实体最高价最低价差7%以内,最近100天K线实体最高价最低价差大于25%,
# 最近10天,收盘价大于60日均线的天数大于3天
select(
    lambda : ((HHV(MAX(C, O), 30) / LLV(MIN(C, O), 30) - 1 < 0.07)
              & (HHV(MAX(C, O), 100) / LLV(MIN(C, O), 100) - 1 > 0.25)
              & (COUNT(C > MA(C, 60), 10) > 3)
             ),
    start_date=20161220,
)

'''
[20170104]
20170104 600512.XSHG 600512.SH[腾达建设]
[20170103]
[20161230]
20161230 000513.XSHE 000513.SZ[丽珠集团]
...
'''


# 选出最近3天每天的成交量小于20日成交量均线,最近3天最低价低于20日均线,最高价高于20日均线
# 自定义选股回调函数
def callback(date, order_book_id, symbol):
    print("Cool, 在", date, "选出", order_book_id, symbol)


select(
    lambda : (EVERY(V < MA(V, 20) / 2, 3) & EVERY(L < MA(C, 20), 3) & EVERY(H > MA(C, 20), 3)),
    start_date=20161231,
    callback=callback,
)

'''
[20170104]
Cool, 在 20170104 选出 002633.SZ 002633.XSHE[申科股份]
Cool, 在 20170104 选出 600857.SH 600857.XSHG[宁波中百]
...
'''

单股票研究

from funcat import *
from funcat.data.tushare_backend import TushareDataBackend

set_data_backend(TushareDataBackend())

# 设置目前天数为2017年1月4日
T("20170104")
# 设置关注股票为上证指数
S("000001.SH")

# 打印 Open High Low Close
>>> print(O, H, L, C)
3133.79 3160.1 3130.11 3158.79

# 当天涨幅
>>> C / C[1] - 1
0.0072929156356

# 打印60日均线
>>> MA(C, 60)
3154.78333333

# 判断收盘价是否大于60日均线
>>> C > MA(C, 60)
True

# 30日最高价
>>> HHV(H, 30)
3301.21

# 最近30日,收盘价 Close 大于60日均线的天数
>>> COUNT(C > MA(C, 60), 30)
17

# 10日均线上穿
>>> CROSS(MA(C, 10), MA(C, 20))
False

其它策略示例

MACD三次金叉线性拟合趋势

import numpy as np
from funcat import *
from funcat.data.tushare_backend import TushareDataBackend

from sklearn.linear_model import LinearRegression

def select_macd_cross_up():
	diff = EMA(C, 12) - EMA(C, 26)
	dea = EMA(diff, 9)
	macd = 2 * (diff - dea)

	x_train = []
	y_train = []
	# 获取最近三次MACD金叉的diff值和索引位置
	for i in range(100):
		if macd[i] > 0 and macd[i + 1] < 0:
			x_train.append(i)
			y_train.append(diff[i].value)

		if len(x_train) == 3:
			break

	if len(x_train) != 3:
		return -np.nan

	x_train.reverse()
	y_train.reverse()
	x_train = list(map(lambda i: -i + max(x_train), x_train))

	# 线性回归拟合趋势
	model = LinearRegression()
	model.fit(np.array(x_train).reshape(-1, 1), np.array(y_train).reshape(-1, 1))

	# 返回趋势线的斜率
	return model.coef_


set_data_backend(TushareDataBackend())

# 设置目前天数为2021年5月19日
T("20210519")
# 设置关注股票为300298.SZ
S("300298.SZ")

# 输出结果[[-0.03154982]]
# 表明最近2021/05/19之前3次macd金叉趋势向下
# 趋势时刻有可能发生变化,该股在2021/08/02的趋势开始向上
print(select_macd_cross_up())

image

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].