"StockSharp быстрый старт". Quik. Не отрабатывает Connect...
Atom Ответить
20.10.2015


Добрый день.

Пытаюсь воспроизвести пример из видео "StockSharp. Быстрый старт! Торговый робот на Quik!" (https://stocksharp.ru/products/api/).
Не могу пройти простой квест: _trader.Connect() Crying

1. Скачал S#.API версии 4.3.13 (https://github.com/StockSharp/StockSharp/releases/download/4.3.13/StockSharp_4.3.13.zip)
(проверил, версия StockSharp.Quik.dll действительно 4.3.13)

(Аналогично пробовал 4.2.75 - результат тот же, что и далее по тексту)

2. В Quik загружаю info.wnd
(НО! Нашел в другой папке: ...\Samples\Quik\DDE\info.wnd, а не как было в видео: ...\Samples\Quik\info.wnd)
(
также пробовал другие wnd: ...\Samples\Quik\DDE\info_extended.wnd, ...\Samples\Quik\DDE\info_options.wnd, ...\Samples\Quik\info_lua.wnd; после каждого выбора в торговые счета "добавлял все".
)

3. Создаю проект (как в примере).
Добавляю DLL-ки, как в примере:

  • \References\Ecng.Common.dll
  • \References\Ecng.ComponentModel.dll
  • \References\Ecng.Xaml.dll
  • \References\StockSharp.Algo.dll
  • \References\StockSharp.BusinessEntities.dll
  • \References\StockSharp.Quik.dll
    + (т.к. при компиляции требовал добавить)
  • \References\StockSharp.Logging.dll
  • \References\StockSharp.Messages.dll


4. Собираю простой тест (как в примере + кнопка Тест - для вывода ConnectionState):

Цитата:
private void btnConnect_Click(object sender, RoutedEventArgs e)
{
_trader = new QuikTrader(QuikTerminal.GetDefaultPath()); // "D:\\Program Files (x86)\\Info\\info.exe"
_trader.Connect();
}

private void btnTest_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show(_trader.ConnectionState.ToString());
}


5. Запускаю.
Если Quik запущен, то молча проходит метод btnConnect_Click. Quik никак не реагирует.
При тесте получаем "Failed", вне зависимости от того, запущен сейчас Quik или нет...

6. Посмотрел настройки DDE вывода у таблиц. Там имя DDE сервера стоит wrapper. Попробовал у некоторых ("Инструменты" и "портфель по деривативам") изменить на STOCKSHARP (т.к. у объекта _trader.DdeServer = "STOCKSHARP"). Ничего не дает.
Если еще в QUIK нажать "Начать вывод по DDE", то QUIK выдает ошибку:
Цитата:
Не удалось установить DDE соединение с сервером 'STOCKSHARP'. Либо не запущен 'портфель по деривативам', либо в него не загружен лист ''. Таблица 'Портфель по деривативам'


Версии:
Microsoft Visual Studio Professional 2015
Version 14.0.23107.0 D14REL
Microsoft .NET Framework
Version 4.6.00081

С уважением, Владимир.

Теги:


Спасибо:




12 Ответов
rtDen

Фотография
Курсы Программист
Дата: 20.10.2015
Ответить


Пользуйтесь Lua. DDE давно уже не поддерживается S#.
Спасибо: unpresent

pft_man

Фотография
Курсы
Дата: 20.10.2015
Ответить


Есть способ добавить дополнительные колонки таблиц в Lua? Особенно гарантийное обеспечение интересует.
Спасибо:

unpresent

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


Спасибо!

Попрбовал через Lua.

1. В Quik запустил скрипт (в Таблицы/Lua/Доступные скрипты):
\References\StockSharp.Quik.lua

Можно с (логином + паролем), а можно и без
(
-- ServerLogin="quik"
-- ServerPassword="quik"
)

вот такой метод Connect-а:

Цитата:
private void btnConnect_Click(object sender, RoutedEventArgs e)
{
if (_trader == null)
_trader = new QuikTrader();

Byte[] local_ip = new Byte[4];
local_ip[0] = 127; local_ip[1] = 0; local_ip[2] = 0; local_ip[3] = 0;
EndPoint ep = new IPEndPoint(new IPAddress(local_ip), 5001);
_trader.LuaFixServerAddress = ep;
_trader.LuaLogin = "quik";
SecureString ss = new SecureString();
Array.ForEach("quik".ToArray(), ss.AppendChar);
ss.MakeReadOnly();
_trader.LuaPassword = ss;

_trader.IsDde = true; // ВАЖНО!

_trader.Connect();
}


Взлетело после включения _trader.IsDde = true;
Smile
Автор топика
Спасибо:

knoppix

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


Может заодно кто подскажет как можно получить через QuikTrader (lua соединение) из QuikJunior тиковые данные?
Конкретно интересует цена с графика свечей.
По доку понял, что надо вызывать сначала RegisterTrades, но NewTrades событие не вызывается, хотя в самом квике цена на графике успешно меняется.
Или же можно как-то например через стакан почуть текущую цену? Стаканные данные умею получать.
Спасибо:

rtDen

Фотография
Курсы Программист
Дата: 21.10.2015
Ответить


unpresent, что-то вы путаете. IsDDE - как раз включает dde, а не луа. И при использовании луа должно быть false.
Спасибо: unpresent

rtDen

Фотография
Курсы Программист
Дата: 21.10.2015
Ответить


knoppix, для этого сделки должны транслироваться в таблицу всех сделок. С этим на демо-счете могут быть проблемы, нужно смотреть транслируются в нем тики или нет. С графика тики браться не будут.
Спасибо: knoppix

orphan

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


rtDen Перейти
knoppix, для этого сделки должны транслироваться в таблицу всех сделок. С этим на демо-счете могут быть проблемы, нужно смотреть транслируются в нем тики или нет. С графика тики браться не будут.


Если сделки не транслируются, можно написать в поддержку, чтобы включили.
Например демо у quik.ru.
Спасибо: knoppix

unpresent

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


rtDen Перейти
unpresent, что-то вы путаете. IsDDE - как раз включает dde, а не луа. И при использовании луа должно быть false.


Да,да,да...
Не могу спорить с тем, что (IsDde = true) -> (используется DDE); (IsDde = false) -> (используется Lua)
Просто спешил поделиться радостью, что хоть как-то но получилось присоединиться к Quik-у...

Ну а раз зашла речь о разных типах подключения, тогда давайте буду спрашивать, почему DDE проходит, а Lua - нет.

Итак.
Обращая внимания на пункт 5 статьи: https://stocksharp.ru/do...60-bfc4-8d9b5b20a1cf.htm
Цитата:

Выбор режима подключения к Quik (Lua или Dde) выполняется с помощью установки свойства QuikTrader.IsDde.
При Lua подключении нет необходимости указывать путь к терминалу, но необходимо указать настройки подключения к серверу (LuaFixServerAddress, LuaLogin и LuaPassword)

Свойство QuikTrader. IsDde по умолчанию установлено в false, т.о. по умолчанию используется Lua подключение. Если необходимо использовать подключение через Dde, необходимо вручную выставить это свойство.


Вот здесь у меня действительно получается создать DDE-подключение, даже получить список инструментов и портфелей:
Код

        private StockSharp.Quik.QuikTrader _trader;

        private void DoOnNewSecurities()
        {
            cmbSecurities.ItemsSource = _trader.Securities;
        }
        private void DoOnNewPortfolios()
        {
            cmbPortfolios.ItemsSource = _trader.Portfolios;
        }

        private void btnConnect_Click(object sender, RoutedEventArgs e)
        {
            if (_trader == null)
              _trader = new QuikTrader(QuikTerminal.GetDefaultPath());

            _trader.IsDde = true;

            // Странно! Но без следующей строки экспорт инструментов работает, а экспорт портфелей - нет
            _trader.Connected += () => _trader.StartExport("Инструменты"); 
            _trader.Connect();
        }

        private void btnTest_Click(object sender, RoutedEventArgs e)
        {
            MessageBox.Show(_trader.ConnectionState.ToString());
        }



Если же я пробую Lua-подключение:
Код

        private void DoOnError<Exception>(Exception e)
        {
            MessageBox.Show(e.ToString());
        }

        private void btnConnect_Click(object sender, RoutedEventArgs e)
        {
            if (_trader == null)
              _trader = new QuikTrader();

            Byte[] local_ip = new Byte[4]; local_ip[0] = 127; local_ip[1] = 0; local_ip[2] = 0; local_ip[3] = 0;
            EndPoint ep = new IPEndPoint(new IPAddress(local_ip), 5001);
            _trader.LuaFixServerAddress = ep;

            _trader.LuaLogin = "quik";

            SecureString ss = new SecureString();
            Array.ForEach("quik".ToArray(), ss.AppendChar);
            ss.MakeReadOnly();
            _trader.LuaPassword = ss;

            _trader.IsDde = false;

            _trader.ConnectionError += this.DoOnError<Exception>;
            _trader.Connect();
        }
,
то не работает - пытается секунд 8 ConnectionState == Connecting, а потом ConnectionState == Failed.

Ошибка

System.Net.Sockets.SocketException (0x80004005): Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение 127.0.0.0:5001
в System.Net.Sockets.TcpClient.Connect(String hostname, Int32 port)
в StockSharp.Fix.FixMessageAdapter.#=q0_n7SPayiHGWHW4BJMpTBQ==(Int64 #=qlpmqWJEEF4opBaXHlOoAXQ==)
в StockSharp.Fix.FixMessageAdapter.OnSendInMessage(Message message)
в StockSharp.Messages.MessageAdapter.SendInMessage(Message message)



1. В Quik загрузил info_lua.wnd
2. В файле \References\StockSharp.Quik.lua снял комментарии со следующих строчек
TransactionAddress="127.0.0.1:5001"
MarketDataAddress="127.0.0.1:5001"
ServerLogin="quik"
ServerPassword="quik"
2. В Quik запустил скрипт: \References\StockSharp.Quik.lua

Connect не проходит Crying
Куда копать, почему Lua-подключение не проходит, а DDE работает?
Автор топика
Спасибо:

unpresent

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


Упс! Прочитал и сам же увидел свою ошибку...
IP не тот указал... Надо было 127.0.0.1:5001.

Заработало и Lua, и DDE!
Спасибо! ThumpUp

Инструменты, даже сразу все выгрузились ))..
Все... пора работать, работать.. Вечером буду уже играться - выгружать портфели, стаканы, сделки и т.п.
Если будут вопросы, уж извините - буду беспокоить!
Автор топика
Спасибо:

knoppix

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


rtDen Перейти
knoppix, для этого сделки должны транслироваться в таблицу всех сделок. С этим на демо-счете могут быть проблемы, нужно смотреть транслируются в нем тики или нет. С графика тики браться не будут.


Т.е. в квике джуниор сделки/цены на графике приходят(считаются) как-то отдельно от реальных данных сделок и поэтому не экспортируются?

+ Попробовал получать сделки через registerTrades в SmartTrader(смартком 3.0) там да, все работатет как часы. Но есть одна проблема вообще с ITInvest'om - демо данные совсем "тухлые" какие-то, одни боковики постоянно.

orphan Перейти

Если сделки не транслируются, можно написать в поддержку, чтобы включили.
Например демо у quik.ru.


У меня QuikJunior от брокера "Открытие". У них тех. супорт есть?
Спасибо:

unpresent

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


knoppix Перейти

У меня QuikJunior от брокера "Открытие". У них тех. супорт есть?


У Открытия надо включить трансляцию всех сделок в Quik в ЛК:
1. Зайдите в личный кабинет lk.open-broker.ru
2. Информация / Общие рекомендации QUIK / Заказ таблицы всех сделок QUIK
Автор топика
Спасибо: knoppix

rtDen

Фотография
Курсы Программист
Дата: 21.10.2015
Ответить


Цитата:
Т.е. в квике джуниор сделки/цены на графике приходят(считаются) как-то отдельно от реальных данных сделок и поэтому не экспортируются?

Я не знаю, как устроен квик, просто знаю, что для того, чтобы получать тики в S# - они должны быть в таблице всех сделок квика.
Тех. саппорт у открытия (думаю, как и у любого брокера) есть.
Спасибо:


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

loading
clippy