Расчет размера позиции в торговых роботах
Поздравляю всех с наступающим новым годом и Рождеством! Хочу пожелать любви, мудрости и конечно же прибыли!
Но, праздники праздниками, а работать надо. Сегодня мы обсудим алгоритмы получения текущего баланса и расчета открываемой позиции. Расчет у нас пока будет простой — на основе заданного процента от доступного капитала. В случае с акциями все просто — за нее мы платим столько, сколько она стоит. А вот с фьючерсами несколько сложнее, там мы платим гарантийное обеспечение, которое не равно стоимость самого контракта. Рассмотренный алгоритм можно применять в т.ч. в коммерческих версиях моих торговых роботов.Итак, получение баланса на ММВБ. Размер текущего баланса мы видим из таблицы «Лимиты по денежным средствам». Но удобнее его получать из таблицы «Клиентский портфель»:
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)
Как я уже говорил, расчет количества лотов для срочных секций ведется на основе суммы гарантийного обеспечения.
Подобные расчеты могут применяться в большинстве торговых роботов.
подскажите новечку... Возможно ошибка в коде, или я не прав?
При использовании кода:
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:
июля 20, 2010 at 18:35
Привет.
Если заработало — значит правильно, просто у разных брокеров по разному.
nc Reply:
июля 20, 2010 at 21:17
Привет! Спасибо за ответ!
Значит, кому-то мой вопрос и Ваш ответ на него — пригодятся...