changing structure

This commit is contained in:
Mark 2022-05-10 14:27:43 +03:00
parent 6dfe72a3d9
commit c2ddfc0536
23 changed files with 144 additions and 154 deletions

2
.idea/marketTrade.iml generated
View File

@ -2,7 +2,7 @@
<module type="PYTHON_MODULE" version="4"> <module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager"> <component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" /> <content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" /> <orderEntry type="jdk" jdkName="Poetry (marketTrade)" jdkType="Python SDK" />
<orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="sourceFolder" forTests="false" />
</component> </component>
</module> </module>

2
.idea/misc.xml generated
View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.9" project-jdk-type="Python SDK" /> <component name="ProjectRootManager" version="2" project-jdk-name="Poetry (marketTrade)" project-jdk-type="Python SDK" />
</project> </project>

View File

@ -1,138 +1,138 @@
import pandas as pd import pandas as pd
import datetime import datetime
import numpy as np import numpy as np
import plotly as pl import plotly as pl
import plotly.graph_objs as go import plotly.graph_objs as go
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
import math import math
import scipy import scipy
import random import random
import statistics import statistics
import datetime import datetime
class CoreMath: class CoreMath:
def __init__(self, base_df, params={ def __init__(self, base_df, params={
'dataType':'ohcl', 'dataType':'ohcl',
'action': None, 'action': None,
'actionOptions':{} 'actionOptions':{}
} }
): ):
self.base_df=base_df.reset_index(drop=True) self.base_df=base_df.reset_index(drop=True)
self.params=params self.params=params
if self.params['dataType']=='ohcl': if self.params['dataType']=='ohcl':
self.col=self.base_df[self.params['actionOptions']['valueType']] self.col=self.base_df[self.params['actionOptions']['valueType']]
elif self.params['dataType']=='series': elif self.params['dataType']=='series':
self.col=self.base_df self.col=self.base_df
self.ans=self.getAns() self.ans=self.getAns()
def getAns(self): def getAns(self):
ans=None ans=None
if self.params['action']=='findExt': if self.params['action']=='findExt':
ans = self.getExtremumValue() ans = self.getExtremumValue()
elif self.params['action']=='findMean': elif self.params['action']=='findMean':
ans = self.getMeanValue() ans = self.getMeanValue()
elif self.params['action']=='findSTD': elif self.params['action']=='findSTD':
ans=self.getSTD() ans=self.getSTD()
return ans return ans
def getExtremumValue(self): def getExtremumValue(self):
ans=None ans=None
''' '''
actionOptions: actionOptions:
'extremumtype': 'extremumtype':
'min' 'min'
'max' 'max'
'valueType': 'valueType':
'open' 'open'
'close' 'close'
'high' 'high'
'low' 'low'
''' '''
if self.params['actionOptions']['extremumtype']=='max': if self.params['actionOptions']['extremumtype']=='max':
ans=max(self.col) ans=max(self.col)
if self.params['actionOptions']['extremumtype']=='min': if self.params['actionOptions']['extremumtype']=='min':
ans=min(self.col) ans=min(self.col)
return ans return ans
def getMeanValue(self): def getMeanValue(self):
''' '''
actionOptions: actionOptions:
'MeanType': 'MeanType':
'MA' 'MA'
'SMA' 'SMA'
'EMA' 'EMA'
'WMA' 'WMA'
--'SMMA' --'SMMA'
'valueType': 'valueType':
'open' 'open'
'close' 'close'
'high' 'high'
'low' 'low'
'window' 'window'
'span' 'span'
'weights' 'weights'
''' '''
ans=None ans=None
if self.params['actionOptions']['MeanType']=='MA': if self.params['actionOptions']['MeanType']=='MA':
ans = self.col.mean() ans = self.col.mean()
if self.params['actionOptions']['MeanType']=='SMA': if self.params['actionOptions']['MeanType']=='SMA':
ans=np.convolve(self.col, np.ones(self.params['actionOptions']['window']), 'valid') / self.params['actionOptions']['window'] ans=np.convolve(self.col, np.ones(self.params['actionOptions']['window']), 'valid') / self.params['actionOptions']['window']
#ans=self.col.rolling(window=self.params['actionOptions']['window']).mean().to_list() #ans=self.col.rolling(window=self.params['actionOptions']['window']).mean().to_list()
if self.params['actionOptions']['MeanType']=='EMA': if self.params['actionOptions']['MeanType']=='EMA':
ans=self.col.ewm(span=self.params['actionOptions']['span'], adjust=False).mean().to_list() ans=self.col.ewm(span=self.params['actionOptions']['span'], adjust=False).mean().to_list()
if self.params['actionOptions']['MeanType']=='WMA': if self.params['actionOptions']['MeanType']=='WMA':
try: try:
weights=self.params['actionOptions']['weights'] weights=self.params['actionOptions']['weights']
except KeyError: except KeyError:
weights=np.arange(1,self.params['actionOptions']['window']+1) weights=np.arange(1,self.params['actionOptions']['window']+1)
ans=self.col.rolling(window=self.params['actionOptions']['window']).apply(lambda x: np.sum(weights*x) / weights.sum(), raw=False).to_list() ans=self.col.rolling(window=self.params['actionOptions']['window']).apply(lambda x: np.sum(weights*x) / weights.sum(), raw=False).to_list()
return(ans) return(ans)
def getSTD(self): def getSTD(self):
''' '''
actionOptions: actionOptions:
window window
''' '''
ans=None ans=None
try: try:
window=self.params['actionOptions']['window'] window=self.params['actionOptions']['window']
ans=np.asarray([]) ans=np.asarray([])
for i in range(len(self.col)-window+1): for i in range(len(self.col)-window+1):
ans=np.append(ans,np.std(self.col[i:i+window], ddof=1)) ans=np.append(ans,np.std(self.col[i:i+window], ddof=1))
except: except:
#window = len(self.col) #window = len(self.col)
ans=np.std(self.col, ddof=1) ans=np.std(self.col, ddof=1)
return ans return ans

View File

@ -24,19 +24,13 @@ from plotly.offline import init_notebook_mode, iplot
from plotly.subplots import make_subplots from plotly.subplots import make_subplots
init_notebook_mode() init_notebook_mode()
import Core.CoreTraidMath import market_trade.CoreTraidMath
import Core.CoreDraw import market_trade.CoreDraw
import Core.Ind_bollingerBands import market_trade.Ind_bollingerBands
import Siganls.coreSignal import Siganls.coreSignal
class SignalB_B_1(Siganls.coreSignal):
class SignalB_B_1(coreSignal.coreSignal):
def __init__(self, def __init__(self,
IndDict={}, IndDict={},
mode='retro', mode='retro',
@ -131,8 +125,5 @@ class SignalB_B_1(coreSignal.coreSignal):
ans['toch']=t/(t+f) ans['toch']=t/(t+f)
except: except:
pass pass
return ans return ans

View File

@ -1 +0,0 @@
<mxfile host="app.diagrams.net" modified="2022-04-23T16:24:45.706Z" agent="5.0 (Windows)" etag="eoCFVerh2CRwt2_Ly0SK" version="16.6.4" type="github" pages="2"><diagram id="RiWZ9U7_gL--o0N2Vmwu" name="C1">7Vhtj6M2EP41fLwITCDkY8jLtVXvdO2u2t6nygEHvCGYGueF/vqOjQETWHSrnm5Pp11lWebxzNgej59HG8tdn27vOS7SDywmmYXs+Ga5GwshZ46QJT92XNXIwl3UQMJprJ064IH+SzRoa/RMY1L2HAVjmaBFH4xYnpNI9DDMObv23Q4s689a4IQMgIcIZ0P0TxqLtEYDtOjwnwhN0mZmx1/WIyfcOOudlCmO2dWA3K3lrjljon473dYkk8Vr6lLH7Z4ZbRfGSS6+JODv62bp8+r48Y/STqqn334p8Oqdp9cmqmbDJIb9a5NxkbKE5TjbdmjI2TmPicxqg9X5/MpYAaAD4BMRotKHic+CAZSKU6ZHyY2Kv2T4zNPWZ2Nkc9OZlVEZxifC6YkIwhssF7wyEknzsznWpVJWZVr3yYbl1BUu2ZlHZKKGTVtinhAx4advgiywMYE+rPeEwWp4BQ6cZFjQS78Bse7jpPXrjhpe9Gkrk+2f5E2AzWQ4Iil0POF3l2X+EZ90fqhDyXIAcwnp4cequBuu8Q0pI04LQQFSwyaAbHaQs6qIWR2S4T3JalcL+RmUJzywXPRazv/nzJqBd6VqmhU4OH5x6wbhLdF/VZZ9B3h6O8hrBqEg+/sAwOqZ+3BMLy3k1cnU5iGZtzFiTb9mCXwq2Ut360ztVmeJWMZ4L4uF3Ej9jMV6/QPr1WesFvfblAdIy98JzmhJNIvscFbqNpkkFrO3NREZJGOQgVyIZgpH2jEu05ZcrikVpCywun9XUBgZQLNs3RbCtQN3t5DXvxScHYk54ruOt9ZTGPhB/ciIFKs2P90SKV6zaD6rmxdWHsKmE9nkEfCBJIkQrh3exlTodReM5kJdK092jqQgtLbVr2ycNWCOtDTexxZ9UAPOHTiGoRFwNGV/bvgAcRPoN7xXhzBJeRfCBblNkpQedZ15HXLtxBHZWvFSUxgD+8VEBqbmshcoml7PBWdn3WwWbHa5k89wq56hBScYuOq5UIinnhv1DDQCcipfVk0gOKPGAd5tIyEy3ldNYDDCEzLQGQR6TUJ4BpPracPnhlvYn/0V9LzV4Z4Kd6L8bXQYfaEOu9+lDod0j8s1K6qhBj+wg7hCQQB+qEpBTs/K8QfMj0RO+chxTPOkjniT4h9DiqdoD03qbXfFnUZVH/qqalxn1Sghjo6JCmuUM2c5GcqvY/tOaE+I7EBHMY8avbdHZXvj2UtnKLj36jUQYDRU4DFVbqVyKMtoTKu/C/02MNQX9a8g4mipRbNqbHso6vMxUUf/W9RfRpKPND+yg/wvQ6aHK5FfSClWn36GmwKtc1u1BTH5U5IhWRX0WdpMhZBfJ6xU0p2oJ5klVKTn/YwywIyJdsZc/UAdEDEg6F271LvYNyr+0anYfSUqDtbBfOl/TSpeuP4iQG9U/O2oeOHbr0bFYHbfRipX4ztdd/sf</diagram><diagram id="4YQuiaAyOnZQqMlcwOd5" name="C2">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</diagram></mxfile>