Germany | Finland | Saint Petersburg | Drive

Получение коллекции сделок по номеру заявки

Опубликовано в QPILE

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

' Получение коллекции сделок по номеру заявки. Возвращает коллекцию сделок.
' Сделка с индексом 0 - самая ранняя по времени
FUNC Get_Trades_By_Order(_ord_num_gtbn)
          result = create_collection()
          number_of_trades_gtbn = get_number_of("TRADES")
          for i_gtbn from 0 to number_of_trades_gtbn - 1
                 trade_gtbn = get_item("TRADES",number_of_trades_gtbn - i_gtbn)
                 if 0 == get_value(trade_gtbn,"ORDER_NUMBER") - _ord_num_gtbn
                            result = insert_collection_item(result,0,trade_gtbn)
                 end if
         end for
END FUNC

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

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

После сбора информации о сделках нужно их обработать, получив общее количество, сумму, себестоимость и так далее. Функция, делающая это, описана в статье Разбор коллекции сделок

Добавить комментарий