def SVAPO(df, period = 8, cutoff = 1, stdev_h = 1.5, stdev_l = 1.3, stdev_period = 100):
HA = HEIKEN_ASHI(df, 1)
haCl = (HA.HAopen + HA.HAclose + HA.HAhigh + HA.HAlow)/4.0
haC = TEMA( haCl, 0.625 * period )
vave = MA(df, 5 * period, field = 'volume').shift(1)
vc = pd.concat([df['volume'], vave*2], axis=1).min(axis=1)
vtrend = TEMA(LINEAR_REG_SLOPE(df.volume, period), period)
UpD = pd.Series(vc)
DoD = pd.Series(-vc)
UpD[(haC<=haC.shift(1)*(1+cutoff/1000.0))|(vtrend < vtrend.shift(1))] = 0
DoD[(haC>=haC.shift(1)*(1-cutoff/1000.0))|(vtrend > vtrend.shift(1))] = 0
delta_sum = pd.rolling_sum(UpD + DoD, period)/(vave+1)
svapo = pd.Series(TEMA(delta_sum, period), name = 'SVAPO_%s' % period)
svapo_std = pd.rolling_std(svapo, stdev_period)
svapo_ub = pd.Series(svapo_std * stdev_h, name = 'SVAPO_UB%s' % period)
svapo_lb = pd.Series(-svapo_std * stdev_l, name = 'SVAPO_LB%s' % period)
return pd.concat([svapo, svapo_ub, svapo_lb], join='outer', axis=1)
评论列表
文章目录