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>
|
</Attribute>
|
||||||
</value>
|
</value>
|
||||||
</entry>
|
</entry>
|
||||||
|
<entry key="/data/trades_data/currencies/BBG00D87WQY7/BBG00D87WQY7_2022-11-23_trades.csv">
|
||||||
|
<value>
|
||||||
|
<Attribute>
|
||||||
|
<option name="separator" value="," />
|
||||||
|
</Attribute>
|
||||||
|
</value>
|
||||||
|
</entry>
|
||||||
</map>
|
</map>
|
||||||
</option>
|
</option>
|
||||||
</component>
|
</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