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