一、什么是神奇九轉指標
神奇九轉是一套判斷股票高低點的擇時策略,屬于中短線(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 深圳 區域地產 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 實現結果數據樣例
符合九轉買入結構股票
符合九轉賣出結構股票
來源:生活資訊網
評論前必須登錄!
立即登錄 注冊