The full code below is too long and complicated. I want to use a simple to rewrite the code in such a way so that it is easier to understand and maintain and extendibles. I still have many technical indicators to combine with this MACD indicator. Now the structure of the code is like below:
for A
if 1
for a
for b
if A1
if a
if b
if c
if d
else
if a1
if b1
if c1
if d1
if 2
for a
for b
if A1
if a
if b
if c
if d
else
if a1
if b1
if c1
if d1
if 3
for a
for b
if A1
if a
if b
if c
if d
else
if a1
if b1
if c1
if d1
Full code as below:
import urllib,time,datetime,os
import csv
import pandas as pd
import numpy as np
import talib as ta
now = datetime.datetime.now()
KLSElist = open('KLSE1.csv')
KLSEReader = csv.reader(KLSElist)
KLSEData = list(KLSEReader)
KLSElen = len(KLSEData)
for x in range (1,len(KLSEData),1):
data = pd.read_csv(KLSEData [x][0]+".csv", index_col='Stock', usecols =[0,6,7])
date = pd.read_csv(KLSEData [x][0]+".csv", index_col='Stock', usecols =[0,1])
dt = np.array(date['Date'])
high = pd.read_csv(KLSEData [x][0]+".csv", index_col='Stock', usecols =[0,4])
h = np.array(high['High'])
low = pd.read_csv(KLSEData [x][0]+".csv", index_col='Stock', usecols =[0,5])
l = np.array(low['Low'])
close = pd.read_csv(KLSEData [x][0]+".csv", index_col='Stock', usecols =[0,6])
c = np.array(close['Close'])
vol = pd.read_csv(KLSEData [x][0]+".csv", index_col='Stock', usecols =[0,7])
v = np.array(vol['Volume'])
MACD = ta.MACD(c)
a=np.where(MACD[2]>0.)[0]
b=np.where(MACD[2]<0.)[0]
lena=len(a)
lenb=len(b)
num0=np.array([1])
num=np.array([1])
num1=[]
num2=[]
print KLSEData [x]
if lena>90 and lenb>90:
for z in range (-1,-90,-1):#for MACD hist above 0
if(np.diff(a)[z]>1):
num=a[z]
num1.append(num)
print num1
if len(num1)<1:
num1[0]=0
for y in range (-1,-90,-1):#for MACD hist below 0
#if(b[x]-b[x-1]>1):
if(np.diff(b)[y]>1):
num0=b[y]
num2.append(num0)
print num2
if len(num2)<1:
num2[0]=0
if num1[0]>num2[0] and len(num1)>1:
num3=ta.MININDEX(MACD[2][(num1[0]-20):(num1[0]+1)],timeperiod=21)
num4=ta.MININDEX(MACD[2][(num1[1]-20):(num1[1]+1)],timeperiod=21)
if (MACD[2][num1[0]-20+num3[20]]>MACD[0][num1[1]-20+num4[20]])and (c[num1[0]-20+num3[20]]>c[num1[1]-20+num4[20]]):
print "continue uptrend"
print dt[num1[0]],dt[num1[1]]
df1=pd.DataFrame({'Stock':[KLSEData [x][0]],'MACD':[" continue uptrend "]})
elif (MACD[2][num1[0]-20+num3[20]]>MACD[0][num1[1]-20+num4[20]])and (c[num1[0]-20+num3[20]]<c[num1[1]-20+num4[20]]):
print" bullish divergence"
print dt[num1[0]],dt[num1[1]]
df1=pd.DataFrame({'Stock':[KLSEData [x][0]],'MACD':[" bullish divergence "]})
elif (MACD[2][num1[0]-20+num3[20]]<MACD[2][num1[1]-20+num4[20]])and (c[num1[0]-20+num3[20]]>c[num1[1]-20+num4[20]]):
print" bearish divergence*2"
print dt[num1[0]],dt[num1[1]]
#df1=pd.DataFrame({'Stock':[KLSEData [x][0]],'MACD':[" bearish divergence*2 "]})
elif (MACD[2][num1[0]-20+num3[20]]<MACD[2][num1[1]-20+num4[20]])and (c[num1[0]-20+num3[20]]<c[num1[1]-20+num4[20]]):
print" out from downtrend"
print dt[num1[0]],dt[num1[1]]
#df1=pd.DataFrame({'Stock':[KLSEData [x][0]],'MACD':[" out from downtrend "]})
else:
print "sideway"
#df1=pd.DataFrame({'Stock':[KLSEData [x][0]],'MACD':[" sideway "]})
elif num1[0]<num2[0]and len(num2)>1:
num3=ta.MAXINDEX(MACD[2][(num2[0]-20):num2[0]+1],timeperiod=21)
num4=ta.MAXINDEX(MACD[2][(num2[1]-20):num2[1]+1],timeperiod=21)
if (MACD[2][num2[0]-20+num3[20]]>MACD[0][num2[1]-20+num4[20]])and (c[num2[0]-20+num3[20]]>c[num2[1]-20+num4[20]]):
print "out from uptrend"
print dt[num2[0]],dt[num2[1]]
#df1=pd.DataFrame({'Stock':[KLSEData [x][0]],'MACD':[" out from uptrend "]})
elif (MACD[2][num2[0]-20+num3[20]]>MACD[0][num2[1]-20+num4[20]])and (c[num2[0]-20+num3[20]]<c[num2[1]-20+num4[20]]):
print" bullish divergence*2"
print dt[num2[0]],dt[num2[1]]
#df1=pd.DataFrame({'Stock':[KLSEData [x][0]],'MACD':[" bullish divergence*2 "]})
elif (MACD[2][num2[0]-20+num3[20]]<MACD[2][num2[1]-20+num4[20]])and (c[num2[0]-20+num3[20]]>c[num2[1]-20+num4[20]]):
print" bearish divergence"
print dt[num2[0]],dt[num2[1]]
#df1=pd.DataFrame({'Stock':[KLSEData [x][0]],'MACD':[" bearish divergence "]})
elif (MACD[2][num2[0]-20+num3[20]]<MACD[2][num2[1]-20+num4[20]])and (c[num2[0]-20+num3[20]]<c[num2[1]-20+num4[20]]):
print" continue downtrend"
print dt[num2[0]],dt[num2[1]]
#df1=pd.DataFrame({'Stock':[KLSEData [x][0]],'MACD':[" continue downtrend "]})
else:
print "sideway"
#df1=pd.DataFrame({'Stock':[KLSEData [x][0]],'MACD':[" sideway "]})
#for y in range (num1-len(MACD[0]),-30,-1):
#if (a[y]-a[y-1]>1):
#num2=[]
#num2=a[y]
elif lena<90 and lenb>90:
for z in range (-1,-(lena),-1):#for MACD hist above 0
#if(a[x]-a[x-1]>1):
if(np.diff(a)[z]>1):
num=a[z]
num1.append(num)
print num1
if len(num1)<1:
num1[0]=0
for y in range (-1,-90,-1):#for MACD hist below 0
#if(b[x]-b[x-1]>1):
if(np.diff(b)[y]>1):
num0=b[y]
num2.append(num0)
print num2
if len(num2)<1:
num2[0]=0
if num1[0]>num2[0] and len(num1)>1:
num3=ta.MININDEX(MACD[2][(num1[0]-20):(num1[0]+1)],timeperiod=21)
num4=ta.MININDEX(MACD[2][(num1[1]-20):(num1[1]+1)],timeperiod=21)
if (MACD[2][num1[0]-20+num3[20]]>MACD[0][num1[1]-20+num4[20]])and (c[num1[0]-20+num3[20]]>c[num1[1]-20+num4[20]]):
print "continue uptrend"
print dt[num1[0]],dt[num1[1]]
df1=pd.DataFrame({'Stock':[KLSEData [x][0]],'MACD':[" continue uptrend "]})
elif (MACD[2][num1[0]-20+num3[20]]>MACD[0][num1[1]-20+num4[20]])and (c[num1[0]-20+num3[20]]<c[num1[1]-20+num4[20]]):
print" bullish divergence"
print dt[num1[0]],dt[num1[1]]
df1=pd.DataFrame({'Stock':[KLSEData [x][0]],'MACD':[" bullish divergence "]})
elif (MACD[2][num1[0]-20+num3[20]]<MACD[2][num1[1]-20+num4[20]])and (c[num1[0]-20+num3[20]]>c[num1[1]-20+num4[20]]):
print" bearish divergence*2"
print dt[num1[0]],dt[num1[1]]
#df1=pd.DataFrame({'Stock':[KLSEData [x][0]],'MACD':[" bearish divergence*2 "]})
elif (MACD[2][num1[0]-20+num3[20]]<MACD[2][num1[1]-20+num4[20]])and (c[num1[0]-20+num3[20]]<c[num1[1]-20+num4[20]]):
print" out from downtrend"
print dt[num1[0]],dt[num1[1]]
#df1=pd.DataFrame({'Stock':[KLSEData [x][0]],'MACD':[" out from downtrend "]})
else:
print "sideway"
#df1=pd.DataFrame({'Stock':[KLSEData [x][0]],'MACD':[" sideway "]})
elif num1[0]<num2[0]and len(num2)>1:
num3=ta.MAXINDEX(MACD[2][(num2[0]-20):num2[0]+1],timeperiod=21)
num4=ta.MAXINDEX(MACD[2][(num2[1]-20):num2[1]+1],timeperiod=21)
if (MACD[2][num2[0]-20+num3[20]]>MACD[0][num2[1]-20+num4[20]])and (c[num2[0]-20+num3[20]]>c[num2[1]-20+num4[20]]):
print "out from uptrend"
print dt[num2[0]],dt[num2[1]]
#df1=pd.DataFrame({'Stock':[KLSEData [x][0]],'MACD':[" out from uptrend "]})
elif (MACD[2][num2[0]-20+num3[20]]>MACD[0][num2[1]-20+num4[20]])and (c[num2[0]-20+num3[20]]<c[num2[1]-20+num4[20]]):
print" bullish divergence*2"
print dt[num2[0]],dt[num2[1]]
#df1=pd.DataFrame({'Stock':[KLSEData [x][0]],'MACD':[" bullish divergence*2 "]})
elif (MACD[2][num2[0]-20+num3[20]]<MACD[2][num2[1]-20+num4[20]])and (c[num2[0]-20+num3[20]]>c[num2[1]-20+num4[20]]):
print" bearish divergence"
print dt[num2[0]],dt[num2[1]]
#df1=pd.DataFrame({'Stock':[KLSEData [x][0]],'MACD':[" bearish divergence "]})
elif (MACD[2][num2[0]-20+num3[20]]<MACD[2][num2[1]-20+num4[20]])and (c[num2[0]-20+num3[20]]<c[num2[1]-20+num4[20]]):
print" continue downtrend"
print dt[num2[0]],dt[num2[1]]
#df1=pd.DataFrame({'Stock':[KLSEData [x][0]],'MACD':[" continue downtrend "]})
else:
print "sideway"
elif lena>90 and lenb<90:
for z in range (-1,-90,-1):#for MACD hist above 0
#if(a[x]-a[x-1]>1):
if(np.diff(a)[z]>1):
num=a[z]
num1.append(num)
print num1
if len(num1)<1:
num1[0]=0
for y in range (-1,-(lenb),-1):#for MACD hist below 0
#if(b[x]-b[x-1]>1):
if(np.diff(b)[y]>1):
num0=b[y]
num2.append(num0)
print num2
if len(num2)<1:
num2[0]=0
if num1[0]>num2[0] and len(num1)>1:
num3=ta.MININDEX(MACD[2][(num1[0]-20):(num1[0]+1)],timeperiod=21)
num4=ta.MININDEX(MACD[2][(num1[1]-20):(num1[1]+1)],timeperiod=21)
if (MACD[2][num1[0]-20+num3[20]]>MACD[0][num1[1]-20+num4[20]])and (c[num1[0]-20+num3[20]]>c[num1[1]-20+num4[20]]):
print "continue uptrend"
print dt[num1[0]],dt[num1[1]]
df1=pd.DataFrame({'Stock':[KLSEData [x][0]],'MACD':[" continue uptrend "]})
elif (MACD[2][num1[0]-20+num3[20]]>MACD[0][num1[1]-20+num4[20]])and (c[num1[0]-20+num3[20]]<c[num1[1]-20+num4[20]]):
print" bullish divergence"
print dt[num1[0]],dt[num1[1]]
df1=pd.DataFrame({'Stock':[KLSEData [x][0]],'MACD':[" bullish divergence "]})
elif (MACD[2][num1[0]-20+num3[20]]<MACD[2][num1[1]-20+num4[20]])and (c[num1[0]-20+num3[20]]>c[num1[1]-20+num4[20]]):
print" bearish divergence*2"
print dt[num1[0]],dt[num1[1]]
#df1=pd.DataFrame({'Stock':[KLSEData [x][0]],'MACD':[" bearish divergence*2 "]})
elif (MACD[2][num1[0]-20+num3[20]]<MACD[2][num1[1]-20+num4[20]])and (c[num1[0]-20+num3[20]]<c[num1[1]-20+num4[20]]):
print" out from downtrend"
print dt[num1[0]],dt[num1[1]]
#df1=pd.DataFrame({'Stock':[KLSEData [x][0]],'MACD':[" out from downtrend "]})
else:
print "sideway"
#df1=pd.DataFrame({'Stock':[KLSEData [x][0]],'MACD':[" sideway "]})
elif num1[0]<num2[0]and len(num2)>1:
num3=ta.MAXINDEX(MACD[2][(num2[0]-20):num2[0]+1],timeperiod=21)
num4=ta.MAXINDEX(MACD[2][(num2[1]-20):num2[1]+1],timeperiod=21)
if (MACD[2][num2[0]-20+num3[20]]>MACD[0][num2[1]-20+num4[20]])and (c[num2[0]-20+num3[20]]>c[num2[1]-20+num4[20]]):
print "out from uptrend"
print dt[num2[0]],dt[num2[1]]
#df1=pd.DataFrame({'Stock':[KLSEData [x][0]],'MACD':[" out from uptrend "]})
elif (MACD[2][num2[0]-20+num3[20]]>MACD[0][num2[1]-20+num4[20]])and (c[num2[0]-20+num3[20]]<c[num2[1]-20+num4[20]]):
print" bullish divergence*2"
print dt[num2[0]],dt[num2[1]]
#df1=pd.DataFrame({'Stock':[KLSEData [x][0]],'MACD':[" bullish divergence*2 "]})
elif (MACD[2][num2[0]-20+num3[20]]<MACD[2][num2[1]-20+num4[20]])and (c[num2[0]-20+num3[20]]>c[num2[1]-20+num4[20]]):
print" bearish divergence"
print dt[num2[0]],dt[num2[1]]
#df1=pd.DataFrame({'Stock':[KLSEData [x][0]],'MACD':[" bearish divergence "]})
elif (MACD[2][num2[0]-20+num3[20]]<MACD[2][num2[1]-20+num4[20]])and (c[num2[0]-20+num3[20]]<c[num2[1]-20+num4[20]]):
print" continue downtrend"
print dt[num2[0]],dt[num2[1]]
#df1=pd.DataFrame({'Stock':[KLSEData [x][0]],'MACD':[" continue downtrend "]})
else:
print "sideway"
else:
print "no trend"
#df=pd.merge(df1,df2, on='Stock', how='inner',left_index=True,right_index=True)
df1.to_csv('stockMACD'+now.strftime("%Y-%m-%d")+".csv", header=False, mode = 'a')
#ta.MIN(MACD[2][(num1[0]-20):num1[0]+1],timeperiod=2)
Aucun commentaire:
Enregistrer un commentaire