Ошибка в расчете профита, по меньшей мере в акциях ММВБ

В расчете профита не учитывается лотность, т.е. кол-во акций в одном лоте и стоимость шага цены.

  1. avp

    Регистрация:
    26.07.19
    Сообщения:
    14
    Был на сайте:
    26.03.24

    Не верно считает профит: в расчете не учитывается лотность, т.е. кол-во акций в одном лоте и не точно берется стоимость шага цены на акциях ММВБ через КВИК.

    Профит по позиции в position.cs  считаем так:

     decimal profit = (ProfitOperationPunkt / PriceStep) * PriceStepCost * MaxVolume  - CommissionTotal();

    при этом  ProfitOperationPunkt = ask - EntryPrice; или   ProfitOperationPunkt = EntryPrice - bid; ну или  ProfitOperationPunkt = ClosePrice - EntryPrice; и это  не в пунктах, а в той же размерности что и цена. тоесть вошли в лонг по 202.79, сейчас ask 202.99, профит ProfitOperationPunkt  = 0.20

    PriceStep - шаг цены, с ним все понятно,

    MaxVolume  - тут уже интересно, это вошедший объем по позиции, причем в лотах. мы ж в квик все в лотах выставляем.

    т.е. купили два лот акция сбера, в каждом лоте  10 акций, но MaxVolume  =2.

    PriceStepCost  - стоимость шага цены, и тут тоже прикол: идем в QuikLuaServer.cs в private void BuildSecurity

    newSec.PriceStepCost = Convert.ToDecimal(QuikLua.Trading.GetParamEx(classCode, secCode, "STEPPRICET").Result.ParamValue.Replace('.', Separator));

    Так вот по акциям TQBR Квик STEPPRICET не выдает, или отдает 0, по срочным типа сишка, брашка отдает стоимость шага цены.

    вот из квика доказательство шага цены нет:

    Эта сиуация обыгрывается в QuikLuaServer не верно, делается так:

     if (newSec.PriceStepCost == 0)   {newSec.PriceStepCost = 1;}

    То есть стоимость шаг цены ставится 1, хотя по акциям сбера стоимость шага 0.01 - 1 копейка, 

    Смоделируем: взяли  2 лота (это 20 акций)  в лонг по 202.79, вышли по 202.99, считаем profit  по формуле выше

    decimal profit = (ProfitOperationPunkt / PriceStep) * PriceStepCost * MaxVolume  - CommissionTotal();

                         profit = ((202.99-202.79)/0.01) *  1(потому что STEPPRICET квик не отдал) * 2 (это  MaxVolume  ) = 40.

    Вопрос: 40 чего ? Правильный профит такой: взяли  20 копеек с акции, всего было 20 акций, получили 4 рубля, не 40.

    Может профит в пунктах? Тоже нет. Взяли 20 пунктов на 20 акциях, т.е. это 400 пунктов, тоже не 40.

    ну и в общем нужно исправить думаю так: в QuikLuaServer в  private void BuildSecurity

    if (newSec.PriceStepCost == 0)   {newSec.PriceStepCost = newSec.PriceStep;}

    тоесть стоимость шага цены равна самому шагу цены, а не 1.

    а в position.cs  

    decimal profit = (ProfitOperationPunkt / PriceStep) * PriceStepCost * MaxVolume * Lots - CommissionTotal();

    И тогда все верно подсчитает

    ((202.99-202.79)/0.01)  * 0,01(правильная стоимость шага)  *  2 (это  MaxVolume  )  *10 (лот) = 4рубля

     

    avp
    27.10.2020 20:19
    #1
  2. Алексей Ван Команда форума

    Регистрация:
    02.02.13
    Сообщения:
    1169
    Был на сайте:
    28.03.24

    Спасибо. Поправил

    Алексей Ван
    31.10.2020 10:20
    #2