9.2 KiB
project:: #bibasCopy
Импорт
Для начала импортим все что нужно
from market_trade.core.decisionManager_v2 import *
from market_trade.core.indicators_v2 import *
from market_trade.core.signals_v2 import *
Подготавливаем данные по которым собирется модель. Модель представляет из себя словарь в следующем формате:
{
'название_cигнала_1':{
'className': класс_сигнала_1,
'params': { параметры_для_сигнала_1 },
'indicators':{
'название_индикатора_1':{
'className': класс_индикатора_1,
'params': { параметры_для_индикатора_1 }
},
'название_индикатора_2':{
'className': класс_индикатора_2,
'params': { параметры_для_индикатора_2 }
},
}
},
'название_cигнала_2':{
'className': класс_сигнала_2,
'params': { параметры_для_сигнала_2 },
'indicators':{
'название_индикатора_1':{
'className': класс_индикатора_1,
'params': { параметры_для_индикатора_1 }
},
'название_индикатора_3':{
'className': класс_индикатора_3,
'params': { параметры_для_индикатора_3 }
},
}
},
}
Пример такого словаря, который будет дальше использоваться
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}
}
}
}
}
Далее нужно создать объект класса decisionManager_v2, например с именем "Pipa"
test = decsionManager('Pipa', sigAgrReq)
Ретро
Описание
Ретро-тестирование нужно для
- Проверки сигналов
- Проверки параметров сигналов и индикаторов
- Создания вероятностной матрицы решений
Получение данных
Для ретро-тестирования нужны данные в следующем формате
| date | open | close | high | low | |
|---|---|---|---|---|---|
| 0 | 2020-09-01 03:00:00+03:00 | 1.19370 | 1.19388 | 1.19391 | 1.19368 |
| 1 | 2020-09-01 03:00:05+03:00 | 1.19370 | 1.19388 | 1.19391 | 1.19383 |
| ... | ... | ... | ... | ... | ... |
Данные сохраняются в DataFrame
import pandas as pd
df_candle = pd.read_csv("data.csv")
Шиблон загрузки данных
Для ретро-тестирования необходимо задать, в каком формате будут приходить данные. Шаблон должен быть в следующем формате
{
'имя_сигнала_1':{
'signalData': None,
'indicatorData' :{'имя_индикатора_1': None, 'имя_индикатора_2': None}
},
'имя_сигнала_2':{
'signalData': None,
'indicatorData' :{'имя_индикатора_3': None}
}
Пример шаблона который дальше будет использоваться
sigAgrRetroTemplate = {
'sig_BB':{
'signalData': None,
'indicatorData' :{'ind_BB': None}
},
'sig_BB_2':{
'signalData': None,
'indicatorData' :{'ind_BB': None}
}
}
Получение результатов
Для получение результаов нужно задать размер скользящего окна. В примере ниже он равен 40. Так же нужно указать шаблон и какие данные нужно падать на вход.
retroAns = test.getRetroTrendAns(sigAgrRetroTemplate,df_candle[:5000],40)
Результатом будет словарь в формате
{
'signalsAns':[
{'sig_BB': 'none', 'sig_BB_2': 'none'},
{'sig_BB': 'none', 'sig_BB_2': 'down'},
],
'rightAns':['up','down']
}
В signalsAns находится список из ответов сигналов для каждого окна В rightAns находится список верных решений для этих окон Возможные решения
- none - не изменится
- up - вверх
- down - вниз
Вероятностная матрица решений
Описание
Вероятностная матрица решения - таблица, с помощью которой по заданным ответов сигналов можно опрделить вероятность исходов Фомат матрицы для 2ух сигналов
| up | none | donw | ||
|---|---|---|---|---|
| имя_сигнала_1 | имя_сигнала_2 | |||
| up | up | |||
| up | none | |||
| up | donw | |||
| none | up | |||
| none | none | |||
| none | donw | |||
| donw | up | |||
| donw | none | |||
| donw | donw |
Генерация
Для расчета вероятностной матрицы решений необходим передать словарь с ретро-ответами
test.generateMatrixProbabilityFromDict(retroAns)
Итоговый код
from market_trade.core.decisionManager_v2 import *
from market_trade.core.indicators_v2 import *
from market_trade.core.signals_v2 import *
import pandas as pd
df_candle = pd.read_csv("data.csv")
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}
}
}
}
}
sigAgrRetroTemplate = {
'sig_BB':{
'signalData': None,
'indicatorData' :{'ind_BB': None}
},
'sig_BB_2':{
'signalData': None,
'indicatorData' :{'ind_BB': None}
}
}
test = decsionManager('Pipa', sigAgrReq)
retroAns = test.getRetroTrendAns(sigAgrRetroTemplate,df_candle[:5000],40)
test.generateMatrixProbabilityFromDict(retroAns)
Онлайн ответ
Условия
Для работы онлай ответа неоходимо, чтобы были определны
- dealManager
- trandeVoter
- riskManager
- signalAgrigator
Запуск
Для запуска нужно передать в метод текущую цену и данные, на основе которыйх будут рассчитаны сигналы и индикаторы в следующем формате
{
'sig_BB':{
'signalData': data,
'indicatorData' :{'ind_BB': data}
},
'sig_BB_2':{
'signalData': data,
'indicatorData' :{'ind_BB': data}
}
}
Пример словаря, который будет использорваться дальше
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]}
}
}
Далее передам значения в мето
test.getOnlineAns(sigAgrData, 0.0)
и получаем ответ в формате
{'decision': 'none'}
Дампы
Сохранение объекта
test.createDump('pupa')
По итогу выполнения создается файл в текущей директории с названием data_pupa.pickle
Загруיזть объеקт можно следующим образом
import pickle
with open('C:\\Users\\Redsandy\\PyProj\\Trade\\MVP\\data_pupa.pickle', 'rb') as f:
data_new = pickle.load(f)