当前位置:首页 > 城事精选 > 正文

Python量化交易:利用Tushare数据之二——神奇九转指标策略

一.什么是神奇九转指-标
神奇九转是一套推断股高下点的择时计谋,属于中短线(2-3周10-15个生意日)技术指-标呀。神奇九转指-标想法起源于技术剖析领域著名导师汤姆·迪马克的TD序列,即股价上升或者(着落)历程中连续9日开盘高价于(或者低于)前4天的开盘价,后面很应该发生转向呀。所有对转向的推断是定量且不变得呀。其焦点功效为觉察现在股价的拐点,提升抄底.逃顶的成-功率呀。TD序列主要包罗TD阻力线.TD结构.TD计数三大部-分,而神奇九转不过关于TD结构的运用呀。通过同花顺大数据举行回测展现,神奇九转指-标基于个股逃顶和抄底的成-功率为68.6%,基于指数逃顶和抄底的成-功率为75.6%呀。
注重神奇九转指-标计谋做为市场上有数的择时计谋选股指-标(区别于MACD.KDJ.W&R.筹码指-标等滞后性很强),大几率能够或者者捕捉到个股得低位或者者高位得更改点呀。但有一点需要注重该指-标只适合于指数和个股的动荡市.弱牛市和弱熊市呗;不适合于大牛市或者大熊市!
1.1 神奇九转指-标思维
股价上升或者(着落)历程中连续9日开盘高价于(或者低于)前4天的开盘价即知足神奇九转指-标思维呀。股价在上升或者(着落)历程中连续9日到达触发条件会变成数列1.2.3.7.8.9,数列会依次标注在昔日K线上方(下方)呀。惟有当股价连续第六天到达触发条件时,数列才最先举行展现,依次展现1.2.3.4.5.6,当第七天依然到达触发条件时则展现7,如第七日未到达触发条件则前面6天的序号消逝呀。第八日同第七日的展现思维一样呀。当第九天依然到达触发条件时,便造变成了一位九转结构呀。而当第九日未到达触发条件时则前面8日的序号消逝,九转结构不行立呀。股价上升历程中酿成的九转结构称之为上升九转卖出结构,而股价着落历程中酿成的九转结构则称之为着落九转买入结构呀。
1.2 着落九转买入结构
着落九转买入结构知足两个条件第一、连续出-现九根K线的开盘价都比各自前面的第四根K线的开盘价低呀。第二、8或者9确昔日最廉价小于6或者7确昔日最廉价呀。
着落九转买入结构
1.2 上升九转卖出结构
上升九转卖出结构知足两个条件第一、连续出-现九根K线的开盘价都比各自前面的第四根K线的开盘高价呀。第二、8或者9确昔日最高价格大于6或者7确昔日最高价格呀。
上升九转卖出结构
两.通过Tushare获取神奇九转所需数据
2.1 stock_basic股基本数据接口
接口描写
获取股基本信息数据,包罗股代码.称呼.上市日期.退市日期等呀。
输入参数
输入参数
接口示例
pro = ts.pro_api() 盘现在所有平时上市生意的股列表 data = pro.stock_basic(exchange = '', list_status = 'L', fields = 'ts_code, symbol, name, area, industry, list_date')
数据样例
ts_code symbol name area industry list_date 0 000001.SZ 000001 平安庄 深圳 庄 19910403 1 000002.SZ 000002 万科A 深圳 天下地产 19910129 2 000004.SZ 000004 国农科技 深圳 动物制药 19910114 3 000005.SZ 000005 世纪星源 深圳 房产处事 19901210 4 000006.SZ 000006 深振业A 深圳 地域地产 19920427 5 000007.SZ 000007 全新好 深圳 旅店餐饮 19920413 6 000008.SZ 000008 神州高铁 北京 运输装备 19920507 7 000009.SZ 000009 祖国宝安 深圳 综合类 19910625 8 000010.SZ 000010 美丽 生态 深圳 建-筑施工 19951027 9 000011.SZ 000011 深物业A 深圳 地域地产 19920330 10000012.SZ000012南玻A深圳玻璃19920228
2.2 daily股日线行情数据接口
接口描写
获取股日线行情数据呀。
数据声明生意日每一天15点~16点之中呀。本接口是未复权行情,停牌时期不供应数据呀。
调取声明基本积分每一分钟内最多调取500次,每一次5000条数据,十分于23年史书呀。
输入参数
输入参数
接口示例
pro = ts.pro_api() df = pro.daily(ts_code = '000001.SZ', start_date = '20180701', end_date = '20180718') 多个股 df = pro.daily(ts_code = '000001.SZ, 600000.SH', start_date = '20180701', end_date = '20180718') 通过日期取史书某一天的所有史书 df = pro.daily(trade_date='20180810')
数据样例
ts_code trade_date open high low close pre_close change pct_chg vol amount 0 000001.SZ 20180718 8.75 8.85 8.69 8.70 8.72 -0.02 -0.23 525152.77 460697.377 1 000001.SZ 20180717 8.74 8.75 8.66 8.72 8.73 -0.01 -0.11 375356.33 326396.994 2 000001.SZ 20180716 8.85 8.90 8.69 8.73 8.88 -0.15 -1.69 689845.58 603427.713 3 000001.SZ 20180713 8.92 8.94 8.82 8.88 8.88 0.00 0.00 603378.21 535401.175 4 000001.SZ 20180712 8.60 8.97 8.58 8.88 8.64 0.24 2.78 1140492.31 1008658.828 5 000001.SZ 20180711 8.76 8.83 8.68 8.78 8.98 -0.20 -2.23 851296.70 744765.824 6 000001.SZ 20180710 9.02 9.02 8.89 8.98 9.03 -0.05 -0.55 896862.02 803038.965 7 000001.SZ 20180709 8.69 9.03 8.68 9.03 8.66 0.37 4.27 1409954.60 1255007.609 8 000001.SZ 20180706 8.61 8.78 8.45 8.66 8.60 0.06 0.70 988282.69 852071.526 9 000001.SZ 20180705 8.62 8.73 8.55 8.60 8.61 -0.01 -0.12 835768.77 722169.579
三.神奇九转指-标计谋选股的Python完成
3.1 代码声明
从Tushare获取的股基本数据寄存在Mysql数据中呀。从数据库中找出所有非ST股,然后重复搜查每一只股现在日期能否吻合神奇九转指-标计谋(包罗卖出和买入),吻合计谋的股数据展现在表格中呀。
注因篇幅本因,以下代码为主要完成思维,非所有代码呀。如需请联系呀。
3.2 主要代码
def get_nine_turn_index(self): lstBuy = [] lstSell = [] dfBuy = self.get_data_from_file(IDX_BUY) dfSell = self.get_data_from_file(IDX_SELL) if dfBuy.empty or dfSell.empty: stData = cmnDB().get_all_stock_basic_data(noST=True) idx = 0 iTop = 15 total = len(stData) start = time.perf_counter() for itm in stData: st = self.get_stock_json_data(itm) stCode = itm[0] data = cmnDB().get_nine_turn_data(stCode, lmt=iTop) data = data.iloc[:iTop] oClose = data.close.values if self.get_is_nine_turn_buy_stock(oClose): st['idx_type'] = IDX_BUY lstBuy.append(st) elif self.get_is_nine_turn_sell_stock(oClose): st['idx_type'] = IDX_SELL lstSell.append(st) idx += 1 cmn.show_progress_bar(idx, total, start, oBar=oGauge) 变成csv文件 self.make_nine_turn_file(lstBuy, IDX_BUY) self.make_nine_turn_file(lstSell, IDX_SELL) 转换为DataFrame dfBuy = pd.DataFrame(lstBuy) dfSell = pd.DataFrame(lstSell) df = dfBuy.append(dfSell, ignore_index=True) self.show_data_in_grid(df) """ ================================================== *** Name: get_is_nine_turn_buy_stock *** Desc: check the stock meet the magic nine turn index of buy *** Param: oClose - close value records of stock *** Return: Boolean: True / False """ def get_is_nine_turn_buy_stock(self, oClose): rtn = False iCount = 0 for idx in range(len(oClose) - 5): if oClose[idx] oClose[idx+4]: iCount += 1 if iCount == 8: rtn = True break else: break return rtn
3.3 完成结局数据样例
吻合九转买入结构股
吻合九转卖出结构股