From 33848db97226bb2fe8bc2473b055875b7b4f54da Mon Sep 17 00:00:00 2001 From: Redsandy <34872843+Redsandyg@users.noreply.github.com> Date: Fri, 4 Mar 2022 23:25:03 +0300 Subject: [PATCH] Add files via upload --- Core/Ind_Stochastic.py | 145 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 145 insertions(+) create mode 100644 Core/Ind_Stochastic.py diff --git a/Core/Ind_Stochastic.py b/Core/Ind_Stochastic.py new file mode 100644 index 0000000..f9ddea1 --- /dev/null +++ b/Core/Ind_Stochastic.py @@ -0,0 +1,145 @@ + +import pandas as pd +import datetime +import numpy as np +import plotly as pl +import plotly.graph_objs as go +import matplotlib.pyplot as plt +import math +import scipy +import random +import statistics + + +import datetime +import matplotlib.dates as mdates +import matplotlib.pyplot as plt + +import mplfinance as mpf + +import plotly +#import plotly.plotly as py +import plotly.graph_objs as go +# these two lines allow your code to show up in a notebook +from plotly.offline import init_notebook_mode, iplot +from plotly.subplots import make_subplots +init_notebook_mode() + +import CoreTraidMath +import CoreDraw + +class Stochastic: + + def __init__(self, base_df, options={ + 'dataType':'ohcl', + 'window':14, + 'windowSMA':5 + }, needShow=False,showOnlyIndex=True + ): + + self.base_df=base_df.reset_index(drop=True) + self.options=options + + self.ans=self.getAns() + if needShow: + self.fig=self.pltShow(showOnlyIndex) + + def getKn(self): + ans={} + y=np.asarray([]) + x=np.asarray([]) + for i in range(self.options['window'],self.base_df.shape[0]): + minValue=min(self.base_df['low'][i-self.options['window']:i]) + maxValue=max(self.base_df['high'][i-self.options['window']:i]) + + y=np.append(y,(self.base_df['close'][i-1]-minValue)/(maxValue-minValue)) + x=np.append(x,self.base_df['date'][i-1]) + #print(i,minValue,maxValue,self.base_df[self.options['colName']['close']][i],y[-1]) + ans['y'],ans['x']=y,x + + + + return ans + + + def getSMA(self,col): + ans=None + ser = pd.Series(col, copy=False) + op={'dataType':'series', + 'action':'findMean', + 'actionOptions':{'MeanType':'SMA','window':self.options['windowSMA']} + } + ans=np.asarray(CoreTraidMath.CoreMath(ser,op).ans) + return ans + #return np.convolve(col, np.ones(self.options['windowSMA']), 'valid') /self.options['windowSMA'] + + + + + def getDn(self,col): + ans={} + y=np.asarray([]) + x=np.asarray([]) + for i in range(self.options['windowSMA'],len(col['y'])): + y=np.append(y, self.getSMA(col['y'][i-self.options['windowSMA']:i])) + x=np.append(x,col['x'][i]) + + ans['y'],ans['x']=y,x + return ans + + def getAns(self): + ans={} + ans['Kn']=self.getKn() + ans['Dn']=self.getDn(ans['Kn']) + + #print(ans) + return(ans) + + + + def pltShow(self,showOnlyIndex): + ans=None + + + + req=[] + + row=1 + if not showOnlyIndex: + + row=2 + req.append({ + 'vtype':'OCHL', + 'df':self.base_df, + 'row':1, + 'col':1, + 'name':'OHCL' + + }) + + req.append({ + 'vtype':'Scatter', + 'df':pd.DataFrame( + {'value':self.ans['Kn']['y'],'date':self.ans['Kn']['x']}) , + 'row':row, + 'col':1, + 'name':'Kn' + + }) + req.append({ + 'vtype':'Scatter', + 'df':pd.DataFrame( + {'value':self.ans['Dn']['y'],'date':self.ans['Dn']['x']}) , + 'row':row, + 'col':1, + 'name':'Dn' + + }) + + + + + ans = CoreDraw.coreDraw(req,True) + + return ans +