Re: [問題] python寫財務技術指標

看板Python作者 (sigh...)時間8年前 (2015/07/29 04:14), 8年前編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《laurie1980 (............)》之銘言: : 最近用python寫技術指標的進出場訊號, : 基本上要完成都不會有太大困難, : 畢竟只要照策略邏輯,加上一些判斷式,不用很精通python也能得到想要的結果 : 不過實際執行上,覺得效率應該可以在好一點 : 想問一下有沒有更好的寫法 : 以下是一個以RSI作為訊號產生的範例, : 技術指標的訊號邏輯都不出這種架構, : 程式說明: : data是一個pandas的Dataframe, : row是時間,columns是各種技術指標(RSI、MACD等...) : 程式內首先產生一個叫sig的欄位,用來儲存訊號 : for loop 裡面,就是訊號產生的邏輯: : 比如RSI由上往下穿越70 : if (data.ix[i-1, 'rsi'] >= 70) & (data.ix[i, 'rsi'] < 70) : 就在sig的當期欄位標註一個"sell", : 其餘程式碼以此類推。 : 請大家給點增加效率的意見,謝謝!!! : def RSI_Signal(data): : data['sig'] = 0 這邊, pandas 在用 for loop 過每列會很慢, 他還要去算 'rsi' 在哪個位置之類的 如果你的 dataframe 是固定的, 假設 rsi column 在 0, sig 在 1, 可以直接把 column 取出來 data_rsi = data.iloc[:, 0].values 拿到 numpy array data_sig = data.iloc[:, 1].values 類似 直接對 numpy array 做迴圈大概可以快十倍 : for i in range(1, len(data)): : if (data.ix[i-1, 'rsi'] >= 70) & (data.ix[i, 'rsi'] < 70) : : data.ix[i, 'sig'] = 'sell' : if (data.ix[i-1, 'rsi'] >= 30) & (data.ix[i, 'rsi'] < 30) : : data.ix[i, 'sig'] = 'close sell' : if (data.ix[i-1, 'rsi'] <= 30) & (data.ix[i, 'rsi'] > 30) : : data.ix[i, 'sig'] = 'buy' : if (data.ix[i-1, 'rsi'] <= 70) & (data.ix[i, 'rsi'] > 70) : : data.ix[i, 'sig'] = 'close buy' : return data -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 209.131.62.116 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1438114477.A.C12.html ※ 編輯: forloricever (209.131.62.116), 07/29/2015 04:15:08

08/24 22:51, , 1F
謝謝,速度有明顯的改善
08/24 22:51, 1F
文章代碼(AID): #1Lj-AjmI (Python)
文章代碼(AID): #1Lj-AjmI (Python)