Transaq
СБО "Transaq" => Подсистема ATF => Topic started by: Anatoly Utkin on Июля 02, 2012, 05:36:17 pm
-
Хочется после совершения команды trade_action::transact(хэш) сразу иметь какую-то ссылку на выставляемую заявку. Пока я смог это реализовать только через функцию onATFOrder, но это неудобно при наличии сложного многозаявочного робота. Ниже привожу код, присваивающий глобальной переменной trnid_order значение идентификатора заявки, выставленной функцией onNewCandle. Хотелось бы того же, но напрямую, без функции onATFOrder. То есть некой команды типа что-то(хэш)=идентификатор. Может, есть такие команды? Мой брокер--финам, ATF 1.8
static trnid_order=0;
function onNewCandle()
{
var order=new_object("hash");
if (trnid_order==0)
{
order["operation"]=OP_SELL;
order["quantity"]=1;
order["price"]=137000;
trade_action::transact(order);
}
}
function onATFOrder(var id)
{
var help1=getOrder(id);
if (trnid_order==0)
{
trnid_order=help1["trnid"];
}
}
-
Наверно, Heller в отпуске :)
-
да, именно так
-
да, именно так
Ну тогда от лица всех форумчан желаю ему приятного полноценного отдыха!
-
На данный моментально получить номер транзакции для заявки сразу же - нереально в ATF. Скрипт сейчас работает таким образом:
1. Приходит порция рыночных данных от сервера.
2. Эта порция данных обрабатывается всеми окнами и скриптами ATF. Если в ATF выставляются какие-то заявки, они откладываются в отдельную очередь.
3. После обработки всех данных заявки одним махом отправляются на биржу.
4. Получается новая порция рыночных данных.
Если бы заявки выставлялись на шаге 2, то это могло бы привести к тормозам в обработке данных. В принципе технически сделать еще один флаг и отдавать пользователю сразу идентификатор транзакции, оставляя на его страх и риск возможную проблему тормозов - не сложно. В общем-то желание иметь сразу этот идентификатор справедливо, так что в одной из ближайших версий сделаем.
-
На данный моментально получить номер транзакции для заявки сразу же - нереально в ATF. Скрипт сейчас работает таким образом:
1. Приходит порция рыночных данных от сервера.
2. Эта порция данных обрабатывается всеми окнами и скриптами ATF. Если в ATF выставляются какие-то заявки, они откладываются в отдельную очередь.
3. После обработки всех данных заявки одним махом отправляются на биржу.
4. Получается новая порция рыночных данных.
Если бы заявки выставлялись на шаге 2, то это могло бы привести к тормозам в обработке данных. В принципе технически сделать еще один флаг и отдавать пользователю сразу идентификатор транзакции, оставляя на его страх и риск возможную проблему тормозов - не сложно. В общем-то желание иметь сразу этот идентификатор справедливо, так что в одной из ближайших версий сделаем.
Правильно я понял, что на даннном этапе развития ATF нет возможности снять конкретную заявку, выставленную данным роботом, поскольку невозможно получить ее номер и можно снимать только одновременно сразу все заявки по данной бумаге, выставленные и этим же роботом, и другими роботами, и клиентом, и экселем?
-
Возможно. Почитайте http://www.transaq.ru/dokuwiki/atf:заявки_и_сделки (http://www.transaq.ru/dokuwiki/atf:заявки_и_сделки) про "снятие заявок" и "информация о сделках и заявках". Хотя это конечно несколько не напрямую все.
-
To Heller:
Понял, спасибо. Еще вопрос: onATFOrder срабатывает при изменении статуса любой заявки транзака или любой заявки, рожденной текущим скриптом?
To Олег:
Снять конкретную заявку, выставленную конкретным роботом, можно. Для этого следует наладить взаимодействие между функцией, из которых выставляется заявка (например, onNewCandle) и onATFOrder. onATForder срабатывает всегда при изменении любой заявки. Поэтому следует охарактеризовать некой глобальной переменной текущее состояние робота, а затем раздавать в функции onATFOrder нужные номера нужным переменным. Простейший пример этого приведен в начале топика, в роли глобальной переменной выступает trnid_order, она же выступает и в роли номера заявки. В случае многих заявок эта схема также реализуема, но следует использовать отдельные переменные состояния робота.
-
onATFOrder() предполагалось что должен срабатывать только при изменении статуса заявки, выставленной из данного скрипта. Однако в ходе расследования багов, о которых сообщали пользователи, стало понятно, что на данный момент мы не можем реализовать эту функцию в полной мере из-за системы взаимодействия клиента-сервера-биржи. Так что я бы избежал использования этой функции.
В ближайших планах впрочем протащить примечание к заявкам ATF, а заодно возвращать сразу же номер транзакции. Это будет в ближайшей версии.