一、什么是神奇九轉(zhuǎn)指標(biāo)神奇九轉(zhuǎn)是一套判斷股票高低點(diǎn)的擇時(shí)策略,屬于中短線(2-3周10-15個(gè)交易日)技術(shù)指標(biāo)。神奇九轉(zhuǎn)指標(biāo)思想來源于技術(shù)分析領(lǐng)域著名大師湯姆·迪馬克的TD序列,即股價(jià)上漲或(下跌)過程中連續(xù)9日收盤價(jià)高于(或低于)前4天的收盤價(jià),其后走勢很可能發(fā)生轉(zhuǎn)向。所有對轉(zhuǎn)向的判斷是定量且不變的。其核心功能為發(fā)現(xiàn)當(dāng)前股價(jià)走勢的拐點(diǎn),提高抄底、逃頂?shù)某晒β省D序列主要包括TD阻力線、TD結(jié)構(gòu)、TD計(jì)數(shù)三大部分,而神奇九轉(zhuǎn)只是對于TD結(jié)構(gòu)的應(yīng)用。通過同花順大數(shù)據(jù)進(jìn)行回測顯示,神奇九轉(zhuǎn)指標(biāo)基于個(gè)股逃頂和抄底的成功率為68.6%,基于指數(shù)逃頂和抄底的成功率為75.6%。 注意:神奇九轉(zhuǎn)指標(biāo)策略作為市場上稀有的擇時(shí)策略選股指標(biāo)(不同于MACD、KDJ、W&R、籌碼指標(biāo)等滯后性很強(qiáng)),大概率能夠捕捉到個(gè)股得低位或者高位得轉(zhuǎn)折點(diǎn)。但有一點(diǎn)需要注意:該指標(biāo)只適合于指數(shù)和個(gè)股的震蕩市、弱牛市以及弱熊市;不適合于大牛市或大熊市! 1.1 神奇九轉(zhuǎn)指標(biāo)邏輯股價(jià)上漲或(下跌)過程中連續(xù)9日收盤價(jià)高于(或低于)前4天的收盤價(jià)即滿足神奇九轉(zhuǎn)指標(biāo)邏輯。股價(jià)在上漲或(下跌)過程中連續(xù)9日達(dá)到觸發(fā)條件會生成數(shù)列1、2、3....7、8、9,數(shù)列會依次標(biāo)注在當(dāng)日K線上方(下方)。只有當(dāng)股價(jià)連續(xù)第六天達(dá)到觸發(fā)條件時(shí),數(shù)列才開始進(jìn)行顯示,依次顯示1、2、3、4、5、6,當(dāng)?shù)谄咛煲廊贿_(dá)到觸發(fā)條件時(shí)則顯示7,如第七日未達(dá)到觸發(fā)條件則前面6天的序號消失。第八日同第七日的顯示邏輯一樣。當(dāng)?shù)诰盘煲廊贿_(dá)到觸發(fā)條件時(shí),便形成了一個(gè)九轉(zhuǎn)結(jié)構(gòu)。而當(dāng)?shù)诰湃瘴催_(dá)到觸發(fā)條件時(shí)則前面8日的序號消失,九轉(zhuǎn)結(jié)構(gòu)不成立。股價(jià)上漲過程中形成的九轉(zhuǎn)結(jié)構(gòu)稱之為上漲九轉(zhuǎn)賣出結(jié)構(gòu),而股價(jià)下跌過程中形成的九轉(zhuǎn)結(jié)構(gòu)則稱之為下跌九轉(zhuǎn)買入結(jié)構(gòu)。 1.2 下跌九轉(zhuǎn)買入結(jié)構(gòu)下跌九轉(zhuǎn)買入結(jié)構(gòu):滿足兩個(gè)條件:第一:連續(xù)出現(xiàn)九根K線的收盤價(jià)都比各自前面的第四根K線的收盤價(jià)低。第二:8或9的當(dāng)日最低價(jià)格小于6或7的當(dāng)日最低價(jià)格。 下跌九轉(zhuǎn)買入結(jié)構(gòu) 1.2 上漲九轉(zhuǎn)賣出結(jié)構(gòu)上漲九轉(zhuǎn)賣出結(jié)構(gòu):滿足兩個(gè)條件:第一:連續(xù)出現(xiàn)九根K線的收盤價(jià)都比各自前面的第四根K線的收盤價(jià)高。第二:8或9的當(dāng)日最高價(jià)格大于6或7的當(dāng)日最高價(jià)格。 上漲九轉(zhuǎn)賣出結(jié)構(gòu) 二、通過Tushare獲取神奇九轉(zhuǎn)所需數(shù)據(jù)2.1 stock_basic股票基礎(chǔ)數(shù)據(jù)接口
獲取股票基礎(chǔ)信息數(shù)據(jù),包括股票代碼、名稱、上市日期、退市日期等。
pro = ts.pro_api()#查詢當(dāng)前所有正常上市交易的股票列表data = pro.stock_basic(exchange = '', list_status = 'L', fields = 'ts_code, symbol, name, area, industry, list_date')
2.2 daily股票日線行情數(shù)據(jù)接口
獲取股票日線行情數(shù)據(jù)。 數(shù)據(jù)說明:交易日每天15點(diǎn)~16點(diǎn)之間。本接口是未復(fù)權(quán)行情,停牌期間不提供數(shù)據(jù)。 調(diào)取說明:基礎(chǔ)積分每分鐘內(nèi)最多調(diào)取500次,每次5000條數(shù)據(jù),相當(dāng)于23年歷史。
pro = ts.pro_api()df = pro.daily(ts_code = '000001.SZ', start_date = '20180701', end_date = '20180718')#多個(gè)股票df = pro.daily(ts_code = '000001.SZ, 600000.SH', start_date = '20180701', end_date = '20180718')#通過日期取歷史某一天的全部歷史df = pro.daily(trade_date='20180810')
三、神奇九轉(zhuǎn)指標(biāo)策略選股的Python實(shí)現(xiàn)3.1 代碼說明從Tushare獲取的股票基礎(chǔ)數(shù)據(jù)存放在Mysql數(shù)據(jù)中。從數(shù)據(jù)庫中找出所有非ST股票,然后循環(huán)檢查每一只股票當(dāng)前日期是否符合神奇九轉(zhuǎn)指標(biāo)策略(包括賣出和買入),符合策略的股票數(shù)據(jù)顯示在表格中。 注:因篇幅原因,以下代碼為主要實(shí)現(xiàn)邏輯,非全部代碼。如需請聯(lián)系。 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 = 0iTop = 15total = 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.valuesif self.get_is_nine_turn_buy_stock(oClose):st['idx_type'] = IDX_BUYlstBuy.append(st)elif self.get_is_nine_turn_sell_stock(oClose):st['idx_type'] = IDX_SELLlstSell.append(st)idx += 1cmn.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)# 轉(zhuǎn)換為DataFramedfBuy = 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 = FalseiCount = 0for idx in range(len(oClose) - 5):if oClose[idx] < oClose[idx+4]:iCount += 1if iCount == 8:rtn = Truebreakelse:breakreturn rtn''' ==================================================*** Name: get_is_nine_turn_sell_stock*** Desc: check the stock meet the magic nine turn index of sell*** Param: oClose - close value records of stock*** Return: Boolean: True / False'''def get_is_nine_turn_sell_stock(self, oClose):rtn = FalseiCount = 0for idx in range(len(oClose) - 5):if oClose[idx] > oClose[idx+4]:iCount += 1if iCount == 8:rtn = Truebreakelse:breakreturn rtn 3.3 實(shí)現(xiàn)結(jié)果數(shù)據(jù)樣例符合九轉(zhuǎn)買入結(jié)構(gòu)股票 符合九轉(zhuǎn)賣出結(jié)構(gòu)股票 |
|