Transaq
СБО "Transaq" => Подсистема ATF => Topic started by: daytrader on 10.08.2011, 14:14:50
-
что-то у меня никак не выходит переставить заявку.
проверить это как-то быстро невозможно, так что вот код.
id заявки у меня имеется
var order = getOrder(order_id);
var status = order["status"];
if (status != OS_INACTIVE){ // если статус заявки понятен
if (status == OS_CANCELLED) {
if (order["operation"] == OP_SELL) {
trade_action::sell(order["quantity"], ::lots,close-slip);
}
if (order["operation"] == OP_BUY) {
trade_action::buy(order["quantity"], ::lots,close+slip);
}
}
}
тут как-то трижды биржа снимала мои заявки (я так и не понял почему) но новые не переставлялись сразу же и вообще никак.
Код находится в calc ()
UPD
думаю что необходимо так же проверять на: OS_DENIED, OS_REJECTED,
OS_REMOVED, OS_REFUSED.
думаю поэтому и не выставлялись - не все условия были учтены.
-
Не вполне понятно что у вас происходит и что вы хотите сделать, да и код приведен не полностью - может быть ошибка и не в этом фрагменте, но в целом пока предварительно могу высказать следующие соображения:
1) Если заявка отклоняется брокером или биржей, то статус у нее будет OS_REJECTED или OS_DENIED. OS_CANCELLED - это статус заявки для случая, если вы сами сняли заявку.
2) Не понятно зачем вы делаете это в calc(). Логичнее делать это в onATFOrder/onClientOrder - эта функция вызывается при любом изменении статуса заявки.
3) Чтобы понять причину, по которой снимаются ваши заявки, найдите их в таблице заявок в терминале, и просто посмотрите их статус - там должна быть указана причина снятия заявки.
4) Не понятно зачем вы делаете дополнительную проверку на OS_INACTIVE. Если у вас статус заявки OS_CANCELLED, то он в любом случае не будет OS_INACTIVE - вы просто делаете лишние проверки.
-
по поводу "зачем в calc" спасибо что подсказали, но я как-то все в калк пишу.
кенсел действительно не нужен. Так что я на || поставил все остальные.
Обычно биржа снимает что то ей не нравится - например цена. Хотя ни разу еще не было глюков с ценой.
-
Вы имеете ввиду биржа именно снимает уже выставленную заявку, или именно отклоняет ее и не хочет выставлять? Посмотрите в статус заявки в соответствующей таблице в терминале - это должно прояснить ситуацию.
-
в тех что я смотрел была "снята" но я как-то не посмотрел причину - звонил брокеру - сказали что цена вне лимита - но в той же таблице цена была указана именно в лимите. Вот я и думаю может у брокера был сбой?
Поэтому хочу сразу на все отфильтровать и переставлять заявку, но уже по текущим рыночным ценам естественно.
но на ваш вопрос не отвечу - так как в таблице на тот момент ничего не нашел, а сейчас пока нет отмененных заявок
-
Ну вообще именно биржа заявки не снимает (лишь в конце торговой сессии) - это делает брокер. Но в любом случае ситуация странна и нетипичная - когда в следующий раз возникнет, посмотрите все же статус заявки и причину снятия. Должно стать понятнее что происходит.
-
вот кажется была снята заявка - но не могу найти причину в таблице...
и еще - как писать правильно в кавычках или нет
if (status == OS_MATCHED)
или
if (status == "OS_MATCHED")
-
и еще - как писать правильно в кавычках или нет
if (status == OS_MATCHED)
или
if (status == "OS_MATCHED")
если эти коды могут сменниться, то я должен написать так
if (stz == OS_MATCHED )
Да, это оптимально.
http://www.transaq.ru/forum/index.php?topic=487.0 (http://www.transaq.ru/forum/index.php?topic=487.0)
-
вот кажется была снята заявка - но не могу найти причину в таблице...
и еще - как писать правильно в кавычках или нет
if (status == OS_MATCHED)
или
if (status == "OS_MATCHED")
Надо писать так:
if (status == OS_MATCHED)
status - это код состояния,
OS_MATCHED - это имя константы
-
вот кажется была снята заявка - но не могу найти причину в таблице...
Кликните дважды на заявку в таблице заявок, и нажмите на кнопку "Статус".