Очереди и двойные очереди в луа

Страницы: Пред. 1 ... 22 23 24 25 26
RSS
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
VPM, С ног на голову, говорите? Ну, давайте поставим на ноги: мой скрипт давно написан, отлажен, работает в боевом режиме прямо сейчас, тикеров у него на два порядка больше, чем у вас, никаких проблем ни с памятью, ни с быстродействием нет от слова "совсем", все глюки системного софта (по крайней мере, все известные мне) купированы, моё "частное решение" реализовано! Ваше же "общедоступное решение" НЕ реализовано и не будет реализовано НИКОГДА.
 
Владимир,  Я Вас поздравляю с отличным решением! Я ушел заниматься своим, а то действительно не соберу. НО ХОЧЕТСЯ ПОДНЯТЬ  новую тему?
 
----- lifo из двусвязной очереди и пример позволят вести себя как стек - обеспечивая LIFO-порядок.
Скрытый текст

Еще одна реализация стека, по сути это тоже самое что и в букваре только реализация в виде класса, просто удобней пользоваться., наследуется без проблем, легко дописать фифо. У себя делаю лифо  для контроля памяти, создавая динамические окна. Выкладываю может кому еще сгодится.
 
Цитата
Nikolay написал:
Открываете пример MA.lua, например расчет SMA, и видите использование массива sum равного длине периода.

Да нет, вроде, в sum хранятся значения по всем свечам:

Код
function F_SMA()
   local sum = {}
   local it = {p=0, l=0}
return function (I, P, VT, ds)
   if I == 1 then
      sum = {}
      it = {p=0, l=0}
   end
   if CandleExist(I,ds) then
      if I~=it.p then it={p=I, l=it.l+1} end
      local Ip,Ipp,Ippp = Squeeze(it.l,P),Squeeze(it.l-1,P),Squeeze(it.l-P,P)
      sum[Ip] = (sum[Ipp] or 0) + GetValueEX(it.p,VT,ds)
      if it.l >= P then
         return (sum[Ip] - (sum[Ippp] or 0)) / P
      end
   end
return nil
end
end
 
А, разобрался: функция Squeeze возвращает индекс в массиве "по кольцу" в пределах заданного периода.
 
Цитата
VPM написал:
-- Создание LIFO из двусвязанной очереди
table.insert / table.remove делают то же самое, только быстрее.
 
Цитата
VPM написал:
---- lifo из двусвязной очереди и пример позволят вести себя как стек - обеспечивая LIFO-порядок
Можно гораздо проще:
Код
local LIFO = {}
LIFO.__index = LIFO
function LIFO.new()
  return setmetatable({}, LIFO)
end
function LIFO:push(v)
  self[#self+1] = v
end
function LIFO:pop()
  local idx = #self
  if idx == 0 then return nil end
  local v = self[idx]
  self[idx] = nil
  return v
end
 
Если Вы про оптимизацию, то  согласен без спорно быстрее. Но иногда  просто нужен тупой код прямолинейный как стрела, для пользователей типа меня, просто что его можно было прочесть, и успокоится что все выполняется как надо. Здесь ключевое выполняется как надо? А разве нет?
Страницы: Пред. 1 ... 22 23 24 25 26
Читают тему
Наверх