Сбор за транзакции

Страницы: 1
RSS
Сбор за транзакции
 
Господа, добрый день.
Я запустил робота с большим количеством транзакций на срочном рынке. Я думал, что верно интерпретировал формулу подсчёта сбора за транзакции. Полагал, что у меня достаточное количество сделок, чтобы не попадать на этот штраф. Но всё же биржа мне начислила этот штраф: 2300 рублей.
Прошу подсказать где ошибка в моём коде.
По сути формула изложена в самом конце кода:
sbor=0.1*(orders*2*1-(trades*comiss*40))
Вот так она выглядит на сайте биржи http://www.moex.com/a3825
Спасибо за помощь.
Код
function Sbor()
   local order_line
   count=0
   for t=getNumberOf("orders"),1,-1 do
      order_line=getItem("orders",t-1)
      if order_line.class_code=="SPBFUT" then 
         count=count+1
      end
   end
   orders=count
    local deal_line
    count=0
    comiss=0
    for t=getNumberOf("trades"),1,-1 do
       trade_line=getItem("trades",t-1)
          if trade_line.class_code=="SPBFUT" then 
            comiss=comiss+trade_line.exchange_comission 
             count=count+1
          end
    end
   trades=count
   sbor=0.1*(orders*2*1-(trades*comiss*40))
   tbl:SetValue(1,'sbor', orders.." | "..trades.." | "..comiss.." | "..sbor)   
   return orders,trades,comiss
end
 
Let_it_go,
Не совсем понятно в чем именно вопрос.
В том что Ваши расчеты за сбор не совпадают с биржевыми (тогда вопрос к бирже)?
или в том что Вы подали больше неэффективных транзакций чем ожидалось (тогда вопрос к Вам, зачем подавать столько не эффективных транзакций)?
 
Согласно расчётам приведённого скрипта у меня всё было в порядке.
Вопрос не философский, а математический.
 
Let_it_go,
Вы не ответили, собственно в чем же вопрос?
Если формула не то показала, ищите ошибку в формуле.
 
Да.
Формула не то показала.
Я написал этот пост с просьбой сравнить мою формулу и биржевую.
 
Добрый день.
Подробно разбираться в коде и проверять его времени нет, но первое что бросается в глаза, это отсутствие MAX в Вашей формуле, попробуйте:
Код
sbor=0.1*math.max(orders*2*1-(trades*comiss*40),0)
Перед тем как задать вопрос, убедитесь, что решение Вашей задачи не описано в официальном мануале - 'Использование Lua в Рабочем месте QUIK.pdf' https://arqatech.com/upload/Public/quik_lua.zip
 
Let_it_go,
Тогда ищите ошибку в формуле.
почему у Вас идет умножение на два?
И почему Вы умножаете комиссию на количество сделок?
в формуле на которую Вы указали этого нет.
 
Цитата
Sergey Gorokhov написал:
Let_it_go  ,
Тогда ищите ошибку в формуле.
почему у Вас идет умножение на два?
И почему Вы умножаете комиссию на количество сделок?
в формуле на которую Вы указали этого нет.
умножение на два потому что транзакцией считается выставление-снятие. Поэтому я количество заявок умножаю на два.
 
Я нашёл ещё одну ошибку.
Я беру комиссию из ленты моих сделок.




Так как мои сделки скальперские, то эту цифру надо поделить на два.
 
Let_it_go,
а Вы уверены что это верный подход?

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

и Вы не ответили на второй вопрос.
Зачем идет умножение количества сделок на сумму комиссий?
 
И еще непонятно выражение
Код
orders*2*1
во-первых непонятно зачем умножаете на 2 и на 1, с математической точки зрения умножение на 1 бессмысленно, во-вторых количество заявок не гарантирует что Вы учли все транзакции, некоторые транзакции могут отвергаться, а я предполагаю, что биржа их тоже учитывает, поэтому Вам нужно считать не количество успешно выставленных заявок, а количество дошедших до биржи транзакций, например через OnTransReply (подробнее см. в справке по Qlua, фильтруйте транзакции по полю status в ответе на транзакцию, чтобы понять какие транзакции дошли до биржи, а значит были учтены ей).
Перед тем как задать вопрос, убедитесь, что решение Вашей задачи не описано в официальном мануале - 'Использование Lua в Рабочем месте QUIK.pdf' https://arqatech.com/upload/Public/quik_lua.zip
 
Nikolay Pavlov,

на мой взгляд, это не так критично как это

Цитата
Let_it_go написал:
trades*comiss
 
Цитата
и Вы не ответили на второй вопрос.
Зачем идет умножение количества сделок на сумму комиссий?



k – балл для транзакции, определенный в соответствии с таблицей 1;
f – сбор, уплаченный за заключение сделки;
l – балл для сделки, определенный в соответствии с таблицей 1.

параметр f я беру из таблицы моих сделок (столбец комиссия) и умножаю его на величину l
l=количество сделок умноженное на балл. В моём случае балл равен 40.

 
Let_it_go,

спасибо, я уже видел эту формулу.

давайте посчитаем проблемный участок на примере.


допустим у Вас было три сделки.
допустим комиссии по ним были такие 1, 2 и 4
Согласно формуле мы должны посчитать
1*40 + 2 * 40 + 4 * 40

Вы же, вынесли 40 за скобки.
ко школьному курсу алгебры, это выглядит так:
(1 + 2 + 4) * 40
где (1 + 2 + 4) это Ваше comiss

а Вы написали
trades*comiss*40

Вопрос, в том, зачем тут trades?
 
Цитата
Sergey Gorokhov написал:
на мой взгляд, это не так критично как это

ЦитатаLet_it_go написал:
trades*comiss
Да, действительно, trades здесь однозначно лишнее.
Перед тем как задать вопрос, убедитесь, что решение Вашей задачи не описано в официальном мануале - 'Использование Lua в Рабочем месте QUIK.pdf' https://arqatech.com/upload/Public/quik_lua.zip
 
Согласен.
Теперь в таком виде
Код
function Sbor()
   local order_line
   count=0
   for t=getNumberOf("orders"),1,-1 do
      order_line=getItem("orders",t-1)
      if order_line.class_code=="SPBFUT" then 
         count=count+1
      end
   end
   orders=count
    local deal_line
    count=0
    comiss=0
    for t=getNumberOf("trades"),1,-1 do
       trade_line=getItem("trades",t-1)
          if trade_line.class_code=="SPBFUT" then 
            comiss=comiss+(trade_line.exchange_comission*0.5) 
            count=count+1
          end
    end
   trades=count
   sbor=0.1*(orders*2-comiss*40)
   tbl:SetValue(1,'sbor', orders.." | "..trades.." | "..comiss.." | "..sbor)   
   return orders,trades,comiss
end
 
Кроме того, есть ещё сбор за ошибочные транзакции. Это когда транзакция отклоняется по тем или иным причинам. Например, не хватило средств для новой заявки или была попытка снять/переставить заявку после её исполнения.
Цитата
Let_it_go написал:
sbor=0.1*(orders*2-comiss*40)
Выше правильно написали: вам нужно считать не количество заявок, а количество транзакций: поставил заявку - одна транзакция, снял - другая транзакция, move - ещё одна транзакция.
Из http://www.moex.com/a3825 не понятно, учитывает ли методология расчёта ошибочные транзакции в общем количестве неэффективных транзакций.
Надо делать так, как надо. А как не надо - делать не надо.
Страницы: 1
Читают тему
Наверх