目录
对于股票交易市场中,我们常听到所谓的热门族群,而热门族群代表著量增价涨,亦或是某些股票当我们看到新闻时已经上涨一段时间,而我们要如何及早发现这些股票,是本文想要实现的,一样以成交量增长做为筛选条件,一次帮我们把所有市场的股票都给筛选,也能大幅减少我们寻找标的的时间。
而本文一样是使用较为弹性的设计,可供读者自行修改,后面会谈及如何修改所参数,本文筛选条件设计如下:
1. 今日成交量是前”4”日平均的5倍
2.需要上涨3%以上
3. 交易量至少大于 500
本文使用 Window10 并以 Spyder(anaconda31) 作为编辑器
###汇入套件##########数据分析三宝
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
#################TEJ
import tejapi
tejapi.ApiConfig.api_key = 'Your Key'
tejapi.ApiConfig.ignoretz = True
###############画k线
from mplfinance.original_flavor import candlestick_ohlc
from matplotlib.dates import date2num ,num2date
import matplotlib.ticker as ticker
import matplotlib.dates
证券交易资料表:上市(柜)未调整股价(日),资料代码为(TWN/EWPRCD)。
证券属性资料表 : 上市(柜)产业别与名称,资料代码为(TWN/ANPRCSTD)。
data=tejapi.get('TWN/EWNPRCSTD' ,chinese_column_name=True )
select=data["上市别"].unique()
选取上市上柜别
select=select[1:3]
condition =(data["上市别"].isin(select)) & ( data["证券种类名称"]=="普通股" )
data=data[condition] ######设条件
twid=data["证券码"].to_list()
将选取的上市上柜资料放入证券交易资料库中,并挑选出证券代号、开盘价、收盘价、最高价、最低价、调整股价、交易量、日期。
opts={'columns': ['coid','open_d','close_d','high_d','low_d' ,'mdate', 'volume', 'close_adj']}
start='2022-1-01'
end="2022-03-8"
tw=tejapi.get('TWN/EWPRCD',coid=twid,
mdate={'gt':start,'lt':end},
paginate=True,
chinese_column_name=True,
opts=opts
)
a=tw
a=tw.groupby(by=["证券码"])
b=list(a) #######ˇ
使用groupby函数将每一个证券码分类,将groupby后的资料放在list里面才能观察
点开里面的形式如下
def selectstock(b,number,minnum,num) : # b为用groupby做出来的list
output=[]
for i in range(len(b)):
a=b[i][1]
a["五日均量"]=a["成交量(千股)"].rolling(5).sum()
a["五日均价"]=a["收盘价-除权息"].rolling(5).mean()
a["前几日平均"]=(a["五日均量"]-a["成交量(千股)"]) / 4
a["成交量"+str(number)+"倍喔"]=a["成交量(千股)"]-a['前几日平均'] *number
a.drop('五日均量',axis=1)
if a["成交量(千股)"].mean() > minnum :
output.append(a)
stockineed=[]
for j in output:
j.reset_index(drop=True,inplace=True)
if j["成交量"+str(number)+"倍喔"][len(j)-1] > 0 :
if j["收盘价-除权息"][len(j)-1] > j["收盘价-除权息"][len(j)-2]*num :
stock=j["证券码"][0]
stockineed.append(stock)
return stockineed
此函式是有3个参数设计 (number,minnum,num)
number 可以选择倍数 本文选 前”4″日平均的5倍
minnum 可以选择筛选成交量之最小值 本文选”500″
num 当日上涨幅度 本文选取 ” 3″ %
stockineed=selectstock(b,5,500,1.03)
这些资料为本次筛选出来的股票代码一共有八档股票符合条件
condition=tw["证券码"].isin(stockineed)
tw1=tw[condition]
a=tw1.groupby("证券码")
a=list(a)
for i in a:
i[1].set_index("日期",inplace=True) ###将日期设为index
与刚才一样的步骤将资料使用groupy函数聚合
我们能得到筛选出来股票的日交易资料,我们使用刚才得到股票代码取寻找分别代表的产业类别,方便画图时显示,并且打算把它画出来!
opts={'columns': ['coid','stk_name','mkt','tejindnm',]}
data1=tejapi.get('TWN/ANPRCSTD' ,
opts=opts,
chinese_column_name=True,
paginate=True,
coid=stockineed)
def getplot(finaldata):
for i in range(len(finaldata)):
out=finaldata[i][1]
name=data1[data1["证券码"]==finaldata[i][0]]
outputname0=name.loc[i,'证券名称']##为了得到标题
outputname1=name.loc[i,'上市别'] ##
outputname2=name.loc[i,"TEJ产业名"]##
# out.reset_index(drop=True,inplace=True)
if outputname1 == "TSE":
outputname1 ="上市"
else :
outputname1= "上柜"
fig = plt.figure(figsize=(6,6))
grid = plt.GridSpec(3, 3, wspace=0.4, hspace=0.3)
ax1=plt.subplot(grid[:2, :])
ax2=plt.subplot(grid[2, :])
date= [i for i in range(len(out))]
##### 获取 0开始的顺序 因为如果使用原日期假日会有空缺
out_index= [tuple([date[i],out.开盘价[i],out.最高价[i],out.最低价[i],out.收盘价[i]]) for i in range(len(out))]
candlestick_ohlc(ax1, out_index, width=0.6, colorup='r', colordown='g', alpha=0.75)
ax1.set_xticks(range(0, len(out.index), 10))
ax1.set_xticklabels(out.index[::10])
ax1.set_title([str(out["证券码"][0]),outputname0,outputname1,outputname2])
ax1.set_ylabel('Price')
ax1.grid(linestyle="--",alpha=0.8)
red_pred = np.where(out["收盘价"] >= out["开盘价"],out["成交量(千股)"], 0)
blue_pred = np.where(out["收盘价"] < out["开盘价"], out["成交量(千股)"], 0)
out1=out.reset_index(drop=True )
ax2.bar(out1.index,red_pred, facecolor="red")
ax2.bar(out1.index,blue_pred,facecolor="green")
ax2.set_xticks(range(0, len(out.index), 5))
ax2.set_xticklabels(out.index[::5])
ax2.set_ylabel('vol')
plt.legend(loc='best')
fig.autofmt_xdate()
fig.tight_layout()
plt.show()
此程式能将画出股票的k线以及成交量在同一张图上
getplot(a) ###前面聚合后的List(a)
就会画出筛选的股票啦,也可以在此加入均线等等让图看起来更丰富,每天都可以用这个程式自动筛选股票。
借由这次程式的筛选,我们依然能找到这次大跌下的强势股,也是一个可以用来挑选标地物的好方法,配合上次的量能回测的操作模式或许是一个不错的获利模式,而更改筛选参数也能找到出量下跌的标的,每个人对于投资都有自己喜欢的方式,而我们能借由程式的方式找寻符合自己进场逻辑的标的,以节省下许多挑选的时间,所以欢迎对各种交易回测有兴趣的读者,选购TEJ E-Shop的相关方案,用高品质的资料库,建构出适合自己的交易策略。