Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 25.09.2020
12.07.2023 18:04:14
VPM, Задержки как раз от скрипта - он ведь работает в поте лица во всех этих обработчиках. А задержки от брокера и биржи нам по барабану. Рекордная задержка, которую я видел в их исполнении, если я правильно помню, была 17.5 МИНУТ! А отложенные вообще не вижу смысли использовать - скрипт же и так постоянно мониторит состояние рынка.
Пользователь
Сообщений: Регистрация: 15.06.2023
12.07.2023 18:10:37
Цитата
Владимир написал: А отложенные вообще не вижу смысли использовать
Нет смысл то есть на случай аварийных ситуаций (разрыв связи, терминал подвис). Я вот у себя боролся с провайдером постоянно канал падал уже о сервере задумывался.
Пользователь
Сообщений: Регистрация: 25.09.2020
12.07.2023 18:22:15
VPM, Подумаешь, беда какая. Сегодня не сработала - завтра сработает, ещё и выгоднее. Подавать заявки задолго до события ещё более накладно: может, рынок схватит эту заявку и ломанёт ещё на пару сотен пунктов. Или, наоборот: подойдёт к ней и развернётся. Торговля - медленный процесс, а аварийные ситуации редки и быстро исправляются.
Пользователь
Сообщений: Регистрация: 15.06.2023
13.07.2023 07:31:37
Цитата
VPM написал: Сделаю период Вашим метом 1сек, цикл 1сек, запрос обновления информации 1сек, т.е. попробую синхронизовать.Добавлю флаг по направлениям. может поможет.
"Велосипед" пока оставим. Просматривая старые наработки наткнулся на "суперкар".
Это Фреймворк HackTrade 1.4 для написания торговых роботов от .
К сожалению автор не поддерживает разработку. Написана аж в 14 далеком году. Изменения с тех пор прошли в qlua, на что следует обратить внимание: 1) язык Фреймворк на писан lua 5.1, qlua 5.3, 5.4; 2) "по просьбам трудящихся" колбеки прилетают по нескольку раз на одно событие.
Тем не мене это "суперкар" по утверждению автора носится может по тикам! Мне столько не нужно.
Написан просто шикарно, со всей мощностью языка lua (мета таблицы, сопрограмма), кратко, лаконично.
Судите сами: минимальный робот в HackTrade состоит из 3-х элементов: 1) Исполнения основного модуля 2) Определения основной функции 3) Вызова функции Trade, для осуществления торговых действий
код; dofile("hacktrade.lua") function Robot() Trade() end
Главное полностью отвечает моему подходу "отдельно мухи, отдельно котлеты" Есть супер движок, к нему цепляем свои стратегии и "курим бамбук"!
Да, набирает позицию автоматом, предварительно нужно определить количество контрактов или лот при выставлении ордера.
"Самое сложное в роботе на qlua для Квика это написать логику отслеживания заявок и сделок по инструменту". Скажем дружно, огромное, человеческое спасибо автору!
Ну собственно кому интересно вот сылка.
Возможно кто работает с HackTrade и делал уже изменения, будем признательны если поделятся.
Пользователь
Сообщений: Регистрация: 27.01.2017
13.07.2023 09:17:37
Вы можете его использовать как пример, правда если понимаете используемые концепции. Сказать, что его можно отпускать в работу на реальном счете - наверно нет. Слишком много нюансов при реальной работе через брокера.
Пользователь
Сообщений: Регистрация: 25.09.2020
13.07.2023 09:22:58
VPM, Да, "суперкаров" сейчас как собак нерезаных. Куча рекламы, что с его помощью МОЖНО СДЕЛАТЬ что-то жутко важное и полезное, но никогда не видел примероа, чтобы кто-то что-то с помощью этой херни РЕАЛЬНО СДЕЛАЛ. Как я писал аж в 11 далеком году (про браузеры): Тупорылые успели так загадить клиента, что знаменитые Авгиевы конюшни выглядят на этом фоне чуть ли не благоухающим садом! Одних только лохотронов о браузере (о каждом из которых можно писать многотомные опупеи) бесчисленное множество - файловая система и менеджер вкладок, плагины и расширения, меню и библиотеки, редактирование и поиск, графика и анимация, асинхроность и синхронизация, тормоза и глюки, не говоря уже про более конкретный зверинец: DOM, jQuery, GWT, AJAX, PHP, SEAM, Wicket, Greasemonkey, Silverlight, и прочую мерзость. Но ведь нужно же когда-то заканчивать статью! Дополнительная вонь - обсирание предшественников. То же самое будет говориться и о нынешних сверкающих образцах, и очень скоро - как только появится очередная версия. Быдло все схавает!
Пользователь
Сообщений: Регистрация: 15.06.2023
13.07.2023 10:32:25
Цитата
Nikolay написал: Сказать, что его можно отпускать в работу на реальном счете - наверно нет.
Поднял старую наработку, на что ругался и что заметил поправил. Запустил в реал, разрешил аж 6 контрактов, стратегия "сетка" написана еще на "первобытном языке" ну разбираться пока не хочется. Задача проверить движок, ведь что меня смутило ранее.
Цитата
Nikolay написал: Слишком много нюансов при реальной работе через брокера.
Согласен полно, но если он позволит мне заниматься торговлей а не шарить по движкам получая очередные оплеухи, я ему все прощу.
Пользователь
Сообщений: Регистрация: 15.06.2023
13.07.2023 10:41:39
Цитата
Владимир написал: что с его помощью МОЖНО СДЕЛАТЬ что-то жутко важное и полезное, но никогда не видел примероа,
Ну вот к примеру Прикручены опционы сам подход кому интересно можно доработать.
Ну вы сами посудите 435 строк кода с пропусками и комментариями, а сколько возможностей дает и проблем закрывает. Нет это элитный гараж!
Пользователь
Сообщений: Регистрация: 15.06.2023
13.07.2023 10:51:29
Провел аж 5 сделок это при том что я ему АТР убил в расчета, и слетел но винить надо меня я не доправил код. Новый запуск. Да на "пиво" то заработал. О чудеса!
Пользователь
Сообщений: Регистрация: 27.01.2017
13.07.2023 10:52:35
Цитата
Согласен полно, но если он позволит мне заниматься торговлей а не шарить по движкам получая очередные оплеухи, я ему все прощу.
Здесь проблема в том, что достаточно одного сбоя, чтобы привести к существенным потерям, многократно перекрывающим все прошлые успехи. Собственно все это обсуждение об этом, на самом деле. Я придерживаюсь принципа, что если есть шанс получить критическую проблему даже 0.1%, то значит этим надо заниматься. Это как в авионике, софте медицинского оборудования - нет места для проблем. Поэтому и выбираются подходы, может не самые красивые, удобные, модные, но снижающие риски.
Пользователь
Сообщений: Регистрация: 25.09.2020
13.07.2023 11:32:03
VPM, Ну-ну, удачи. Nikolay, всё сказал, повторяться незачем..
Пользователь
Сообщений: Регистрация: 15.06.2023
13.07.2023 11:59:53
Nikolay, Ваши работы видел, не которые пробовал что то сей час в анализе использую, а главное учился. за что Вам отдельный земной поклон.
Но сложность вот в чем использую в основном индикаторы на луа пишу их через замыкание, их же на прямую использую в торговом роботе. Стратегий пул. То есть переключаю между состоянием рынка. это в том числе работы J.Ehlers. Вы сними знакомы. Да еще этим же скриптом провожу тест, задаю период, синхронизирую данные 4 окон прогоняю 1 минутным, цель - получить в основном два показателя ProfitFfaktor и % прибыльных сделок. На основании этих показателей принимаю решение чем и как торговать.
Цитата
Nikolay написал: Я придерживаюсь принципа, что если есть шанс получить критическую проблему даже 0.1%, то значит этим надо заниматься.
Да я с этим замучился, в программировании у меня базовые знания инженера мой первый персональный "ЕС 1841" сов. разработка. и работы я свои не пишу, а скорее собираю как "конструктор" находя интересные вещи в том числе и Ваши. Но если движок худой то остальным и заниматься бессмысленно. Вот и вспомнил старые работы.
Пользователь
Сообщений: Регистрация: 27.01.2017
13.07.2023 12:13:56
Цитата
Да я с этим замучился, в программировании у меня базовые знания инженера мой первый персональный "ЕС 1841" сов. разработка. и работы я свои не пишу, а скорее собираю как "конструктор" находя интересные вещи в том числе и Ваши. Но если движок худой то остальным и заниматься бессмысленно. Вот и вспомнил старые работы.
Ну мой первый терминал 1842... У меня выложено много, т.к. я тоже знакомился с qlua в терминале. И когда я начинал было мало информации. Т.к. особой ценности все это не несет, то и скрывать нечего. Много кривого кода - тоже думал "все просто же". А потом разные брокеры заставили усвоить, что все не так очевидно. И первое что было "выкинуто" - это колбеки.
А этот пакет я, конечно, видел. Но с ним можно сделать достаточно небольшое число алгоритмов. Если не считать того, что он берет данные с графиков, что тоже надо сразу переделывать. Также он совсем не учитывает торговое время, обрывы связи, долгие ожидания ответов на запросы к серверу и т.д. Т.е. это просто некий пример-модель работы.
Пользователь
Сообщений: Регистрация: 15.06.2023
13.07.2023 12:25:19
Выбивает по моей супер стратегии, надо что-то по проще накидать.
Типа: buy = A cross B or false; sell = B cross A or false;
Пока с движком не понятно?
Пользователь
Сообщений: Регистрация: 15.06.2023
13.07.2023 12:54:09
Цитата
Nikolay написал: Но с ним можно сделать достаточно небольшое число алгоритмов
Ну на первую скидку хорошо реализуется 3 барные паттерны Price Action, VSA, PivotPoint, посчитать имбаланс и прочее. ТТТ сразу синхронизирует.
Цитата
Nikolay написал: Если не считать того, что он берет данные с графиков
Мне кажется ни чего не мешает в ф. Robot() получить getDataSourceInfo().
Нет основной вопрос эта функция Trade() ведь останавливает поток и крутит исполнение ордеров в цикле. Все тоже взаимодействие с терминалом, знаменитые колбеки (OnInit чего стоит ) В любом случае надо проверять как фильтруются ведь "просьба трудящихся" никуда не делась. Да и цикл что если по какой-то причине не исполняется ордер надо выходить!
Не погоняю посмотрю может что - то соображу. Буду рад любым замечаниям.
Сформировал trans_id Отправил trans_id Получил: local key = trans_reply.trans_id local key = order.trans_id
"Снимаю шляпу" Тут порядок.
Пользователь
Сообщений: Регистрация: 25.09.2020
13.07.2023 13:42:19
VPM, Ихде тут "порядок"? Совершенно бессмысленные действия.
Пользователь
Сообщений: Регистрация: 15.06.2023
13.07.2023 13:50:36
Порядок в фильтрации колбеков по одному параметру trans_id.
Вот полный код:
function OnOrder(order) local key = order.trans_id local executor = SmartOrder.pool[key] -- There isn't order if was executed imidiately! Нет заказа, если он был выполнен немедленно! if executor ~= nil and executor.order ~= nil then executor.order.filled = order.qty - order.balance if (order.flags % 2) == 0 then executor.order.active = false end end end
а дальше в main()
for trans_id, smartorder in pairs(SmartOrder.pool) do smartorder:process() end
Надо на клоны проверить обложу логами посмотрю
Пользователь
Сообщений: Регистрация: 25.09.2020
13.07.2023 14:05:13
VPM, 1. OnOrder нафиг никому не нужен. 2. trans_id формирует сам скрипт и уж кто-кто, а он его знает. 3. Если заказ был выполнен - хоть немедленно, хоть нет - об этом расскажут сделки. 4. Всё это можно делать именно в main. 5. Лично у меня все индексы всех массивов числовые - это не всегда удобнее, но всегда надёжнее и практически всегда быстрее.
Пользователь
Сообщений: Регистрация: 15.06.2023
13.07.2023 14:30:10
Цитата
Владимир написал: Лично у меня все индексы всех массивов числовые - это не всегда удобнее, но всегда надёжнее и практически всегда быстрее.
"Заявка в фреймворке HackTrade представляет собой динамическую лимитную заявку с изменяемой ценой. При этом также может меняться количество и даже направление. Главное, то нужно запомнить, "умная заявка" будет пытаться набирать указанное количество лотов по заданной цене. Даже если вы снимите заявку торговой систем, SmartOrder породит новую и продолжить добирать заданное ранее количество (представьте, что SmartOrder - это заявка, которая гарантированно набирает зданный объём)."
Цитата
VPM написал: trans_id формирует сам скрипт и уж кто-кто, а он его знает.
Здесь тоже скрипт формирует.
Пользователь
Сообщений: Регистрация: 25.09.2020
13.07.2023 15:56:23
VPM, Нет тут никаких чудес, у таблиц Луа для адресации используются не индексы, а имена. Плюс ещё эта долбанутая динамическая типизация. Тем не менее, я ВСЕГДА использую в качестве имён ТОЛЬКО целочисленные индексы. Ах, да - эти же придурки даже тип integer отменили.
Господи, что ещё за "умная заявка"? Умные заявки нужны разве что тупому скрипту. Я бы такое говно НЕМЕДЛЕННО выбросил на помойку! Шоб не умничало.
Пользователь
Сообщений: Регистрация: 15.06.2023
14.07.2023 14:17:12
Цитата
Владимир написал: у таблиц Луа для адресации используются не индексы, а имена.
Да видимо лучше индексировать trans_id, так как "умная заявка" формирует под себя уникальный trans_id.
Цитата
Владимир написал: Я бы такое говно НЕМЕДЛЕННО выбросил на помойку! Шоб не умничало.
Это всегда успеется. А с чем работать? Пока красота! К движку вопросов нет реализация класс. Проблем мы пока только от моей стратегии. Да решил не менять оставить сетку в силу того что подход скальперский много сигналов и сделок.
Пользователь
Сообщений: Регистрация: 15.06.2023
14.07.2023 14:18:51
Вот что пишут:
Алгоритм «печатный станок»
Сетка – это очень простая система. Она выставляет отложенные и краткосрочные ордера в фиксированных значениях выше и ниже текущей цены. Прибыль получается при отклонениях рынка. Ордера открываются и закрываются в случае, когда цена пересекает значения сетки в любом направлении. Гипотетически степень выигрыша здесь приближается к 100%, но на практике такого уровня добиться невозможно.
Трейдеры обычно используют виртуальный механизм хеджирования, который открывает и закрывает позицию вместо того, чтобы открывать новую в противоположном направлении. Это увеличивает общую прибыль и позволяет контролировать потери. Так что процент выигрыша здесь колеблется на практике в районе 60%.
Пользователь
Сообщений: Регистрация: 15.06.2023
14.07.2023 14:22:56
От себя могу добавить, что я другой подход пытаюсь реализовать контртренд на стоящем рынке. Для ускорения получения сигнала спред шаг цены.
Пользователь
Сообщений: Регистрация: 25.09.2020
14.07.2023 16:13:10
VPM, С чем работать? По моему опыту, только с тем, что написал сам. А "вот что пишут" подвергать тщательному сомнению вплоть до каждой запятой.
Сетка – это очень СЛОЖНАЯ система. Сеточных алгоритмов как собак нерезаных. В частности, мой тоже можно в какой-то степени обозвать "сеточным". Есть определённая закономерность: чем больше алгоритм способен заработать в идеальных условиях, тем быстрее он всё это может просрать при малейших отклонениях от идеала. И что ещё за "выигрыш в 100%"? Относительно ЧЕГО и за какое время?
Что там "трейдеры обычно используют" - это ИХ проблемы, а зарабатывать должен НАШ алгоритм. И это при том, что рынку насрать на наши желания, он будет ходить по своим законам. А "для ускорения получения сигнала" данные нужно брать данные из ТТТ: BID, OFFER, SEC_PRICE_STEP или что там ещё надо. Быстрее не получится.
Пользователь
Сообщений: Регистрация: 27.01.2017
14.07.2023 16:28:43
Цитата
Сетка – это очень простая система.
По смыслу - простая система. По реализации - очень сложная. Лучше всего торговать сеткой инструменты или синтетические конструкции, которые находятся в "вечном" боковике - спреды. Есть даже готовый инструмент на бирже - календарный спред.
Пользователь
Сообщений: Регистрация: 15.06.2023
14.07.2023 16:45:24
Цитата
Владимир написал: По моему опыту, только с тем, что написал сам
Не Все тут программисты, для этого и обмениваемся опытом. Если все выбросить что останется, только Ваш скрипт, а торговать с кем будите?
Цитата
VPM написал: И что ещё за "выигрыш в 100%"? Относительно ЧЕГО и за какое время?
Это не мое, когда разбирался сохранил, может кто то знает выскажутся.
Продолжение вот: "Сетка – типичная модель-ориентированная система. Она подразумевает, что некие условия рынка удерживают цену в определенном интервале. Например, ограничение не позволяет паре EUR/CHF опуститься ниже 1,20. Но и подняться слишком высоко цена также не может,
учитывая факт, что Национальный банк Швейцарии должен будет в конечном итоге выкупить назад все франки,
которые они продали ради поддержки определенного значения. Все это необходимые условия для применения Сетки. Без них это было бы обычной рулеткой, и пополнило бы список иррациональных трейдерских методов.
Волатильность – ключевое условие для метода Сетки. Чем ее меньше, тем меньше доход. Для того чтобы компенсировать его снижение, нужно вкладывать больше средств и сжимать сетку."
Пользователь
Сообщений: Регистрация: 15.06.2023
14.07.2023 16:50:34
Цитата
Владимир написал: А "для ускорения получения сигнала" данные нужно брать данные из ТТТ: BID, OFFER, SEC_PRICE_STEP или что там ещё надо. Быстрее не получится.
Нет так беру правда цикл гоняю в разных варинтах сейчас 10 мс. но мне столько ненужно 1 сек. "за глаза" - это чтоб ошибки повыскакивали. Пока все ок! Сбросил еще на один терминал у др. брокера.
Пользователь
Сообщений: Регистрация: 15.06.2023
14.07.2023 16:58:47
Цитата
Nikolay написал: По смыслу - простая система. По реализации - очень сложная.
Эта да, у меня был рабочий вариант динамически выставлялись ордера тоже контр тренд не плоха набирала пока не попадала под тренд. Вариант пробный был на небольшой депозит порядка 10 уровней. Но в наших условиях надо на открытии рынка ставить с хорошим спредом и депозитом, чтоб можно было усреднить если что пошло не так.
Пользователь
Сообщений: Регистрация: 25.09.2020
14.07.2023 16:59:45
VPM, Нет, я больше опытом не обмениваюсь: два раза попробовал - хватит.
Пользователь
Сообщений: Регистрация: 15.06.2023
14.07.2023 17:10:36
Цитата
Владимир написал: Нет, я больше опытом не обмениваюсь: два раза попробовал - хватит.
У вас и так выложено, все гениальное в простом вот эта штука, у вех на глазах t={ [0]=0, [1]={}} если добавить что #t не видит и не считает t[0] все становится на место. Как я раньше не заметил.
Пользователь
Сообщений: Регистрация: 15.06.2023
14.07.2023 17:14:52
Цитата
Nikolay написал: Есть даже готовый инструмент на бирже - календарный спред.
Да спасибо посмотрю. Но я не очень к таким инструмента, люблю попроще понятней. У Вас есть опыт?
Пользователь
Сообщений: Регистрация: 15.06.2023
14.07.2023 17:19:32
BR - 8.23 на конец начил разворот пробил мою поддержку,
Пользователь
Сообщений: Регистрация: 15.06.2023
17.07.2023 08:10:20
Цитата
Владимир написал: И что ещё за "выигрыш в 100%"? Относительно ЧЕГО и за какое время?
Объяснение 100-процентного успеха Grid Trading. Торговля без графиков.
Пользователь
Сообщений: Регистрация: 25.09.2020
17.07.2023 08:20:43
VPM, Нет, "объяснение 100-процентного успеха" - это в Кащенко. А торговля у меня и так без графиков.
Пользователь
Сообщений: Регистрация: 15.06.2023
17.07.2023 08:48:36
Вы спрашивали попался "на глаза" у ни был сайт если интересно смотрите.
Цитата
VPM написал: От себя могу добавить,что я другой подход пытаюсь реализовать контртренд на стоящем рынке.
Задача создание робота с обычным блокнотом превращается в куда более тривиальную задачу. А редактор FAR Manager, пожалуй, лучшее из всего что попадалось в свободном доступе и вообще где бы то ни было. Это пример того как надо писать на lua. Всё настолько прекрасно работает, что никакие "двойные очереди в луа" нафиг не нужны.
Пользователь
Сообщений: Регистрация: 15.06.2023
19.07.2023 14:53:14
Цитата
Владимир написал: Задача создание робота с обычным блокнотом превращается в куда более тривиальную задач
пишу в SciTe по одной причине нажатием на одну кнопку идет исполнение луа кода и проверка на лексические ошибки, подменяя данные от терминала Quir проверяешь логику и т.д. А что блокнот может?
Это не только на писание но еще и отладка. 1) фреймворк HackTrade избавил от необходимости следить за взаимодействия скрипта с квиком.
"работает в QUIK без лишних усилий робот работает быстро (можно делать роботов на тиках) поддерживаются графики «умные заявки» избавляют от бесконечной отладки"
На мой взгляд объективное. Увлекся, даже забыл про своего ИванИваныча,
Пробовал подходы и варианты стратегий описанные авторам фреймворк HackTrade. Без нареканий с моей стороны.
Чуть добавил в фреймворк: 1) ограничил получение данных с графика. (пробовал 1 индикатор). 2) добавил OnTrade для отлова сделок.
542 строки код!
Пользователь
Сообщений: Регистрация: 25.09.2020
19.07.2023 17:49:06
VPM, Ла не поможет никакой SciTe отловить ошибки в коде - разве что самые примитивные, описки. Вот, скажем, в моём скрипте идёт открытие внешнего файла и забор данных оттуда. И не только данных, но даже и некоторого кода. И что этот придурок может "проверить"?
А блокнот может всё. Код на Lua - это просто текст, и работать с ним нужно именно в ТЕКСТОВОМ редакторе. Желательно, не загаженным никаким "сопутствующим" говном. А отладка - это запуск скрипта в Квике и анализ получившегося при его работе лога. ТОЛЬКО ЭТО может реально отладить код. А графики и прочее подобное дерьмо меня не интересуют от слова "совсем" - я написал скрипт, чтобы тот САМ торговал, БЕЗ меня. И что значит "542 строки код!"? Это много или мало? Рабочий код моего скрипта состоит из ОДНОЙ строки.
Пользователь
Сообщений: Регистрация: 15.06.2023
19.07.2023 18:02:31
Владимир, Ну Вы то уже знаете, что самое ценное в жизне это Время. Чем больше возраст тем больше понимание этого! Малые шалости нам помогают экономить главное да и разработчики меньше скверных слов услышат в свой адрес
Цитата
Владимир написал: Вот, скажем, в моём скрипте идёт открытие внешнего файла и забор данных оттуда. И не только данных, но даже и некоторого кода. И что этот придурок может "проверить"?
Ну так если это текс без проблем!
Пользователь
Сообщений: Регистрация: 15.06.2023
19.07.2023 18:08:03
Цитата
Владимир написал: А отладка - это запуск скрипта в Квике и анализ получившегося при его работе лога.
рядом консоль куда выводится результат или ошибки. Все видно одним нажатием. Да Вы просто попробуйте это свободная программа. Загрузка в терминал окончательная доводка, я так довожу в боевом режиме с небольшим депо.
Пользователь
Сообщений: Регистрация: 15.06.2023
19.07.2023 18:13:32
Цитата
Владимир написал: А графики и прочее подобное дерьмо
Это один из вариантов получения данных, + их обработка с помощью алгоритмов на писаных на луа или стандартных индикаторов. Зачем же себя обкрадывать, есть варианты кому нежена отличная от Вашей стратегия тот пользуется.
Пользователь
Сообщений: Регистрация: 15.06.2023
19.07.2023 18:18:04
Цитата
Владимир написал: И что значит "542 строки код!"? Это много или мало?
Это столько строк в фреймворк HackTrade с пропусками, (--) и моими добавлениями (- стратегия, - ММ, -РМ). У кого оптимальней?
Пользователь
Сообщений: Регистрация: 15.06.2023
19.07.2023 18:18:57
Цитата
Владимир написал: Рабочий код моего скрипта состоит из ОДНОЙ строки.
Ну Не смешите
Пользователь
Сообщений: Регистрация: 15.06.2023
19.07.2023 19:04:14
А что это такое?
-- OOP support local __object_behaviour = { __call = function(meta, o) if meta.__index == nil then setmetatable(o, {__index = meta}) else setmetatable(o, meta) end if meta.init ~= nil then meta.init(o) end return o end }
Я то точно не знаю что это, ф давай те спросим у автора:
"Вторая часть полностью посвящена таблицам, единственной структуре данных в Lua. Главы этой части обсуждают структуры данных, их сохраняемость, пакеты и объектно-ориентированное программирование. Именно там мы раскроем настоящую мощь язык"
Programming in Lua Third Edition Roberto Ierusalimschy