moved things to a new place !
This commit is contained in:
360
notebooks/autogen/TrandVoter.py
Normal file
360
notebooks/autogen/TrandVoter.py
Normal file
@@ -0,0 +1,360 @@
|
||||
#!/usr/bin/env python
|
||||
# coding: utf-8
|
||||
|
||||
# In[1]:
|
||||
|
||||
|
||||
import pandas as pd
|
||||
import datetime
|
||||
import numpy as np
|
||||
import random
|
||||
from signals import * #потом удалить
|
||||
|
||||
|
||||
# In[2]:
|
||||
|
||||
|
||||
class trandeVoter():
|
||||
|
||||
def __init__(self,name):
|
||||
|
||||
self.name = name # просто имя
|
||||
self.trandeValuesList = ['up','none','down'] #словарь трегдов
|
||||
self.matrixAmounts = None # матрица сумм
|
||||
self.keysMatrixAmounts = None #ключи матрицы сумм, техническое поле
|
||||
self.matrixProbability = None # матрица вероятностей
|
||||
|
||||
|
||||
#функция которая создает df с заданным набором колонок и индексов. индексы - уникальные соотношения
|
||||
def createDFbyNames(self, namesIndex, namesColoms,defaultValue=0.0):
|
||||
df = pd.DataFrame(dict.fromkeys(namesColoms, [defaultValue]*pow(3,len(namesIndex))),
|
||||
index=pd.MultiIndex.from_product([self.trandeValuesList]*len(namesIndex), names=namesIndex)
|
||||
#,columns=namesColoms
|
||||
)
|
||||
return(df)
|
||||
|
||||
#создание матрицы сумм с дефолтным значением
|
||||
def createMatrixAmounts(self,namesIndex: list) -> pd.DataFrame():
|
||||
self.matrixAmounts = self.createDFbyNames(namesIndex,self.trandeValuesList,0)
|
||||
self.keysMatrixAmounts = self.matrixAmounts.to_dict('tight')['index_names']
|
||||
self.createMatrixProbability(namesIndex)
|
||||
return(self.matrixAmounts)
|
||||
|
||||
#создание матрицы вероятностей с дефолтным значением
|
||||
def createMatrixProbability(self,namesIndex: list) -> pd.DataFrame():
|
||||
self.matrixProbability = self.createDFbyNames(namesIndex,self.trandeValuesList)
|
||||
return(self.matrixProbability)
|
||||
|
||||
#установка значений в матрицы сумм. signalDecisions - значения индикаторов key:value; trande - реальное значение
|
||||
def setDecisionBySignals(self,signalDecisions: dict,trande: str) -> None:
|
||||
buff=[]
|
||||
for i in self.keysMatrixAmounts:
|
||||
buff.append(signalDecisions[i])
|
||||
self.matrixAmounts.loc[tuple(buff),trande] += 1
|
||||
|
||||
#заполнение матрицы вероятностей вычисляемыми значениями из матрицы сумм
|
||||
def generateMatrixProbability(self) -> None:
|
||||
for i in range(self.matrixAmounts.shape[0]):
|
||||
rowSum=sum(self.matrixAmounts.iloc[i])
|
||||
self.matrixProbability.iloc[i]['up'] = (self.matrixAmounts.iloc[i]['up'] / rowSum)
|
||||
self.matrixProbability.iloc[i]['none'] = self.matrixAmounts.iloc[i]['none'] / rowSum
|
||||
self.matrixProbability.iloc[i]['down'] = self.matrixAmounts.iloc[i]['down'] / rowSum
|
||||
|
||||
#получение рещения из матрицы вероятностей по заданным значениям сигналов
|
||||
def getDecisionBySignals(self,signalDecisions: dict) -> dict:
|
||||
ans = {}
|
||||
spliceSearch =self.matrixProbability.xs(tuple(signalDecisions.values()),
|
||||
level=list(signalDecisions.keys())
|
||||
)
|
||||
ans['probability'] = spliceSearch.to_dict('records')[0]
|
||||
ans['trande'] = spliceSearch.iloc[0].idxmax()
|
||||
return ans
|
||||
|
||||
#получение матриц вероятностей и суммы в видей словарей
|
||||
def getMatrixDict(self) -> dict:
|
||||
ans={}
|
||||
ans['amounts'] = self.matrixAmounts.to_dict('tight')
|
||||
ans['probability'] = self.matrixProbability.to_dict('tight')
|
||||
return ans
|
||||
|
||||
#установка матриц вероятностей и суммы в видей словарей
|
||||
def setMatrixDict(self,matrixDict: dict) -> dict:
|
||||
if matrixDict['amounts'] != None:
|
||||
self.matrixAmounts = pd.DataFrame.from_dict(y['amounts'], orient='tight')
|
||||
if matrixDict['probability'] != None:
|
||||
self.matrixProbability = pd.DataFrame.from_dict(y['probability'], orient='tight')
|
||||
|
||||
|
||||
# In[3]:
|
||||
|
||||
|
||||
reqSig={
|
||||
'BB1':{
|
||||
'className':signal_BB,
|
||||
'indParams':{'MeanType':'SMA','window':15,'valueType':'close','kDev':2.5},
|
||||
'signalParams':{'source':'close','target':'close'},
|
||||
'batchSize':15
|
||||
},
|
||||
'BB2':{
|
||||
'className':signal_BB,
|
||||
'indParams':{'MeanType':'SMA','window':15,'valueType':'close','kDev':2.5},
|
||||
'signalParams':{'source':'close','target':'close'},
|
||||
'batchSize':20
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
# In[4]:
|
||||
|
||||
|
||||
reqDS={'BB1':'up','BB2':'none'}
|
||||
|
||||
|
||||
# In[7]:
|
||||
|
||||
|
||||
reqCreate=list(reqSig.keys())
|
||||
reqCreate
|
||||
|
||||
|
||||
# In[8]:
|
||||
|
||||
|
||||
t=trandeVoter('piu')
|
||||
o=t.createMatrixAmounts(['BB1', 'BB2'])
|
||||
o
|
||||
|
||||
|
||||
# In[9]:
|
||||
|
||||
|
||||
for i in range(100000):
|
||||
t.setDecisionBySignals({'BB1':random.choice(['up','down','none']),
|
||||
'BB2':random.choice(['up','down','none'])},
|
||||
random.choice(['up','down','none']))
|
||||
|
||||
|
||||
|
||||
# In[10]:
|
||||
|
||||
|
||||
t.matrixAmounts
|
||||
|
||||
|
||||
# In[11]:
|
||||
|
||||
|
||||
t.generateMatrixProbability()
|
||||
|
||||
|
||||
# In[577]:
|
||||
|
||||
|
||||
t.matrixProbability
|
||||
|
||||
|
||||
# In[14]:
|
||||
|
||||
|
||||
t.setMatrixDict(y)
|
||||
|
||||
|
||||
# In[15]:
|
||||
|
||||
|
||||
t.getDecisionBySignals(reqDS)
|
||||
|
||||
|
||||
# In[ ]:
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# In[ ]:
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# In[13]:
|
||||
|
||||
|
||||
y = t.getMatrixDict()
|
||||
y
|
||||
|
||||
|
||||
# In[16]:
|
||||
|
||||
|
||||
ddf = pd.DataFrame.from_dict(y['amounts'], orient='tight')
|
||||
ddf
|
||||
|
||||
|
||||
# In[ ]:
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# In[ ]:
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# In[ ]:
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# In[ ]:
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# In[17]:
|
||||
|
||||
|
||||
t.matrixProbability.iloc[0]['up'] = (t.matrixProbability.iloc[0]['up'] / (sum(t.matrixProbability.iloc[0])))
|
||||
t.matrixProbability
|
||||
|
||||
|
||||
# In[ ]:
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# In[ ]:
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# In[ ]:
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# In[18]:
|
||||
|
||||
|
||||
t.matrixProbability['trandе']
|
||||
|
||||
|
||||
# In[19]:
|
||||
|
||||
|
||||
random.choice(['up','down','none'])
|
||||
|
||||
|
||||
# In[20]:
|
||||
|
||||
|
||||
t.setDecisionBySignals(reqDS,'up')
|
||||
|
||||
|
||||
# In[21]:
|
||||
|
||||
|
||||
#t.matrixAmounts.at(bbb,'up')
|
||||
|
||||
t.matrixAmounts.iloc[0]
|
||||
|
||||
|
||||
# In[22]:
|
||||
|
||||
|
||||
for i in t.matrixAmounts.iloc[0]:
|
||||
print (i)
|
||||
|
||||
|
||||
# In[23]:
|
||||
|
||||
|
||||
(t.matrixAmounts.iloc[0]).idxmax()
|
||||
|
||||
|
||||
# In[24]:
|
||||
|
||||
|
||||
t.matrixAmounts
|
||||
|
||||
|
||||
# In[ ]:
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# In[25]:
|
||||
|
||||
|
||||
o.xs(('up','down'), level=['BB1','BB2'])['up'].iloc[0]
|
||||
|
||||
#oldValue = o.xs(('up','down'), level=['BB1','BB2'])['up']
|
||||
|
||||
#o=o.replace(oldValue,oldValue.iloc[0]+1)
|
||||
#o.xs(('up','down'), level=['BB1','BB2'])
|
||||
|
||||
|
||||
# In[26]:
|
||||
|
||||
|
||||
o.xs(('up','down'), level=['BB1','BB2'], drop_level=False)#.iloc[0].loc['up']=2#.at['up']=4
|
||||
|
||||
|
||||
# In[27]:
|
||||
|
||||
|
||||
o.xs(('up','down'), level=['BB1','BB2']).iloc[0].at['up']
|
||||
|
||||
|
||||
# In[28]:
|
||||
|
||||
|
||||
o.loc['up'].loc['down']
|
||||
|
||||
|
||||
# In[29]:
|
||||
|
||||
|
||||
bbb=tuple(['up','down'])
|
||||
bbb
|
||||
|
||||
|
||||
# In[30]:
|
||||
|
||||
|
||||
o.loc[bbb,]
|
||||
|
||||
|
||||
# In[31]:
|
||||
|
||||
|
||||
o.at[bbb, 'up']+=1
|
||||
o
|
||||
|
||||
|
||||
# In[32]:
|
||||
|
||||
|
||||
o.loc[bbb]
|
||||
|
||||
|
||||
# In[33]:
|
||||
|
||||
|
||||
dict(zip(['a','b','c'], [1,2,3]))
|
||||
|
||||
|
||||
# In[ ]:
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user