added documentation
This commit is contained in:
parent
5189c6f27a
commit
d50defbe3e
7
.idea/csv-plugin.xml
generated
7
.idea/csv-plugin.xml
generated
@ -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>
|
||||
|
||||
3
market_trade/core/bibasCopy.md
Normal file
3
market_trade/core/bibasCopy.md
Normal file
@ -0,0 +1,3 @@
|
||||
project:: #bibasCopy
|
||||
# Запуск
|
||||
Для запуска нужно замутить пройти шаги из [[decisionManager]]
|
||||
288
market_trade/core/decisionManager.md
Normal file
288
market_trade/core/decisionManager.md
Normal 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)
|
||||
```
|
||||
Loading…
x
Reference in New Issue
Block a user