Germany | Finland | Saint Petersburg | Drive

Разбор коллекции сделок

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

Ранее был приведён текст функции  Получение коллекции сделок по номеру заявки, произошедших на основании выставленного ордера. Сама по себе эта функция не имеет самостоятельного значения - она только собирает данные. Чтобы получить из этих данных информацию о себестоимости купленного/проданного, количестве, сумме я использую функцию  Parse_Trades_Collection().  Она возвращает ассоциативный массив, содержащий рассчитанные данные по коллекции сделок.

 


' Рассчитывает суммарные и средние величины по коллекции сделок
' Создаёт массив с полями:
' QUANTITY - общее количество лотов
' LOT_SIZE - размер лота
' VALUE - общая сумма
' LOT_PRICE - средняя стоимость лота
' PRICE - средняя стоимость акции/контракта
' TS_COMISSION - комиссия торговой системы
FUNC Parse_Trades_Collection(ptc_trades_collection)
             result = create_map()
            gtv_count = get_collection_count(ptc_trades_collection)
            if gtv_count != 0
                        for gtv_i from 0 to gtv_count - 1
                                gtv_trade = get_collection_item(ptc_trades_collection,gtv_i)
                                ' Получаем размер лота
                                if gtv_i == 0
                                            result = set_value(result,"LOT_SIZE",get_value(gtv_trade,"VALUE") / (get_value(gtv_trade,"PRICE") * get_value(gtv_trade,"QUANTITY")))
                                end if 
                                ' Заполняем поля
                                for gtv_attribute in "QUANTITY,VALUE,TS_COMISSION"
                                              result = inc_value(result,gtv_attribute,get_value(gtv_trade,gtv_attribute))
                                end for
                        end for
                       ' Рассчитываем стоимость лота
                       result = set_value(result,"LOT_PRICE",get_value(result,"VALUE") / get_value(result,"QUANTITY"))
                       ' Рассчитываем стоимость акции
                       result = set_value(result,"PRICE",get_value(result,"LOT_PRICE") / get_value(result,"LOT_SIZE"))
           end if
END FUNC

Либо вариант с использованием препроцессора M4:


dnl Рассчитывает суммарные и средние величины по коллекции сделок
dnl Создаёт массив с полями:
dnl ~QUANTITY - общее количество лотов
dnl ~LOT_SIZE - размер лота
dnl ~VALUE - общая сумма
dnl ~LOT_PRICE - средняя стоимость лота
dnl ~PRICE - средняя стоимость акции/контракта
dnl ~LOT - размер лота
dnl ~TS_COMISSION - комиссия торговой системы
FUNC Parse_Trades_Collection(collection)
  Local(i,count,trade,attribute)

  WithInit(result)
    count = get_collection_count(collection) - 1
    if count != -1
      for i from 0 to count
        trade = get_collection_item(collection,i)
dnl Получаем размер лота
        if i == 0
          SetKey("~LOT_SIZE",get_value(trade,"VALUE") / (get_value(trade,"PRICE") * get_value(trade,"QUANTITY")))  
        end if
dnl Заполняем поля
        for attribute in "~QUANTITY,~VALUE,~TS_COMISSION"
          IncKey(attribute,get_value(trade,attribute))
        end for
      end for dnl Рассчитываем стоимость лота
      SetKey("~LOT_PRICE",GetKey("~VALUE") / GetKey("~QUANTITY")) dnl Рассчитываем стоимость акции
      SetKey("~PRICE",GetKey("~LOT_PRICE") / GetKey("~LOT_SIZE"))
    end if
  EndWith
EndFunc(result)

Следует иметь ввиду, что рассчитывается себестоимость позиции в разрезе денег, а не котировок. Для рублёвых инструментов деньги и котировки совпадут. Чтобы получить себестоимость нерублевых инструментов в разрезе котировок, полученные себестоимости необходимо пересчитать через стоимость шага цены инструмента.

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