Главная > Начинающим, Торговый робот > Расчет размера позиции в торговых роботах

Расчет размера позиции в торговых роботах

30 декабря 2009

Размер позиции в торговом роботеПоздравляю всех с наступающим новым годом и Рождеством! Хочу пожелать любви, мудрости и конечно же прибыли!

Но, праздники праздниками, а работать надо. Сегодня мы обсудим алгоритмы получения текущего баланса и расчета открываемой позиции. Расчет у нас пока будет простой — на основе заданного процента от доступного капитала. В случае с акциями все просто — за нее мы платим столько, сколько она стоит. А вот с фьючерсами несколько сложнее, там мы платим гарантийное обеспечение, которое не равно стоимость самого контракта. Рассмотренный алгоритм можно применять в т.ч. в коммерческих версиях моих торговых роботов.Итак, получение баланса на ММВБ. Размер текущего баланса мы видим из таблицы «Лимиты по денежным средствам». Но удобнее его получать из таблицы «Клиентский портфель»:

MONEYCURRENTBALANCE = GET_VALUE(GET_CLIENT_MARGINAL_PORTFOLIO_INFO(FIRMAMICEX,ACCOUNTMICEX),"ALL_ASSETS")

где:

FIRMAMICEX и ACCOUNTMICEX — идентификаторы фирмы и аккаунта соответсвенно, которые, кстати, можно тоже получать автоматически:

FIRMAMICEX=GET_VALUE(GET_ITEM("MONEY_LIMITS",1), "FIRMID")
ACCOUNTMICEX=GET_VALUE(GET_ITEM("DEPO_LIMITS",1), "TRDACCID")

Таким образом, заранее определив переменную RISK=20%, и определив цену последней сделки нужного нам инструмента, мы можем рассчитать количество ЦЕЛЫХ лотов:


RISK=20

LAST=GET_VALUE(GET_PARAM_EX("EQBR","SBER03","LAST"),"PARAM_VALUE")+0
LOTS = APPLY_SCALE(MONEYCURRENTBALANCE/100*RISK/LAST,0)

Теперь значение переменной LOTS у нас рассчитано исходя из заданного процента риска. Это самый простой пример автоматизации процесса управления капиталом, но эти методы можно использовать при любом расчете.

Это мы рассмотрели вариант ММВБ, теперь рассмотрим ФОРТС (или другой срочный рынок). Здесь значение доступных средств мы получаем из таблицы «Ограничения по счетам»:


RISK=20

GO = GET_VALUE(GET_PARAM_EX("SPBFUT","RIH0","SELLDEPO"),"PARAM_VALUE")+0

MONEYCURRENTBALANCE = GET_VALUE(GET_ITEM("FUTURES_CLIENT_LIMITS",1), "CBPLIMIT")+0
LOTS = APPLY_SCALE(MONEYCURRENTBALANCE/100*RISK/GO,0)

Как я уже говорил, расчет количества лотов для срочных секций ведется на основе суммы гарантийного обеспечения.

Подобные расчеты могут применяться в большинстве торговых роботов.

Успехов в Новом Году!

Евгений Начинающим, Торговый робот ,

  1. nc
    20 Июль 2010 в 16:08 | #1

    подскажите новечку... Возможно ошибка в коде, или я не прав?

    При использовании кода:

    FIRMAMICEX=GET_VALUE (GET_ITEM («MONEY_LIMITS»,1), «FIRMID»)

    ACCOUNTMICEX=GET_VALUE (GET_ITEM («DEPO_LIMITS»,1), «TRDACCID»)

    не вычисляется MONEYCURRENTBALANCE, так как ACCOUNTMICEX, как я понимаю, должен быть «Код клиента»(CLIENT_CODE), а подставляется «Счет депо»(TRDACCID)...

    Подставил вместо «TRDACCID» — «CLIENT_CODE», заработало...

    Сейчас код такой(у меня):

    FIRMAMICEX=GET_VALUE (GET_ITEM («MONEY_LIMITS»,1), «FIRMID»)

    ACCOUNTMICEX=GET_VALUE (GET_ITEM («DEPO_LIMITS»,1), «CLIENT_CODE»)

    Или я не прав в чем-то?

    Евгений Reply:

    Привет.

    Если заработало — значит правильно, просто у разных брокеров по разному.

    nc Reply:

    Привет! Спасибо за ответ!

    Значит, кому-то мой вопрос и Ваш ответ на него — пригодятся...

  1. Пока что нет уведомлений.
Необходимо войти на сайт, чтобы написать комментарий.