Инструменты пользователя

Инструменты сайта


atf:заявки_и_сделки

Заявки и сделки

Все перечисленные в данной статье торговые функции работают только в случае, если в окне, где выполняется скрипт ATF, разрешена торговля. С разрешением и запрещением торговли связаны следующие четыре функции:

  • onStartRobot() - событие запуска робота (нажатие на «красного робота» внизу)
  • onStopRobot() - событие остановки робота пользователем (нажатие на «зеленого робота» внизу)
  • isTradingAllowed() - Разрешены ли в данном окне сделки ATF
  • shutdownRobots() - запретить выполнение сделок роботами в данном окне

Данная статья не рассматривает использование стакана котировок. Информацию о работе со стаканом смотрите в соответствующей статье.

Простейшие заявки

Для большинства заявок в ATF используются структуры данных (или хэши), которые описаны ниже, однако для самых простых лимитированных заявок есть четыре короткие функции: trade_action::buy(), trade_action::sell(), trade_action::buyMultiple(), trade_action::sellMultiple(). Все они принимают в качестве аргументов три значения: цену заявки, объем, а так же величину, в которой объем измеряется.

Если не указать цену, то будет выставлена рыночная заявка (рыночные заявки запрещены для опционов). Использование кредита определяется из настройки параметров АРМ Трейдера.

Разницу в применении обычных функций и кратных их вариантов (с постфиксом multiple) смотрите в соответствующем разделе ниже.

Примеры:

// Купить 1 лот по рыночной цене
trade_action::buy(1, ::lots);
 
// Продать 2000 бумаг по рыночной цене
trade_action::sell(2000, ::securities);
 
// Купить бумаг по рыночной цене на 20000 рублей
trade_action::buy(20000, ::money);
 
// Купить один лот по цене 100 рублей за бумагу
trade_action::buy(1, ::lots, 100);

Использование структур

Для более сложных видов заявок можно использовать функции transact() и transactMultiple(), в качестве аргументов которым передаются хеши с параметрами заявок. Общий алгоритм выставления заявок в этом случае выглядит так:

// Создание хеша
order = new_object("hash");
 
// Заполнение парамеров хеша
order["operation"] = OP_BUY;
order["quantity"] = 1;
order["usecredit"] = false;
 
// Выставление заявку на биржу
trade_action::transact(order);

Стоит обратить внимание на следующие моменты:

  • Операция покупки или продажи задается с помощью констант OP_BUY и OP_SELL в поле «operation» и должна задаваться как элемент хэша.
  • Для выставления рыночных заявок достаточно не указывать поле «price»
  • Для лимитированных и условных заявок объем может задаваться только в лотах (для стоп-заявок доступно использовать так же процент от портфеля, см. ниже).
  • Стандартный параметр использования кредита может быть переопределен с помощью параметра «usecredit»
  • Все дополнительные поля, присутствующие в хеше и не имеющие смысла при выставлении заявки, игнорируются.
  • Специальное поле confirm_dialog позволяет не выставлять заявку автоматически на рынок, а вывести заполненный диалог выставления заявки, в котором останется лишь нажать кнопку подтверждения. Данная возможность доступна с ATF версии 1.16.
  • Вы можете так же задать параметр secid, указав в нем идентификатор бумаги, по которой требуется выставить заявки. По умолчанию это та же бумага, к которой привязан скрипт ATF, однако вы можете выставлять заявки по произвольным бумагам.

Полезно так же иметь ввиду, что один и тот же хеш можно использовать многократно. Следующий пример реализует функцию, которая выставляет сразу набор заявок в заданном диапазоне цен с заданным шагом:

function ladder(operation, quantity, from, to, step)
{
  var order = new_object("hash");
  order["operation"] = operation;
  order["quantity"] = quantity;
  while ((step > 0 and from < to) or (step < 0 and from > to)) {
    order["price"] = from;
    trade_action::transactMultiple(order);
    from += step;
  }
}

Теперь, чтобы выставить заявки по одному лоту на продажу от 100 рублей до 120 с шагом в два рубля, мы можем вызвать нашу функцию следующим образом:

ladder(OP_SELL, 1, 100, 120, 2);

Свойства функции transact игнорировать все параметры хеша, не имеющие отношения к выставлению заявки так могут быть полезно использованы. Пусть мы хотим при каждой покупке бумаги автоматически выставлять заявку на продажу ее по цене на три процента большей стоимости совершения сделки. Это можно сделать следующим простым способом:

function fixProfit(var id)
{
  var trade = getTrade(id);
  if (trade["operation"] == OP_BUY) {
    trade["operation"] = OP_SELL;
    trade["price"] = trade["price"] * 1.03;
    trade_action::transactMultiple(trade);
  }
}

Обратите внимание, что данный код выставит заявку на продажу бумаги ровно на тот же объем, что была совершена сделка. Все остальные поля структуры сделки игнорируются и никак не мешают функции transact.

Лимитированные заявки

Доступные для заполнения поля:

  • validbefore - время, до которого заявка будет активна. По умолчанию она активна до конца сессии. Так же возможно задать значение TILL_CANCELED, чтобы заявка была активна до отмены.
  • client - клиент, от имени которого будет выставлена заявка. По умолчанию используется текущий клиент.
  • operation - покупка (OP_BUY) или продажа (OP_SELL)
  • price - цена. По умолчанию будет выставлена рыночная заявка.
  • quantity - количество лотов в заявке
  • withinpos - заявка в пределах позиции
  • unfilled - заявка типа «снять остаток» (UNFILLED_CANCELBALANCE), «немедленно или отклонить» (UNFILLED_IMMORCANCEL) или «поставить в очередь» (UNFILLED_PUTINQUEUE). По умолчанию выставляются заявки «поставить в очередь».
  • usecredit - использовать или нет кредит. По умолчанию используется глобальная настройка АРМ Трейдера.
  • confirm_dialog - если true, то позволяет не выставлять заявку на рынок автоматически, а вывести заполненный диалог выставления заявки, в котором останется лишь нажать кнопку подтверждения. Данная возможность доступна с ATF версии 1.16.
  • brokerref - примечание, доступно с версии ATF 1.18, максимальная длина примечания определяется функцией getMaxBrokerRefLen()

Следующий код выведет диалог ввода заявки на покупку десяти лотов с использованием кредита по цене 123 рубля, действительную до отмены:

order = new_object("hash");
order["operation"] = OP_BUY;
order["quantity"] = 10;
order["price"] = 123;
order["validbefore"] = TILL_CANCELED;
order["usecredit"] = true;
order["confirm_dialog"] = true;
trade_action::transact(order);

Условные заявки

Хеш условных заявок точно такой же как и хеш лимитированных заявок, но содержит два дополнительных поля, характеризующих условие заявки:

  • condition - тип условия
  • condvalue - значение условия

Поле condition может принимать одно из следующих значений:

  • COND_NONE - Нет условия (будет выставлена лимитированная заявка, поле condvalue будет проигнорировано).
  • COND_BID - Условие на bid
  • COND_BID_OR_LAST - Условие на bid или последнюю цену
  • COND_ASK - Условие на ask
  • COND_ASK_OR_LAST - Условие на ask или последнюю цену
  • COND_TIME - Условие на время
  • COND_COV_DOWN - Обеспеченность ниже
  • COND_COV_UP - Обеспеченность выше
  • COND_LAST_UP - Последняя сделка выше
  • COND_LAST_DOWN - Последняя сделка ниже

Следующий пример выставит рыночную заявку на покупку 300 лотов через три часа после выполнения функиции transact:

order = new_object("hash");
order["operation"] = OP_BUY;
order["quantity"] = 300;
order["condition"] = COND_TIME;
order["condvalue"] = getServerTime() + 3*60*60;
trade_action::transact(order);

Стоп-заявки

Следующие поля стоп-заявки дублируют соответствующие поля лимитированных и условных заявок:

  • validbefore - время, до которого заявка будет активна. По умолчанию она активна до конца сессии. Так же возможно задать значение TILL_CANCELED, чтобы заявка была активна до отмены.
  • client - клиент, от имени которого будет выставлена заявка. По умолчанию используется текущий клиент.
  • operation - покупка (OP_BUY) или продажа (OP_SELL)
  • confirm_dialog - если true, то вместо выставления заявки на биржу, будет выведен диалог ввода стоп-заявки

Следующие поля можно заполнять для части Take Profit:

  • tp_activationprice - Цена активации Take Profit - обязательное поле.
  • tp_guardtime - Защитное время Take Profit в секундах (по умолчанию 0)
  • tp_quantity - Количество лотов в Take Profit (может быть задано в процентах, тогда вводится в виде «12.34%»)
  • tp_correction - величина коррекции для следящего Take Profit (может быть задана в процентах, тогда вводится в виде «12.34%», так же может отсутствовать, тогда Take Profit не будет следящим)
  • tp_guardspread - Защитный спрэд Take Profit (может быть задан в процентах, тогда вводится в виде «12.34%», так же может отсутствовать)
  • tp_brokerref - примечание Take Profit, максимально возможная длина определяется функцией getMaxBrokerRefLen() (ATF 1.18)

Следующие поля можно заполнять для части Stop Loss:

  • sl_activationprice - Цена активации заявки Stop Loss - обязательное поле.
  • sl_guardtime - Защитное время Stop Loss в секундах (по умолчанию 0).
  • sl_quantity - Количество лотов в Stop Loss (может быть задано в процентах, тогда вводится в виде «12.34%»)
  • sl_orderprice - Цена заявки Stop Loss (при отсутствии этого параметра будет выставлена рыночная заявка)
  • sl_brokerref - примечание Stop Loss, максимально возможная длина определяется функцией getMaxBrokerRefLen() (ATF 1.18)

Для установки стоп-заявки, связанной с обычной заявкой, выставленной на биржу, необходимо выставить следующее поле:

  • linkedorderno - Биржевой номер связанной заявки

В стоп-заявке могут присутствовать либо только часть Take Profit, либо только часть Stop Loss, либо обе части. Следующий пример выставляет заявку, имеющую обе части:

var stop = new_object("hash");
 
// Заявка на продажу
stop["operation"] = OP_SELL;
 
// Часть Take Profit
stop["tp_activationprice"] = 110;
stop["tp_quantity"] = 1;
stop["tp_correction"] = "0.2%";
 
// Часть Stop Loss
stop["sl_activationprice"] = 90;
stop["sl_quantity"] = 1;
 
// Выставление заявки на рынок
trade_action::transact(stop);

Снятие заявок

Для снятия заявок в ATF доступен следующий набор функций:

  • cancelAllOrders() - снять все заявки по данной бумаге (не распространяется на стоп-заявки)
  • cancelBuyOrders() - снять все заявки на покупку по данной бумаге (не распространяется на стоп-заявки)
  • cancelSellOrders() - снять все заявки на продажу по данной бумаге (не распространяется на стоп-заявки)
  • cancelOrder(order) - снять заданную заявку (не распространяется на стоп-заявки)
  • cancelStopOrder(stop) - снять заданную стоп-заявку

В качестве аргументов функциям cancelOrder() и cancelStopOrder() может быть передан либо идентификатор заявки на сервере Transaq (trnid), либо хеш заявки и стоп-заявки соответственно. В функции cancelOrder() при снятии заявки используются поля orderno и trnid, причем приоритет, в случае если заданы оба поля (и, например, они не согласованы), отдается полю orderno.

Кратные и обычные заявки

Все торговые и сигнальные функции существуют в двух экземплярах: «обычные» и с суффиксом «Multiple» (кратные функции). Разница этих функций заключается в том, что «обычные функции» могут сработать лишь один раз в границах одной свечи, а кратные функции срабатывают каждый раз как вызываются.

Следующий пример подает сигнал как только объем текущей свечки превысит в два раза объем предыдущей свечки:

function calc()
{
  if (volume > volume[-1] * 2) {
    signal::alert("Объем торгов резко возрос!!!!!!!");
  }
}

Он кажется простым и логичным, однако здесь как раз неявно используется механизм срабатывания функции лишь один раз на каждой свече. Рассмотрим практически идентичный пример:

function calc()
{
  if (volume > volume[-1] * 2) {
    signal::alertMultiple("Объем торгов резко возрос!!!!!!!");
  }
}

Здесь функция signal::alert() заменена на функцию signal::alertMultiple(), следствием чего станет то, что как только объем будет превышен, сообщение с предупреждением будет выдаваться при каждой сделке до тех пор, пока верно условие на объемы.

Если бы в ATF не было функции signal::alert() с поведением срабатывания лишь один раз за свечку, то сигнал, срабатывающий лишь один раз, выглядел бы несколько сложнее:

static signalled = false;
 
function onNewCandle()
{
  signalled = false;
}
 
function calc()
{
  if (not signalled and volume > volume[-1] * 2) {
    signalled = true;
    signal::alertMultiple("Объем торгов резко возрос!!!!!!!");
  }
}

Данный код довольно краток, однако если бы сигналов скрипт подавал множество, то и количество переменных для отслеживания этого а так же лишних сравнений было бы значительно больше.

В то время как такая логика сильно упрощает написание сигналов, с выставлением заявок такое поведение ATF редко помогает (лишь в случаях простейших стратегий), из-за того, что часто операции открытия и закрытия позиций завязаны на дополнительные условия связанные с состоянием портфеля, а то и вовсе торговые функции вынесены отдельно.

По этой причине для торговых функций хорошей рекомендацией будет продумывать механизм открытия и закрытия позиций отдельно и выносить его в отдельные функции, где использовать кратные версии функций. Следующий шаблон подойдет для значительной доли торговых стратегий:

static position = "";
 
function check()
{
  if (not position and checkLong()) {
    enterLong();
    position = "long";
    return;
  }
  if (not position and checkShort()) {
    enterShort();
    position = "short";
    return;
  }
  if (position == "long" and checkExitLong()) {
    exitLong();
    position = "";
    return;
  }
  if (position == "short" and checkExitShort()) {
    exitShort();
    position = "";
    return;
  }
}

Здесь функция check() должна вызываться с частотой, требуемой пользователем (например, внутри функции calc(), onNewCandle(), по таймеру или по событию изменения стакана). Функции checkLong(), checkShort(), checkExitLong() и checkExitShort() должны проверять условия на вхождение в лонг, шорт, а так же выход из лонга и шорта соответственно. Функции же enterLong(), enterShort(), exitLong() и exitShort() собственно выполняет открытие и закрытие длинной и короткой позиции. Глобальная переменная position содержит информацию о текущей позиции, длинная она или короткая.

Как пример, рассмотрим простую стратегию, которая будет торговать только в лонг при пересечении ценой скользящей средней снизу вверх, а закрываться когда скользящая средняя (другого периода) будет выше цены, причем не раньше чем через count свечек (здесь можно было бы использовать автоматическое отслеживание пересечений, но для простоты мы воспользуемся только простейшими функциями):

extern period1 = 13;
extern period2 = 10;
extern quantity = 1;
extern count = 5;
 
static position = "";
 
static n = 0;
 
function checkLong()
{
  return close > MovAvg(ind_ema, period1, pt_close);
}
 
function checkShort()
{
  return false;
}
 
function checkExitLong()
{
  return noCandle() > n + count and close < MovAvg(ind_ema, period2, pt_close);
}
 
function checkExitShort()
{
  return false;
}
 
function enterLong()
{
  trade_action::buy(1, ::lots);
}
 
function enterShort()
{
  return;
}
 
function exitLong()
{
  trade_action::sell(1, ::lots);
}
 
function exitShort()
{
  return;
}
 
// ...
//   Здесь следует код функции check(), приведенный выше
// ...
 
function calc()
{
  check();
}

Приведенный код конечно кажется избыточно большим (мы могли бы вообще не упоминать здесь шорты, а открывать и закрывать позицию не во внешних функциях, а непосредственно в функции check()), однако этот пример лишь призван продемонстрировать общую идею. В сложных скриптах приведенный шаблон оказался бы уже не таким избыточным, а довольно удобным и кратким обрамлением логики работы торговой системы.

Ошибки и номера транзакций (ATF 1.18)

Все заявки и сделки в Transaq имеют связанный с ними номер транзакции, обозначаемый в структурах как trnid. Этот номер trnid передается в функции onOrder, onStopOrder и onTrade, а так же используется для снятия заявок и получения их структур:

function onOrder(var trnid) {
  var = getOrder(trnid); // получить структуру по номеру транзакции
}

Идентификатор заявки возвращается функциями trade_action::…. Если в качестве идентификатора возвращается нулевое значение, то это говорит о том, что сервер Transaq не принял заявку. В этом случае описание ошибки можно получить с помощью функции getLastErrorMessage().

Важно понимать, что ошибка при выставлении заявки может произойти либо при приеме её сервером Transaq, либо при попытке сервера выставить ее на биржу. На этом этапе могут быть либо какие-то проблемы со связью, либо заявка может по разным причинам не устроить сервер самой биржи. В этом случае заявке всё равно будет присвоен номер trnid, а при отклонении заявки произойдет событие onOrder(). В самой заявке при этом будет заполнено поле message, в котором будет содержаться сообщение об ошибке.

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

Следующий пример демонстрирует изложенное. В нем выставляется заявка при наступлении условия EnterExpr(), а если до исполнения сделки срабатывает условие CancelExpr() заявка снимается, при этом все возникающие ошибки выводятся в окно вывода ATF:

static order = 0;
 
function onOrder(var trnid)
{
  if (trnid != order) {return;}
  var order = getOrder(trnid);
 
  // Ошибка при выставлении заявки на биржу:
  if (order["message"]) {
    signal::output(order["message"]);
  }
}
 
function calc()
{
  if ((not order) and EnterExpr()) {
    order = trade_action::buy(1, ::lots);
 
    // Сервер Transaq не принял заявку:
    if (not order) {
      signal::output(getLastErrorMessage());
    }
  }
 
  if (order and CancelExpr()) {
    var error = cancelOrder(order);
 
    // Если не удалось снять заявку:
    if (error) {
      signal::output(error);
    }
    order = 0;
  }
}

События

  • calc() - событие сделки на рынке по данному инструменту
  • onATFStopOrder(id) - событие изменения статуса стоп-заявки и сделки выставленной роботом; в качестве id передается номер транзакции (устарела в ATF 1.16)
  • onATFTrade(id) - событие совершения сделки, выставленной роботом; в качестве id передается номер транзакции. (устарела в ATF 1.16)
  • onClientOrder(id) - событие изменения статуса заявки выставленной клиентом; в качестве id передается номер транзакции. (устарела в ATF 1.16)
  • onClientStopOrder(id) - событие изменения статуса стоп-заявки выставленной клиентом; в качестве id передается номер транзакции. (устарела в ATF 1.16)
  • onClientTrade(id) - событие совершения сделки, выставленной клиентом; в качестве id передается номер транзакции. (устарела в ATF 1.16)
  • onOrder(id) - событие изменения статуса заявки или выставления заявки. (ATF 1.16)
  • onStartRobot() - событие запуска робота (нажание на «красного робота» внизу)
  • onStopOrder(id) - событие изменения статуса или выставления стоп-заявки (ATF 1.16)
  • onStopRobot() - событие остановки робота пользователем (нажатие на «зеленого робота» внизу)
  • onTrade(id) - событие совершения сделки (ATF 1.16)

Обратите внимание, что начиная с ATF версии 1.16 функции onATFOrder, onClientOrder, onATFStopOrder, onClientStopOrder, onATFTrade и onClientTrade устарели и вместо них теперь используются функции onOrder, onStopOrder и onTrade. Логика, которая закладывалась в старые функции, не может быть целиком выдержана из-за специфики поведения серверов, поэтому от нее было решено отказаться. Старые функции будут поддерживать вплоть до ATF 1.20, до этого периода желательно перевести свои исходные коды на использование новых версий этих функций.

После выставления условной или обычной заявки, в первую очередь срабатывает событие onOrder(). Для стоп заявок это будет событие onStopOrder(). Далее данные функции будут вызываться при каждом изменении статуса заявки. Если заявка будет удовлетворена, то так же сработает событие onTrade().

Аргументом данных событий являются идентификаторы заявок на сервере Transaq (он отличается от биржевого номера заявки), по которым используя функции getOrder() и getStopOrder() вы можете получить хеш с заявками (подробное описание структуры заявки рассматривается ниже), в котором одним из наиболее существенных элементов является поле status, показывающее в каком состоянии находится заявка.

Константы для статусов обычных и условных заявок имеют префикс OS_, а статусы для стоп-заявок префикс SS_.

Для обычных заявок статус вначале становится OS_ACTIVE, а затем, когда заявка исполнена, OS_MATCHED. Если заявка рыночная, то статус может сразу оказаться OS_MATCHED.

В случае выставления условной заявки, статус вначале будет OS_WATCHING, и лишь затем сменится на OS_ACTIVE. Если для заявки задано время активации, то пока оно не наступило, ее статус будет OS_WAIT. Так же возможны другие статусы, сигнализирующие об ошибках, снятии заявки или прекращении времени ее действия. Полный список смотрите внизу в разделе «Константы».

При выставлении стоп-заявок последовательность статусов заявки аналогичная. Вначале она имеет статус SS_WATCHING. При исполнении заявки статус поменяется на SS_EXECUTED. В случае активации следящего Take Profit (с параметром correction), на момент ожидания коррекции статус будет SS_TP_CORRECTION. Если стоп-заявка активируется по выполнению биржевой заявки, и заявка еще не активирована, то ее статус будет SS_LINKWAIT. Так же имеется ряд промежуточных статусов для снятых заявок, ошибочных ситуаций и периодов защитного времени. Полный перечень смотрите в списке ниже.

Информация о сделках и заявках

Получить структуру заявки можно с помощью функции getOrder(), структуру стоп-заявки с помощью функиции getStopOrder(), а структуру сделки с помощью функции getTrade(). Эти функции принимают в качестве параметра номер транзакции, который передается в качестве аргумента при выполнении событий onOrder(), onStopOrder() и onTrade(). Все эти функции возвращают хеш с заполненными данными о заявке или сделке. Описание хешей содержатся ниже.

Номера транзакций можно получить и списком, не только через функции getOrder() и getStopOrder(). Для этого служат следующие функции:

  • getActiveOrderIDs() - возвращает в массиве номера транзакций всех активных заявок по данной бумаге и активному клиенту.
  • getActiveStopOrderIDs() - возвращает в массиве номера транзакций всех активных стоп-заявок по данной бумаге и активному клиенту.
  • getAllOrderIDs() - возвращает в массиве номера транзакций всех заявок.
  • getAllStoporderIDs() - возвращает в массиве номера транзакций всех стоп-заявок.

Сделки

Хеш, возвращаемый функцией getTrade() имеет следующие поля:

  • client - Идентификатор клиента
  • operation - Тип операции (OP_BUY или OP_SELL)
  • tradeno - Номер сделки
  • orderno - Биржевой номер заявки
  • tradetime - Время сделки
  • brokerref - примечание (ATF 1.18)
  • price - Цена
  • yield - НКД
  • quantity - Количество лотов в сделке
  • currentpos - Текущая позиция по инструменту
  • comission - комиссия (начиная с ATF 1.16)
  • error - 1 - ошибка (не найдена информация о заявке), 0 - нет ошибки

Заявки

Хеш, возвращаемый функций getOrder() имеет следующие поля:

  • trnid - Идентификатор транзакции сервера Transaq.
  • orderno - Номер заявки на бирже.
  • validbefore - До какого времени действительна заявка. (ver. 1.7)
  • status - Состояние заявки (значения смотрите в разделе константы).
  • client - Идентификатор клиента
  • operation - Операция (OP_BUY или OP_SELL)
  • price - Цена (для рыночной заявки — -1 при получении информации о заявке; чтобы выставить рыночную заявку выставлять это значение вообще не надо)
  • brokerref - примечание, максимальная длина определяется функцией getMaxBrokerRefLen() (ATF 1.18)
  • yield - НКД
  • quantity - Количество лотов в заявке
  • condition - Тип условия (только для условных, значения смотрите в разделе константы).
  • condvalue - Значение условия (только для условных).
  • withinpos - В пределах позиции (true/false). (ver. 1.11)
  • unfilled - Снять остаток/немедленно или отклонить/поставить в очередь (по умолчанию поставить в очередь, см. раздел «Константы») (ver. 1.11)
  • nosplit - По одной цене (true/false). (ver. 1.11)
  • usecredit - Использовать ли кредит (true/false, по умолчанию берется настройка для обычных заявок исходя из свойств бумаги). (ver. 1.11)
  • error - 1 - ошибка (не найдена информация о заявке), 0 - нет ошибки
  • confirm_dialog - если true, то вместо выставления заявки на биржу, будет выведен диалог ввода заявки (может присутствовать только при выставлении заявки, поле не сохраняется после её выставления). (ver. 1.16)

Стоп-заявки

Хеш, возвращаемый функций getStopOrder() имеет следующие поля:

  • trnid - Идентификатор транзакции сервера Transaq.
  • orderno - Номер заявки на бирже.
  • status - Состояние заявки (значения смотрите в разделе константы).
  • client - Идентификатор клиента
  • operation - Операция (OP_BUY или OP_SELL)
  • canceller - Идентификатор трейдера, снявшего заявку
  • trdno - Биржевой номер сделки, спровоцировавший исполнение стопа
  • validbefore - До какого времени действительная заявка
  • author - Идентификатор трейдера, выставившего заявку
  • accepttime - Время принятия заявки сервером Transaq
  • linkedorderno - Биржевой номер связанной заявки
  • sl_activationprice - Цена активации заявки Stop Loss
  • sl_brokerref - примечание Stop Loss, максимальная длина определяется функцией getMaxBrokerRefLen() (ATF 1.18)
  • sl_guardtime - Защитное время Stop Loss в секундах
  • sl_quantity - Количество лотов в Stop Loss (может быть задана в процентах, тогда выводится/вводится в виде «12.34%»)
  • sl_orderprice - Цена заявки Stop Loss (при отсутствии этого параметра будет выставлена рыночная заявка)
  • tp_activationprice - Цена активации Take Profit
  • tp_brokerref - примечание Take Profit, максимальная длина определяется функцией getMaxBrokerRefLen() (ATF 1.18)
  • tp_guardtime - Защитное время Take Profit в секундах
  • tp_quantity - Количество лотов в Take Profit (может быть задана в процентах, тогда выводится/вводится в виде «12.34%»)
  • tp_extremum - Локальный экстремум трейлинга
  • tp_level - Ожидаемый уровень коррекции
  • tp_correction - величина коррекции для следящего Take Profit (может быть задана в процентах, тогда вводится в виде «12.34%», так же может отсутствовать, тогда Take Profit не будет следящим)
  • tp_guardspread - Защитный спрэд Take Profit (может быть задан в процентах, тогда выводится/вводится в виде «12.34%», так же может отсутствовать)
  • error - 1 - ошибка (не найдена информация о заявке), 0 - нет ошибки
  • message - текстовое сообщение об ошибке от сервера (1.18)
  • confirm_dialog - если true, то вместо выставления заявки на биржу, будет выведен диалог ввода стоп-заявки. (ver. 1.16)

Функции

  • calc() - событие сделки на рынке по данному инструменту
  • getActiveOrderIDs() - получить массив идентификаторов всех активных заявок по данной бумаге и активному клиенту. (ver. 1.12)
  • getActiveStopOrderIDs() - получить массив идентификаторов всех активных стоп-заявок по данной бумаге и активному клиенту. (ver. 1.12)
  • getAllOrderIDs() - получить массив идентификаторов всех заявок (включая условные, но за исключением стоп-заявок, по всем клиентам и бумагам, включая исполненные и снятые). (ver. 1.12)
  • getAllStopOrderIDs() - Получить массив идентификаторов всех стоп-заявок (по всем клиентам и бумагам, включая исполненные и снятые). (ver. 1.12)
  • getAllTradeIDs() - получить массив идентификаторов всех клиентских сделок (ATF 1.17)
  • getAllTradeIDsBySec() - получить массив идентификаторов всех клиентских сделок по текущей бумаге (ATF 1.17)
  • getAllTradeIDsBySec(id) - получить массив идентификаторов всех клиентских сделок по бумаге с идентификатором id (ATF 1.17)
  • book.getAskPosCount() - Количество доступных позиций по продаже в стакане
  • book.getAskPrice(n) - цена в стакане для номера позиции по продаже
  • book.getAskVolume(n) - объем заявок в стакане для номера позиции n по продаже
  • book.getBidPosCount() - Количество доступных позиций по покупке в стакане
  • book.getBidPrice(n) - цена в стакане для номера позиции по покупке
  • book.getBidVolume(n) - объем заявок в стакане для номера позиции n по покупке
  • getBought() - Количество купленных бумаг. Для акций отсчет с начала торговой сессии, для FORTS считаются сделки за весь день и за предыдущую вечернюю сессию.
  • getBoughtMoney() - Количество денег, на которые было куплено активов за текущий день
  • getLastErrorMessage() - последнее сообщение об ошибке (ATF 1.18)
  • getLastTradeVolume() - получить объем в последней сделке по данной бумаге. (ver. 1.11)
  • getOrder(id) - получить заявку по идентификатору или хэшу (начиная с ATF 1.16), в котором заполнено либо trnid, либо orderno (приоритет для trnid)
  • getStopOrder(id) - получить стоп-заявку по идентификатору
  • getTrade(id) - получить сделку по идентификатору
  • isTradingAllowed() - Разрешены ли в данном окне сделки ATF
  • onATFOrder(id) - событие изменения статуса заявки выставленной роботом; в качестве id передается номер транзакции.
  • onATFOrderErr(str) - событие ошибки заявки и сделки. В str передается текст ошибки.
  • onATFStopOrder(id) - событие изменения статуса стоп-заявки и сделки выставленной роботом; в качестве id передается номер транзакции
  • onATFTrade(id) - событие совершения сделки, выставленной роботом; в качестве id передается номер транзакции.
  • onBookChanged() - событие изменения состояния стакана котировок
  • onClientOrder(id) - событие изменения статуса заявки выставленной клиентом; в качестве id передается номер транзакции.
  • onClientStopOrder(id) - событие изменения статуса стоп-заявки выставленной клиентом; в качестве id передается номер транзакции.
  • onClientTrade(id) - событие совершения сделки, выставленной клиентом; в качестве id передается номер транзакции.
  • onStartRobot() - событие запуска робота (нажание на «красного робота» внизу)
  • onStopRobot() - событие остановки робота пользователем (нажатие на «зеленого робота» внизу)
  • shutdownRobots() - запретить выполнение сделок роботами в данном окне
  • trade_action::buy(amount, measure) - купить по рынку
  • trade_action::buy(amount, measure, price) - купить
  • trade_action::buyMultiple(amount, measure, price) - кратная версия buy
  • trade_action::cancelAllOrders() - Снять все заявки по используемой бумаге
  • trade_action::cancelBuyOrders() - Снять заявки на покупку по используемой бумаге
  • trade_action::cancelOrder(order) - Снять заявку. В качестве параметра указывается либо идентификатор заявки, либо сам объект заявки, при этом заявка снимается по номеру, и лишь в случае, если номер заявки не указан, используется идентификатор, записанный в структуре. (ver 1.10)
  • trade_action::cancelOrderByNo(no) - Снять заявку по указанному номеру. (ver. 1.10)
  • trade_action::cancelSellOrders() - Снять все заявки на продажу
  • trade_action::cancelStopOrder(id) - Снять стоп-заявку по идентификатору или по структуре. (ver. 1.10)
  • trade_action::sell(amount, measure) - продать по рынку
  • trade_action::sell(amount, measure, price) - продать
  • trade_action::sellMultiple(amount, measure, price) - кратная версия функции sell
  • trade_action::transact(order) - Выставить заявку в соответствии с полями, указанными в хеше
  • trade_action::transactMultiple(order) - кратная версия функции transact

Константы

  • COND_NONE - Нет условия
  • COND_BID - Условие на bid
  • COND_BID_OR_LAST - Условие на bid или последнюю цену
  • COND_ASK - Условие на ask
  • COND_ASK_OR_LAST - Условие на ask или последнюю цену
  • COND_TIME - Условие на время
  • COND_COV_DOWN - Обеспеченность ниже
  • COND_COV_UP - Обеспеченность выше
  • COND_LAST_UP - Последняя сделка выше
  • COND_LAST_DOWN - Последняя сделка ниже
  • OP_BUY - Покупка
  • OP_SELL - Продажа
  • OS_NONE - Отсутствие статуса заявки (заявка вероятно не найдена)
  • OS_WATCHING - Ожидание наступления условия
  • OS_DISABLED - Прекращена трейдером (условная заявка, которую сняли до наступления условия)
  • OS_EXPIRED - Время действия истекло
  • OS_DENIED - Отклонена брокером
  • OS_FORWARDING - Выставляется на биржу
  • OS_REJECTED - Отклонена биржей
  • OS_FAILED - Не удалось выставить на биржу
  • OS_ACTIVE - Активная заявка
  • OS_CANCELLED - Снята трейдером (заявка уже попала на рынок и была отменена)
  • OS_REMOVED - Аннулирована биржей
  • OS_MATCHED - Исполнена
  • OS_REFUSED - Отклонена контрагентом
  • OS_WAIT - Не наступило время активации
  • OS_INACTIVE - Статус неактивной заявки не известен из-за сбоев связи с Биржей
  • UNFILLED_CANCELBALANCE - Заявка типа «снять остаток»
  • UNFILLED_IMMORCANCEL - Заявка типа «Немедленно или отклонить»
  • UNFILLED_PUTINQUEUE - Заявка типа «Поставить в очередь»
  • TILL_CANCELED - Заявка активна до отмены (ver. 1.7)
  • SS_WATCHING - Ожидает наступления условия (ver. 1.12)
  • SS_DISABLED - Прекращена трейдером (стоп-заявка, которую сняли до наступления условия) (ver. 1.12)
  • SS_EXPIRED - Время действия истекло (ver. 1.12)
  • SS_DENIED - Отклонена Брокером (ver. 1.12)
  • SS_REJECTED - Отклонена биржей (ver. 1.12)
  • SS_FAILED - Не удалось выставить на биржу (ver. 1.12)
  • SS_CANCELLED - Снята трейдером (заявка уже попала на рынок и была отменена) (ver. 1.12)
  • SS_LINKWAIT - Ожидает исполнения связанной заявки (ver. 1.12)
  • SS_SL_GUARDTIME - Стоп-лосс ожидает исполнения в защитном периоде (ver. 1.12)
  • SS_SL_EXECUTED - Выполнена (Stop Loss) (ver. 1.12)
  • SS_SL_FORWARDING - Стоп выставляется на биржу (Stop Loss) (ver. 1.12)
  • SS_TP_GUARDTIME - Стоп ожидает исполнения в защитном периоде (Take Profit) (ver. 1.12)
  • SS_TP_EXECUTED - Выполнен (Take Profit) (ver. 1.12)
  • SS_TP_CORRECTION - Ожидает исполнения в режиме коррекции (Take Profit) (ver. 1.12)
  • SS_TP_FORWARDING - Стоп выставляется на биржу (Take Profit) (ver. 1.12)
  • SS_TP_CORRECTION_GUARDTIME - Стоп ожидает исполнения в защитном режиме после коррекции (Take Profit) (ver. 1.12)

См. также

atf/заявки_и_сделки.txt · Последние изменения: 2013/09/04 15:20 — heller