четверг, 30 октября 2014 г.

Файловое хранилище от Макеева

1. Был предложен механизм взаимодействия с Файловым хранилищем.
2. Были представлены Тесты этого механизма.
3. При Запуске Тестов Visual Studio - зависало
4. Я высказал предположение о наличии ошибок. Мне было сказано, что ошибок нет.
5. Я решил это проверить и к вечеру выяснилось, что в предложенном механизме етсь серьезные ошибки.

вторник, 28 октября 2014 г.

PorfolioFormServ01

1. 28.10.2014 - в результате отказа ИБС упала рабочая машина 192,168,1,57 на которой вертелись два тестовых проекта PortfoliFormServ01. Проработали они около 5-х дней.
2. Перезапустил два тестовых проекта (PortfolioServForm23) с тем, чтобы они проработали хотя бы неделю.

3. Пытаюсь разобраться, почему проекты PortfolioFormServ01 не работают с новыми Шинами.
4. Откатился на версию dev_141027_0 - все работает.
5. Добавил изменения в dev из версии dev_141027_0. Помогло. Пока работает. Необходимо оставить версию dev_141027_0 как работающий макет, или версию dev_141024
6. Zip: dev_141028.zip

PortfolioServ01

1. 27.10.2014 - упала сетка 192.168.10 => упала vm 192.168.10.6 на которой вертелись два тестовых проекта PortfoliFormServ01. Проработали они около 3-х дней.

2. 27.10.2014 - произвел слияние ветки db dev_gonchar с веткой master c новой версией Шин.
Опять конфликты разных процессоров. Вообщем сразу тестовые проекты служб не запустились.

понедельник, 27 октября 2014 г.

Projects

dev_141027 - последний сохраненный проект
dev_141003 - проект, предположительно до краха
devAfterCrash - проект предположительно после Краха

четверг, 23 октября 2014 г.

PortfolioServ01

1. Portfolio.CheckPositions
Агрегация  ExReports.осуществляется по Тикеру.
Сравнение ExReports.Position c Позициями в Портфеле
2. ExReports.DailyExReportsSum - предназначен для агрегации Дневных ExecutionReports по принципу Account, AlgoID, Symbol для уменьшения их кол-ва, а также для последующего сохранения в БД. Подневные сохраненные ExReports можно использовать для Восстановления Портфеля после возможного сбоя.

PortfolioServ21
PortfolioServ24 - С Собщением об дублируемым ExecutionReports + Проход далее
PortfolioServ23 - С Собщением об дублируемым ExecutionReports + Выход


PortfolioServ01

1. Изменил Portfolio.CheckPositions() - теперь возвращает bool

2. Подумать, что делать с о сделками с "неверной датой". Дата > Текущей

3. Добавил Контроль по ExecutionReports.Count()  CheckExReportsCount() - вызывается в OnExecutionReport.
CheckExReportsCount() - осуществляется сравнение счетиков ExReports  в Службе и в Portfolio("Total"), в котором учтены все ExecutionReports

Dev

Последний сохраненный проект до Перехода на Новые Шины с Хранилищем
dev_141022. Предыдущий dev_141021.

среда, 22 октября 2014 г.

PortfolioServ01

1. Сделал эмуляцию Выходного Контроля Pushera CorrectExReport(e.ExecutionReport);
2. Отделил Ошибочные сообщения в Отдельное Окно, в которое, в частности пишутся "неправильные" Executions Reports
3. Form Контейнер Logger для служб  FormServ01
dev_141022
Предложения:
4. Необходимо иметь Выходной Контроль на Источнике.
5. Желательно иметь Идентификатор Службы.
Неожиданности
6. В ветке Gitа dev_gonchar неожиданно Появился API Open Quant. Раньше этого не было. возможно кто-то это закомитил. Необходимо проверить основные классы, возможно закомитили еще и старые версии.


понедельник, 20 октября 2014 г.

PortfolioServ01

1. Все три тестовых проекта (см Предыдущий пост) перешли через ночь успешно.
PortfolioServ17
PortfolioServ3
PortfolioServ32
2. По счетам 0AG, 0SV c AlgoID = 39005 время последнего полученного Execution Reporta на  11:00 часов  утра 21.10.14  составляет 21:18 - то есть явно не Утро

Проверил: возможно "вредит" контроль, вроде нет.

Выяснилось, что неправильное время идет из Таблицы Quik ?!?!?

3. По-прежнему по счету G02, а также по счету G06, в поле Symbol идет "Купля-Продажа".

В связи с пп 2 и 3 необходимо иметь Выходной Контроль, для служб которые Publish в сеть экземпляры  наиболее значимых сущностей, например, Execution Reports.

4. В Transaction не заполнял поле Account в Методах Clone(), WriteToImpl(), ReadToImpl()
Исправил

5. Ввел в Portfolio событие OnPositionInvalid - срабатывает, если Позиция не проходит Внутренний контроль

6. В PortfolioViewForm ввел кнопку "Correct" для корректировки Positions текущего Портфеля

PortfolioServ01

PortfolioServ17\PortfolioServ01 - c lock() в службе PortfolioServ01(с контролем) - запущена на локальной машине 20,10,2014
PortfolioServ03\PortfolioServ01 запущена на 192.168.10.6 20.10.2014
PortfolioServ032\PortfolioServ01 запущена на 192.168.10.6 20.10.2014 - контроль в рамках Портфеля

Git

Git:
Ветвь: dev_gonchar
Последовательность:
Git -> Browser -> Commit in dev_gonchar

PortfolioFormServ01

1. PortfolioFormServ01 в тестовом режиме запущен на 192.168.10.6  PortfolioServ02. 20.10.2014 11:50


PortfolioServ01

1. Необходим общий Ping или HeartBeat Контроль на стороне каждого Pushera

воскресенье, 19 октября 2014 г.

PortfolioServ01

1. Переход через ночь с 17.10 по 20.10 прошел успешно. запущен 17.10.14 16:05
2. Необходимо подумать про Выходной контроль ExecutionReports на стороне PUSHERa
по Горизонтали, то есть на уровне Полей, и на уровне Правильной Последовательности.
3. Возможно также подумать о введении Контроля Позиций на уровне Портфеля, а не на уровне Службы.
4. Ранее используемый  контроль по Нумерации не работает.
5. Сейчас тестируется портфель с включенным Входным контролем  ExecutionReports по Уникальности.
6. Проект: dev_141017.zip
7. Productions\PortfolioServ16


четверг, 16 октября 2014 г.

среда, 15 октября 2014 г.

PortfolioFormServ01

16.10.2014
1. Переход через ночь прошел не успешно
Скорректировал ExReports Module
2. Дополнил Test_BusRecTra_01, чтобы отправляемые ExecutionReports
симулировали Переход через Ночь, посредством увеличения DateTime.Date
3. Проверил вместе с PortfolioFormServ01. Переход через ночь осуществляется правильно, формируя суммарные Execution Reports, существенно уменьшая их количество.
4. Добавил вывод Execution Reports Count в PortfolioFormServ01.PositionsLogger
5. Механизм "жесткого" контроля по уникальности работает. Вопрос о его применении остается открытым. Это зависит от режима работы Pushera, который отдает ExecutionReports c Начала Утренней Сессии.

Location:
PortfolioServ15\PortfolioFormServ01

PortfolioServ

PortfolioFormServ01
Добавлено
1. Переход через Ночь в Контроле Positions.
При смене даты очищается список ExReports и добавляется Суммарные ExecutionReports за день.

пятница, 10 октября 2014 г.

PortfolioFormServ01

10.10.2014
1. Обнаружены незначительные расхождения в PortfolioServ.CheckUp  и PortfolioManager
В тестах это расхождение не обнаруживается.
Предположение
Последовательность ExReports поступает в Службу с "неправильной"  нумерацией сделок.
В Портфолио введен более жесткий контроль нумерации Входящих ExecReports
Расхождений пока не наблюдается
2. По счету G02 идут неправильные ExecutionReports: в поле Тикер идет значения "Купля","Продажа"

четверг, 9 октября 2014 г.

PortfolioServ01

BackUp: dev_141009
Location: Productions\PortfolioServ09
Портфели
1.Добавлены Портфели по AlgoID
2.Добавлены Портфели по Account + AlgoID
3.Добавлен Портфель Total

Добавлен Контроль расчета Портфелей:
1. Total
2. Account
3. AlgoID
4. Account + AlgoID
+
if ( !  IsActive ) No ExecutionReports Processing

среда, 8 октября 2014 г.

PortfolioFormServ01

PortfolioFormServ01
Location: d:\Productions\Portfolioserv05
BackUp: dev_141008.zip
Работает КОРРЕКТНО с использованием:
BusNode - шина
BusPublisherPush - пушер
Проблема:
Не работает с BusPublisherPub
15:30
Решение:
1.Проведено обновление до последнего Релиза FF.Bus
2.Шина заменена BusNode -> BusProxy
3. Не работал BusPublisherPub - при передачи сообщения Приложение падает.
Произведена корректировка Передачи сообщения в BusPublisherPub
Переставлены вызовы методов Сериализации, то ест изменен порядок.
4.При Передаче сообщения необходимо ??? заполнять AlgoMessage.Source
5. Запуск Перезапуск - не работал. В BusSubscriber.Stop() добавлена очистка Topics
Последовательность Запуск-Перезапуск:
public void Start()
        {
            if (null != Subscriber)
            {
                //Subscriber.Connect(BusNodeName);
                Subscriber.Subscribe(PullTopic);
                Subscriber.Start();
            }
            if (null != Pusher)
                Pusher.Start();
        }
        public void Stop()
        {
            if (null != Subscriber)
            {
                Subscriber.Unsubscribe(PullTopic);
                Subscriber.Disconnect(BusNodePushAddress);
                Subscriber.Stop();
            }
            if( null != Pusher)
                Pusher.Stop();
        }

Новый обновленный сервис:
Location: d:\Productions\Portfolioserv06

вторник, 7 октября 2014 г.

Monitor Development Requirements

Monitor Development Requirements

1. Формировать (вычислять PnL) портфель по ИК Форум
2. Показывать RoundTrip для всех MTC
3. Считать PnL непрерывно ( и после Клиринга)
4. Считать PnL не из Quikа, а самостоятельно.

PortfolioServ01

Добавлено:
1.Контроль Позиций - Изменения
Добавлен TabPanel
Добавлено TabPage1 - Logger
Добавлено Tabpage2 - Positions

2.Передача Portfolio SnapShots

PortfolioFormServ01

Launched Date: 06.10.14.
1. Первый ExecutionReport получен 06.10.14 после 18 часов.
Неправильно был указан Topic. Была точка (,), надо было (#)
2. Возникла задача контроля Portfolio
3. 07.10.14 - вставил в PortfolioFormServ01 - контроль позиций.

PositionTracker

http://192.168.10.6/PositionsMvc_05/ - постоянно работает в Тестовом режиме

http://192.168.1.57/PositionsMvc_01/ - в разработке

понедельник, 6 октября 2014 г.

Project

c:\dev\FF\PortfolioFormServ01
Слушает Шину Topic ER# (ExecutionReports)
Пишет в Шину Topic POS# (Positions)
Пишет в Шину Topic PORTF# (Portfolio)
Пишет в Шину Topic TRANS# (Transactions)

c;\dev\FF\TradePuller01
Компонент взаимодействия с Шиной
Используется в PortfolioFormServ01

c:\dev\FF\Test_BusRecTra_01
Пишет в Шину Topic ER# (ExecutionReports)
Слушает Шину Topic ER# (ExecutionReports)

пятница, 3 октября 2014 г.

Robot2Sql


Описание класса  Robot2SQL используемого для закачки необходимой монитору информации в базу данных. Автор Н.Андронов.

·         Методы вызываемые 1 раз при инициализации стратегии или инструмента которым стратегия торгует.

Robot2SQL.Initialize(string Name, long AlgoID, string Account, string Comment)Robot2SQL.InitializeInstrument(string Name, string Instrument)


·         Методы которые вызываются сколь угодно часто в соответсвующим местах робота. Спама транзакций в базу не произойдет, эти значения будут обновлятся не чаще чем один раз в Robot2SQL.TimeDelay = 10000; милисекунд. это значение можно менять.

Robot2SQL.UpdatePLtoday(string Name, double PLtoday)
Robot2SQL.UpdatePLtotal(string Name, double PLtotal)
Robot2SQL.UpdatePingTime(string Name)
Robot2SQL.UpdateDataTime(string Name)


·      Методы которые вызываются по факту произошедшего события.

Robot2SQL.UpdatePosition(string Name, string Instrument, int Position)
Robot2SQL.UpdateLastDeal(string Name, DateTime DTdeal, string Instrument, int Size)
Robot2SQL.UpdateRoundTrip(string Name, double RoundTrip)


Robot2SQL.UpdateTrade(string Name, long tradeID, string Ticker, DateTime DT, double Price, int Amount, double Volume)

Monitor. Структура БД

Структура БД. Monitor. Автор Н.Андронов
Deals:
SELECT
    `Deals`.`tradeID`,
    `Deals`.`StratName`,
    `Deals`.`Ticker`,
    `Deals`.`Time`,
    `Deals`.`Price`,
    `Deals`.`Amount`,
    `Deals`.`Volume`
FROM `Monitor`.`Deals`;

QuikPositions
SELECT
    `QuikPositions1`.`Account`,
    `QuikPositions1`.`Instrument`,
    `QuikPositions1`.`Amount`,
    `QuikPositions1`.`SecCode`,
    `QuikPositions1`.`Type`,
    `QuikPositions1`.`Margin`,
    `QuikPositions1`.`Value`
FROM `Monitor`.`QuikPositions1`;

Strategies
SELECT
     `strategies`.`StratName`,
    `strategies`.`AlgoID`,
    `strategies`.`User`,
    `strategies`.`Account`,
    `strategies`.`Client`,
    `strategies`.`CompName`,
    `strategies`.`Comment`,
    `strategies`.`StartTime`,
    `strategies`.`PingTime`,
    `strategies`.`DataTime`,
    `strategies`.`PLtoday`,
    `strategies`.`PLtotal`,
    `strategies`.`LastDealTime`,
    `strategies`.`LastDealInstrument`,
    `strategies`.`LastDealSize`,
    `strategies`.`RoundTrip`,
    `strategies`.`Instrument1`,
    `strategies`.`Position1`,
    `strategies`.`Instrument2`,
    `strategies`.`Position2`,
    `strategies`.`Instrument3`,
    `strategies`.`Position3`,
    `strategies`.`Instrument4`,
    `strategies`.`Position4`,
    `strategies`.`Instrument5`,
    `strategies`.`Position5`
FROM `Monitor`.`strategies`;


Строки подключения к MySql

 public static string SQLServerName = "192.168.1.19";
    public static string SQLDataBaseName = "Monitor";
    public static string SQLLogin = "root";
    public static string SQLPassword = "*********";
    public static string TableNameForStrategies = "strategies";

PositionTracker

PositionsTracker
Добавлено PositionTotals для Accounts, Algorithms

четверг, 2 октября 2014 г.

Проверка записи в БД

caWebClient_05 - Пишет ExecutionReports в БД

Monitor от Андронова Николая.

Компоненты:
MySql.Data - https://www.nuget.org/packages/MySql.Data/
ObjectListView - http://sourceforge.net/projects/objectlistview/
SparkleLibrary - http://objectlistview.sourceforge.net/cs/animations.html
TeeChart - http://www.steema.com/

Work()
UpdateDeals() - 60 секунд
CalculatePL() - 10, 30 секунд

Основной цикл:
/// Основной рабочий цикл класса включает в себя
/// 1. считывание данных из базы
/// 2. репликацию в коллекцию источник данных для формы
/// 3. проверку на то работает ли биржа и генерацию звука и е-мейл сообщений в случае проблем
Work:
{
///проверка того что биржа работает
CheckMarket()
///  Закачка данных из SQL
WorkStrats()
{
Добавляет Новые Стратегии в Процессе работы без Рестарта
}
/// Реплицирует данные из коллекции закачанной из SQL в ту которая выводится в форме.
/// Репликация отделена от закачки и коллекции разделены для того чтоб
/// потенциальные лаги при закачке из базы денных не вносили задержку в обработке формы.
Replicate()
}

// Метод подкачивает из базы данных сделки для всех стратегий.
UpdateDeals()

читает сделки из БД через 60 секунд

long tradeID = Reader.GetInt64("tradeID");
                    string StratName = Reader.GetString("StratName");
                    string Ticker = Reader.GetString("Ticker");
                    DateTime DT = Reader.GetDateTime("Time");
                    double Price = Reader.GetDouble("Price");
                    int Amount = Reader.GetInt32("Amount");
                    double Volume = Reader.GetDouble("Volume");
                 
                    LastUpdatedTime = DT;


Projects Track

Проект:
PositionTracker:

http://192.168.10.6/PositionsMvc_05/ 

Location:
Web\Portfolio\PortfoloMvc\PortfolioMvc_01\caWebClient_05\

Status:
Тестирование с 02.10.2014

среда, 1 октября 2014 г.

Bus Test

Проекты для проверки работы FF Bus Design
Службы:

Production\Test_BusRecTra
Push:
ExceutionReports
Subscriber:
ExceutionReports
Transactions
Positions
Portfolios

Test\PortfolioFormServ01 -
Subscriber:
ExecutionReports
Pusher:
ExecutionReports
Transactions
Positions
Portfolios


Ссылки на тестовые Проекты

192.168.10.6/PositionsMvc_02 - Позиции

192.168.10.6/PortfolioMvc_01 - Portfolio - Обработка сделок по BackOffice' s Reports

Проекты

PortfolioDb - C:\devTest\Web\Portfolio\PortfolioDB\PortfolioDB

PortfolioBo - C:\devTest\Web\Portfolio\PortfolioBo\PortfolioBo

PortfolioForm - пишет в PortfolioBo - Transactions, Trades, Portfolios, сформированные в PortfolioManager по результатам сформированных ExecutionReport из текстовых файлов.

192.168.10.6/PositionsMvc_02 - Позиции
192.168.1.57/PositionsMvc_01 - Позиции
192.168.10.6/PortfolioMvc_01 - Портфолио