Не регистрируется заявка в RealTimeEmulationTrader

Не регистрируется заявка в RealTimeEmulationTrader
Atom
20.09.2012
risty


S# 4.1.4
Не регистрируется заявка в RealTimeEmulationTrader<QuikTrader>.
Что делал:
Я взял пример SampleSMA, поменял
Код
_trader = new QuikTrader(Path.Text);

на
Код
_trader = new RealTimeEmulationTrader<QuikTrader>(new QuikTrader(Path.Text));


Поменял инструмент на RIZ2.

Verifier говорит, что у Квика все хорошо.

Лог:

и далее количество заявок продолжает нарастать.

Я что-то делаю не так?
Если да, то что, куда смотреть ?



Спасибо:


<< < 2 3 4 5 6  >
pyhta4og

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


Дюшес
Использую AlfaTrader. На квике пробовал, но эмулятор тоже не работает. Сделать для него debug log?

Да, сделайте это.

И еще, попробуйте залогировать в своей стратегии стаканы и трейды чтобы убедиться что в поле MarketDepth.LastChangeTime и Trade.Time не нулевые значения.

По вашим логам выходит что приходит в эмулятор нулевое время для стаканов и сделок из AlfaTrader и поэтому сообщения тупо буферизируются и не исполняются.

Соответственно надо понять, ошибка в AlfaTrader или в эмуляторе.



Спасибо:

Дюшес

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


pyhta4og

И еще, попробуйте залогировать в своей стратегии стаканы и трейды чтобы убедиться что в поле MarketDepth.LastChangeTime и Trade.Time не нулевые значения.

В AlfaTrader поле Trade.Time изменяется согласно времени сделок, а MarketDepth.LastChangeTime имеет всегда нулевые значения.

В QuikTrader значения в этих полях не нулевые и изменяются. Отправляю 2 ордера: лимитный и маркет, на покупку RIZ2. После этого проверяю сделки и ордера в trader и то же самое в strategy. Получаю такой вывод:

trader.mytrade=09.11.2012 18:32:12 1 140610 1 от заявки 1830657/1 Покупка Цена=141000 Объем=1 Сост=Active Бал=1
trader.order=1830657 Limit 141000 Active
trader.order=1830658 Market 0 Active

strategy.mytade="" - сделки нет
strategy.order=1830657 Limit 141000 Done
strategy.order=1830658 Market 0 Active

Т.е. в стратегии лимитный ордер исполняется, а в трейдере он значится как активный.
В трейдере совершена сделка, а в стратегии ее нет.

Лог для квика:
Спасибо:

pyhta4og

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


Дюшес
pyhta4og

И еще, попробуйте залогировать в своей стратегии стаканы и трейды чтобы убедиться что в поле MarketDepth.LastChangeTime и Trade.Time не нулевые значения.

В AlfaTrader поле Trade.Time изменяется согласно времени сделок, а MarketDepth.LastChangeTime имеет всегда нулевые значения.

В QuikTrader значения в этих полях не нулевые и изменяются. Отправляю 2 ордера: лимитный и маркет, на покупку RIZ2. После этого проверяю сделки и ордера в trader и то же самое в strategy. Получаю такой вывод:

1.Я не совсем понимаю что у вас за логи. Нет временной метки и не понятно когда вам приходили эти события. Лучше бы использовать единый файл лога и для трейдера и для стратегий - получится смесь всех логов но там виден порядок хотя бы.
Цитата:

trader.mytrade=09.11.2012 18:32:12 1 140610 1 от заявки 1830657/1 Покупка Цена=141000 Объем=1 Сост=Active Бал=1
trader.order=1830657 Limit 141000 Active
trader.order=1830658 Market 0 Active

strategy.mytade="" - сделки нет
strategy.order=1830657 Limit 141000 Done
strategy.order=1830658 Market 0 Active

Т.е. в стратегии лимитный ордер исполняется, а в трейдере он значится как активный.
В трейдере совершена сделка, а в стратегии ее нет.

Лог для квика:

2. непонятно в каком трейдере (quik или эмулейшн) и как (и в какой момент) в трейдере вы смотрите активность ордера (т.е. в каком обработчике)

3. То что вам не пришла сделка - приведите код правила как вы на нее подписываетесь, возможно вы неправильно подписались.

4. По логам эмулятора.

Вот эти две следующие строки лога означают что MyTrade и изменение стейта ордера 183067 на Done c Balance=0 доставлены клиенту (стратегии). Это я сужу по пометке CL: которая означает что был Raise событий клиенту. Соответственно в этих логах я проблемы не вижу.

2012.11.10 00:32:15.296|Debug |RealTimeEmulationTrader`1|CL:MyTrades 18:32:12.578 09.11.2012 18:32:12 1 140610 1 от заявки 1830657/1 Покупка Цена=141000 Объем=1 Сост=Active Бал=1
@21:32:12.578[2

2012.11.10 00:32:15.296|Debug |RealTimeEmulationTrader`1|CL:Changed,T=18:32:12.578,1830657/1 Покупка Цена=141000 Объем=1 Сост=Done Бал=0
@21:32:12.578[1
Спасибо:

Дюшес

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


Цитата:

1.Я не совсем понимаю что у вас за логи. Нет временной метки и не понятно когда вам приходили эти события. Лучше бы использовать единый файл лога и для трейдера и для стратегий - получится смесь всех логов но там виден порядок хотя бы.

Я просто взял пример SampleRealTimeTesting, удалил лишнее и добавил кнопку. Сначала запускаю стратегию, она выставляет заявки, а потом жму на эту кнопку и получаю тот самый вывод, т.е. уже после исполнения ордера и совершения сделки.
Код такой:
Код

private void button1_Click(object sender, RoutedEventArgs e)
{
  _trader.MyTrades.ForEach(t => Debug.WriteLine("trader.mytrade={0}", t));
  _trader.Orders.ForEach(o => Debug.WriteLine("trader.order={0} {1} {2} {3} {4}", o.TransactionId, o.Type, o.Price, o.State, o.Status));

  _strategy.MyTrades.ForEach(t => Debug.WriteLine("strategy.mytrade={0}", t));
  _strategy.Orders.ForEach(o => Debug.WriteLine("strategy.order={0} {1} {2} {3} {4}", o.TransactionId, o.Type, o.Price, o.State, o.Status));
}


Цитата:

2. непонятно в каком трейдере (quik или эмулейшн) и как (и в какой момент) в трейдере вы смотрите активность ордера (т.е. в каком обработчике)

Состояние ордеров вижу в компоненте OrderGrid и через тот же вывод (по кнопке).

Цитата:

3. То что вам не пришла сделка - приведите код правила как вы на нее подписываетесь, возможно вы неправильно подписались.

Сделки смотрю через компонент TradeGrid, потом опять через тот же вывод (по кнопке) и еще ловлю через правило:
Код

this
   .WhenNewMyTrades()
   .Do(mytrades =>
   {
     mytrades.ForEach(mytrade => Debug.WriteLine(mytrade));
   })
   .Apply(this);


Цитата:

4. По логам эмулятора.

Вот эти две следующие строки лога означают что MyTrade и изменение стейта ордера 183067 на Done c Balance=0 доставлены клиенту (стратегии). Это я сужу по пометке CL: которая означает что был Raise событий клиенту. Соответственно в этих логах я проблемы не вижу.

Да, похоже сделка исполняется, но ее можно увидеть только в трейдере. В стратегии она нигде не появляется.
И странное состояние исполненного ордера в трейдере - Active, хотя в стратегии оно - Done.

Данный тестовый проект:
Спасибо:

Alexander

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


Просьба проверить на свежей версии с codeplex и с другим трейдером - не AlfaTrader.
Спасибо:

Дюшес

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


Попробовал на альфе и квике. Заявки выставляются, но не исполняются при наступлении условия лимитированные ордера. Лимитные заявки, отправленные по рынку, исполняются. Debug лог нужен?
Спасибо:

esper

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


Версия какая у вас? Если качали с кодеплекса, то какой номер ревизии?
Спасибо:

Дюшес

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


4.1.7.21978
Спасибо:

Геннадий Ванин (Gennady Vanin)

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


Дюшес

Данный тестовый проект:
SampleRealTimeTesting.rar (7,147kb)

Пробовал посмотреть невзначай ненароком
И совсем запутался, что же Вы и зачем делаете

У Вас там 3 проекта

В SampleRealTimeTesting.csproj
используется графический интерфейс (WPF .xaml)из SampleRealTimeTesting StockSharp, в котором код соединения SmartCOM аменён на соединение с КВИК

Код
private void ConnectClick(object sender, RoutedEventArgs e)
{
    if (!_isConnected)
    {
        if (_trader == null)
        {
 // создаем шлюз
             _trader = new RealTimeEmulationTrader<QuikTrader>(new QuikTrader());

             Portfolios.Trader = _trader;
             // подписываемся на событие успешного соединения
             _trader.Connected += () =>
             {
           // возводим флаг, что соединение установлено
                 _isConnected = true;

           // разблокируем кнопку Экспорт
                  this.GuiAsync(() => ChangeConnectStatus(true));


но соединение к КВИК нигде ркально не производится (и в принципе не может произвестись ни из GUI? ни из кода), хотя все плюшки для отвода глаз присутствуют

Для этого нужно было бы в коде инициализировать Trader с определением и указанием пути к файлу info.exe, откуда запускается КВИК
  • Trader = new QuikTrader(filePathQu2QUIK);

(что нигде не сделано), имея запущенный КВИК с установленным соединением
(поскольку в коде он тоже нигде не запускается)

Что-то типа

Код
var quikPath = QuikTerminal.GetDefaultPath();

if (quikPath.IsEmpty())
{
    MessageBox.Show("Не найден ни один запущенный Quik");
    return;
}

if (!_isConnected)
{
    if (Path.Text.IsEmpty())
    MessageBox.Show(this, "Путь к Quik не выбран");
}
if (!_isConnected)
{
    if (Trader == null)
    {
         Trader = new QuikTrader(Path.Text);//vgv cuidado

         _isConnected = true; 

В проектах AlfaDirect.csproj и AlfaTest.csproj
я вообще не нашёл ни одного результата поиском по "RealTime" и "Emulation"

Update:
К тому же, в обоих проектах (AlfaDirect.csproj и AlfaTest.csproj) используется GUI и код TestForm:System.Windows.Forms.Form, при том, что туда вставляется (многопоточный и асинхронный) код WPF и StockSharp на WPF
А зачем такие жестокие эксперименты?


Почему бы Вам не взять готовые куски из Samples StockSharp, предвапительно разобрав их работу или хотя бы сверившись с описаниями документации?
Спасибо:

Дюшес

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


А чего просто запустить руками и ввести пароль религия не позволяет? :)
Спасибо:
<< < 2 3 4 5 6  >

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

loading
clippy