Привет всем от начинающего трейдера. Последние четыре месяца торгую в системе (торговом терминале) 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Как запустить и настроить: