В расчете профита не учитывается лотность, т.е. кол-во акций в одном лоте и стоимость шага цены.
Не верно считает профит: в расчете не учитывается лотность, т.е. кол-во акций в одном лоте и не точно берется стоимость шага цены на акциях ММВБ через КВИК.
Профит по позиции в 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рубля
ООО «ВАН ТЕХНОЛОГИИ»т: +7 953 769 56 45
* Торговля на финансовых рынках связана с риском, который лежит на Вас.
* Ничто из написанного на сайте o-s-a.net не является рекомендацией.
* Если Вы этого не понимаете, не читайте этот сайт, ничего не покупайте.