"StockSharp быстрый старт". Quik. Не отрабатывает Connect...

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


Добрый день.

Пытаюсь воспроизвести пример из видео "StockSharp. Быстрый старт! Торговый робот на Quik!" (http://stocksharp.com/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

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

Теги:


Спасибо:


1 2  >
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 статьи: http://stocksharp.com/do...0-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!
Спасибо! [thumbup]

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

knoppix

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


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


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

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

orphan Перейти

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


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

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

loading
clippy