Не удается получить в программе SampleConsole.exe портфель

Не удается получить в программе SampleConsole.exe портфель
Atom
8/6/2010
hazarin


Не удается получить в программе SampleConsole.exe портфель. При подключении к запущенному Квику проходит успешно подключение к программе, запрашивается номер счета. Затем рапортует о том что найден инструмент LKOH... И заканчивается на ожидании поиска Портфеля. Было бы интересно узнать, что программа имеет ввиду под портфелем, поскольку настройки в Квике загружены из файла info_micex.wnd . Вроде все должно быть что нужно.


Tags:


Thanks:


< 1 2 3  >
Oldman

Avatar
Date: 9/12/2011
Reply


Добрый день всем, подскажите куда смотреть. QUIK 5.23.0.119 (под УБ) Stock# 3.2.10 Опыта в программировании 0 Разбираю SampleConsole пример, не запускается торговый алгоритм из примера. В коде заменил только Лукойл, на местный инструмент ALMK

  • проверял настройки Verifier'ом - без ошибок (так как готовые .wnd файлы не подходят для УБ)

Результат работы консольного приложения:

Экспорт по dde Инструмент, Мои сделки, Позиции по бумагам, Стакана - запускается.

Пробовал заменить строчку, как указывали выше на

trader.Terminal.StartDde(trader.SecuritiesTable, trader.MyTradesTable, trader.EquityPortfoliosTable); - не помогло. Поставил запуск dde обеих таблиц trader.StartExport(trader.SecuritiesTable, trader.MyTradesTable, trader.EquityPortfoliosTable, trader.EquityPositionsTable); В терминале пробовал покупать-продавать инструмент, чтобы в консоли сделка прошла - не появились сделки.

Я так подозреваю, что в событие trader.NewPortfolios += portfolios => у меня не полностью отработало (хотя ошибок компилятор не выдавал), а именно не выдало сообщение "Портфель {0} появился." Также не отработало trader.NewMyTrades += myTrades => поскольку не появляются сделки.

Посоветуйте пожалуйста, в какую сторону курить мануал, дабы довести пример до рабочего состояния? :)

Thanks:

Church

Avatar
Date: 9/12/2011
Reply


Подозреваю, что вы что-то не то пишете в качестве портфеля (у меня на демо он = логину). Попробуйте вывести список trader.Portfolios.

Thanks:

Alexander

Avatar
Date: 9/12/2011
Reply


ProcessDataError что-нибудь выводит?

Thanks:

Oldman

Avatar
Date: 9/13/2011
Reply


Church: Подозреваю, что вы что-то не то пишете в качестве портфеля (у меня на демо он = логину). Попробуйте вывести список trader.Portfolios.

У меня логин = Код клиента А номер счета, судя по мануалам = Счет депо (пробую робота для спот площадки)

Alexander: ProcessDataError что-нибудь выводит?

Пробую разобраться как это событие подключить в пример.

Вариант #1, в начало кода добавил

// создаем шлюз к Quik-у using (var trader = new QuikTrader(quikPath)) { // необходимо раскомментировать, если идет работа с РТС Стандарт //trader.FormatTransaction += builder => builder.RemoveInstruction(TransactionBuilder.ExecutionCondition);

//события ошибок trader.ProcessDataError += error => Console.WriteLine(error); { Console.WriteLine("Errors:"); }; Сообщение Errors: выводится, но ошибок нету.

Вариант #2 из примера SampleFewQuiks

//события ошибок trader.ProcessDataError += OnError;

в конец кода: private static void OnError(Exception error) { Console.WriteLine(error); } Ошибок при компилировании нету, но и результата нет.

Thanks:

Alexander

Avatar
Date: 9/13/2011
Reply


Покажите таблицу портфелей для ммвб. И что выводит Trader.Portfolios?

Thanks:

Oldman

Avatar
Date: 9/13/2011
Reply


Alexander: Покажите таблицу портфелей для ммвб. И что выводит Trader.Portfolios? я на УБ работаю, а не ММВБ (но с точки зрения Квика наверное разницы нет, так как это клон ММВБ)

Таблицы пустые, но опций чтобы создать портфель не нашел, при этом торговать можно нормально.

Событие trader.NewPortfolios += portfolios => ничего не выводит (нету сообщения о том, что Портфель {0} появился.)

{ if (_portfolio == null) { // находим ALMK и присваиваем ее переменной ALMK _portfolio = portfolios.FirstOrDefault(p => p.Name == account); Console.WriteLine("Test 0");

    if (_portfolio != null)
    {
     Console.WriteLine("Портфель {0} появился.", account);

      // если инструмент и стакан уже появились,
      // то извещаем об этом основной поток для выставления заявки
        if (_ALMK != null && _depth != null)
          waitHandle.Set();
          Console.WriteLine("Test 1");
    }
  }
 Console.WriteLine("Test 2");

}; В результате вывод: Test 0 Test 2

Thanks:

Alexander

Avatar
Date: 9/13/2011
Reply


Вы меня не поняли. Выведите portfolios.

раз Test0 выводит - значит какие-то портфели приходят. вы просто не тот портфель ищите. посмотрите какие приходят - распечатаейте все portfolios - Name в частности. И посмотрите на account - он небось ни с одним Name не совпадает.

И покажите скриншот таблицы с порфтелями в квике, а не настройки для портфелей qpile :)

Thanks: Oldman

Oldman

Avatar
Date: 9/14/2011
Reply


Портфель:

С выводом portfolios заминка, точнее заминка с основами программирования :) Нашел ваш пример (кусок кода), в другой теме для такого вывода.


    trader.NewPortfolios += portfolios =>
                        
                        {
                            var portfolioString = "";
                             foreach (var portfolio in portfolios)
                                 {
                                  portfolioString += portfolio.Name + " : " + portfolio.Exchange + " : " + portfolio.BeginAmount + " : " +
                                  portfolio.CurrentAmount + " : " + portfolio.Commission + " : " + portfolio.Leverage + 
                                  Environment.NewLine;
                                  portfolioString +=
                                  };
                              
                            if (_portfolio == null)
                            {
                                // находим ALMK и присваиваем ее переменной ALMK
                                _portfolio = portfolios.FirstOrDefault(p => p.Name == account);

                                if (_portfolio != null)
                                {
                                    Console.WriteLine("Портфель {0} появился.", account);

                                    // если инструмент и стакан уже появились,
                                    // то извещаем об этом основной поток для выставления заявки
                                    if (_ALMK != null && _depth != null)
                                        waitHandle.Set();
                                }
                            }
                                                       
                        };

Вставленный код не компилируется - ошибка в 13ой строке Invalid expression term '}' Изучаю гугл, на предмет того чем структура не подошла.

Thanks:

Alexander

Avatar
Date: 9/14/2011
Reply


Oldman: Портфель:

С выводом portfolios заминка, точнее заминка с основами программирования :) Нашел ваш пример (кусок кода), в другой теме для такого вывода.

trader.NewPortfolios += portfolios =>
                    
                    {
                        var portfolioString = "";
                         foreach (var portfolio in portfolios)
                             {
                              portfolioString += portfolio.Name + " : " + portfolio.Exchange + " : " + portfolio.BeginAmount + " : " +
                              portfolio.CurrentAmount + " : " + portfolio.Commission + " : " + portfolio.Leverage + 
                              Environment.NewLine;
                              portfolioString +=
                              };
                          
                        if (_portfolio == null)
                        {
                            // находим ALMK и присваиваем ее переменной ALMK
                            _portfolio = portfolios.FirstOrDefault(p => p.Name == account);

                            if (_portfolio != null)
                            {
                                Console.WriteLine("Портфель {0} появился.", account);

                                // если инструмент и стакан уже появились,
                                // то извещаем об этом основной поток для выставления заявки
                                if (_ALMK != null && _depth != null)
                                    waitHandle.Set();
                            }
                        }
                                                   
                    };
> 
> 
> Вставленный код не компилируется - ошибка в 13ой строке Invalid expression term '}'
> Изучаю гугл, на предмет того чем структура {} не подошла.



то что замазано - одинаково? а то непонятно.
да и смысл замазывать? :))

на 13 строчке того кода что вы вставили никакого "}" нет.


В вашем коде:
_portfolio = portfolios.FirstOrDefault(p => p.Name == account);


ещё раз задам вопрос, т.к. он остался без ответа. чему здесь равен account?


ЗюЫю В вашем коде "portfolioString +=" - лишнее. Как раз из-за этого ошибка. После цикла сделайте вывод portfolioString в тот же самый MessageBox и скопируйте его содержание.
Thanks: Oldman

Oldman

Avatar
Date: 9/14/2011
Reply


Да, на скриншотах значение Код Клиента одинаковое. (привычка затирать персонифицированные данные уже не помню откуда началась у меня) :)

Alexander: В вашем коде: _portfolio = portfolios.FirstOrDefault(p => p.Name == account); ещё раз задам вопрос, т.к. он остался без ответа. чему здесь равен account?

В начале кода я прописал: var account = "test0";

Alexander: ЗюЫю В вашем коде "portfolioString +=" - лишнее. Как раз из-за этого ошибка. После цикла сделайте вывод portfolioString в тот же самый MessageBox и скопируйте его содержание.

О :) Огромное спасибо, заработало :)

invst1408 : : 0 RUB : 0 RUB : 0 : 0

Получается что, портфель определился верно, но не задетектилась Биржа (portfolio.Exchange)?

Thanks:
< 1 2 3  >

Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy