84 lines
4.2 KiB
Python
84 lines
4.2 KiB
Python
import pandas as pd
|
||
import datetime
|
||
import numpy as np
|
||
#import random
|
||
|
||
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]):
|
||
print(self.matrixAmounts)
|
||
rowSum=sum(self.matrixAmounts.iloc[i]) + 1
|
||
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')
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|