文档
测试

代码片断

POST

0、投资研究

```py #encoding:gbk import pandas as pd import talib import numpy as np import matplotlib.pyplot as plt from pylab import mpl data = get_market_data(['open','close','volume','high','low','amount'],stock_code=['300056.SZ'],start_time='2006-1-1',period='1d',dividend_type='none',count=500) ``` ```py data_close = data['close'] data['ma5']=talib.SMA(data_close,timeperiod=5) data['ma10']=talib.SMA(data_close,timeperiod=10) #macd macd,macdsignal,macdhist=talib.MACD(data_close,fastperiod=12,slowperiod=26) # plt.plot(macd) # plt.plot(macdsignal) # plt.plot(macdhist) # plt.show() #布林带 uband,mband,lband=talib.BBANDS(data_close, timeperiod=5, nbdevup=2, nbdevdn=2, matype=0) # plt.plot(uband) # plt.plot(mband) # plt.plot(lband) # plt.show() # sub1=plt.subplot(211) # plt.title('macd') # plt.ylabel('MACD') # plt.ylabel('BBANDS') # sub1.plot(macdsignal) # sub1.plot(macdhist) # sub2=plt.subplot(212) # sub2.plot(uband) # sub2.plot(mband) # sub2.plot(lband) # plt.show() def calZq1(data_close): ma12=talib.SMA(data_close,timeperiod=12) ma50=talib.SMA(data_close,timeperiod=50) zq=np.array(ma12)-np.array(ma50) zqMa = talib.SMA(zq,timeperiod=20) zqStd = talib.STDDEV(zq,20) temp = zqStd*1.31 up=zqMa+temp low = zqMa-temp mid=up+low return up,low,mid/2,zq def calZq3(data_close): ma12=talib.SMA(data_close,timeperiod=36) ma50=talib.SMA(data_close,timeperiod=150) val=(ma12*3)-(ma50*3) std3=talib.STDDEV(val,60) temp = std3*1.31 up=val+temp low=val-temp mid = up+low return up,low,mid/2,val up,low,mid,val = calZq1(data_close) up3,low3,mid3,val3=calZq3(data_close) # print(up3) sub1=plt.subplot(211) plt.title('mid and log') plt.ylabel('short') sub1.plot(up) sub1.plot(mid) sub1.plot(low) sub1.plot(val) sub2=plt.subplot(212) plt.ylabel('long') sub2.plot(up3) sub2.plot(mid3) sub2.plot(low3) sub2.plot(val3) plt.show() ```

0、NumPy笔记

```py #encoding:gbk import pandas as pd import talib import numpy as np import matplotlib.pyplot as plt from pylab import mpl data = get_market_data(['open','close','volume','high','low','amount'],stock_code=['300056.SZ'],start_time='2006-1-1',period='1d',dividend_type='none',count=500) ``` ```py data_close = data['close'] data['ma5']=talib.SMA(data_close,timeperiod=5) data['ma10']=talib.SMA(data_close,timeperiod=10) #macd macd,macdsignal,macdhist=talib.MACD(data_close,fastperiod=12,slowperiod=26) # plt.plot(macd) # plt.plot(macdsignal) # plt.plot(macdhist) # plt.show() #布林带 uband,mband,lband=talib.BBANDS(data_close, timeperiod=5, nbdevup=2, nbdevdn=2, matype=0) # plt.plot(uband) # plt.plot(mband) # plt.plot(lband) # plt.show() # sub1=plt.subplot(211) # plt.title('macd') # plt.ylabel('MACD') # plt.ylabel('BBANDS') # sub1.plot(macdsignal) # sub1.plot(macdhist) # sub2=plt.subplot(212) # sub2.plot(uband) # sub2.plot(mband) # sub2.plot(lband) # plt.show() def calZq1(data_close): ma12=talib.SMA(data_close,timeperiod=12) ma50=talib.SMA(data_close,timeperiod=50) zq=np.array(ma12)-np.array(ma50) zqMa = talib.SMA(zq,timeperiod=20) zqStd = talib.STDDEV(zq,20) temp = zqStd*1.31 up=zqMa+temp low = zqMa-temp mid=up+low return up,low,mid/2,zq def calZq3(data_close): ma12=talib.SMA(data_close,timeperiod=36) ma50=talib.SMA(data_close,timeperiod=150) val=(ma12*3)-(ma50*3) std3=talib.STDDEV(val,60) temp = std3*1.31 up=val+temp low=val-temp mid = up+low return up,low,mid/2,val up,low,mid,val = calZq1(data_close) up3,low3,mid3,val3=calZq3(data_close) # print(up3) sub1=plt.subplot(211) plt.title('mid and log') plt.ylabel('short') sub1.plot(up) sub1.plot(mid) sub1.plot(low) sub1.plot(val) sub2=plt.subplot(212) plt.ylabel('long') sub2.plot(up3) sub2.plot(mid3) sub2.plot(low3) sub2.plot(val3) plt.show() ``` ## 自选板块调用 ```py # 获取自选板块个股 mystock=get_stock_list_in_sector('LJDAI') mystock ``` ## 函数功能练习 ```py #np功能练习 ls = list(range(100)) print(ls) npls = np.array(range(100)) #查看列表内存占用 import sys print('ls mem= ',sys.getsizeof(ls)) print('np array mem= ',sys.getsizeof(npls)) #同样的数据,列表占用内存是NP的一倍多 #random round用法 import random import timeit prize =[round(random.uniform(10.0,20.0),2) for i in range(20)] print('价格:',prize) pcount = [random.randint(1,10) for i in range(20)] print('数量:',pcount) prize_np = np.array(prize) pcount_np = np.array(pcount) toal=np.dot(prize_np,pcount_np) print(round(toal,2)) #timeit 查看代码执行时间 # t =%timeit np.dot(prize_np,pcount_np) #查看数组类型 prize_np.dtype #多维数组 z= np.array([[1,2,3],[5,6,7]]) print('元素个数:',z.size) print('维度:',z.shape) print('维度:',z.ndim) print('数组转置',z.T) #数据类型的转换 pcount_np_f = pcount_np.astype('float32') print('整数数组转化为浮点数数据类型:') pcount_np_f #np.arange用法 print(np.arange(10)) print(np.arange(4,10)) print(np.arange(4,10,2)) print(np.arange(4,10,0.2)) #np.linspace()用法 上面是步长,这里是分成多少等分 线性空间 print(np.linspace(4,10,50)) #创建全0数组 print(np.zeros(10,dtype='int')) print(np.ones(10,dtype='int')) print(np.zeros((3,5),dtype='float')) print(np.empty((3,4))) rshape= np.arange(15) print('15个元素的一级数组:',rshape) print('一维数组转换成二维数组:',rshape.reshape((3,5))) #单位矩阵eye print('eye:',np.eye(5)) ``` ## 数组运算 ```py #np运算 #数组和标量之间的运算 #同样大小数组之间的运算 #数组的索引 a[3] 二维数组访问:2行3列:a2[2][3] a2[2,3] #数组的切片 a[5:8] a[:3] a2[1:3,:4] a2[:,:1] a2[:,1] #与列表不同,数组切片时并不会自动复制,在切片数组上的修改会影响原数组 解决方法:copy() a=np.arange(10) b=np.linspace(0,18,10) print(b) print(a) print(a**2) print(a+1) print('a*b=',a*b) #选出数组中大于5的数 aa = [random.randint(0,20) for i in range(20)] print(aa) bb = np.array(aa) #布尔型索引 bb[bb>5] print('选出BB中大于5的数:',bb[bb>5]) print('bb>5 ',bb>5) #选出数组中》5,且为偶数的列表 print('出数组中>5,且为偶数的列表:',bb[(bb>5) & (bb%2==0)]) #数组的花式索引 print('bb=',bb) print('选出BB的1,3,4,6位置的数据:',bb[[1,3,5,6]]) c2= np.arange(15).reshape((3,5)) print('c2=',c2) print('切片:',c2[:,1:4]) print('花式索引:取出前两行,1列和3列的数据:') print(c2[:2,[1,3]]) ``` ## 数组运算 ```py #数组运算 #通用函数:round() #一元函数: abs,sqrt,ext,log,ceil:向上取整,floor:向下取整,rint,trunc,modf:,isnan,isinf,cos,sin,tan #二元函数:add,substract,multiply,divide,power,mod,maximum,minimum import math d2=np.arange(2,5,0.2) print('d2=',d2) print('round函数,四舍五入',d2.round()) print('rint函数,四舍五入',np.rint(d2)) print('no.round函数,四舍五入',np.round(d2)) print('ceil:',math.ceil(3.5)) print('floor:',math.floor(3.5)) print('trunc--向0取整',math.trunc(3.1)) print('trunc--向0取整',math.trunc(-3.1)) ia,ib = np.modf(d2) print('modf 分离小数跟整数部分成两个数组',np.round(ia,2),ib) #数据除0的问题 za= np.array([1,2,3,4,5]) zb= np.array([1,2,3,4,0]) zc= np.array([1,2,3,4,0]) #任意数除 0 zinf = za/zb znan = zb/zc print('inf演示:',zinf) #出现 0/0 print('nan演示:',znan) print('去除inf错误数据:',zinf[~np.isinf(zinf)]) print('去除nan错误数据:',zinf[~np.isnan(znan)]) #二元函数用法示例: ma=np.array([1,2,3,4,5]) mb=np.array([5,4,3,2,1]) print('maximum示例:',np.maximum(ma,mb)) print('minimum示例:',np.minimum(ma,mb)) print('求和-sum:',ma.sum()) print('累加和-cumsum:',ma.cumsum()) print('平均数-mean:',ma.mean()) print('标准差-std:',ma.std()) print('求方差-var:',ma.var()) print('最小值-min:',ma.min()) print('最大值-max:',ma.max()) print('最小值索引-argmin:',ma.argmin()) print('最大值索引-argmax:',ma.argmax()) #随机数生成工具 print('rand-给定形状产生随机数:',np.random.rand()) print('rand-给定形状产生随机一维数组:',np.random.rand(10)) print('rand-给定形状产生随机二维数组:',np.random.rand(2,3)) print('randint-给定形状产生随机整数:',np.random.randint(1,10,5)) print('randint-给定形状产生随机整数:',np.random.randint(1,10,(3,5))) print('choice-给定形状产生随机选择:',np.random.choice(ma)) print('choice-给定形状产生随机选择:',np.random.choice(ma,3)) print('choice-给定形状产生随机选择:',np.random.choice(ma,(3,3))) print('uniform-给定形状产生随机数:',np.random.uniform(1.0,10.0)) print('uniform-给定形状产生随机一维数组:',np.random.uniform(1.0,10.0,3)) print('uniform-给定形状产生随机二维数级:',np.random.uniform(1.0,10.0,(3,5))) print('shuffle-与random.shuffle相同-洗牌打乱:',np.random.shuffle(ma)) ```

0、Pandas笔记

## Series 一维序列 ```py #Series 序列 一维 s1=pd.Series([11,12,13,14,15]) s2=pd.Series([11,12,13,14,15],index=list('abcde')) print('没有指定索引s1:',s1[0],s1.index,s1.values) # print(s1) print('指定索引 s2:',s2['a'],s2[0],s2.index,s2.values) # print(s2) s3=pd.Series(np.arange(10)) print('Series运算:') # print(s3,s3+2,s3+s3) #索引 同样支持花式索引,条件索引 # print(s3[[1,3,4]],s3[s3>3]) #切片 bs3= s3[0:2] # print(bs3) #Series 支持字典特性 sd=pd.Series({'a':1,'b':5,'c':10}) # print(sd) # print('a' in sd,sd.get('b')) #切片时注意,标签切片时顾头也顾尾,下标切片时,顾头不顾尾 # print(sd['a':'b']) # print(sd[0:1]) #索引是整数时,尽量不要用si[-1]这类的方法来取,最后一个元素,而是要用si.iloc[-1]来取 si = pd.Series(np.arange(10)) #loc参数为标签, iloc参数为索引,注意两者的区别 # print(si.iloc[-1],si.loc[9]) #按照索引对齐来计算 pa = pd.Series([1,3,4,6],index=list('abcd')) pb = pd.Series([1,2,3,4,5],index=list('bdace')) print(pa+pb) #数据缺失可自动补0,比如说员工工资两月一发,中间有离职的处理 add,sub,div,mul 加减乘除 print(pa.add(pb,fill_value=0)) # print(pa.values+pb.values) #删除缺失数据 # ================================== c=pa+pb print('删除缺失数据:',c.dropna()) print('删除缺失数据:',c[~c.isnull()]) print('删除缺失数据:',c[c.notnull()]) print('缺失数据填1',c.fillna(c.mean())) ``` ## DataFrame ```py import pandas as pd import numpy as np import sys import time import math import matplotlib.pyplot as plt #DataFrame是一个表格型的数据结构,含有一组有序的列。可以被看做是由Series组成的字典,并且共用一个索引 df1=pd.DataFrame({'one':[1,2,3,4],'two':[4,3,2,1]}) df2=pd.DataFrame({'one':[1,2,3,4],'two':[4,3,2,1]},index=list('abcd')) # print(df1) # print(df2) df3=pd.DataFrame({'one':pd.Series([1,2,3],index=list('abc')),'two':pd.Series([4,3,2,1],index=['b','a','d','c'])}) print(df3) df=get_market_data(fields=['open','close','high','low','volume','amount'],stock_code=['300056.SZ'],period='1d',dividend_type='front',count=500) df.to_csv('300056.csv') # df.index # df.columns # df.values # df.describe() # df.index.name # df.columns[0] df.index.name='date' # df.index.name #改列名无效 df.rename(columns={'low':'new_close'}) df #索引 df['close'].iloc[0] # df[['close','volume']] #切片 # df[:10] #loc 切片指向标签 df.loc[:'20181025',['close','open']] #iloc 切片指向下标 df.iloc[0:10,1:5] #布尔值索引 df[df['close']>10] # df[df>10] # df[df>20].fillna(0) type(df.index[0]) df[df.index.isin(['20181025','20181026'])] #axis=0:行 1:列 how=all:选定的行或列全为nan才删除, any:选定的行或列有一个nan就删除 df.dropna(how='all',axis=1) ``` ## DataFrame运算 ```py #DataFrame运算 df.mean() df.sum() #按行或列索引排序 ascending:True 升序 False:降序 axis:0-按行排序,1-按列排序 # df.sort_index(ascending=False,axis=1) #按值排序 # df.sort_values('close') # df.sort_values(['close','open']) # df.sort_values('close',ascending=False) #函数运算 # #apply:将自定义函数应用在各行或者各列上,FUNC可返加标量或者Series # df.apply(lambda x:x.sum()) #applymap:将函数用在DataFrame各个元素上 # df.applymap(lambda x:x+10) #map 将函数用在Series各个元素上 import datetime import dateutil dateutil.parser.parse('20201030') #成组处理日期:pandas dft =pd.to_datetime(df.index) # type(dft[0]) # print(dft) #创建时间序列 pd.date_range('20171010','20201010') #feq 默认是天D,H(out),W(eek),B(usiness)=工作日,S(emi-)M(onth)=半月,(min)T(es)=分钟,S(econd)=秒,A(year)=年 pd.date_range('20171010','20201010') pd.date_range('20171010','20201010',freq='W-MON') #periods: pd.date_range('20171010',periods=20,freq='W-MON') #将字符串索引转换为时间戳索引 df.index=pd.to_datetime(df.index) df.index #均线算法 df['ma5']=df['close'].rolling(5).mean() df['ma10']=df['close'].rolling(10).mean() #均线金叉、死叉、算法 death_cross=df[(df['ma10']>df['ma5'])&(df['ma10']<df['ma5']).shift(1)].index golden_cross=df[(df['ma10']<=df['ma5'])&(df['ma10']>df['ma5']).shift(1)].index print('死叉:',death_cross) print('金叉',golden_cross) death=df[df.index.isin(death_cross)] plt.plot(df['close'],'r-') plt.plot(death['high'],'b*') plt.show() #groupby # df.groupby('A') # df.groupby('A').get_group('bar') #df.groupby(['A','B']) #pd.merge(left,right,on='key',how='inner') ```

0、matplotlib

```py import pandas as pd import numpy as np import sys import time import math import matplotlib.pyplot as plt #plot函数 # 线型linestyle(-,-.,--,...) # 点型marker(v,^,s,*,H,+,x,D,o,) # 颜色color(b,g,r,y,k,w,....) # 标题: set_title # X轴:xlabel # Y轴:ylabel df=get_market_data(fields=['open','close','high','low','volume','amount'],stock_code=['300056.SZ'],period='1d',dividend_type='front',count=100) df.to_csv('300056.csv') #pandas 集成了PLOT df['close'].plot() # plt.plot(df['close'],'rv-') # plt.show() #多图绘制 fig = plt.figure() p1= fig.add_subplot(2,2,1) p2= fig.add_subplot(2,2,2) p3= fig.add_subplot(2,2,3) p4= fig.add_subplot(2,2,4) p1.plot(df['close']) p2.plot(df['open']) p3.plot(df['high']) p4.plot(df['volume']) plt.show() ```

0、talib笔记

```py { #周期指标 'CycleIndicators': [ 'HT_DCPERIOD', #希尔伯特变换-显性周期 'HT_DCPHASE', #希尔伯特变换-主导周期相 'HT_PHASOR', #希尔伯特变换-相量分量 'HT_SINE', #希尔伯特变换-筋波 'HT_TRENDMODE' #希尔伯特变换-趋势与周期模式 ], #数学计算 'MathOperators': [ 'ADD', #Vector Arithmetic Add(向量运算-加法) 'DIV', #Vector Arithmetic Div(除法) 'MAX', #指定周期内的最高价 'MAXINDEX', #指定周期内的最高价的索引(指数) 'MIN', #指定周期内的最低价 'MININDEX', #指定周期内的最低价的索引起引(指数) 'MINMAX', #指定周期内的最高价/最低价格 'MINMAXINDEX', #指定周期内的最高价/最低价的索引(指数) 'MULT', #乘法 'SUB', #减法 'SUM' #求和 ], #数学变换 'MathTransform': [ 'ACOS', 'ASIN', 'ATAN', 'CEIL', #天花板 'COS', 'COSH', 'EXP', 'FLOOR', #地板 'LN', 'LOG10', 'SIN', 'SINH', 'SQRT', 'TAN', 'TANH' ], #动量指标 'MomentumIndicators': [ 'ADX', # Average Directional Movement Index (平均趋向指数) 'ADXR', # Average Directional Movement Index Rating 'APO', # Absolute Price Oscillator 'AROON', # Aroon 'AROONOSC', # Aroon Oscillator 'BOP', # Balance Of Power 'CCI', # Commodity Channel Index 'CMO', # Chande Momentum Oscillator 'DX', # Directional Movement Index 'MACD', # Moving Average Convergence/Divergence (平滑异同移动平均线) 'MACDEXT', # MACD with controllable MA type 'MACDFIX', # Moving Average Convergence/Divergence Fix 12/26 'MFI', # Money Flow Index 'MINUS_DI', # Minus Directional Indicator 'MINUS_DM', # Minus Directional Movement 'MOM', # Momentum 'PLUS_DI', # Plus Directional Indicator 'PLUS_DM', # Plus Directional Movement 'PPO', # Percentage Price Oscillator 'ROC', # Rate of change : ((price/prevPrice)-1)*100 'ROCP', # Rate of change Percentage: (price-prevPrice)/prevPrice 'ROCR', # Rate of change ratio: (price/prevPrice) 'ROCR100', # Rate of change ratio 100 scale: (price/prevPrice)*100 'RSI', # Relative Strength Index (相对强弱指数) 'STOCH', # Stochastic 'STOCHF', # Stochastic Fast 'STOCHRSI', # Stochastic Relative Strength Index 'TRIX', # 1-day Rate-Of-Change (ROC) of a Triple Smooth EMA 'ULTOSC', # Ultimate Oscillator 'WILLR' # Williams' %R ], #重叠指标 'OverlapStudies': [ 'BBANDS', #布林带 'DEMA', #双指数移动平均线 'EMA', #指数移动平均 'HT_TRENDLINE', #希尔伯特变换-瞬时趋势 'KAMA', #考夫曼自适应移动平均 'MA', #移动平均线 'MAMA', #自适应移动平均 'MAVP', #变周期移动平均 'MIDPOINT', #周期中点 'MIDPRICE', #周期中间价 'SAR', 'SAREXT', 'SMA', #简单移动平均线 'T3', #三指数移动平均 'TEMA', #三重指数移动平均线 'TRIMA', #三角形移动平均 'WMA' #加权移动平均线 ], #形态识别指标 'PatternRecognition': [ 'CDL2CROWS', #两只乌鸦 'CDL3BLACKCROWS', #三只乌鸦 'CDL3INSIDE', #三内部上涨和下跌 'CDL3LINESTRIKE', #三线打击 'CDL3OUTSIDE', #三个部上涨和下跌 'CDL3STARSINSOUTH', #南方三星 'CDL3WHITESOLDIERS', #三白兵 'CDLABANDONEDBABY', #弃婴形态 'CDLADVANCEBLOCK', #大敌当前-前方受阻 'CDLBELTHOLD', #捉腰带线 'CDLBREAKAWAY', #脱离 'CDLCLOSINGMARUBOZU', #收盘缺影线 'CDLCONCEALBABYSWALL', #藏婴吞没有 'CDLCOUNTERATTACK', #反击线 'CDLDARKCLOUDCOVER', #乌云压顶 'CDLDOJI', #十字 'CDLDOJISTAR', #十字星 'CDLDRAGONFLYDOJI', #蜻蜓十字/T形十字 'CDLENGULFING', #吞噬模式 'CDLEVENINGDOJISTAR', #十字暮星 'CDLEVENINGSTAR', #暮星 'CDLGAPSIDESIDEWHITE', #向上/向下跳空并列阳线 'CDLGRAVESTONEDOJI', #墓碑十字典/倒T十字 'CDLHAMMER', #锤头线 'CDLHANGINGMAN', #上吊线 'CDLHARAMI', #Harami形态 'CDLHARAMICROSS', #Harami交叉模式 'CDLHIGHWAVE', #High-Wave Candle 狂浪的蜡烛 'CDLHIKKAKE', #陷阱 'CDLHIKKAKEMOD', #Modified Hikkake Pattern 修改Hikkake模式 'CDLHOMINGPIGEON', #家鸽 'CDLIDENTICAL3CROWS', #Identical Three Crows 相同三只乌鸦 'CDLINNECK', #In-Neck Pattern 颈部模式 'CDLINVERTEDHAMMER', #倒锤 'CDLKICKING', #反冲形态度 'CDLKICKINGBYLENGTH', #踢腿-牛/熊由长龙决定 'CDLLADDERBOTTOM', #梯子底部 'CDLLONGLEGGEDDOJI', #长腿 'CDLLONGLINE', #长线蜡烛 'CDLMARUBOZU', # 'CDLMATCHINGLOW', #相同低价格 'CDLMATHOLD', # 'CDLMORNINGDOJISTAR', #十字晨星 'CDLMORNINGSTAR', #晨星 'CDLONNECK', #颈部两模式 'CDLPIERCING', #刺透形态 'CDLRICKSHAWMAN', #黄包车、人力车 'CDLRISEFALL3METHODS', #上升/下降三法 'CDLSEPARATINGLINES', #分隔线 'CDLSHOOTINGSTAR', #流星 'CDLSHORTLINE', #短线蜡烛 'CDLSPINNINGTOP', #纺锤 'CDLSTALLEDPATTERN', #停滞模式 'CDLSTICKSANDWICH', #三明治,面包 'CDLTAKURI', #蜻蜓点水长下影 'CDLTASUKIGAP', 'CDLTHRUSTING', #插入模式 'CDLTRISTAR', #三星模式 'CDLUNIQUE3RIVER', 'CDLUPSIDEGAP2CROWS', #向上跳空两只乌鸦 'CDLXSIDEGAP3METHODS' #上/下缺口三种方法 ], ##价格指标 'PriceTransform': [ 'AVGPRICE', #平均价格 'MEDPRICE', #中间价格局 'TYPPRICE', #典型价 'WCLPRICE' #加权收盘价 ], ## 统计函数 'StatisticFunctions': [ 'BETA', #贝塔系数 'CORREL', #皮尔逊相关系数 'LINEARREG', #线性回归 'LINEARREG_ANGLE', #线性回归角度 'LINEARREG_INTERCEPT', #线性回归拦截 'LINEARREG_SLOPE', #线性回归斜率 'STDDEV', #标准偏差 'TSF', #时间序列预测 'VAR' #方差 ], #波动率指标 'VolatilityIndicators': [ 'ATR', #平均真实波幅 'NATR', #归一化平均真实波幅 'TRANGE' #真实波幅 ], #量能指标 'VolumeIndicators': [ 'AD', #查金A/D线 'ADOSC', #查金A/D振荡器 'OBV' #平均交易量 ] } ``` # 周期性指标Cycle Indicator Functions [文库文档](https://wenku.baidu.com/view/0e35f6eead51f01dc281f18e.md) ## HT_DCPERIOD - Hilbert Transform - Dominant Cycle Period 函数名:HT_DCPERIOD 名称: 希尔伯特变换-主导周期 简介:将价格作为信息信号,计算价格处在的周期的位置,作为择时的依据。 ```py real = HT_DCPERIOD(close) ``` ## HT_DCPHASE - Hilbert Transform - Dominant Cycle Phase 函数名:HT_DCPHASE 名称: 希尔伯特变换-主导循环阶段 ```py real = HT_DCPHASE(close) ``` ## HT_PHASOR - Hilbert Transform - Phasor Components 函数名:HT_DCPHASE 名称: 希尔伯特变换-希尔伯特变换相量分量 ```py inphase, quadrature = HT_PHASOR(close) ``` ## HT_SINE - Hilbert Transform - SineWave 函数名:HT_DCPHASE 名称: 希尔伯特变换-正弦波 NOTE: The HT_SINE function has an unstable period. ```py sine, leadsine = HT_SINE(close) ``` ## HT_TRENDMODE - Hilbert Transform - Trend vs Cycle Mode 函数名:HT_DCPHASE 名称: 希尔伯特变换-趋势与周期模式 ```py integer = HT_TRENDMODE(close) ```

ContextInfo

```py #encoding:gbk ''' 本策略事先设定好交易的股票篮子,然后根据指数的CCI指标来判断超买和超卖 当有超买和超卖发生时,交易事先设定好的股票篮子 ''' import pandas as pd import numpy as np import talib import time def init(ContextInfo): #hs300成分股中sh和sz市场各自流通市值最大的前3只股票 ContextInfo.trade_code_list=['601398.SH','601857.SH','601288.SH','000333.SZ','002415.SZ','000002.SZ','000936.SZ'] #设置股票池 ContextInfo.set_universe(ContextInfo.trade_code_list) ContextInfo.accID = '6000000058' ContextInfo.buy = True ContextInfo.sell = False #设定交易帐号 ContextInfo.set_account(ContextInfo.accID) #设定起止回测点 ContextInfo.start='2020-10-01 10:00:00' ContextInfo.end='2020-10-12 14:30:00' #设定回测初始资金 ContextInfo.capital=100000 #设定交易滑点 0:tick跳数设置滑点 1:按固定值设置滑点 2:价格比例设置滑点 ContextInfo.set_slippage(1,0.01) #按固定值设置滑点值为0.1 #设定策略回测各种手续费率 ContextInfo.set_commission(commissionType, commissionList) #commissionType 0:按比例 1:按每手(股) #commissionList[opten_tax,close_tax,open_commission,close_commission,close_tdaycommission,min_commission] 分别数-买入印花税,卖出印花税,开仓费、平咋费、平今费、最小手续费 #注:如果只填写一个参数则代表输入的参数值赋值给 open_commission = close_commission = close_today_commission,其他的值均为 0,这时 commissionType 为 0 ContextInfo.set_commission(0.00025) #设定开分手续费和平仓手续费均为0.00025,其余为0 commissionList=[0,0.001,0.00025,0.00025,0,5] #设定买入印花税为0,卖出印花税为千分之一,开仓手续费万二点五,卖出手续费为万二点五,平今手续费为0,最小手续费为5元 ContextInfo.set_commission(0,commissionList) #获取股票池中的股票 stockList = ContextInfo.get_universe() for i,stock in enumerate(stockList): print(i,ContextInfo.get_stock_name(stock)) print('是否停牌?',ContextInfo.is_suspended_stock(stock)) print('上市时间',ContextInfo.get_open_date(stock)) print('股票池',ContextInfo.get_universe()) #获取当前周期 print('当前周期:',ContextInfo.period) #获取当前K线索引号 print('当前K线索引号:',ContextInfo.barpos) #获取当前图K线数目 print('当前图K线数目',ContextInfo.time_tick_size) #判定是否为最后一根K线 print('是否为最后一根K线:',ContextInfo.is_last_bar()) #判定是否为新的K线 print('判断是否为新K线?',ContextInfo.is_new_bar()) #获取当前主图代码 print('当前图股票代码:',ContextInfo.stockcode) #获取当前主图复权处理方式 none:不复权 front:向前复权 back:向后复权 front_ratio:等比向前复权 back_ratio:等比向后复权 print('复权方式:',ContextInfo.dividend_type) #获取回测基准 print('回测基准:',ContextInfo.benchmark) #设定回测系统输出日志显示级别 0:信息 1:警告 2:错误 3:致命 #显示错误级别以上的信息 ContextInfo.data_info_level=1 #获取某个记录类型对应的某个时刻的记录情况 #buys:买入持仓,sells:卖出持仓,holdings:当前持仓,historysums:历史持仓汇总,dealdetails:交易明细 #返回结果 market:市场代码 stockcode:合约代码 open_close:期货1开0平,股票1买0卖 direction:1多0空 trade_price:持仓成本 current_price:持仓价值 profit:持仓盈亏 #postion:仓位数量 current_weight:仓位权重 benefit_weight:盈利占比权重 holding_periods:累计持仓天数 buy_sell_times:交易次数 commission:手续费 trade_balance:成交额或市值 #operate_type:操作类型 trade_date:交易日期 pos=ContextInfo.barpos #print('当前K线的开仓记录:',get_result_records('buys',pos,ContexInfo)) #设置定时器run_time(funcName, period, startTime, market) #500nMilliSecond, 5nSecond, 5nMinute, 5nDay, ContextInfo.tcount=0 ContextInfo.run_time('mhHandleTimer','5nSecond','2019-10-10 13:00:00','SH') def mhHandleTimer(ContextInfo): ContextInfo.tcount +=1 print('定时器运行次数:',ContextInfo.tcount) def handlebar(ContextInfo): pass def testLog(): d = ContextInfo.barpos #返回当前运行到的K线索引号 t = ContextInfo.get_bar_timetag(d) #获取当前K线对应的时间时间戳 date = timetag_to_datetime(t,'%Y%m%d') #将时间戳转化为日期的格式 print(d,t,date) print (period,sell_value,buy_value) print(ContextInfo.get_last_volume('000002.SZ')) ```

问题列表

# 获取自选股数据不成功 ```python ContextInfo.get_stock_list_in_sector('我的自选',int(time.time())) ```