marketTrade/notebooks/autogen/decisionManager.py

359 lines
5.6 KiB
Python

#!/usr/bin/env python
# coding: utf-8
# In[4]:
import pandas as pd
import datetime
import numpy as np
import pickle
from signals import *
from dealManager import *
from trandeVoter import *
from riskManager import riskManager
# In[5]:
df_candle = pd.read_csv("../data/EURUSD_price_candlestick.csv")
df_candle.rename(columns={'timestamp': 'date'}, inplace=True)
df_candle
# In[6]:
class decsionManager():
def __init__(self,name):
self.name = name
self.RM = riskManager()
self.DM = DealManager()
self.TV = trandeVoter(name)
self.SA = signalAgrigator()
pass
#вытащенный из signalAgrigator метод теста для сигналов
def getSignalTest(self,data: pd.DataFrame(),reqSig: dict, batchSize=30, dataType='candel') -> dict:
self.SA.mode = 'retroFast'
t.SA.createSingnalInstances(
data = data,
dictAgrigSignal = reqSig,
dataType='candel',
batchSize=30
)
ans = t.SA.getAns(data)
return ans
#метод для генерации матрицы вероятностей.
def generateMatrixProbability(self,
data: pd.DataFrame(),
reqSig: dict,
target: str,
batchSize=30,
#dataType='candel'
):
data=data.reset_index(drop=True)
t.SA.createSingnalInstances(
data = data,
dictAgrigSignal = reqSig,
dataType='candel',
batchSize=batchSize
)
self.TV.createMatrixAmounts(reqSig.keys())
for i in range(data.shape[0]-batchSize-1):
sigAns=self.SA.getAns(data[i:i+batchSize])
rightAns=self.getRetroStepAns(data[target][i],data[target][i+1])
self.TV.setDecisionBySignals(self.KostilEbaniy(sigAns),rightAns)
self.TV.generateMatrixProbability()
#без коментариев блять
def KostilEbaniy(self,d):
ans={}
for i in d.keys():
if d[i] == 0:
ans[i] = 'none'
elif d[i] == 1:
ans[i] = 'up'
elif d[i] == -1:
ans[i] = 'down'
return ans
#тож понятная хуита
def getRetroStepAns(self, value1,value2):
if value1 == value2:
ans = 'none'
elif value1 < value2:
ans = 'up'
else:
ans = 'down'
return ans
#метод для онлай получения решения по сигналу
def getSignal(self,data: pd.DataFrame(),reqSig: dict, dataType='candel') -> dict:
data=data.reset_index(drop=True)
self.SA.mode = 'online'
t.SA.createSingnalInstances(
data = data,
dictAgrigSignal = reqSig,
dataType='candel',
batchSize=30
)
ans = t.SA.getAns(data)
return ans
#Создание сигналов. Вызывать перед getOnlineAns
def crateSignals(self,data: pd.DataFrame(),reqSig: dict, dataType='candel'):
data=data.reset_index(drop=True)
self.SA.mode = 'online'
t.SA.createSingnalInstances(
data = data,
dictAgrigSignal = reqSig,
dataType='candel',
batchSize=30
)
def getOnlineAns(self,data: pd.DataFrame(),price):
sigAns = self.SA.getAns(data)
prob = self.TV.getDecisionBySignals(sigAns)
ans = self.RM.getDecision(sigAns,prob,price)
return ans
# In[ ]:
# In[7]:
t= decsionManager('TEST')
# In[8]:
t.__dict__
# In[9]:
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[10]:
reqSig.keys()
# In[11]:
t.SA.__dict__
# In[12]:
t.generateMatrixProbability(df_candle[:10000],reqSig,'close',40)
# In[ ]:
# In[ ]:
# In[ ]:
# In[ ]:
# In[ ]:
# In[ ]:
# In[13]:
mop = t.TV.matrixProbability
mop
# In[ ]:
# In[ ]:
# In[14]:
t.getSignal(df_candle[:10000],reqSig)
# In[15]:
t.getSignalTest(df_candle[:10000],reqSig,40)
# In[ ]:
# In[16]:
t.SA.createSingnalInstances(
data = df_candle[:10000],
dictAgrigSignal = reqSig,
dataType='candel',
batchSize=30
)
# In[ ]:
# In[ ]:
# In[ ]:
# In[17]:
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[18]:
t=decsionManager(reqSig)
# In[ ]:
# In[ ]:
import pickle
# In[ ]:
dictionary_data = {"a": 1, "b": 2}
a_file = open("data.pkl", "wb")
pickle.dump(reqSig, a_file)
a_file.close()
a_file = open("data.pkl", "rb")
output = pickle.load(a_file)
print(output)
a_file.close()
# In[ ]: