Oldman
|
Date: 9/12/2011
|
|
|
|
|
Добрый день всем, подскажите куда смотреть.
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
|
Date: 9/12/2011
Подозреваю, что вы что-то не то пишете в качестве портфеля (у меня на демо он = логину).
Попробуйте вывести список trader.Portfolios.
|
|
|
|
Thanks:
|
|
|
|
|
|
Alexander
|
Date: 9/12/2011
ProcessDataError что-нибудь выводит?
|
|
|
|
Thanks:
|
|
|
|
|
|
Oldman
|
Date: 9/13/2011
|
|
|
|
|
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
|
Date: 9/13/2011
Покажите таблицу портфелей для ммвб.
И что выводит Trader.Portfolios?
|
|
|
|
Thanks:
|
|
|
|
|
|
Oldman
|
Date: 9/13/2011
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
|
Date: 9/13/2011
Вы меня не поняли.
Выведите portfolios.
раз Test0 выводит - значит какие-то портфели приходят.
вы просто не тот портфель ищите.
посмотрите какие приходят - распечатаейте все portfolios - Name в частности.
И посмотрите на account - он небось ни с одним Name не совпадает.
И покажите скриншот таблицы с порфтелями в квике, а не настройки для портфелей qpile :)
|
|
|
|
|
|
|
Oldman
|
Date: 9/14/2011
|
|
|
|
|
Портфель:

С выводом 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
|
Date: 9/14/2011
|
|
|
|
|
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 и скопируйте его содержание.
|
|
|
|
|
|
|
Oldman
|
Date: 9/14/2011
Да, на скриншотах значение Код Клиента одинаковое. (привычка затирать персонифицированные данные уже не помню откуда началась у меня)
:)
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:
|
|
|
|
|