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

作者: forloricever (sigh...)   2015-07-29 04:14:34
※ 引述《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

Links booklink

Contact Us: admin [ a t ] ucptt.com