project:: #bibasCopy # Импорт Для начала импортим все что нужно ```python from market_trade.core.decisionManager_v2 import * from market_trade.core.indicators_v2 import * from market_trade.core.signals_v2 import * ``` Подготавливаем данные по которым собирется модель. Модель представляет из себя словарь в следующем формате: ```json { 'название_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 } }, } }, } ``` Пример такого словаря, который будет дальше использоваться ```python 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" ```python test = decsionManager('Pipa', sigAgrReq) ``` # Ретро ## Описание Ретро-тестирование нужно для 1. Проверки сигналов 2. Проверки параметров сигналов и индикаторов 3. Создания вероятностной матрицы решений ## Получение данных Для ретро-тестирования нужны данные в следующем формате | | 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 ```python import pandas as pd df_candle = pd.read_csv("data.csv") ``` ## Шиблон загрузки данных Для ретро-тестирования необходимо задать, в каком формате будут приходить данные. Шаблон должен быть в следующем формате ```json { 'имя_сигнала_1':{ 'signalData': None, 'indicatorData' :{'имя_индикатора_1': None, 'имя_индикатора_2': None} }, 'имя_сигнала_2':{ 'signalData': None, 'indicatorData' :{'имя_индикатора_3': None} } ``` Пример шаблона который дальше будет использоваться ```python sigAgrRetroTemplate = { 'sig_BB':{ 'signalData': None, 'indicatorData' :{'ind_BB': None} }, 'sig_BB_2':{ 'signalData': None, 'indicatorData' :{'ind_BB': None} } } ``` ## Получение результатов Для получение результаов нужно задать размер скользящего окна. В примере ниже он равен 40. Так же нужно указать шаблон и какие данные нужно падать на вход. ```python retroAns = test.getRetroTrendAns(sigAgrRetroTemplate,df_candle[:5000],40) ``` Результатом будет словарь в формате ```json { '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 | | | | ### Генерация Для расчета вероятностной матрицы решений необходим передать словарь с ретро-ответами ```python test.generateMatrixProbabilityFromDict(retroAns) ``` ## Итоговый код ```python 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) ``` # Онлайн ответ ## Условия Для работы онлай ответа неоходимо, чтобы были определны 1. dealManager 2. trandeVoter 3. riskManager 4. signalAgrigator ## Запуск Для запуска нужно передать в метод текущую цену и данные, на основе которыйх будут рассчитаны сигналы и индикаторы в следующем формате ```json { 'sig_BB':{ 'signalData': data, 'indicatorData' :{'ind_BB': data} }, 'sig_BB_2':{ 'signalData': data, 'indicatorData' :{'ind_BB': data} } } ``` Пример словаря, который будет использорваться дальше ```python 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]} } } ``` Далее передам значения в мето ```python test.getOnlineAns(sigAgrData, 0.0) ``` и получаем ответ в формате ```json {'decision': 'none'} ``` # Дампы Сохранение объекта ```python test.createDump('pupa') ``` По итогу выполнения создается файл в текущей директории с названием data_pupa.pickle Загруיזть объеקт можно следующим образом ```python import pickle with open('C:\\Users\\Redsandy\\PyProj\\Trade\\MVP\\data_pupa.pickle', 'rb') as f: data_new = pickle.load(f) ```