marketTrade/market_trade/core/decisionManager.md
2022-12-04 19:18:32 +02:00

9.1 KiB
Raw Blame History

project:: #bibasCopy

Импорт

Для начала импортим все что нужно

from decisionManager_v2 import *
from indicators_v2 import *
from 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)

Ретро

Описание

Ретро-тестирование нужно для

  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

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 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

Запуск

Для запуска нужно передать в метод текущую цену и данные, на основе которыйх будут рассчитаны сигналы и индикаторы в следующем формате

{
    '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)