Публичный бета тестинг
Atom Ответить
17.05.2011


Выложил PlazaTrader на http://box.net/plaza Исходники самого PlazaTrader, исходники примера, Plaza dll и Plaza + S# dll (последнее не нужно, если уже используется S#).

В следствие бета тестирования буду обновлять только библиотеку Ecng.Trading.Plaza.dll. В релиз войдет все. Налетаем.Smile

upd Теперь PlazaTrader часть дистрибутива S#, поэтому просто качайте последнюю версию http://box.net/stocksharp/ . Сборка называется StockSharp.Plaza.dll

Теги:


Спасибо:




66 Ответов
1 2 3  >
Stanislav121

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


Скажите пожалуйста, роботов написанных под Plaza 2 нужно будет сертифицировать на РТС?
Спасибо:

esper

Фотография
Программист
Дата: 24.05.2011
Ответить


Добрый день, несмотря на то, что класс PlazaErrors еще нигде не используется, по нему есть несколько предложений:
1. наверное объявление _plazaErrorGroup должно быть последним, static-члены вроде инициализируются в порядке объявления
2. заменить метод GetErrorText на такой
Код

public static string GetErrorText(int errorCode)
{
int key = (errorCode & 0x1FFFF) >> 4;
int index = (errorCode & 0xFFF);

if (_plazaErrorGroup.ContainsKey(key))
{
var group = _plazaErrorGroup[key];

if (index <= group.Count)
return group[index];
else
return "error type not found: " + errorCode;
}
else
return "error type not found: " + errorCode;
}


и сдвинуть все ключи в _plazaErrorGroup на 4, так вроде понятнее и корочеSmile
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 24.05.2011
Ответить


esper Перейти
Добрый день, несмотря на то, что класс PlazaErrors еще нигде не используется, по нему есть несколько предложений:


А есть понимание того, что там вообще происходит в этом классе?Smile
Автор топика
Спасибо:

esper

Фотография
Программист
Дата: 24.05.2011
Ответить


Думаю, что есть. В COMException есть ErrorCode, вот по нему можно получить дополнительные данные по ошибке, а не просто "Couldn't connect to MQ"
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 24.05.2011
Ответить


esper Перейти
Думаю, что есть. В COMException есть ErrorCode, вот по нему можно получить дополнительные данные по ошибке, а не просто "Couldn't connect to MQ"


Ок, тогда может я дам доступ и поправите самостоятельно?
Автор топика
Спасибо:

esper

Фотография
Программист
Дата: 24.05.2011
Ответить


Да, могу поправить.
Спасибо:

esper

Фотография
Программист
Дата: 25.05.2011
Ответить


1. Внес изменения в PlazaErrors. Далее предлагаю в PlazaException вместо кода ошибки выводить ее краткое описание.

2. PlazaException сейчас используется только в транзакциях, может в функциях подключения, отключения и т.д. стоит заменить InvalidOperationException на PlazaException?

3. Сейчас для подключения к роутеру используется TCP? Если подключаемся на localhost, может стоит подключаться через LRPCQ?
Спасибо: aspirant

aspirant

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


esper Перейти
PlazaException сейчас используется только в транзакциях, может в функциях подключения, отключения и т.д. стоит заменить InvalidOperationException на PlazaException?


Я как-то тоже поднимал этот вопрос. Предлагаю решить голосованием. Я за PlazaException.

esper Перейти
Сейчас для подключения к роутеру используется TCP? Если подключаемся на localhost, может стоит подключаться через LRPCQ?


Очень интересно, у меня была старая версия P2ClientGate.doc, где про LRPCQ ничего не было. Покопавшись в форуме РТС, нашел вот это.


Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 25.05.2011
Ответить


esper Перейти
1. Внес изменения в PlazaErrors.


Изначально PlazaErrors был создан с ошибкой. Если посмотреть документацию (в самом конце), то там есть некие числовые константы (некоторые равны друг другу). Так что, это вовсе не строчки. Строчки - это ошибка автора этого класса.
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 25.05.2011
Ответить


aspirant Перейти

Я как-то тоже поднимал этот вопрос. Предлагаю решить голосованием. Я за PlazaException.


Я тоже за, если не лепить везде это исключение. Где его предлагаете применить?
Автор топика
Спасибо:

esper

Фотография
Программист
Дата: 25.05.2011
Ответить


Mikhail Sukhov Перейти
Изначально PlazaErrors был создан с ошибкой. Если посмотреть документацию (в самом конце), то там есть некие числовые константы (некоторые равны друг другу). Так что, это вовсе не строчки. Строчки - это ошибка автора этого класса.


Не совсем понял вышесказанное, в документации указано как по полученному коду ошибки можно получить символьный код ошибки, который для нас более понятен, что понимается под "строчкой"?
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 25.05.2011
Ответить


esper Перейти
Mikhail Sukhov Перейти
Изначально PlazaErrors был создан с ошибкой. Если посмотреть документацию (в самом конце), то там есть некие числовые константы (некоторые равны друг другу). Так что, это вовсе не строчки. Строчки - это ошибка автора этого класса.


Не совсем понял вышесказанное, в документации указано как по полученному коду ошибки можно получить символьный код ошибки, который для нас более понятен, что понимается под "строчкой"?


Например, выращежение P2ERR_MSG_FIELD_NOT_FOUND = P2ERR_MSG_BEGIN говорит о том, что идентификатор P2ERR_MSG_FIELD_NOT_FOUND равен началу блока P2ERR_MSG_BEGIN, который в свою очередь равен 0x8000.

В классе же PlazaErrors сейчас это представлено в виде строчки. Это так и должно быть? Я не 100% уверен, но думаю тут глюк в дизайне.
Автор топика
Спасибо:

esper

Фотография
Программист
Дата: 25.05.2011
Ответить


Цитата:
Например, выращежение P2ERR_MSG_FIELD_NOT_FOUND = P2ERR_MSG_BEGIN говорит о том, что идентификатор P2ERR_MSG_FIELD_NOT_FOUND равен началу блока P2ERR_MSG_BEGIN, который в свою очередь равен 0x8000.

В классе же PlazaErrors сейчас это представлено в виде строчки. Это так и должно быть? Я не 100% уверен, но думаю тут глюк в дизайне.


Вопрос в том, какие преимущества будут при использовании enum-а, если основная задача класса представить код 0x8000 в более понятном формате
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 25.05.2011
Ответить


esper Перейти
Цитата:
Например, выращежение P2ERR_MSG_FIELD_NOT_FOUND = P2ERR_MSG_BEGIN говорит о том, что идентификатор P2ERR_MSG_FIELD_NOT_FOUND равен началу блока P2ERR_MSG_BEGIN, который в свою очередь равен 0x8000.

В классе же PlazaErrors сейчас это представлено в виде строчки. Это так и должно быть? Я не 100% уверен, но думаю тут глюк в дизайне.


Вопрос в том, какие преимущества будут при использовании enum-а, если основная задача класса представить код 0x8000 в более понятном формате


Никаких, наверное. Я пока для себя пытаюсь прояснить. У нас порядковый номер в листах то правильный, если искать по индексу? Скажем, если по коду ошибки можно будет получить строку P2ERR_ISAMSM_OPERATION_NOT_ALLOWED то это уже нормально.
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 25.05.2011
Ответить


Mikhail Sukhov Перейти
esper Перейти
Цитата:
Например, выращежение P2ERR_MSG_FIELD_NOT_FOUND = P2ERR_MSG_BEGIN говорит о том, что идентификатор P2ERR_MSG_FIELD_NOT_FOUND равен началу блока P2ERR_MSG_BEGIN, который в свою очередь равен 0x8000.

В классе же PlazaErrors сейчас это представлено в виде строчки. Это так и должно быть? Я не 100% уверен, но думаю тут глюк в дизайне.


Вопрос в том, какие преимущества будут при использовании enum-а, если основная задача класса представить код 0x8000 в более понятном формате


Никаких, наверное. Я пока для себя пытаюсь прояснить. У нас порядковый номер в листах то правильный, если искать по индексу? Скажем, если по коду ошибки можно будет получить строку P2ERR_ISAMSM_OPERATION_NOT_ALLOWED то это уже нормально.


+ кто-нибудь знает как получить нормальное описание ошибки при отправке асинхронной транзакции? Сейчас текст получается только в синхронном режиме. А асинхронный режим только и пишет, что Invalid cast exception внутрях COM.
Автор топика
Спасибо:

aspirant

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


Mikhail Sukhov Перейти
+ кто-нибудь знает как получить нормальное описание ошибки при отправке асинхронной транзакции? Сейчас текст получается только в синхронном режиме. А асинхронный режим только и пишет, что Invalid cast exception внутрях COM.


Сам на это натыкался, но руки не дошли. Сейчас поискал на форуме РТС. Похоже, нужно чтобы в нитке, откуда отправляется асинхронное сообщение, должен быть бесконечный цикл с ProcessMessage. Вот здесь про это написано + это есть в плазовском примере AsyncSend. У нас ведь сейчас сообщение отправляется из GUI-thread?
Спасибо:

aspirant

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


А вот, кстати, почему нам самим нужно вручную "крутить" ProcessMessage.
Спасибо:

esper

Фотография
Программист
Дата: 26.05.2011
Ответить


Mikhail Sukhov Перейти
У нас порядковый номер в листах то правильный, если искать по индексу? Скажем, если по коду ошибки можно будет получить строку P2ERR_ISAMSM_OPERATION_NOT_ALLOWED то это уже нормально.

Выборочно проверял на нескольких ошибках, получаемые строки совпадали с логом.

Mikhail Sukhov Перейти
+ кто-нибудь знает как получить нормальное описание ошибки при отправке асинхронной транзакции? Сейчас текст получается только в синхронном режиме. А асинхронный режим только и пишет, что Invalid cast exception внутрях COM.

Думаю, стоит обрабатывать код ошибки, который приходит в callback. В документации было указано, что если код ошибки не 0, то заявка не выставлена/исполнена и надо смотреть описание ошибки с таким кодом. Где именно возникает Invalid cast exception, а то я с таким не сталкивался?

aspirant
Похоже, нужно чтобы в нитке, откуда отправляется асинхронное сообщение, должен быть бесконечный цикл с ProcessMessage.

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

По PlazaException
Mikhail Sukhov
Я тоже за, если не лепить везде это исключение. Где его предлагаете применить?

использовать его предлагаю там, где от плазы могут приходить COMException, чтобы можно было представить код пришедшей ошибки в более удобном виде, т.е. это в местах вызова CP2Connection.Connect, CP2Connection.Disconnect, CP2Connection.ProcessMessage, CP2DataStream.Open, CP2DataStream.Close и т.д.
Спасибо:

aspirant

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


esper Перейти
Сейчас для подключения к роутеру используется TCP? Если подключаемся на localhost, может стоит подключаться через LRPCQ?


Сделал
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 07.06.2011
Ответить


aspirant Перейти
esper Перейти
Сейчас для подключения к роутеру используется TCP? Если подключаемся на localhost, может стоит подключаться через LRPCQ?


Сделал


Получил боевой логин. Если качать с нулевой ревизии как сейчас, то старт примера занимает около 10 минут. Поэтому, предлагаю сделать следующие:

1. Для этой версии все таки ввернуть поддержку базового клиента (в виде опции). Надеюсь, это не сложно.
2. Для следующей сделать собственную версию базы (чтобы хранить родные для S# торговые объекты, а не плазовские).
Автор топика
Спасибо:

esper

Фотография
Программист
Дата: 07.06.2011
Ответить


Mikhail Sukhov Перейти
Получил боевой логин. Если качать с нулевой ревизии как сейчас, то старт примера занимает около 10 минут. Поэтому, предлагаю сделать следующие:

1. Для этой версии все таки ввернуть поддержку базового клиента (в виде опции). Надеюсь, это не сложно.
2. Для следующей сделать собственную версию базы (чтобы хранить родные для S# торговые объекты, а не плазовские).


А если просто ревизии по таблицам сохранять между сессиями? Тогда при переподключении будем скачивать только новые данные.
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 07.06.2011
Ответить


esper Перейти
А если просто ревизии по таблицам сохранять между сессиями? Тогда при переподключении будем скачивать только новые данные.


Аспирант говорит, что так мы поимеем неправильный стакан. Плюс пропадут данные за текущую сессию.
Автор топика
Спасибо:

esper

Фотография
Программист
Дата: 07.06.2011
Ответить


Mikhail Sukhov Перейти
Аспирант говорит, что так мы поимеем неправильный стакан. Плюс пропадут данные за текущую сессию.

Ревижины можно сохранять не для всех таблиц. Для агрегированых заявок можно не сохранять, записей там не очень много, т.е. данные там меняются часто, но число записей не велико, или не так?
Спасибо:

aspirant

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


Mikhail Sukhov Перейти
Для этой версии все таки ввернуть поддержку базового клиента (в виде опции). Надеюсь, это не сложно.

Начал заниматься.


Mikhail Sukhov Перейти
Получил боевой логин.

Интереса ради, что для этого нужно сделать и каких это стоит денег?
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 08.06.2011
Ответить


aspirant Перейти
Mikhail Sukhov Перейти
Получил боевой логин.

Интереса ради, что для этого нужно сделать и каких это стоит денег?


Ты уже ответил, ради интереса. 2 штуки в месяц у Цериха.
Автор топика
Спасибо:
1 2 3  >

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

loading
clippy