python自动交易源码_【硬核福利】量化交易神器talib中28个技术指标的Python实现(附全部源码)...

内容首发

乐学偶得(http://lexueoude.com) 公众号: 乐学Fintech

用代码理解分析解决金融问题

之前跟大家分享过用Python调用talib实现技术指标分析,但是许多小伙伴有更高的需求:比如需要指标自定义,或者想明白技术分析背后的原理。所以,这一期我们跟大家分享一下通过纯Python+Pandas+Numpy+Math实现talib中的常见指标,是学习底层算法与自定义交易指标,提升内功的非常好的材料。

我们需要的库非常简单,只需要这三个:

import numpy

from pandas import *

from math import *

关于pandas版本的问题,我们视频中跟大家分享过,注意以下用法需要pandas的版本为0.21,若报ewma无法调用的错误,可以指定安装此版本的pandas,或者通过

pandas.DataFrame(ts).ewm(span=12).mean()

这样调用的方法解决。

1.移动平均

def MA(df, n):

MA = Series(rolling_mean(df['Close'], n), name = 'MA_' + str(n))

df = df.join(MA)

return df

2.指数移动平均

def EMA(df, n):

EMA = Series(ewma(df['Close'], span = n, min_periods = n - 1), name = 'EMA_' + str(n))

df = df.join(EMA)

return df

3.动量

def MOM(df, n):

M = Series(df['Close'].diff(n), name = 'Momentum_' + str(n))

df = df.join(M)

return df

4.变化率

def ROC(df, n):

M = df['Close'].diff(n - 1)

N = df['Close'].shift(n - 1)

ROC = Series(M / N, name = 'ROC_' + str(n))

df = df.join(ROC)

return df

5.均幅指标

def ATR(df, n):

i = 0

TR_l = [0]

while i < df.index[-1]:

TR = max(df.get_value(i + 1, 'High'), df.get_value(i, 'Close')) - min(df.get_value(i + 1, 'Low'), df.get_value(i, 'Close'))

TR_l.append(TR)

i = i + 1

TR_s = Series(TR_l)

ATR = Series(ewma(TR_s, span = n, min_periods = n), name = 'ATR_' + str(n))

df = df.join(ATR)

return df

6.布林线

def BBANDS(df, n):

MA = Series(rolling_mean(df['Close'], n))

MSD = Series(rolling_std(df['Close'], n))

b1 = 4 * MSD / MA

B1 = Series(b1, name = 'BollingerB_' + str(n))

df = df.join(B1)

b2 = (df['Close'] - MA + 2 * MSD) / (4 * MSD)

B2 = Series(b2, name = 'Bollinger%b_' + str(n))

df = df.join(B2)

return df

7.转折、支撑、阻力点

def PPSR(df):

PP = Series((df['High'] + df['Low'] + df['Close']) / 3)

R1 = Series(2 * PP - df['Low'])

S1 = Series(2 * PP - df['High'])

R2 = Series(PP + df['High'] - df['Low'])

S2 = Series(PP - df['High'] + df['Low'])

R3 = Series(df['High'] + 2 * (PP - df['Low']))

S3 = Series(df['Low'] - 2 * (df['High'] - PP))

psr = {'PP':PP, 'R1':R1, 'S1':S1, 'R2':R2, 'S2':S2, 'R3':R3, 'S3':S3}

PSR = DataFrame(psr)

df = df.join(PSR)

return df

8.随机振荡器(%K线

  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值