Привет всем от начинающего трейдера. Последние четыре месяца торгую в системе (торговом терминале) QUIK(далее Квик). Терминал от БКС v.7.14.1.7. Дошёл в своих начинаниях на этом поприще до ведения журнала торгов и анализа. Поднял данные прежних своих беспорядочных безучётных спекуляций. Выяснил, что мои расчёты расходятся с анализом и расчётами Квика. Первое подозрение появилось, когда заметил, что при продаже части акций пакета по цене отличающейся от «балансовой цены»(я так понял, то это средняя цена акции в пакете), балансовая цена не меняется. Почему?
Начал фотографировать таблицу «Состояние счёта» после каждой операции. Открыл калькулятор и прибавлял или вычитал стоимость операции(произведение количества акций на их цену при сделке) к или из балансовой стоимости, соответственно для операций докупа или частичной продажи акций. Получилось, что при докупе акций всё считается правильно, а при частичной продаже, калькулятор и Квик дают разный результат. Почему?
Решил загрузить в Excel данные по сделкам с одним из инструментов, с такими частичными продажами и докупом акций. Поиграл с формулами, как я считал балансовую цену, балансовую стоимость и параметр «±», я его назвал «Прибыль/убыток», и как же всё-таки считает Квик. Что я выяснил на модели в Excel.
Открытие позиции, последующий докуп акций, одинаково считаем и я и Квик. А вот после частичной продажи акций, Квик не правильно пересчитывает новую балансовую стоимость и соответственно неправильно пересчитывается балансовая (средняя) цена, вернее она остаётся той же, что до операции. В чем ошибка?
Так считает Квик

А так должно быть

Квик при частичной продаже акций из текущей балансовой стоимости вычитает произведение количества продаваемых акций на текущую балансовую цену, а не на цену продажи акций. Именно поэтому новая балансовая цена акций остаётся неизменной, ведь балансовая цена это простое деление новой балансовой стоимости на оставшееся количество акций в пакете. Причём это только при частичной продаже. При докупе акций, Квик почему то балансовую стоимость пересчитывает правильно — количество приобретаемых акций умножает на их цену покупки и добавляет к последней балансовой стоимости. К чему это приводит?
А приводит это к:
занижению балансовой цены;
занижению балансовой стоимости;
выдаче ложного сигнала в параметре «±» таблицы «Состояние счёта», что после некоторого количества манипуляций с частичными продажами и докупом акций убыток перешёл в разряд допустимых, а то и уже начал приносить прибыль и от него можно избавиться.
Мой файл Excel с моделью и примерами: https://yadi.sk/i/PpgBc2LJ3Qe8KT
Можете ввести свои данные подобных сделок в форму( до столбца G) и сравнить.
Одинаково жду подтверждения своей правоты или опровержения.

По сообщению от разработчиков торгового терминала Quik отсутствие значений в столбце «%изменений» связано с обновлением Торговых интерфейсов Фондового и Валютного рынков Московской Биржи до версий 11.9.x
В ближайшее время сбой будет устранён путём выхода обновления или рекомендации по настройки торгового терминала Quik.



Settings=
{
Name = "Piton",
N = 100,
legend = "price2",
line =
{
{ Name = "Sint",
Color = RGB(0, 132, 0),
Type = TYPE_LINE,
Width = 1
}
}
}
function Init()
return 1
end
Candles = {};
function OnCalculate(index)
local numCandles = getNumCandles(Settings.legend);
if index <= Settings.N or numCandles <= Settings.N then
return nil;
end
Candles, n, _ = getCandlesByIndex(Settings.legend, 0, index - Settings.N, Settings.N);
if n ~= Settings.N then
return nil;
end
-- Предварительный расчет
sum1, sum2, sum3 = advancePaynemt(index);
-- расчет коэффициента корреляции Пирсона
r = sum3/math.sqrt(sum1*sum2);
return r;
end
-- Предварительный расчет
----------------------------------------
function advancePaynemt(index)
local sum1 = 0;
local sum2 = 0;
local sum3 = 0;
local j = 0;
-- Вычислить среднее арифметическое
for i=index - Settings.N + 1, index, 1 do
sum1 = sum1 + C(i);
sum2 = sum2 + Candles[j].close;
j = j + 1;
end
aver1 = sum1/Settings.N;
aver2 = sum2/Settings.N;
-- Вычислить сумму квадратов отклонений
sum1 = 0;
sum2 = 0;
j = 0;
for i=index - Settings.N+1, index, 1 do
sum1 = sum1 + math.pow(C(i) - aver1, 2);
sum2 = sum2 + math.pow(Candles[j].close - aver2, 2);
j = j + 1;
end
-- Вычислить сумму произведений разности
j=0;
for i=index - Settings.N+1, index, 1 do
sum3 = sum3 + (aver1 - C(i))*(aver2 - Candles[j].close);
j = j + 1;
end
return sum1, sum2, sum3;
end
Как запустить и настроить: