383 lines
6.5 KiB
Python
383 lines
6.5 KiB
Python
#!/usr/bin/env python
|
|
# coding: utf-8
|
|
|
|
# In[5]:
|
|
|
|
|
|
import os
|
|
|
|
import pandas as pd
|
|
import datetime
|
|
import numpy as np
|
|
|
|
from tqdm import tqdm
|
|
|
|
from indicators_v2 import *
|
|
from signals_v2 import *
|
|
from dealManager import *
|
|
from trandeVoter import *
|
|
from riskManager import *
|
|
import pickle
|
|
|
|
|
|
# In[6]:
|
|
|
|
|
|
df_candle = pd.read_csv("../data/EURUSD_price_candlestick.csv")
|
|
df_candle.rename(columns={'timestamp': 'date'}, inplace=True)
|
|
df_candle
|
|
|
|
|
|
# In[7]:
|
|
|
|
|
|
df_candle['close']
|
|
|
|
|
|
# In[8]:
|
|
|
|
|
|
class decsionManager:
|
|
'''
|
|
sigAgrReq = {
|
|
'sig_BB':{
|
|
'className':sig_BB,
|
|
'params':{'source':'close','target':'close'},
|
|
'indicators':{
|
|
'ind_BB':{
|
|
'className':ind_BB,
|
|
'params':{'MeanType':'SMA','window':30,'valueType':'close','kDev':2.5}
|
|
}
|
|
}
|
|
},
|
|
'sig_BB_2':{
|
|
'className':sig_BB,
|
|
'params':{'source':'close','target':'close'},
|
|
'indicators':{
|
|
'ind_BB':{
|
|
'className':ind_BB,
|
|
'params':{'MeanType':'SMA','window':30,'valueType':'close','kDev':2}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
sigAgrData = {
|
|
'sig_BB':{
|
|
'signalData': df_candle[990:1000],
|
|
'indicatorData' :{'ind_BB': df_candle[:1000]}
|
|
},
|
|
'sig_BB_2':{
|
|
'signalData': df_candle[990:1000],
|
|
'indicatorData' :{'ind_BB': df_candle[:1000]}
|
|
}
|
|
}
|
|
|
|
|
|
sigAgrRetroTemplate = {
|
|
'sig_BB':{
|
|
'signalData': None,
|
|
'indicatorData' :{'ind_BB': None}
|
|
},
|
|
'sig_BB_2':{
|
|
'signalData': None,
|
|
'indicatorData' :{'ind_BB': None}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
'''
|
|
|
|
|
|
|
|
|
|
def __init__(self,name, sigDict: dict):
|
|
self.RM = riskManager()
|
|
self.DM = DealManager()
|
|
self.TV = trandeVoter(name)
|
|
self.SA = signalsAgrigator(sigDict)
|
|
self.sigDict = sigDict
|
|
|
|
|
|
def getOnlineAns(self, signalsAns: dict, price: float) -> dict:
|
|
probabilityDecsion = self.TV.getDecisionBySignals(self.getSignalsAns(signalsAns))
|
|
RMD = self.RM.getDecision(probabilityDecision=probabilityDecsion, price=price, deals = self.DM.deals)
|
|
return RMD
|
|
|
|
def getSignalsAns(self, signalsDataDict: dict) -> dict:
|
|
return self.SA.getAns(signalsDataDict)
|
|
|
|
def getRightAns(self,value_1, value_2):
|
|
|
|
ans=''
|
|
|
|
if value_1 > value_2:
|
|
ans = 'down'
|
|
elif value_1 < value_2:
|
|
ans = 'up'
|
|
else:
|
|
ans = 'none'
|
|
|
|
return ans
|
|
|
|
def getRetroTrendAns(self, retroTemplateDict: dict, data: pd.DataFrame(), window: int) -> list:
|
|
|
|
reqSig={}
|
|
ans = {
|
|
'signalsAns':[],
|
|
'rightAns':[]
|
|
|
|
}
|
|
target = ''
|
|
|
|
|
|
for k in tqdm(range(data.shape[0]-window-1)):
|
|
for i in retroTemplateDict.keys():
|
|
reqSig[i] = {'signalData': data[k:k+window], 'indicatorData':{}}
|
|
target = self.SA.signals[i].params['target']
|
|
for j in retroTemplateDict[i]['indicatorData'].keys():
|
|
reqSig[i]['indicatorData'][j] = data[k:k+window]
|
|
|
|
sigAns = self.getSignalsAns(reqSig)
|
|
rightAns = self.getRightAns(data[target][k], data[target][k+1])
|
|
|
|
ans['signalsAns'].append(sigAns)
|
|
ans['rightAns'].append(rightAns)
|
|
|
|
return ans
|
|
|
|
|
|
def generateMatrixProbabilityFromDict(self, dictSignals: dict) -> dict:
|
|
self.TV.createMatrixAmounts(dictSignals['signalsAns'][0].keys())
|
|
for i in range(len(dictSignals['signalsAns'])):
|
|
self.TV.setDecisionBySignals(signalDecisions = dictSignals['signalsAns'][i],
|
|
trande = dictSignals['rightAns'][i])
|
|
self.TV.generateMatrixProbability()
|
|
|
|
def createDump(self,postfix='') -> str:
|
|
dataDict = {
|
|
'RM':self.RM,
|
|
'DM':self.DM,
|
|
'TV':self.TV,
|
|
'SA':self.SA,
|
|
'sigDict':self.sigDict
|
|
}
|
|
fileName='data_'+postfix+'.pickle'
|
|
with open(fileName, 'wb') as f:
|
|
pickle.dump(dataDict, f)
|
|
|
|
return os.path.abspath(fileName)
|
|
|
|
def loadDump(self,path: str) -> None:
|
|
|
|
with open(path, 'rb') as f:
|
|
dataDict = pickle.load(f)
|
|
|
|
self.RM = dataDict['RM']
|
|
self.DM = dataDict['DM']
|
|
self.TV = dataDict['TV']
|
|
self.SA = dataDict['SA']
|
|
self.sigDict = dataDict['sigDict']
|
|
|
|
|
|
# In[9]:
|
|
|
|
|
|
sigAgrReq = {
|
|
'sig_BB':{
|
|
'className':sig_BB,
|
|
'params':{'source':'close','target':'close'},
|
|
'indicators':{
|
|
'ind_BB':{
|
|
'className':ind_BB,
|
|
'params':{'MeanType':'SMA','window':30,'valueType':'close','kDev':2.5}
|
|
}
|
|
}
|
|
},
|
|
'sig_BB_2':{
|
|
'className':sig_BB,
|
|
'params':{'source':'close','target':'close'},
|
|
'indicators':{
|
|
'ind_BB':{
|
|
'className':ind_BB,
|
|
'params':{'MeanType':'SMA','window':30,'valueType':'close','kDev':2}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
sigAgrData = {
|
|
'sig_BB':{
|
|
'signalData': df_candle[990:1000],
|
|
'indicatorData' :{'ind_BB': df_candle[:1000]}
|
|
},
|
|
'sig_BB_2':{
|
|
'signalData': df_candle[990:1000],
|
|
'indicatorData' :{'ind_BB': df_candle[:1000]}
|
|
}
|
|
}
|
|
|
|
|
|
sigAgrRetroTemplate = {
|
|
'sig_BB':{
|
|
'signalData': None,
|
|
'indicatorData' :{'ind_BB': None}
|
|
},
|
|
'sig_BB_2':{
|
|
'signalData': None,
|
|
'indicatorData' :{'ind_BB': None}
|
|
}
|
|
}
|
|
|
|
|
|
# In[10]:
|
|
|
|
|
|
test = decsionManager('Pipa', sigAgrReq)
|
|
|
|
|
|
# In[11]:
|
|
|
|
|
|
test.__dict__
|
|
|
|
|
|
# In[12]:
|
|
|
|
|
|
test.TV.__dict__
|
|
|
|
|
|
# In[13]:
|
|
|
|
|
|
test.SA.signals['sig_BB'].params['target']
|
|
|
|
|
|
# In[14]:
|
|
|
|
|
|
test.getSignalsAns(sigAgrData)
|
|
|
|
|
|
# In[15]:
|
|
|
|
|
|
#test.loadDump('C:\\Users\\Redsandy\\PyProj\\Trade\\MVP\\data_pupa.pickle')
|
|
|
|
|
|
# In[16]:
|
|
|
|
|
|
uuu = test.getRetroTrendAns(sigAgrRetroTemplate,df_candle[:5000],40)
|
|
uuu
|
|
|
|
|
|
# In[17]:
|
|
|
|
|
|
test.generateMatrixProbabilityFromDict(uuu)
|
|
|
|
|
|
# In[18]:
|
|
|
|
|
|
test.TV.__dict__
|
|
|
|
|
|
# In[19]:
|
|
|
|
|
|
test.getOnlineAns(sigAgrData, 0.0)
|
|
|
|
|
|
# In[20]:
|
|
|
|
|
|
(test.DM.deals).shape
|
|
|
|
|
|
# In[21]:
|
|
|
|
|
|
test.createDump('pupa')
|
|
|
|
|
|
# In[ ]:
|
|
|
|
|
|
|
|
|
|
|
|
# In[22]:
|
|
|
|
|
|
with open('C:\\Users\\Redsandy\\PyProj\\Trade\\MVP\\data_pupa.pickle', 'rb') as f:
|
|
data_new = pickle.load(f)
|
|
data_new
|
|
|
|
|
|
# In[ ]:
|
|
|
|
|
|
|
|
|
|
|
|
# In[ ]:
|
|
|
|
|
|
|
|
|
|
|
|
# In[ ]:
|
|
|
|
|
|
|
|
|
|
|
|
# In[ ]:
|
|
|
|
|
|
|
|
|
|
|
|
# In[ ]:
|
|
|
|
|
|
|
|
|
|
|
|
# In[ ]:
|
|
|
|
|
|
|
|
|
|
|
|
# In[ ]:
|
|
|
|
|
|
|
|
|
|
|
|
# In[ ]:
|
|
|
|
|
|
|
|
|
|
|
|
# In[ ]:
|
|
|
|
|
|
|
|
|
|
|
|
# In[ ]:
|
|
|
|
|
|
|
|
|