在Python中计算交易指标

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Python中计算交易指标相关的知识,希望对你有一定的参考价值。

我想请求以下代码的帮助:

di = (sm - 1.0) / 2.0 + 1.0
c1 = 2 / (di + 1.0)
c2 = 1 - c1
c3 = 3.0 * (cd * cd + cd * cd * cd)
c4 = -3.0 * (2.0 * cd * cd + cd + cd * cd * cd)
c5 = 3.0 * cd + 1.0 + cd * cd * cd + 3.0 * cd * cd

asset['i1']=0
asset['i2']=0
asset['i3']=0
asset['i4']=0
asset['i5']=0
asset['i6']=0
asset['i1'] = c1*asset['C']  + c2*(asset['i1'].shift(1))
asset['i2'] = c1*asset['i1'] + c2*(asset['i2'].shift(1))
asset['i3'] = c1*asset['i2'] + c2*(asset['i3'].shift(1))
asset['i4'] = c1*asset['i3'] + c2*(asset['i4'].shift(1))
asset['i5'] = c1*asset['i4'] + c2*(asset['i5'].shift(1))
asset['i6'] = c1*asset['i5'] + c2*(asset['i6'].shift(1))

如何更改代码,以便计算每个新行使用前一行计算?问题是目前它正在使用前一行的0。目标是用Python计算珊瑚趋势指标。有一个名为“asset”的pandas DataFrame,其中包含价格和日期作为时间戳。值c1,c2,c3,c4,c5是指标常数。我们需要为整个数据帧计算“i1,'i3'... i6”。每行都是从前一行计算出来的,不管怎样,可能应该在数据帧上使用'apply'函数,因为当前它正在计算整个列(使用先前定义的零,而不是前一行的实际值)。 DataFrame是quete big有更快的方法,因为在pandas数据帧中使用“for”需要花费大量的时间

谢谢

答案

只需创建一个for循环并保持前一个变量,如下所示:

di = (sm - 1.0) / 2.0 + 1.0
c1 = 2 / (di + 1.0)
c2 = 1 - c1
c3 = 3.0 * (cd * cd + cd * cd * cd)
c4 = -3.0 * (2.0 * cd * cd + cd + cd * cd * cd)
c5 = 3.0 * cd + 1.0 + cd * cd * cd + 3.0 * cd * cd


asset['i1'] = c1*asset['C']  + c2*(asset['i1'].shift(1))
var = asset['i1']
for index in range(2,7):
    asset['i'+ str(index)] = c1*var + c2*(asset['i'+ str(index)].shift(1))

以上是关于在Python中计算交易指标的主要内容,如果未能解决你的问题,请参考以下文章

移植 Python 量化交易 TA-Lib 库到函数计算

用Python可视化股票指标

Python量化交易10——资产组合比例优化(CAMP,VAR,CVAR)

WeQuant交易策略—EMA指标

day33 Python与金融量化分析

CTA策略之威廉W%R交易策略