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
А чего просто запустить руками и ввести пароль религия не позволяет? :)
|
|
Спасибо:
|
|
|
|