5 купились по цене 103100 3 купились по цене 103101 2 купились по цене 103102
Проходит время мы сделали докупку на 5 контрактов. 4 купились по цене 103250 1 купился по цене 103251
Проходит время мы решили закрыть часть позиций (а именно 10 контрактов). 5 было закрыто по цене 103500 5 было закрыто по цене 103501
Проходит еще время и мы решили закрыть все. 1 был закрыт по цене 103602 1 был закрыт по цене 103603 1 был закрыт по цене 103604 1 был закрыт по цене 103605 1 был закрыт по цене 103606
Как посчитать результат сделки?
Если бы это был открыт 1 контракт, либо было открыто 10 контрактов по одной и той же цене, и аналогично если бы было закрыто все по 1 цене - здесь вопросов нет...
Сделка это один пункт из вашего списка, у нее результат "купились/продались икс контрактов по цене игрек". А результат серии сделок посчитать так: завести переменную, равную 0. Каждый раз, когда что-то купилось, уменьшать переменную на объем покупки. Каждый раз, когда что-то продалось, увеличивать ее на объем продажи. Когда закрылось все, в переменной останется чистая разница по всем проведенным сделкам. Считать можно как в реалтайме, так и задним числом по списку сделок.
Anton написал: Сделка это один пункт из вашего списка, у нее результат "купились/продались икс контрактов по цене игрек". А результат серии сделок посчитать так: завести переменную, равную 0. Каждый раз, когда что-то купилось, уменьшать переменную на объем покупки. Каждый раз, когда что-то продалось, увеличивать ее на объем продажи. Когда закрылось все, в переменной останется чистая разница по всем проведенным сделкам. Считать можно как в реалтайме, так и задним числом по списку сделок.
Не совсем понял как посчитать - можно пожалуйста пример.
Пусть у нас есть табличка луа в виде массива со сделками, у каждой сделки есть как минимум поля direction = { 'B' | 'S' } и value (объем в деньгах).
Код
function calc_result(tradelist)
local result = 0
for i,t in ipairs(tradelist) do
if t.direction == 'B' then
result = result - t.value
elseif t.direction == 'S' then
result = result + t.value
else
error('WTF')
end
end
return result
end
Anton написал: Пусть у нас есть табличка луа в виде массива со сделками, у каждой сделки есть как минимум поля direction = { 'B' | 'S' } и value (объем в деньгах).
Код
function calc_result (tradelist)
local result = 0
for i,t in ipairs(tradelist) do
if t.direction = = 'B' then
result = result - t.value
elseif t.direction = = 'S' then
result = result + t.value
else
error( 'WTF' )
end
end
return result
end
Можно пожалуйста пример нескольких строк из таблицы привести.
{
{ direction = 'B' , value = 33000.0 },
{ direction = 'S' , value = 32000.0 },
}
Нашел способ посчитать через средневсзвешенное. В Excel это формула =СУММПРОИЗВ(E1:E10;F1:F10)/СУММ(F1:F10). Но не могу найти внятного пояснения как оно рассчитывается в плане формулы?
-- INPUTS:
-- values : { v1, v2, ... , vN }
-- weights : { w1, w2, ... , wN }
-- OUTPUT:
-- weighted average
function WeightedAverage(values, weights)
local num = 0, den = 0
for i = 1, #values do
num = num + values[i] * weights[i]
den = den + weights[i]
end
return (num / den)
end