Журнал сделок и расчет результата сделок

Страницы: 1
RSS
Журнал сделок и расчет результата сделок
 
К примеру было куплено 10 контрактов.

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 цене - здесь вопросов нет...
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
 
Сделка это один пункт из вашего списка, у нее результат "купились/продались икс контрактов по цене игрек". А результат серии сделок посчитать так: завести переменную, равную 0. Каждый раз, когда что-то купилось, уменьшать переменную на объем покупки. Каждый раз, когда что-то продалось, увеличивать ее на объем продажи. Когда закрылось все, в переменной останется чистая разница по всем проведенным сделкам. Считать можно как в реалтайме, так и задним числом по списку сделок.
 
Цитата
Anton написал:
Сделка это один пункт из вашего списка, у нее результат "купились/продались икс контрактов по цене игрек". А результат серии сделок посчитать так: завести переменную, равную 0. Каждый раз, когда что-то купилось, уменьшать переменную на объем покупки. Каждый раз, когда что-то продалось, увеличивать ее на объем продажи. Когда закрылось все, в переменной останется чистая разница по всем проведенным сделкам. Считать можно как в реалтайме, так и задним числом по списку сделок.
Не совсем понял как посчитать - можно пожалуйста пример.
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
 
Пусть у нас есть табличка луа в виде массива со сделками, у каждой сделки есть как минимум поля 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 
  
Можно пожалуйста пример нескольких строк из таблицы привести.
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
 
Цитата
Иван написал:
пример нескольких строк из таблицы
С этим-то какие сложности
Код
{
  { direction = 'B', value = 33000.0 },
  { direction = 'S', value = 32000.0 },
}
 
Цитата
Anton написал:
Цитата
Иван написал:
пример нескольких строк из таблицы
С этим-то какие сложности
Код
  {
  { direction  =   'B' , value  =   33000.0  },
  { direction  =   'S' , value  =   32000.0  },
}
  
Нашел способ посчитать через средневсзвешенное.
В Excel это формула =СУММПРОИЗВ(E1:E10;F1:F10)/СУММ(F1:F10).
Но не могу найти внятного пояснения как оно рассчитывается в плане формулы?
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
 
Цитата
Иван написал:
Но не могу найти внятного пояснения как оно рассчитывается в плане формулы?
Представления не имею, как в экселе формулы устроены. По логике средневзвешенного вот так
 
 
Цитата
Anton написал:
Цитата
Иван написал:
Но не могу найти внятного пояснения как оно рассчитывается в плане формулы?
Представления не имею, как в экселе формулы устроены. По логике средневзвешенного вот так
Код
-- Функция рассчета средневзвешенного
-- Средневзвешенное значение = (x1*w1 + x2*w2 + x3*w3) / (w1+w2+w3)
-- x1,x2,x3 - это значение (например цена)
-- w1,w2,w3 - вес каждого
-- $a = [10,20,30];
-- $b = [5,6,7];
-- $ar = array_map(function($e1,$e2){ return $e1*e2; }, $a, $b);
-- $result = array_sum($ar)/array_sum($b);
-- }
function _QuikUtilityWeightedAverage(ar1,ar2)

        local ar1_map = {};
        for i=1, #ar1 do
                ar1_map[#ar1_map+1] = ar1[i] * ar2[i];
        end;

        local sumAr1 = 0;
        for i=1, #ar1_map do
                sumAr1 = sumAr1 + ar1_map[i];
        end;

        local sumAr2 = 0;
        for i=1, #ar2 do
                sumAr2 = sumAr2 + ar2[i];
        end;

        return tonumber(sumAr1/sumAr2);
end;
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
 
Как-то очень сложно на мой взгляд.
Код
-- 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
Страницы: 1
Читают тему
Наверх