QUANTAXIS的核心数据结构有一个方法叫add_func(func,*args,**kwargs),作为一个指标入口,会返回一个和DataStruct中股票数量一致长度的Dataframe
QUANTAXIS有两种类型的指标:
- 基础指标(输入为Series的指标)
- 应用级指标(可应用于DataStruct的指标)
其中,基础指标是为了应用级指标做准备的,及对应于Series的分析和dataframe的分析的关系
import QUANTAXIS as QA
QA.MA(Series, N)
QA.EMA(Series, N)
QA.SMA(Series, N, M=1)
QA.DIFF(Series, N=1)
QA.HHV(Series, N)
QA.LLV(Series, N)
QA.SUM(Series, N)
QA.ABS(Series)
QA.MAX(A, B)
QA.MIN(A, B)
QA.CROSS(A, B)
QA.COUNT(COND, N)
QA.IF(COND, V1, V2)
QA.REF(Series, N)
QA.STD(Series, N)
QA.AVEDEV(Series, N)
QA.BBIBOLL(Series, N1, N2, N3, N4, N, M)
import QUANTAXIS as QA
QA.QA_indicator_OSC(DataFrame, N, M)
QA.QA_indicator_BBI(DataFrame, N1, N2, N3, N4)
QA.QA_indicator_PBX(DataFrame, N1, N2, N3, N4, N5, N6)
QA.QA_indicator_BOLL(DataFrame, N)
QA.QA_indicator_ROC(DataFrame, N, M)
QA.QA_indicator_MTM(DataFrame, N, M)
QA.QA_indicator_KDJ(DataFrame, N=9, M1=3, M2=3)
QA.QA_indicator_MFI(DataFrame, N)
QA.QA_indicator_ATR(DataFrame, N)
QA.QA_indicator_SKDJ(DataFrame, N, M)
QA.QA_indicator_WR(DataFrame, N, N1)
QA.QA_indicator_BIAS(DataFrame, N1, N2, N3)
QA.QA_indicator_RSI(DataFrame, N1, N2, N3)
QA.QA_indicator_ADTM(DataFrame, N, M)
QA.QA_indicator_DDI(DataFrame, N, N1, M, M1)
QA.QA_indicator_CCI(DataFrame, N=14)
自己写一个指标:
比如 绝路航标
import QUANTAXIS as QA
def JLHB(data, m=7, n=5):
"""
通达信定义
VAR1:=(CLOSE-LLV(LOW,60))/(HHV(HIGH,60)-LLV(LOW,60))*80;
B:SMA(VAR1,N,1);
VAR2:SMA(B,M,1);
绝路航标:IF(CROSS(B,VAR2) AND B<40,50,0);
"""
var1 = (data['close'] - QA.LLV(data['low'], 60)) / \
(QA.HHV(data['high'], 60) - QA.LLV(data['low'], 60)) * 80
B = QA.SMA(var1, m)
var2 = QA.SMA(B, n)
return pd.DataFrame({'JLHB':QA.CROSS(B,var2)*(B<40)})
金叉死叉
def MACD_JCSC(dataframe, SHORT=12, LONG=26, M=9):
"""
1.DIF向上突破DEA,买入信号参考。
2.DIF向下跌破DEA,卖出信号参考。
"""
CLOSE = dataframe.close
DIFF = QA.EMA(CLOSE, SHORT) - QA.EMA(CLOSE, LONG)
DEA = QA.EMA(DIFF, M)
MACD = 2*(DIFF-DEA)
CROSS_JC = QA.CROSS(DIFF, DEA)
CROSS_SC = QA.CROSS(DEA, DIFF)
ZERO = 0
return pd.DataFrame({'DIFF': DIFF, 'DEA': DEA, 'MACD': MACD, 'CROSS_JC': CROSS_JC, 'CROSS_SC': CROSS_SC, 'ZERO': ZERO})
QA.QA_fetch_stock_day_adv('000001','2017-01-01','2017-05-31').to_qfq().add_func(JLHB)
(新增于1.0.42)
ind=data.add_func(QA.QA_indicator_WR,1,2)
inc=QA.QA_DataStruct_Indicators(ind)
inc
< QA_DATASTRUCT_INDICATOR FROM 2018-01-02 00:00:00 TO 2018-01-31 00:00:00 WITH 2 CODES >
inc.get_timerange('2018-01-07','2018-01-12','000001')
WR1 WR2
date code
2018-01-08 000001 76.744186 79.591837
2018-01-09 000001 42.857143 48.837209
2018-01-10 000001 3.508772 3.508772
2018-01-11 000001 59.375000 28.358209
2018-01-12 000001 48.148148 31.707317
inc.get_code('000002')
WR1 WR2
date code
2018-01-02 000002 27.922078 NaN
2018-01-03 000002 93.548387 62.231760
2018-01-04 000002 28.671329 39.285714
2018-01-05 000002 36.363636 29.629630
2018-01-08 000002 52.432432 23.317308
2018-01-09 000002 23.275862 55.721393
2018-01-10 000002 85.833333 58.857143
2018-01-11 000002 50.806452 71.759259
2018-01-12 000002 69.934641 51.442308
2018-01-15 000002 38.075314 31.271478
2018-01-16 000002 11.627907 9.823183
2018-01-17 000002 36.086957 21.627907
2018-01-18 000002 50.574713 37.606838
2018-01-19 000002 90.760870 76.255708
2018-01-22 000002 23.308271 60.465116
2018-01-23 000002 34.868421 17.666667
2018-01-24 000002 62.359551 49.333333
2018-01-25 000002 39.655172 59.302326
2018-01-26 000002 40.259740 46.551724
2018-01-29 000002 80.566802 81.322957
2018-01-30 000002 94.797688 97.902098
2018-01-31 000002 9.345794 18.487395
inc.get_indicator('2018-01-12','000001','WR1')
WR1 48.148148
Name: (2018-01-12 00:00:00, 000001), dtype: float64
inc.get_indicator('2018-01-12','000001')
WR1 48.148148
WR2 31.707317
Name: (2018-01-12 00:00:00, 000001), dtype: float64