Список задач
Atom
29.12.2010
Mikhail Sukhov


И так, предлагаю подытожить то, что нужно сделать и в каком порядке.

Задачи сгруппировал по группам (копировал из соседней ветки http://stocksharp.com/forum/1275/&p=2). Первая группа - самая приоритетная. Без нее делать задачи из следующей бессмысленно. Сами задачи внутри этой группы так же выстроены по очередности.

Базовая группа:

  1. Описать основные метаданные, как это сделано для Квика (DdeSecurityColumns, DdeTradeColumns и т.д.). Я это уже показал на примере класса PlazaFutureColumns, но там колонки не реальные. Предлагаю прямо разобрать по названию таблиц потоков, кто за какие будет отвечать (описывать в коде). Таблицы только основные: инструменты, заявки, сделки и т.д.
  2. Подписываться на произвольные потоки + отписываться.
  3. Получать стаканы. Производная от предыдущей задача. Выделил ее отдельно.
  4. Заявки (регистрация, снятие и перемещение). Я уже сделал через класс Message заполнение полей для отправки транзакций. Это дело надо доделать.
  5. Парсинг ответа от транзакций (внимание! всех транзакций, а не только, что в предыдущем пункте). Я не знаю, в каком виде они приходят, но могу сказать, какой результат должен быть. Это должно быть PlazaException с кодом ошибки (чтобы не мучится сравнение строчек в коде). И код не ввиде числа (что не так уж лучше строчки), а нормального перечисления (enum).


Первую задачу предлагаю сделать сообща. Остальные - разбираем по тем признакам, кто какие таблицы описывал (например, кто описал стакан, тот занимается задачей 3, кто инструменты - задачей 2, кто заявки - задачей 4).

Второстепенная группа:

  1. Дописать все остальные метаданные (позиции, счета, волатильность, маржа, клиринг, доп информация о деривативах, индексы).
  2. Фильтрация потоков. Так как Плаза не дает фильтр (камрад skuvv написал об этом), но в клиентском коде прописывать фильтры дело не благодарное, предлагаю это симулировать через RegisterXXX + UnRegisterXXX.
  3. Возможность задавать глубину стакана (как я понял, это влияет на то, к какому потоку необходимо цепляться).
  4. Поддержка агрегированного стакана и обычного. Для этого можно использовать GroupedQuote (внутри себя он будет содержать не агрегированные котировки).


Третьестепенная группа:

  1. С помощью метаданных научиться строить конфиги ini. Как вариант, через PlazaTable (куда собственно и будут добавляться колонки из пункта 1 пред группы). Сейчас ini файлы программно редактировать нельзя. И если роботу нужны спец колонки нужно менять формат ini схем. Я предлагаю до загрузки этих схем давать возможность менять из программно (парсить и менять ini файлы на лету). + как фича автоматически сканировать директорию при старте и создавать с правильным набором колонок сами PlazaTable. Возможно, здесь поможет TableSet.
  2. Время биржи.
  3. Все остальные транзакции (FutChangeClientMoney, OptChangeExpiration и т.д.).
  4. Составные инструменты.
  5. На форуме доступна x64 версия. Нужна прозрачная поддержка (без перекомпиляции) x86 и x64.
  6. Обертка над роутером (чтобы так же, не ручками править конфиги, а программно).
  7. Документация (как xml, так и обычная). Если нужно сделать как у S#, то необходимо использовать Sandcastle.


Особенности в работе.

Старайтесь писать так, как это принято в .NET и в частности C# коде.
Публичные методы классы и т.д. описывайте xml комментариями (лучше не сочинять, а копировать из документации Плазы, чтобы быть не с планеты Юпитер, а ближе к тем, кто будет это использовать и вторым глазом подглядывать в документацию).
Предлагаю использовать R# как средство для контроля качества кода.
Пишите юнит тесты (заведите отдельный проект в sln).

Теги:


Спасибо:


<< < 2 3 4 5 6  > >>
Mikhail Sukhov

Фотография
Дата: 16.01.2011
Ответить


skuvv
А есть ли смысл менять названия полей? Поидее по документам plaza будет легче сопостовлять поля если они будут с оригинальными совпадать...


Названия я предлагаю не менять, а дописывать до полного... В любом случае, будет много, что не как в стандартном АПИ. Но нужно одновременно сделать удобным и работу с документацией Plaza, и дальнейшей работой с роботом. Мне кажется, что документация по Плазе нужна только в первое время. В дальнейшем видеть в коде названия ordid sessid и т.д. не очень приятно. Но это только мое мнение.
Спасибо:

aspirant

Фотография
Дата: 16.01.2011
Ответить


Mikhail Sukhov

PlazaHeartBeatColumns

  1. Неправильный тип таблицы у ServerTime.
  2. Это единственная таблица с системными данными? Если нет, то название System не подходит.
  3. Конструкторы у классов с метаданными лучше делать internal.



исправил


Mikhail Sukhov

Насчет общего стиля именования. Предлагаю, писать полностью имена, тоесть:

OrdId -> OrderId
SessId -> SessionId
Dir -> Direction

Название ISIN можно писать как ISIN, Isin, но никак не IsIn. Аббревиатуры (в данном случае International Securities Identification Number) так не пишутся.


Изначально при именовании переменных я хотел сохранить близость к оригиналу, на случай если кому-то придется работать с документацией самой Плазы. Сейчас понимаю, что читаемость кода, пожалуй, важнее. Тем более что я сам себе противоречил, обозвав классы полными именами, например, PlazaOptionSessionContentsColumns, а не PlazaOptSessContentsColumns.

Насчет IsIn'а я ступил. Предлагаю Isin, потому что, во-первых, кроме Isin'а еще будет переменная IsinId, а во-вторых, это в духе .Net'а, см. System.Xml.


Mikhail Sukhov

Предлагаю не писать тип данных в комментариях к поля (i) (t) и т.д.. Добавляет лишнюю смысловую нагрузку, которая по сути вряд ли будет использоваться из вне.


Пожалуй, это действительно был перебор, сейчас исправлю
Спасибо:

aspirant

Фотография
Дата: 16.01.2011
Ответить


Все исправил. Не знаю только, как правильно именовать:

/// <summary>
/// Базовое ГО под одну покрытую позицию подписчика (руб)
/// </summary>
public readonly PlazaColumn bgo_c = new PlazaColumn(PlazaTableTypes.Option, "bgo_c", typeof(decimal), true);

/// <summary>
/// Базовое ГО под одну непокрытую позицию подписчика (руб)
/// </summary>
public readonly PlazaColumn bgo_nc = new PlazaColumn(PlazaTableTypes.Option, "bgo_nc", typeof(decimal), true);
Спасибо:

Mikhail Sukhov

Фотография
Дата: 17.01.2011
Ответить


aspirant
Все исправил. Не знаю только, как правильно именовать:

/// <summary>
/// Базовое ГО под одну покрытую позицию подписчика (руб)
/// </summary>
public readonly PlazaColumn bgo_c = new PlazaColumn(PlazaTableTypes.Option, "bgo_c", typeof(decimal), true);

/// <summary>
/// Базовое ГО под одну непокрытую позицию подписчика (руб)
/// </summary>
public readonly PlazaColumn bgo_nc = new PlazaColumn(PlazaTableTypes.Option, "bgo_nc", typeof(decimal), true);


Главное, не с маленькой буквы, и_убрать_подчеркивания. BgoC, BgoNc. Вполне сойдет.
Спасибо:

aspirant

Фотография
Дата: 17.01.2011
Ответить


Еще вопрос. Что делать с этими переменными?

/// <summary>
/// Дата окончания обращения инструмента
/// </summary>
public readonly PlazaColumn DPG = new PlazaColumn(PlazaTableTypes.Option, "d_pg", typeof(DateTime), true);

/// <summary>
/// Дата начала экспирации инструмента
/// </summary>
public readonly PlazaColumn D_Exec_Beg = new PlazaColumn(PlazaTableTypes.Option, "d_exec_beg", typeof(DateTime), true);

/// <summary>
/// Дата окончания экспирации инструмента
/// </summary>
public readonly PlazaColumn D_Exec_End = new PlazaColumn(PlazaTableTypes.Option, "d_exec_end", typeof(DateTime), true);

Решарпить плазовские названия? Или писать что-то типа:

d_pg: ExerciseDate
d_exec_beg: ExpirationStartDate
d_exec_end: ExpirationEndDate

Если мы за читаемость, я все-таки предлагаю второй вариант
Спасибо:

Mikhail Sukhov

Фотография
Дата: 17.01.2011
Ответить


aspirant

d_pg d_exec_beg d_exec_end


Как они сами в таком ужасе разбираются?

aspirant

Если мы за читаемость, я все-таки предлагаю второй вариант


Согласен.
Спасибо:

aspirant

Фотография
Дата: 17.01.2011
Ответить


Mikhail Sukhov
aspirant

d_pg d_exec_beg d_exec_end


Как они сами в таком ужасе разбираются?

aspirant

Если мы за читаемость, я все-таки предлагаю второй вариант


Согласен.


Готово
Спасибо:

lkor

Фотография
Дата: 17.01.2011
Ответить


Mikhail Sukhov


PlazaFutCommonColumns:

  1. Наследования от базового класса PlazaColumns отсутствует.
  2. Cо статических полей переделать на обычные (иначе наследование работать не будет), и записать свою таблицу в PlazaColumns как статическое поле.
  3. Придерживаться .NET стиля. Тоесть, не Sess_id, а SessId, не status а Status.
  4. Если таблица одинаковая для опцов и фьючей, то и называть класс нужно Derivative, а не Futute. Как плюс, задел на будущее, что РТС расширит поля в одной из таблиц, и тогда они перестанут быть эквивалентными. Тогда можно будет сделать Derivative абстрактным и сделать два специфичных наследника.
  5. Таблицы FORTS_FUTCOMMON_REPL и FORTS_OPTCOMMON_REPL не одинаковы. Это значит что уже сейчас надо выносить в базовый класс общие поля и производить наследование. Особенно, обратить внимание на передачу типа таблицы в базовый класс. Как пример, PlazaDerivativeColumns и PlazaOptionColumns.


PlazaFutTradeDealColumns, PlazaFutTradeMultilegDealColumns, PlazaFutTradeMultiLegOrdersLogColumns, PlazaFutTradeOrdersLogColumns:

  1. Тоже самое, что и PlazaFutCommonColumns, кроме наследования от PlazaColumns.
  2. Везде указывается тип таблицы Trade. Так ли это?



1. привёл все поля к .NET стилю
2. со статических переделал на обычные
3. убрал из комментариев тип поля в Плазе ( (с7), (i4) и т.д. )
4. для Plaza*OrdersLogColumns изменил тип таблицы на Order
5. переимевал PlazaFutTradeDealColumns в PlazaDerivativeTradeDealColumns, PlazaFutTradeOrdersLogColumns в PlazaDerivativeTradeOrdersLogColumns
6. добавил соответсвующие поля в PlazaColumns для таблиц из FORTS_FUTTRADE_REPL. для таблиц из FORTS_OPTTRADE_REPL поля добавил и закоментировал, ибо не мой это поток. не надо - удалим.

вроде всё.

Спасибо:

Mikhail Sukhov

Фотография
Дата: 17.01.2011
Ответить


Я так понимаю, задачу 1 не только выполнили, но и перевыполнили? Тогда корректируем задачи в зависимости от силы исполнения. Те, кто хочет остаться на метаданных, пусть дописывает оставшиеся. Только перед этим надо написать здесь, какие именно таблицы хочется дописать, чтобы не получилось дублирования работы.

Далее, задачи с 2 по 5. Задачи 2 и 3 мне кажется схожи. Поэтому, предлагаю стаканы отложить до тех пор, пока не будет закончена задача 2. Если так окажется, что желающих больше чем задач (вряд ли, но все же), то предлагаю спуститься к задачам из третьестепенной группы (второстепенные задачи слишком тесно связаны с первостепенными).

Схема стандартная - пишем кто-что хочет делать и делаем.
Спасибо:

aspirant

Фотография
Дата: 17.01.2011
Ответить


В принципе по опционам за исключением стаканов описал все. Хотел бы перейти к п. 2
Спасибо:
<< < 2 3 4 5 6  > >>

Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy