added documentation

This commit is contained in:
Mark 2022-12-04 19:18:32 +02:00
parent 5189c6f27a
commit d50defbe3e
3 changed files with 298 additions and 0 deletions

7
.idea/csv-plugin.xml generated
View File

@ -31,6 +31,13 @@
</Attribute>
</value>
</entry>
<entry key="/data/trades_data/currencies/BBG00D87WQY7/BBG00D87WQY7_2022-11-23_trades.csv">
<value>
<Attribute>
<option name="separator" value="," />
</Attribute>
</value>
</entry>
</map>
</option>
</component>

View File

@ -0,0 +1,3 @@
project:: #bibasCopy
# Запуск
Для запуска нужно замутить пройти шаги из [[decisionManager]]

View File

@ -0,0 +1,288 @@
project:: #bibasCopy
# Импорт
Для начала импортим все что нужно
```python
from decisionManager_v2 import *
from indicators_v2 import *
from 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 decisionManager_v2 import *
from indicators_v2 import *
from 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)
```