SmartQuant Discussion

Automated Quantitative Strategy Development, SmartQuant Product Discussion and Technical Support Forums
It is currently Mon Oct 26, 2020 4:06 am

All times are UTC + 3 hours




Post new topic Reply to topic  [ 435 posts ]  Go to page Previous  1, 2, 3, 4, 5, 6, 7 ... 29  Next
Author Message
PostPosted: Thu Feb 10, 2011 8:12 am 
Offline

Joined: Fri Dec 03, 2010 12:43 am
Posts: 9
А между какими статусами эта Latency?
Я думал так:
Code:
10:00 -> order.Send() -> OrderStatus = "PendingNew"
<Latency>
10:02 -> OnOrderStatusChanged() ->  OrderStatus = "New"

Но у меня статус PendingNew не приходит в OnOrderStatusChanged().
Для чего вообще группа статусов Pending* ?

И как поймать период между отправкой приказа и подтверждением от биржи о его принятии/отвержении. Какой статус приказа в этот момент?


Top
 Profile  
 
PostPosted: Thu Feb 10, 2011 4:45 pm 
Offline

Joined: Wed May 05, 2010 9:49 pm
Posts: 579
После выполнения Modify order - метод protected override void Replace(OpenQuant.API.Order order) в OQ3
не вносит никаких измениний в order, те order.Price и order.Qty заявки не изменяются.
Дополнительных сведений для изменения тоже нет...
Как сделать Replace?


Top
 Profile  
 
PostPosted: Thu Feb 10, 2011 5:07 pm 
Offline

Joined: Tue Aug 05, 2003 3:43 pm
Posts: 6817
А они изменятся когда от брокера придет подтверждение о модификации заявки. Т.е. если у вас текущее Qty = 50, то когда вы говорите

Order.Qty = 100;

Order.Replace();

100 записывается в Order.ReplaceOrder.Qty и при вызове Replace это поле уходит к брокеру. Но пока подтверждения от брокера нет, Order.Qty = 50 (что есть логично). Как получаем от брокера подтверждение, меняем Order.Qty в 100.

Это, кстати, написано в комментарии Order.Replace

Note that parameter values returned by order.Qty and order.Price will return new (replaced) values only when the order is actually replaced by a broker and the system receives replace confirmation. Until then order.Qty and order.Price properties will return old parameter values.


Top
 Profile  
 
PostPosted: Thu Feb 10, 2011 5:30 pm 
Offline
Site Admin

Joined: Thu Jul 17, 2003 10:39 am
Posts: 1478
PendingNew статус дается заявке при рождении, хотя если быть совсем придирчивым, то в теории это статус после отправки и до получения либо New либо Rejected. Поэтому Вы и не получаете OnOrderStatusChanged с PendingNew, так как первое изменение может быть только на New или Rejected.
PendingCancel и PendingReplace говорят о том, что Ваш запрос на cancel/replace принят брокером и находится в стадии обработки. Эти статусы не всегда могут быть, ввиду того, что не все брокеры ими заморачиваются, а сразу шлют Cancelled/Replaced.

_________________
SmartQuant Development Team


Top
 Profile  
 
PostPosted: Thu Feb 10, 2011 5:59 pm 
Offline

Joined: Wed May 05, 2010 9:49 pm
Posts: 579
Dr. Anton Fokin wrote:
А они изменятся когда от брокера придет подтверждение о модификации заявки. Т.е. если у вас текущее Qty = 50, то когда вы говорите

Order.Qty = 100;

Order.Replace();

100 записывается в Order.ReplaceOrder.Qty и при вызове Replace это поле уходит к брокеру. Но пока подтверждения от брокера нет, Order.Qty = 50 (что есть логично). Как получаем от брокера подтверждение, меняем Order.Qty в 100.

Это, кстати, написано в комментарии Order.Replace

Note that parameter values returned by order.Qty and order.Price will return new (replaced) values only when the order is actually replaced by a broker and the system receives replace confirmation. Until then order.Qty and order.Price properties will return old parameter values.

Все бы хорошо,но в Replace я невижу Order.ReplaceOrder и соответсветнно нечего передавть брокеру


Top
 Profile  
 
PostPosted: Thu Feb 10, 2011 6:02 pm 
Offline

Joined: Tue Aug 05, 2003 3:43 pm
Posts: 6817
Ну да, обидно :D


Top
 Profile  
 
PostPosted: Thu Feb 10, 2011 6:03 pm 
Offline

Joined: Tue Aug 05, 2003 3:43 pm
Posts: 6817
OpenQuant API это надстройка над SmartQuant Framework. Во фреймворке это все есть. Сейчас откроем в API.


Top
 Profile  
 
PostPosted: Thu Feb 10, 2011 6:24 pm 
Offline

Joined: Tue Aug 05, 2003 3:43 pm
Posts: 6817
Вот сейчас сидим обсуждаем, что лучше добавить. Есть два варианта.

1. Добавить в Order проперть ReplaceOrder, поля которого будут содержать Qty, Price, т.д. для реплейса. Тогда в UserProvider

Replace(Order)
{
double newPrice = Order.ReplaceOrder.Price;

послать newPrice брокеру
}

но этот вариант добавит сложности в АПИ. То есть у людей, которые пишут стратегии может возникнуть вопрос, что такое Order.ReplaceOrder и зачем оно надо.

2. Просто добавить параметры в Replace(Order), то есть сделать

Replace(Order, newPrice, newQty, newTimeInForce)

В этом варанте все замечательно, кроме того, что если появится у брокера возможность менять еще какие-нибудь поля заявки, то придется добавлять их напрямую в сигнатуру. Ну и самое неприятное, что в этом варианте во всех уже написанных плагинах надо будет менять код и перекомпилировать.

Кто за что голосует?


Top
 Profile  
 
PostPosted: Thu Feb 10, 2011 7:21 pm 
Offline

Joined: Wed May 05, 2010 9:49 pm
Posts: 579
Думаю для программистов разницы особой нет
Можно еще так сделать: Replace(Order, newOrder)


Top
 Profile  
 
PostPosted: Tue Feb 15, 2011 3:25 pm 
Offline

Joined: Wed May 05, 2010 9:49 pm
Posts: 579
Вопрос по конвертации валют:
как может результат в -2USD ковертироваться в 4 RUR?


Attachments:
pic.png
pic.png [ 57 KiB | Viewed 6123 times ]
Top
 Profile  
 
PostPosted: Tue Feb 15, 2011 3:50 pm 
Offline

Joined: Tue Jan 27, 2009 2:09 am
Posts: 10
Location: Kiev
2. Просто добавить параметры в Replace(Order), то есть сделать

Replace(Order, newPrice, newQty, newTimeInForce)

В этом варанте все замечательно, кроме того, что если появится у брокера возможность менять еще какие-нибудь поля заявки, то придется добавлять их напрямую в сигнатуру. Ну и самое неприятное, что в этом варианте во всех уже написанных плагинах надо будет менять код и перекомпилировать.

Кто за что голосует?[/quote]


Я думаю, что если делать, то просто, удобно и надолго...т.е. в.2, с перекомпиляцией написанных плагинов...


Top
 Profile  
 
PostPosted: Tue Feb 15, 2011 5:53 pm 
Offline

Joined: Wed Oct 08, 2003 1:06 pm
Posts: 833
Quote:
Вопрос по конвертации валют:
как может результат в -2USD ковертироваться в 4 RUR?


Действительно странно. Самый простой вариант, что в серии USD_RUR затерялись отрицательные квоты/трейды, вы не могли бы это проверить?


Top
 Profile  
 
PostPosted: Tue Feb 15, 2011 6:07 pm 
Offline

Joined: Wed May 05, 2010 9:49 pm
Posts: 579
Baraz Sergey wrote:
Quote:
Вопрос по конвертации валют:
как может результат в -2USD ковертироваться в 4 RUR?


Действительно странно. Самый простой вариант, что в серии USD_RUR затерялись отрицательные квоты/трейды, вы не могли бы это проверить?

Исключено, USD_RUR я вручную добавил, там пару трейдов.
Причем тип USD_RUR - фьючерс или индекс не влияет на результат


Top
 Profile  
 
PostPosted: Wed Feb 16, 2011 5:43 pm 
Offline

Joined: Wed May 05, 2010 9:49 pm
Posts: 579
В продолжение темы - заметил странность:
В при исполнении ордера в Portfolio добавляется 2 сделки, но на самом деле была одна, это видно по статусу ордера


Attachments:
portfolio.png
portfolio.png [ 81.65 KiB | Viewed 6107 times ]
Top
 Profile  
 
PostPosted: Wed Feb 16, 2011 11:23 pm 
Offline

Joined: Thu Feb 04, 2010 3:32 pm
Posts: 45
Dr. Anton Fokin wrote:
...Кто за что голосует?
Имхо, лучше сделать oldOrder.Replace(Order newOrder)


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 435 posts ]  Go to page Previous  1, 2, 3, 4, 5, 6, 7 ... 29  Next

All times are UTC + 3 hours


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Group