import datetime from datetime import date, timedelta from numpy.lib.stride_tricks import as_strided import pandas as pd import numpy as np from pathlib import Path from os import path import shutil import os import pdb from digfilters import filters filt = filters() k = pd.read_pickle('projdir/dailydata.pkl') k1 = k[k.Symbol == k.Symbol.unique()[0]] k = k1 k['ret'] = k.Close - k.Open k['dec'] = filt.highpass2(k.Close, 10) - filt.highpass2(k.Close, 5) k['avg'] = k.Close.rolling(10).mean() - k.Close.rolling(5).mean() k['retm'] = 0 for i in range(1, 6): k['retm'] += k.ret.shift(-i)
def attr4(self,p): global numvar filt =filters() print('in attr')#function for transformation of prices into required inputs def h(l): s = compute_Hc(l) return s[0] period=10 bandwidth=0.3 k = p.dropna() hp = np.zeros(len(k)) bp = np.zeros(len(k)) cl = np.array(k.Close) alpha2 =(np.cos(.25*bandwidth*2*np.pi/period)+np.sin(.25*bandwidth*2*np.pi/period)-1)/(np.cos(.25*bandwidth*2*np.pi)/period) beta1 = np.cos(2*np.pi/period) gamma1 = 1/np.cos(2*np.pi*bandwidth/period) alpha1=gamma1-(gamma1**2-1)**0.5 for i in range(1,len(k)): hp[i] = (1+alpha2/2)*(cl[i]-cl[i-1])+(1-alpha2)*hp[i-1] peak=np.zeros(len(k)) for i in range(2,len(k)): bp[i] = .5*(1-alpha1)*(hp[i]-hp[i-2])+beta1*(1+alpha1)*bp[i-1]-alpha1*bp[i-2] peak[i]=0.991*peak[i-1] alpha2 =(np.cos(1.5*bandwidth*2*np.pi/period)+np.sin(1.5*bandwidth*2*np.pi/period)-1)/(np.cos(1.5*bandwidth*2*np.pi/period)) signal=bp peak=np.zeros(len(k)) trig = np.zeros(len(k)) for i in range(1,len(k)): trig[i]=(1+alpha2/2)*(signal[i]-signal[i-1])+(1-alpha2)*trig[i-1] k['bp']=filt.normalize(bp) k['trig'] = filt.normalize(trig) k['trig'] = filt.butterworth2(k.trig,3) k['bp'] = filt.butterworth2(k.bp,15) k['dec'] = filt.highpass2(k.Close,60)-filt.highpass2(k.Close,30) k['dec'] = filt.normalize(k.dec) k['dec'] = filt.butterworth2(k.dec,10) k['Close1'] = list(cl) k['mp'] = (k.High+k.Low)/2 print('mp done') k['im'] = 1*(k.mp-(k.Low.rolling(window = 20).min()))/((k.High.rolling(window=20).max())-(k.Low.rolling(window = 20).min())) print('mp done') k['ft'] = 0.5*np.log((1+k.im)/(1-k.im)) k['delta'] = k.Close.shift(-1)-k.Close k['du'] = ((k.delta/abs(k.delta)+1)/2)*k.delta#keeping only the positive k.delta k['dd'] = ((abs((k.delta/abs(k.delta))-1)/2))*abs(k.delta)#keeping only the negative delta k['rs'] = k.du.rolling(window=14).mean()/k.dd.rolling(window=14).mean() k['rs5'] = k.du.rolling(window=5).mean()/k.dd.rolling(window=5).mean() k['rsi'] = 100.0 - (100.0 / (1.0 + k.rs)) k['rsi5'] = 100.0 - (100.0 / (1.0 + k.rs5)) k['rsi'] = k.rsi/100 k['rsi5'] = k.rsi5/100 k['ft']= (k.ft-k.ft.min())/(k.ft.max()-k.ft.min()) k['h'] = k.Close.rolling(150).apply(h) k['h'] = filt.butterworth2(k.h,10) var_cols=['bp','trig','dec','h'] print(k[['bp','trig','dec']]) numvar = len(var_cols) return k,var_cols