VPM написал: "НУЖЕН КОНКРЕТНО В ВАШЕЙ ЗАДАЧЕ".Я говорил что мне не нравится как моя программа обращается с памятью. Основная проблема это накопление массивов данных (в моем варианте таблиц).Ну к примеру с частотой в 1 минуту получаю данные по свечам и индикаторам, складываю их в таблицу, которая за время сессии просто растет. Для программы использующей портфель из тикеров, тайм фреймов, индикаторов(планирую переключаться между торговыми стратегиями внутри сессии) это расточительно! Не знаю как назвать данный способ хранения но точно не стек, хоть и тарелочки из Вашего примера. Так как вся длинна этого массива не нужна (достаточно скажем 5 последних значения)Нужен подход уменьшения количества элементов в таблицах Я Вижу два подхода как организовать такую структуру:1) После обработке 5 последних значений наставить nil; bar[j][index-5].dec=nil;2) Так как 1 вариант сильно похож на очередь то я вспомнил про двойную очередь из примера автора (которую не удалось обсудить и разобрать с первого поста)И так задача сводится к удобному универсальному методу уменьшения хранения данных в ОЗУ, по сути в моем представлении к организации ОЧЕРЕДИ!
Это массив уже собирается в main()? С индикаторами нашли решения, зачистка лишнего в массивах. Дальше передали в main() хотим выработать не которые правила. Мой массив выглядит так
Код
for i=1,#sec do ---- цикла по бумагам:
for j=1,#tf do ---- Получаю Тек.index Свечей на всех tf:
Index[i][j]=DS[i][j]:Size()
td[i][j] = DS[i][j]:T( Index[i][j] );
bar[i][j][index].d = td[i][j] and get_date(td[i][j]) or nil;---- день один для разных тайфремов
bar[i][j][index].t = td[i][j] and get_time(td[i][j]) or nil;
bar[i][j][index].o = DS[i][j]:O( Index[i][j] );
bar[i][j][index].h = DS[i][j]:H( Index[i][j] );
bar[i][j][index].l = DS[i][j]:L( Index[i][j] );
---- ответ от индикатора тоже добавляю
bar[i][j][index].dec=nil;
Но потом добавил Проверку по индексу посчитал что сохранять значения свечей избыточно
Но массив растет
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
21.01.2024 14:50:03
Цитата
Nikolay написал: Пробежался и так не понял в чем проблема, и причем здесь очередь. Озвучена проблема роста памяти при расчете индикаторов. Ок. Но для расчета индикаторов нужен банальный массив. Тупо для каждого индекса бара от 1 храним какое-то значение. Пришел новый бар - записали данные по его индексу. Все. Но такой вариант - это постоянное увеличение хранимых данных. Что можно сделать? Банально очищать неиспользуемые данные, присваивая nil. Правда помня, что перестанет работать #. Но это решается очень просто. Сложнее - можно сделать массив фиксированного размера и записывать данные по кольцу. Так сделали разработчики терминала в последней версии примеров расчета индикаторов. Что это дает - объем занимаемой постоянен и контролируем.
Зачем здесь очереди, стеки и др. списки - не ясно.
А Вы можете на примере индикатора от разработчиков, показать места "массива фиксированного размера"? Как это работает?
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
21.01.2024 14:19:48
Цитата
Glukator написал: , чтобы мусорщик память почистил в конкретном этом примере с очередью. Есть у меня некое подобие очереди на свечах - прошлая, текущая, накапливаемая. На границе таймфреймов прошлой присваивается текущая, текущей - накапливаемая, а накапливаемая обнуляется. Понятно, что тут никаких присваиваний nil нафиг не надо, три арифметических операции и все дела. Но тут, насколько я могу понять, VPM пихает в очередь куда больше, чем 3 значения, ему это не подойдет :)
Да хочу чтоб значения были переменной, ну к примеру для сглаживания достаточно три значения, для поиска паттерна нужно 30 и т.д.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
написал: При перезаписи, если нет других ссылок на область памяти, то она будет удалена (почищена) мусорщиком.
Это значит, что память расти не будет.
Тогда хоть Вы поясните Очередь здесь применима как прием?
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
21.01.2024 14:11:32
Владимир, Вы опять все собрали в кучу, отсюда сумбур. Ветка не моя, публикуются тут все, кому мало мальски интересны темы (я это никак не контролирую), просто также как все высказываюсь. Если Вы не хотите чтоб с Вами дискутировал, не обращайтесь поименно со знаком вопроса. Мне к Вам не зачем обращаться все последние Ваши посты пустые. А пол века не показатель. Зачем к придуркам в вики, определения выложены на этой ветки от азов программирования. Раз не подверглись разбору то я делаю вывод правильные. Про Ваш чудо скрипт все наслышаны ни кто не видел но все знают, зачем одно и тоже повторять (без знака вопроса).
Очереди и двойные очереди в луа, Пример из книги Р.Е.
написал: А что если просто перезаписывать, я про пример из 5 элементов? nil будет вызывать сборщик, а перезапись ну поменял элемент объем остался прежним?
При перезаписи, если нет других ссылок на область памяти, то она будет удалена (почищена) мусорщиком. Под все данные, создаваемые непосредственно в Lua, память выделяется автоматически. Память, занимаемая неиспользуемыми (недостижимыми из скрипта) данными Lua, освобождается также автоматически (при сборке мусора).
Ну что получается мой поход не верен? Пусть массивы растут? Хорошо вопрос ставлю по другому как взять память под контроль чтобы за торговый день в 25 раз не росла?
Очереди и двойные очереди в луа, Пример из книги Р.Е.
написал: А что если просто перезаписывать, я про пример из 5 элементов? nil будет вызывать сборщик, а перезапись ну поменял элемент объем остался прежним?
Не очень понял, что перезаписывать? Если мы все еще про очередь (давайте для определенности положим, что мы добавляем элементы в конец, а извлекаем - с начала), то вариантов что-либо перезаписывать нет. При добавлении элемента - добавляем его, инкрементируем индекс конца очереди. При удалении - извлекаем первый элемент, присваиваем по его индексу nil, инкрементируем индекс начального элемента.
Я не просто про очередь, про двойную очередь из приведенного примера. Переписываются значения, а индексы либо увеличиваются либо уменьшаются в зависимости от варианта(Стек, очередь), структура таблицы остается равная 5 элементам. То есть потребление памяти стабильно, ну или меняется незначительно.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
А что если просто перезаписывать, я про пример из 5 элементов? nil будет вызывать сборщик, а перезапись ну поменял элемент объем остался прежним?
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
21.01.2024 11:37:23
nikolz, Вам нужно научиться отвечать на заданые Вам вопросы (ну хотябы так Да,Нет) для образованого, интелегеннтного человека это несложно, даже вежливо. Вы погрузились сильно в тему "цифровой обработки сигналов" бывает. В Программирование один сленг, в DSP другой, в торговле третий, еще есть арифметика... И здесь важно, чтоб друг друга понимали. А вот это не понятно
Цитата
nikolz написал: Для экономии памяти очередь вообще не причем.
Как же не влияет?
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Структура с методами это простейший вариант объекта. Метод это функция, сохраненная в элементе таблицы.
Когда я утверждал?
Цитата
Glukator написал: Распинаться здесь, доказывая очевидные вещи (например, что lua НЕ является объектно-ориентированным языком), я не собираюсь - читайте книги (и не по lua, а по структурам данных в общем), поймете многое сами.
Я Вам напомнил что, таблица в луа это половина ОПП! Или и это тоже не верно.
Цитата
Glukator написал: Непонятно, чем вас не устраивает самое простое и самое очевидное решение.
1) Как оказалось есть разные варианты как выбрасывать: сдвигать очередь (table.remove)? Вызывать сборщик (nil); Либо, как в двойной очереди контролировать индексы, пере присваивая значения.
2) Универсальность "написал и забыл", где нужно поднял. Двойную я уже пробовал при обработке таблицы всех сделок, показала себя неплохо. Я уже столько побросал скриптов из-за увеличивающейся сложности, частных решений, что принял свой подход писать модулями, замена одного не влияет на всю конструкцию, плюс оказалось еще и удобно и здесь таблица просто супер.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
21.01.2024 09:18:34
Цитата
Владимир написал: А уж изворачиваться и выпендриваться в такой убогой прикладной задаче как торговля...
Задача далеко не простая, просто Ваш подход в моей задаче - это только одна из торговых стратегий, торговую эффективность которой нужно еще проверять! buy = a>b таких примеров полно в том числе и на этом форуме.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
21.01.2024 09:11:33
Glukator, Вы вроде хотели обсуждать торговые Задачи? ДА, за излишнею резкость извиняюсь.
Знание или не знания какого-то языка, ни как не влияют на умственные способности. Про ОПП, на этих страницах я уже приводил авторов, выкладывал цитаты, откуда я делаю свой вывод. Если Вам нужно это оспорить обращайтесь к ним, со мной просто бессмысленно, либо приводите доводы опровергающие их утверждения.
Владимир, Вы начинаете опять все запутывать, у стека есть четкое определение, при вашем подходе и очередь можно называть разновидность стека, но ее называют очередью и дают четкое определение. Вот и двойная очередь оказывается широко известный подход.
Давайте уже определимся что хотя бы здесь, назвать стек стеком, очередь очередью, а разные модификации как Вам нравится.
"НУЖЕН КОНКРЕТНО В ВАШЕЙ ЗАДАЧЕ". Я говорил что мне не нравится как моя программа обращается с памятью. Основная проблема это накопление массивов данных (в моем варианте таблиц). Ну к примеру с частотой в 1 минуту получаю данные по свечам и индикаторам, складываю их в таблицу, которая за время сессии просто растет. Для программы использующей портфель из тикеров, тайм фреймов, индикаторов(планирую переключаться между торговыми стратегиями внутри сессии) это расточительно!
Не знаю как назвать данный способ хранения но точно не стек, хоть и тарелочки из Вашего примера. Так как вся длинна этого массива не нужна (достаточно скажем 5 последних значения) Нужен подход уменьшения количества элементов в таблицах Я Вижу два подхода как организовать такую структуру: 1) После обработке 5 последних значений наставить nil; bar[i][j][index-5].dec=nil; 2) Так как 1 вариант сильно похож на очередь то я вспомнил про двойную очередь из примера автора (которую не удалось обсудить и разобрать с первого поста)
И так задача сводится к удобному универсальному методу уменьшения хранения данных в ОЗУ, по сути в моем представлении к организации ОЧЕРЕДИ!
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
20.01.2024 08:47:55
Владимир, Для особо одаренных. Повторюсь уже в сотый раз, для меня интересно знать возможности языка, как и где их можно применять. Для чего служит тот или другой прием. Не зная возможности не сможешь применить! Пользователь решает чем ему пользоваться. Такой подход называется конструирование. Все автомобили по своей структуре одинаковые (кузов, двигатель, шасси), пользовательские свойства разные.
Вот я же говорю подзабыли, "А двум другим НЕ пофиг, новые элементы заносятся тоже строго на вершину стека, а вот выдернуть их обработчики могут ЛЮБОЙ из них - первый, последний или любой другой из середины. И, если это не последний, скидывают на освободившееся место последний и декрементируют размер стека. А почему это стало стеком и где тут принцип LIFO. Я такие утверждения называю "горе от ума"!
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
19.01.2024 22:25:41
Двусторонняя очередь (Double-ended queue), или дек (Deque), расширяет поведение очереди. В дек можно добавлять или удалять элементы как с начала, так и с конца очереди. Такое поведение полезно во многих задачах, например, планирование выполнения потоков или реализация других структур данных. Позже мы рассмотрим вариант реализации стека с помощью двусторонней очереди.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
19.01.2024 22:21:39
Посмотрел действительно все логично и просто: Стек — это коллекция, элементы которой получают по принципу «последний вошел, первый вышел» (Last-In-First-Out или LIFO). Это значит, что мы будем иметь доступ только к последнему добавленному элементу.
Очереди очень похожи на стеки. Они также не дают доступа к произвольному элементу, но, в отличие от стека, элементы кладутся (enqueue) и забираются (dequeue) с разных концов. Такой метод называется «первый вошел, первый вышел» (First-In-First-Out или FIFO). То есть забирать элементы из очереди мы будем в том же порядке, что и клали. Как реальная очередь или конвейер.
Прямо как складской учет.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
19.01.2024 22:04:18
Nikolay, Ну Вы и пример привели, волосы дыбом от такого примера
Цитата
Nikolay написал: VPM, я могу Вам предложить в качестве развлечения один проект pПогрузитесь в крайнюю степень использования _ENV и все на чистом Lua.Правда не ясно зачем, но, как говорится, красиво.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
VPM написал: 1) value = loadstring("return " .. varname)() 2) value = _G[varname] -- в десятки раз эффективнее
Цитата
VPM написал: В двойной очереди он этот прием демонстрирует.
Glukator, Вы поймите я Вас не обидеть хочу, а показываю прямо то место где идет заблуждение, еще раз Луа = таблица = ОПП, но если Вы используете таблицу , как можно можно не пользоваться ОПП, хотите Вы того или нет, мы эти пользуемся по умолчанию.
Вы опять пытаетесь определять кому что нужно, отвечайте за себя. Давайте про автоматизацию торговли, я только за!
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
19.01.2024 21:02:42
Nikolay, Я уже отвечал у меня частная прикладная задача, ну если автор языка пишет двойная очередь, то причем здесь мои академические знания, я принимаю терминологию такой какой в нее заложен смысл автором. За ссылку спасибо посмотрю. Но я уже из беседы сделал ряд выводов для себя мне пока этого достаточно.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
19.01.2024 20:42:39
Цитата
Glukator написал: Ага, а утверждение "не буду пользоваться молотком" тождественно "не понимаю, как забивать гвозди"?
не буду пользоваться молотком, когда молоток в рука, а заколочу лбом! Почувствуйте разницу.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
19.01.2024 20:40:49
Glukator, Тот пример который Вы показываете, связан с понятия свободных имен. А вопрос который обсуждается относится к применению глобальных переменных с динамическими именами. А Вопрос звучал в каких случаях нужны эти таблицы. На что в нескольких постах получен ответ.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
19.01.2024 20:26:46
Еще раз Пересмотрел главу Окружение. Нашел. "Конечно, главной областью применения _ENV является изменение окружения, используемого фрагментом кода." TGB, Спасибо.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
19.01.2024 20:08:06
Цитата
TGB написал: Если же не заморачиваться деталями реализации Lua, описанными выше, и не трогать _ENV , то достаточно понимать, что все переменные скрипта без спецификации local являются ключами некоторой служебной таблицы, и экзотическими способами обращения к таким переменным не пользоваться.
TGB, Если я ни чего не напутал, то подход максимальной локализации переменных, и по блочному их использованию, для таких пользователей как я оптимальный. И можно забыть про такое _G безболезненно для скрипта, поводом использования может я виться добиться необходимой видимости или есть еще повод?
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
19.01.2024 14:57:29
nikolz, Здесь вопрос вот в чем, за чем здесь глобальная таблица со своим окружением
1) value = loadstring("return " .. varname)() 2) value = _G[varname] -- в десятки раз эффективнее -- в десятки раз эффективнее
Ну ведь можно local A={} value = A[varname] В двойной очереди он этот прием демонстрирует.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
19.01.2024 14:48:56
nikolz, Ну вот видна цена, видны сделки, видно результат. Вы пишите это в виде индикатора, для одного инструмента?
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
19.01.2024 14:27:46
Владимир, Мы с Вами в своих подходах, пользуемся только луа, ну такой он, другого нет, так давайте подумаем что лучшее можно взять у него, как это эффективно можно применять!
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
19.01.2024 14:23:12
Nikolay, Ну все равно не понятно, _G таблица ну взять и локализовать под свою программу, или ее необходимые элементы? Я предполагаю что решаются еще вопросы видимости?
Ну или создал свою в корне дерева как Владимир, делает у себя, и обрабатывай.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
19.01.2024 14:12:34
Цитата
Nikolay написал: Я Вам советую изучить вопрос структур данных. Не в применении к языку Lua, а в общем. Языки разные, концепции одинаковые. Тогда у Вас отпадут многие вопросы по организации хранения, исполнения и т.д.Форум это, конечно, хорошо, но фундаментальные знания получаются в библиотеке.
"Не в применении к языку Lua, а в общем", в общем мне не интересно, и зачем, дадут новый язык, буду с ним разбираться, а в луа структура данных это таблица, из которых все остальные строятся. Да и пишу я строго для себя, а примеров на луа множество, вон игры как написаны!
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
19.01.2024 13:56:07
Nikolay, Ну первый вопрос зачем лезть в глобальное окружение, я видел у Вас такой прием?
Очереди и двойные очереди в луа, Пример из книги Р.Е.
написал: "Errare humanum est. Поэтому мы должны обрабатывать ошибки как можно лучше...
По вашему предыдущему вопросу в этой же книге есть пояснение: "Многие программисты пытаются писать нечто подобное: value = loadstring("return " .. varname)(). Если, скажем, varname равно x, то результатом конкатенации будет "return х", что при выполнении даст нам желаемый результат. Однако, этот код включает в себя создание и компиляцию нового куска кода, что является довольно затратным. Вы можете добиться того же эффекта при помощи следующего кода, который в десятки раз эффективнее предыдущего: value = _G[varname]".
Вот поднята тема, которая требует пояснений, есть две записи:
1) value = loadstring("return " .. varname)() 2) value = _G[varname] -- в десятки раз эффективнее
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
19.01.2024 13:15:53
Цитата
Владимир написал: Очереди создаются там, где они нужны. Очередь - это FIFO, независимо от технической реализации
Зачем эти общие слова, кому они нужны? Да и с вопросом я маленько разобрался.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
19.01.2024 13:14:09
Цитата
Владимир написал: И я ещё в четвёртом своём комментарии на этом форуме 29.09.2020 10:31:16 писал: "В общем, с языком почти всё ясно: граф (точнее, дерево) объектов построить можно, а простейшую таблицу или даже массив - нельзя. Остаётся разобраться со строковыми переменными: способна ли эта loadstring интерпретировать строки как операторы языка (или, скажем, функции), то есть имеется ли здесь техническая возможность программирования данными."
Ну я все таки приведу цитаты из книги, повторюсь, возможно кому то еще будут полезны и понятны подходы:
"Таблицы в Lua — это не одна из структур данных, — это единственная структура данных. Все структуры, которые предлагают другие языки, — массивы, записи, списки, очереди, множества — могут быть представлены в Lua при помощи таблиц. Главное, таблицы Lua эффективно реализуют все эти структуры."
"Хотя мы можем реализовать массивы и списки при помощи таблиц Lua (и иногда мы это делаем), таблицы гораздо мощнее массивов и списков; многие алгоритмы с использованием таблиц становятся до банальности простым"
Последняя цитата хорошо подходит к примеру про индексацию trans_id.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
19.01.2024 12:45:06
Цитата
Владимир написал: Да, я прекрасно слышу и себя, и других. В названии темы нет ни слова про таблицы, там только про очереди.
Не понял, а очереди где создаются? Там не только названия, там выложен пример, и в место того чтоб показать опытным товарищам , какие варианты можно собрать, где в каких случаях можно использовать, на простых примерах, получаешь вот это все!
Цитата
Владимир написал: Даже его подход с ключами-айдишками в стеке активных заявок заслуживает внимания, хоть я его и не принимаю.
У Фреймворк про который я здесь рассказывал не однократно, это одна из ключевых идей, более того показывал! Да и любой может сам посмотреть. Вот этот прием, но прежде чем им пользоваться trans_id создаются при инициализации.
Код
for trans_id, smartorder in pairs(SmartOrder.pool) do
smartorder:process()
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
19.01.2024 12:09:24
Цитата
Владимир написал: Тема: Очереди и двойные очереди в луаОтвет: Ни то, ни другое для решения задач торговли не нужны и должны быть отправлены на помойку.Всё, тема исчерпана, вопрос закрыт.
Вы сами то себя слышите, если все работают с таблицами как она может быть не нужна или закрыта?
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
19.01.2024 12:03:37
Владимир, Я уже говорил, чтоб говорить о великом нужно понятия сделать общими (говорить на одном языке и понимать о чем разговор).
Начну с начала. Вот из последнего от великих:
Цитата
Glukator написал: что именно мне станет понятно? Базовые вещи вроде стеков и очередей? =) Так я их с закрытыми глазами напишу на любом языке, а извращаться в lua, прикручивая "объектно-ориентированность" туда, где можно обойтись тремя функциями, точно не стану. Вам нравится - на здоровье.
Вас тут ничего не смущает?
Попробую пояснить что меня смущает. Уже неоднократно говорилось и разбиралось, что в луа единственная структура данных это таблица, таблица это половина ОПП, а утверждение что этим не буду пользоваться, равно утверждению не понимаю как писать на луа!
или вот
Цитата
Glukator написал: вы так говорите "модуль", как будто это какая-то волшебная таблетка. А это не более чем куча функций, вынесенная в отдельный файл.
Мне можно ошибаться я пришел разбираться, а тем кто тут самоутверждается с закрытыми глазами, стоит глаза открыть!
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
19.01.2024 11:32:33
Цитата
Владимир написал: ЧЕМ "лично для Вас ветка полезна"?
Ответ: Обсуждаю вопросы для меня не очень понятные. А есть которые самоутверждаются.
Цитата
Владимир написал: Вы ХОТЬ ЧТО-НИБУДЬ сделали в своём коде полезного по материалам этой ветки?
Ответ: Да.
Цитата
Владимир написал: Если собрать в кучу всё полезное, что было высказано в этой тысяче с лишним постов, наберётся ли материала хотя бы на один?
Ответ: Я бы сильно не доверял статистике на сайте, цена ей три копейки. А считать Вы сами умеете, да и вопрос из области полезности, а она индивидуальна.
Цитата
Владимир написал: Для чего написан, скажем, вот этот последний Ваш коммент?
Ответ: Пытаюсь объяснить, что "наделав кучу на голове у оппонента, сидеть на ней, как на горе Эверест, со значимым видом" затея так себе.
PS: Манипуляция - это такой прием, "Перевод с больной головы на здоровую"
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
19.01.2024 10:34:20
Владимир, Лично для меня ветка полезна, а если бы отдельные члены дискуссии не занимались манипуляциями, а прямо отвечали на поставленные вопросы, то пустых постов было бы поменьше. Хочется напомнить, что знак вопроса (?) в конце предложения означает, что задан вопрос, на который требуется ответ, иначе дурной тон. Но хамство это похоже какая - то профессиональная черта.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
19.01.2024 08:44:45
Цитата
Владимир написал: Так и пользуйтесь тем, что я описал, а не поддержанием размера очереди. И без всякого ФИФО!
Спасибо что разрешили, ни у кого нет у меня есть разрешение, почти официальное. Вырежу в рамочку под стекло!
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
18.01.2024 22:59:13
Glukator, "Да мне шашечки и вряд а уж выберу на чем ехать!" - VPM
Очереди и двойные очереди в луа, Пример из книги Р.Е.
написал: сделать очередь ФИФО, для управления, передачи и обработки заданного количества элементов
Берете обычную очередь, и если добавление в нее очередного элемента должно привести к превышению заданной длины, то после добавления (или перед ним - как нравится) выбрасываете первый элемент.
Да но были и другие варианты!
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
18.01.2024 22:45:47
Цитата
Владимир написал: Эта "универсальность" не только нахрен не нужна, но и вредна. Прерывания OnTrade приходят "крест-накрест собаьим шагом", а потому АБСОЛЮТНО по барабану, в какой последовательности их обрабатывать - тем более, события уже произошли. Соответственно, берём самое простое - обычный стек. Чтобы поставить новый элемент на вершину стека или взять его оттуда, никаких фунций не требуется - обычное присвоение. Со стеком заявок чуть сложнее - некторые из них у меня подаются "вне очереди". И со стеком активных заявок тоже: какая из них исполнится, а какая снимется - одному Богу известно. Наконец, поддерживать постоянный размер очереди или стека есть просто идиотизм: страшно переполнение, а не рост. А переполнить Lua-таблицу - это надо ОЧЕНЬ постараться! У меня и при тысяче тикеров размеры стеков будут исчисляться десятками элементов -плюнуть и растереть.
Владимир, Вы сами кого хотите запутаете, то что Вы описали я пользуюсь, веду таблицу ордеров, сделок, позиции, результатов, оценок ... Сделал с Вашего примера опубликованного на этом форуме, за что Вам все скажем, спасибо!
Но здесь речь шла абсолютно о другом, сделать очередь ФИФО, для управления, передачи и обработки заданного количества элементов, а про универсальность пусть каждый сам решает, тем более примеры есть разные, на любой вкус!
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
18.01.2024 21:57:59
Glukator, Я не имею ни какого отношения к программированию, кроме данного проекта.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
18.01.2024 21:52:11
Цитата
Glukator написал: , я вам пытаюсь донести то, что "универсальность" нахрен не нужна. Нужна эффективность на _конкретных_ задачах, а она чаще достигается через отказ от универсальности. Это вообще зачастую две противоположности.
Вы упускаете важную вещь, Вы владеете несколькими языками программирования, закрытыми глазами пишите примеры , а у нас 2 класса образования и те не полные, для меня и думаю 90% процентов здесь таких, важней будет универсальность. Да с эффективность нужно еще посмотреть?
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
18.01.2024 21:36:57
Glukator, У нас с Вами и с другими кто нас читает, абсолютно разные программы, и все что мы можем обсуждать это возможности решения каких то узких задач. Об этом я и говорю нравится это кому то или нет. На Ваши Вопросы я с полна как умею ответил, я уже не понимаю что Вам не понятно в данном примере. Что он универсальней Вашего?
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
18.01.2024 21:15:55
Glukator, Так что же Вы мне тут, целый час голову морочите, это я у Вас должен спрашивать. Мне кажется я Вам уже отвечал что я пишу про возможности, а как Вам делать, что Вам делать разберитесь сами!
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
18.01.2024 21:09:20
Цитата
Glukator написал: вы так говорите "модуль", как будто это какая-то волшебная таблетка. А это не более чем куча функций, вынесенная в отдельный файл.
Это прежде всего таблица. В которой в одном месте можно хранить функции, значения, строки .... Это просто удобно. А я говорю что еще можно представить как конструктор, такое хранилище элементов конструктор.
Из нашего примера: Можно записать так List.pushlast(list, value) List.popfirst (list) А можно другой function List.poplast (list) удалить последний List.pushlast (list, value) добавить последний
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
18.01.2024 20:55:15
Glukator, Вы напишите не большой пример и попробуйте, это будет более понятно и все встанет на свои места.
Вот мой небольшой
Код
local list=List.new()
local ds={10,20,30}; local value=40;
for i=1, #ds do
List.pushlast(list, value)
print( 'Вставил в конец',list.last, list[first] )
if i>1 then
print( 'Удалил первого', List.popfirst (list) , type(list), #list)
end
end
print(list[first],list[last])
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
18.01.2024 20:42:10
Цитата
Glukator написал: Только вот классическая очередь, которая мне была нужна, добавления в начало и не подразумевает.
Используйте одну функцию добавление в конец, и получаете свой вариант. Это модуль
Цитата
VPM написал: Плюс модуль, один раз написал и забыл, подключаешь модуль где нужно, собираешь что требуется.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
18.01.2024 20:34:11
Цитата
Glukator написал: Какой еще размер? В коде вашего примера точно так же хранятся индексы начального и конечного элементов.
Ну конечно индексы. А разница в универсальности, да и вариантов больше чем 4.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
18.01.2024 20:10:51
цитата из книги: "можете просто индексировать ее нужным ключом (именем переменной)" Вот этот прием:
Код
local first = list.first - 1
list.first = first
list[first] = value
Это две разные переменные 1 - хранит размер; 2 значение.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Это и ежу понятно. А вот что конкретно вы имели в виду, говоря о какой-то "матрице" и прочем, понятнее не стало.
Алгоритм хранит 2 переменных, начало и конец, 2 функции на добавление элемента, 2 функции на удаление элемента, т.е. всего можно собрать 4 варианта. 1; 0 --------- 1 | 11; 10 0 | 01; 00