QUANTAXIS的核心数据结构有一个方法叫add_func(func,args,*kwargs),作为一个指标入口,会返回一个和DataStruct中股票数量一致长度的Dataframe
QUANTAXIS有两种类型的指标:
基础指标(输入为Series的指标)
应用级指标(可应用于DataStruct的指标)
其中,基础指标是为了应用级指标做准备的,及对应于Series的分析和dataframe的分析的关系
import QUANTAXIS as QAQA.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 QAQA.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 QAdef 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)) * 80B = 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.closeDIFF = 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 = 0return 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 WR2date code2018-01-08 000001 76.744186 79.5918372018-01-09 000001 42.857143 48.8372092018-01-10 000001 3.508772 3.5087722018-01-11 000001 59.375000 28.3582092018-01-12 000001 48.148148 31.707317
inc.get_code('000002')WR1 WR2date code2018-01-02 000002 27.922078 NaN2018-01-03 000002 93.548387 62.2317602018-01-04 000002 28.671329 39.2857142018-01-05 000002 36.363636 29.6296302018-01-08 000002 52.432432 23.3173082018-01-09 000002 23.275862 55.7213932018-01-10 000002 85.833333 58.8571432018-01-11 000002 50.806452 71.7592592018-01-12 000002 69.934641 51.4423082018-01-15 000002 38.075314 31.2714782018-01-16 000002 11.627907 9.8231832018-01-17 000002 36.086957 21.6279072018-01-18 000002 50.574713 37.6068382018-01-19 000002 90.760870 76.2557082018-01-22 000002 23.308271 60.4651162018-01-23 000002 34.868421 17.6666672018-01-24 000002 62.359551 49.3333332018-01-25 000002 39.655172 59.3023262018-01-26 000002 40.259740 46.5517242018-01-29 000002 80.566802 81.3229572018-01-30 000002 94.797688 97.9020982018-01-31 000002 9.345794 18.487395
inc.get_indicator('2018-01-12','000001','WR1')WR1 48.148148Name: (2018-01-12 00:00:00, 000001), dtype: float64
inc.get_indicator('2018-01-12','000001')WR1 48.148148WR2 31.707317Name: (2018-01-12 00:00:00, 000001), dtype: float64