首页 股吧 正文

[超200只个股涨停]炒股软件数据解析(炒股软件数据准确性排行榜)

2024-02-23 16:02:26 1
admin

01

导言

不少喜爱量化的读者向我反应,尽管现已把握了Python的编程根底,但仍不知道怎么切入到股票量化剖析上,一是对怎么获取股票数据还不太熟悉;二是拿到股票数据后不知道怎么做量化回测。实际上大众号共享了许多这方面的文章,能够作为参阅模板的包含:《Python获取生意数据》、《建立自己的量化剖析数据库》、《Python面向对象编程入门及股票数据管理运用实例》;《手把手教你用Python建立自己的量化回测结构》、《用Python量化海龟生意规律》、《A股存在月份效应吗?构建月度择时战略》、《北向资金能预示大盘涨跌?》,专业量化回测结构能够参阅backtrader的系列文章(如入门量化回测最强神器backtrader(一))。现在大众号文章首要是以tusahre来获取数据,实际上Python可用的获取数据api仍是许多的,如开源的有akshare、baostock、pandas_datareader(国内外数据丰厚,但外网拜访常衔接不上)、alpha_vantage(国外)、quandl(国外)、yfinance(原yahoo财经,外网拜访常衔接不上);非开源的有WindPy(Wind付费插件)、恒稀有hs_udata(恒生云)、聚宽JQData(可试用)等等。关于这些库或数据api的具体介绍我们能够直接百度进入官网了解,此处不做进一步打开,本文首要介绍怎么运用开源数据包获取数据并进行量化回测,完成最简略的代码输出专业的剖析图表。

02

数据获取

下面别离对tusahre、tusharepro、akshare和baostock四个当时较盛行的开源数据包构建一致参数的数据获取函数,比较程序编写的杂乱程度和获取数据所需时刻。

先导入pandas、matplotlib等常用包。

importpandasaspd\nimportnumpyasnp\nimportmatplotlib.pyplotasplt\n#正常显现画图时呈现的中文和负号\nfrompylabimportmpl\nmpl.rcParams['font.sans-serif']=['SimHei']\nmpl.rcParams['axes.unicode_minus']=False\n#不显现正告信息\nimportwarnings\nwarnings.filterwarnings('ignore')

构建一致参数的数据获取函数,复权、开端和完毕时刻设置为默许参数,留意tusharepro需求注册获取token(tushare.pro/register?reg=218422)才干运用,某些数据权限受积分约束,其旧版十分接口简练好用但不再保护。akshare相当于衔接全网敞开数据源api的数据网站(如新浪财经、同花顺、东方财富等),某些函数因为包更新不可用。basostock无需注册且免费,但函数调用稍显费事。

#运用tushare旧版获取数据\nimporttushareasts\ndefget_from_tushare(code,adj='hfq',start='2010-01-01',end='2021-11-05'):\ndf=ts.get_k_data(code,autype=adj,start=start,end=end)\ndf.index=pd.to_datetime(df.date)\n#原数据已默许按日期进行了排序\nreturndf\n\n#运用tusharepro获取数据\nimporttushareasts\ntoken='输入你自己的token'\npro=ts.pro_api(token)\nts.set_token(token)\ndefget_from_tushare_pro(code,adj='hfq',start='2010-01-01',end='2021-11-05'):\n#code:输入数字字符串,如‘300002’\n#start和end输入'年-月-日'需转为'年月日'格局\nifcode.startswith('6'):\ncode=code+'.SH'\nelse:\ncode=code+'.SZ'\nstart=''.join(start.split('-'))\nend=''.join(end.split('-'))\ndf=ts.pro_bar(ts_code=code,adj=adj,start_date=start,end_date=end)\n#原数据是倒序的,所以将时刻设置为索引,依据索引从头排序\ndf.index=pd.to_datetime(df.trade_date)\ndf=df.sort_index()\nreturndf\n\n#运用akshare获取数据,其数据源来自新浪,与tushare旧版本类似\nimportakshareasak\ndefget_from_akshare(code,adj='hfq',start='2010-01-01',end='2021-11-05'):\nifcode.startswith('6'):\ncode='sh'+code\nelse:\ncode='sz'+code\nstart=''.join(start.split('-'))\nend=''.join(end.split('-'))\ndf=ak.stock_zh_a_daily(symbol=code,start_date=start,end_date=end,adjust=adj)\nreturndf\n\n#运用baostock获取数据\nimportbaostockasbs\ndefget_from_baostock(code,adj='hfq',start='2010-01-01',end='2021-11-05'):\nifcode.startswith('6'):\ncode='sh.'+code\nelse:\ncode='sz.'+code\n#转化复权为数字\nifadj=='hfq':\nadj='1'\nelifadj=='qfq':\nadj='2'\nelse:\nadj='3'\n#有必要登陆和登出体系\nbs.login()#登陆体系\nrs=bs.query_history_k_data_plus(code,\nfields="date,code,open,high,low,close,volume",\nstart_date=start,end_date=end,\nfrequency="d",adjustflag=adj)\n#adjustflag:复权类型,默许不复权:3;1:后复权;2:前复权\ndata_list=[]\nwhile(rs.error_code=='0')&rs.next():\ndata_list.append(rs.get_row_data())\n#将数据转为dataframe格局\ndf=pd.DataFrame(data_list,columns=rs.fields)\ndf.index=pd.to_datetime(df.date)\nbs.logout()#登出体系\nreturndf\n

下面别离运用这四个api接口获取数据并比较耗用时刻,成果显现,tusharepro和akshare耗用时刻均较短,获取‘300002’于2010.1-2021.11期间数据只需0.6-0.8秒,tushare旧版接口代码最简练,但需1.05秒,而baostock则需1.6,当然成果会受网络状况影响。

func={'tushare':get_from_tushare,\n'tusharepro':get_from_tushare_pro,\n'akshare':get_from_akshare,\n'baostock':get_from_baostock}\n#以个股神州泰岳为例\ncode='300002'\nfromtimeimporttime\ndata=pd.DataFrame()\nforname,finfunc.items():\nt0=time()\ndata[name]=f(code).close\nt1=time()\nprint(f'{name}耗时:{t1-t0:.04f}秒')\n

输出成果:

tushare耗时:1.0488秒

tusharepro耗时:0.6780秒

akshare耗时:0.7795秒

loginsuccess!

logoutsuccess!

baostock耗时:1.6439秒

比较四个api获取的“300002”后复权价格数据,成果显现四个接口得到的数据存在一些不同,其间tushare和baostock数据挨近,二者与akshare不同较大,或许是核算方法存在差异。因为采用后复权,跟着时刻拉长,分红次数添加,差异越来越大。

data.tail()\n

(data['tusharepro']-data['akshare']).plot(figsize=(12,5),c='r');

03

战略回测

下面以tushare旧版接口为例,获取数据并根据技能目标进行量化回测。图中显现,“300002”的股价在2010.1.4-2021.11.5期间动摇十分大,累计收益率-14.5%,年化收益率-1.4%,年化动摇率53.8%,最大回撤高达89%,日VaR为-6.7%。换句话说,假如从2010年1月4日开端持有该股票,至2021年11月5日将亏本14.5%,但假如是在其最高点买入最大亏本为89%;当然,假如你是在2012年12月买入,持有到2015年6月21日,股价差不多增长了10倍。实际的状况往往是,很多股民像韭菜相同在股价不断动摇的进程中被收割。

df=get_from_tushare('300002')\ndf.close.plot(figsize=(12,6));\nplt.title('神州泰岳股价走势\\n2010-2021',size=15)\n

importpyfolioaspf\npf.create_simple_tear_sheet((df.close.pct_change()).fillna(0).tz_localize('UTC'))\n

下面以趋势目标ADX结合均线和MACD目标构建生意战略进行量化回测。ADX是一种常用的趋势衡量目标,目标值越大代表趋势越强,但目标本身无法告知你趋势的发展方向,与均线和MACD目标合作运用,能够承认商场是否存在趋势,并衡量趋势的强度。下面以13、55、89日均线(斐波那契数列),MACD(12,26,9)和ADX(阈值设置为前值和25)目标为例,得到下列回测成果。

#技能剖析包importtalibasta\ndefadx_strategy(df,ma1=13,ma2=55,ma3=89,adx=25):\n#核算MACD和ADX目标\ndf['EMA1']=ta.EMA(df.close,ma1)\ndf['EMA2']=ta.EMA(df.close,ma2)\ndf['EMA3']=ta.EMA(df.close,ma3)\ndf['MACD'],df['MACDSignal'],df['MACDHist']=ta.MACD(df.close,12,26,9)\ndf['ADX']=ta.ADX(df.high,df.low,df.close,14)\n#规划生意信号:21日均线大于42日均线且42日均线大于63日均线;ADX大于前值小于25;MACD大于前值\ndf['Buy_Sig']=(df['EMA1']>df['EMA2'])&(df['EMA2']>df['EMA3'])&(df['ADX']<=adx)\\\n&(df['ADX']>df['ADX'].shift(1))&(df['MACDHist']>df['MACDHist'].shift(1))\ndf.loc[df.Buy_Sig,'Buy_Trade']=1\ndf.loc[df.Buy_Trade.shift(1)==1,'Buy_Trade']=""\n#防止最终三天内呈现生意\ndf.Buy_Trade.iloc[-3:]=""\ndf.loc[df.Buy_Trade==1,'Buy_Price']=df.close\ndf.Buy_Price=df.Buy_Price.ffill()\ndf['Buy_Daily_Return']=(df.close-df.Buy_Price)/df.Buy_Price\ndf.loc[df.Buy_Trade.shift(3)==1,'Sell_Trade']=-1\ndf.loc[df.Sell_Trade==-1,'Buy_Total_Return']=df.Buy_Daily_Return\ndf.loc[(df.Sell_Trade==-1)&(df.Buy_Daily_Return==0),'Buy_Total_Return']=\\\n(df.Buy_Price-df.Buy_Price.shift(1))/df.Buy_Price.shift(1)\ndf.loc[(df.Sell_Trade==-1)&(df.Buy_Trade.shift(1)==1),'Buy_Total_Return']=\\\n(df.close-df.Buy_Price.shift(2))/df.Buy_Price.shift(2)\n#回来战略的日收益率\nreturndf.Buy_Total_Return.fillna(0)\n

回测成果显现,运用该生意战略可获得11.3%的年化收益率,累计收益率221.5%,最大回撤-24.2%,夏普比率0.63。运用战略后各项目标得到有用改进。

importpyfolioaspf\npf.create_simple_tear_sheet(adx_strategy(df).tz_localize('UTC'))\n

04

结语

关于tushare、tusharepro、akshare、baostock开源数据api,本文构建了一致参数的数据获取函数,获取个股后复权数据并以技能目标ADX结合均线和MACD构建生意战略进行量化回测。本文旨在为我们使用开源数据进行量化剖析供给一个思路和模板,各位读者能够在此根底上结合本身对商场的了解进行深化拓宽。值得留意的是,文中提及的生意战略仅供学习参阅,切勿直接拿来做实在生意。实际上,文中对‘300002’单个标的进行回测得到成果不代表该生意战略就有用,或许正好适合该股票和该段时刻走势,任何根据技能目标的生意战略均具有必定的局限性,具体问题具体剖析。

收藏
分享
海报
1