Позиционная торговля - это прежде всего прочтение ценового действия на графиках разных тайм фреймах. Даже если торговать на 1 секундном графике, то не обходимо учитывать что происходит на 1 минутном, на 5 минутном и старших. Именно такой подход начал давать понимание, что же происходит на рынке в целом, ответы как входить и когда входить.
Алгоритмически я подкрепляю эту торговлю: элементами VSA, Smart Money, уровнями, фильтром трендов это основное. Но главное здесь ценовое действие - распознать куда Маркетмейкер ведет рынок.
На самом деле, подняты две очень важных основных темы в трейдинге:
1) Когда открывать позицию; 2) Сколько открывать - это вопрос управления позицией и управления риском.
Как открывать позицию, Когда открывать позицию, в каком направлении вот вечный вопрос трейдера. Так есть здесь какая то опора для стабильных результатов торговли?
С капиталистами часть ликвидности конечно утекло, это объективно, это видно по рынку, капитал бегает от одного инструмента к другому более часто, но это рынок и капитал здесь замкнут. Все также, есть крупные игроки, есть маркетмейкер обеспечивающий сделки, волатильность все также на "Америке".
Да первоначального капитала много не нужно чтоб еще одну пенсию себе делать, здесь уже важней знание правил управления капиталом. Размер имеет значение! Но это размер открываемой позиции к собственным средствам, не нужно перегружать (ну это я больше в свой адрес).
Ну в общем все как всегда в отношении стратегии, подправив тактику. Допустим мой основной торговый тайм фрейм сейчас Н1 при краткосрочной торговле, редко на америке поглядываю на М20, в основном посматриваю на Н4.
nikolz, Не знаю в чем я здесь ошибся, это русский перевод текста с английского языка, все что нужно здесь для понимания, это читать начиная с конца. Например если на писали на ангельском "Все хорошо", то понимать нужно "Хорошо все".
Владимир написал: Да, скрипт-то зарабатывает, но в последнее время очень плохо - биржа ведь фактически уничтожена, там творится чёрт знает что. А мой любимый долларовый рынок и вообще накрылся медным тазом.
Да нет все не так плохо, зарабатывать можно и нужно!
Правда я сам последнее время руками, скрипт в режиме советник и прогноз, но это то моя проблема, не его. Дело в том что при переходе на обработку портфеля все оказалось немного сложней, чем я ожидал, где то просто банально не хватает знаний в программировании.
Вам удачи, со своей стороны могу посоветовать пересмотреть масштаб, на рынке стало тесно.
Уважаемые, я "Ни сном ни духом" в Многопоточности, все мои выдержки это цитаты специалистов и разработчиков языка, Вам нужно спорить с ними, По мне так, если поток один то говорить без сленга можно только о многозадачности. Как она реализована в луа, мне понравилась, я при вожу пример как можно использовать.
VPM написал: "Технически вся магия происходит в методе main, там в цикле вызывается сопрограмма, которая создаётся из функции Robot. функция Trade() Это псевдоним стандартной функции coroutine.resume, при вызове этой функции прерывается код робота и происходит отработка умных заявок (обновляются цены лимитников, количество, и т.п.)"
Вот так это работает. Справочно:
Цитата
VPM написал: Как это работает (функционал сопрограмм).Вызов `corutine.create` получает функцию и возвращает спящую ("suspended") сопрограмму. Её можно "разбудить" вызовом `coroutine.resume`( Trade() ) и тогда она начинает выполняться.Выполняется она до тех пор, пока не встретиться вызов `coroutine.yield`. В этот момент управление возвращается к вызывающему потоку. Следующий вызов `coroutine.resume` восстановит выполнение сопрограммы, передавая управление ровно в то место, где она была приостановлена.Сопрограмма может быть вечной - если она время от времени уступает выполнение, то в какой-то момент её можно просто не возобновить. Но она может и завершится и перейти в состояние "dead", возобновить из которого её будет уже невозможно. Вызовы `.resume` и `.yield` могут не только передавать управление, но и обмениваться данными. Вот, собственно, и все.
Владимир написал: 5. Мой скрипт преспокойно обновляет информацию от биржи именно раз в секунду на самом дохлом железе (количество графиков, тиков, стаканов и всех сделок равно нулю).
Владимир, в пору задаться вопросом: А зарабатывает ли ? А то он у Вас как "раб на галерах"
"В многозадачном алгоритме исполнителей несколько и у каждого из них - свое состояние и свой путь в графе состояний. Многопоточные алгоритмы - просто другое название для многозадачных."
"В Lua реализована "совместная многопоточность", когда потоки явно уступают выполнение друг другу и сохраняют состояние до следующего момента, когда выполнение столь же явно будет передано им снова".
"Только явная передача управление и сохранение состояния. Это логическая многозадачность - на самом деле в любой момент времени выполняется только один поток. Просто их несколько и они переключаются между собой".
Наверняка можно сделать, только зачем если уже есть, и сделано классно.
Вы очереди перебираете в цикле, цикл идет с какой то определенной задержкой на исполнение.
Мой пример это выделение какой то задачи в коде, которую нужно выполнять с максимальной скоростью. Ну к примеру пронестись по тикам, и снова вернуться к аналитике на медленных скоростях и здесь скорости имеют значения.
Я не утверждаю что это единственное использование каротин, но согласитесь видь классно! А главное можно работать со скоростью исполнения скрипта!
Nikolay написал: И все это можно воспроизвести на обычном цикле, опрашивая методы-объекты: готово - выполни это, нет - ждем дальше.Они удобны - да, но сказать, что без них нельзя - нет.
Нет нельзя, это две задачи исполняемые с разными скоростями. В моем примере функция Trade() имеет свой внутренний цикл без всяких ограничений.
Nikolay, Ну да, так в этом вся суть, что это делается средствами lua, останавливается задача на получение и обработку данных выработку сигала, и начинается исполнение ордеров в цикле со всей дурью на что способна lua.
Владимир, да давненько, рад что Ваш скрип поживает хорошо!
Фактически на все Ваши вопросы есть ответы выше.
Цитата
VPM написал: Этот подход позволяет носиться по тикам, писать на чистом lua, и навсегда забыть про тему скоростей (исполнения кода)!
Видите в чем еще дело, я активно в своих работах использую историю данных, это приводит к резкому росту памяти в конце сессии, меня это сильно смущает, поиск оптимального среднего между использованием памяти и скоростью.
for i=1,#sec do ---- цикла по бумагам: -- Система нескольких окон for j=1,#tf do ---- цикла по таймфремам F[j]() --парад стратегий end
signal -- Вырабатываем сигнал на сделку rm -- определение риска на сделку mm -- расчет количества на сделку p -- получаем цену на сделку SmartOrder( p, q ) -- формируем ордер на сделку end Trade() -- Вызова функции Trade, для осуществления торговых действий pos -- получаем позицию по инструменту sleep(950) -- тормозим чтоб в ближним космосе очутиться! end --Сохраняем --Закрываем end Вопрос с модульностью решен, пишем свои стратегии входа, стратегии выхода, управление позицией, риском, алгоритмы - все независимо!Собираем Систему (торговую!)
nikolz, Прежде всего нужно ответить на вопрос зачем что то ускорять, если все скрипты мы тормозим выставляя sleep(х)?
"Lua не только быстро выполняется, но и быстро компилируется. Например, вышеприведенная программа для составления списка авторов обрабатывает 1 Мб данных за одну десятую секунды. (Примечание: На моем старом Пентиуме.)" (от Профессора)
В реализации же HackTrade, при помощи стандартной библиотеки coroutine, поток разделен на две задачи, выполняемых на разных скоростях. (Я выше про это рассказываю).
Цитата
VPM написал: В чем суть, есть 2 основные функции: 1) Pobot() 2) Trade()
Которые между собой взаимодействуют.
Цитата
VPM написал: "В Lua реализована "совместная многопоточность", когда потоки явно уступают выполнение друг другу и сохраняют состояние до следующего момента
nikolz написал: Поэтому коруунды ничего не ускоряют.
А никто не утверждает что они что ускоряют, речь идет о разделении скорости исполнения кода на две части. Там где нужна максимальная - исполнения ордера, и где можно раз в секунду.
nikolz написал: О псевдо поточности коруундов можно почитать в учебниках по программированию и документации по Луа.
Не так важно, выполняются ли потоки разными физическими процессорами или разными потоками одного, переключаются ли они операционной системой, "главным" потоком или явно передают управление друг другу - главное, что каждый поток (строго говоря "нить", от английского "thread" ) имеет свое состояние!
Цитата
VPM написал: При вызове функции Trade() прерывается код функции Pobot(), идет исполнение сопрограммы со всей той скорость на что способна lua и позволяет система! Этот подход позволяет носиться по тикам, писать на чистом lua, и навсегда забыть про тему скоростей (исполнения кода)!
Именно в сопрограмме достигается максимальное исполнение кода,
Цитата
VPM написал: В функции Robot получаем информацию от терминала обрабатываем ее формируем правило торговой системы, именно здесь работает задержка основного цикла sleep()!
нету смысла гонять быстрее 1 миллисекунды, так как нет обновления информации, а намой в взгляд и быстрее 1 секунды нету смысла.
Вызов `corutine.create` получает функцию и возвращает спящую ("suspended") сопрограмму. Её можно "разбудить" вызовом `coroutine.resume`( Trade() ) и тогда она начинает выполняться.
Выполняется она до тех пор, пока не встретиться вызов `coroutine.yield`. В этот момент управление возвращается к вызывающему потоку. Следующий вызов `coroutine.resume` восстановит выполнение сопрограммы, передавая управление ровно в то место, где она была приостановлена.
Сопрограмма может быть вечной - если она время от времени уступает выполнение, то в какой-то момент её можно просто не возобновить. Но она может и завершится и перейти в состояние "dead", возобновить из которого её будет уже невозможно.
Вызовы `.resume` и `.yield` могут не только передавать управление, но и обмениваться данными.
Вот, собственно, и все. Эта простая реализация дает возможность реализовывать многозадачные алгоритмы даже не в многозадачной среде.
nikolz написал: Но корунды имеют накладные расходы. Поэтому вместо выигрыша может быть проигрыш.
Это совсем не понятно? Я привожу конкретный пример реализации,
Цитата
VPM написал: В функции Robot получаем информацию от терминала обрабатываем ее формируем правило торговой системы,именно здесь работает задержка основного цикла sleep()!При вызове функции Trade() прерывается код функции Pobot(), идет исполнение сопрограммы со всей той скорость на что способна lua и позволяет система!
nikolz написал: Если действительно хотите многопоточность без загрузки процессора пустыми циклами и пропуска данных по тикам,то смотрите Event OC.
Все что пытаюсь добиться это стабильной работы скриптов!
Пример HackTrade я реализую у себя с не большой доработкой, но об этом я делал сообщения. В этом сообщении я рассказал о еще одной стороне HackTrade - почему это лучшая работа. Более того он опубликован и каждый желающий может его опробовать.
Lua реализовывался как язык сценариев (посмотрите игры созданные на нем) но это уже другая тема. Мы здесь о быстродействии.
nikolz написал: Вы либо умолчали, либо заблуждаетесь.---------------------Корутина - это псевдо многопоточность. т е исполняются они на одной VMLua и в одном потоке OC.--------------------
nikolz, Я совсем не обсуждал как реализована многозадачность в lua (какой смысл это уже есть), это доступная известная информация:
"В Lua реализована "совместная многопоточность", когда потоки явно уступают выполнение друг другу и сохраняют состояние до следующего момента, когда выполнение столь же явно будет передано им снова. Никакого разделения на физические процессоры или совместного использования процессорного времени. Никакой вытесняющей многозадачности, неблокирующего доступа, семафором, диспетчеров. Только явная передача управление и сохранение состояния. Это логическая многозадачность - на самом деле в любой момент времени выполняется только один поток. Просто их несколько и они переключаются между собой."
Я лишь говорю о том что, не используются, те возможности которые нам представляет lua, что зачастую совсем не нужно "городить огород", а стоит разобраться с lua!
На страницах данного форума очень часто и много обсуждается быстродействие lua. Чего только не услышишь от "заслуженных метров данного форума", но на мой взгляд не заслуженно, не уделяется внимание многопоточности уже реализованной в lua. На русском языке, да и техническое исполнение, правильно определять как многозадачность, на английском - это "корутины".
Ну давайте, об всем и по порядку!
Lua быстрый язык, (в этом легко убедиться уберите в Вашей программе sleep()). В терминале квик, минимальный тик времени это 1 миллисекунда, информация обновляется один раз в секунду (таблица текущих параметров), это срезы в какой-то момент времени и трансляция информации от биржи, через сервер в терминал.
То есть технически обновить информацию от биржи можно 1 раз в секунду (это еще зависит от количества графиков открытых, "железа" ...) Но есть еще тики, стакан и таблица всех сделок.
Но причём тут многозадачность, я много на страницах этого поста пишу про пример от Дениса Колодина фреймворк HackTrade. Это пример реализации многозадачности в lua!
В чем суть, есть 2 основные функции: 1) Pobot() 2) Trade()
"Технически вся магия происходит в методе main, там в цикле вызывается сопрограмма, которая создаётся из функции Robot. функция Trade() Это псевдоним стандартной функции coroutine.resume, при вызове этой функции прерывается код робота и происходит отработка умных заявок (обновляются цены лимитников, количество, и т.п.)"
В функции Robot получаем информацию от терминала обрабатываем ее формируем правило торговой системы, именно здесь работает задержка основного цикла sleep()!
При вызове функции Trade() прерывается код функции Pobot(), идет исполнение сопрограммы со всей той скорость на что способна lua и позволяет система!
Этот подход позволяет носиться по тикам, писать на чистом lua, и навсегда забыть про тему скоростей (исполнения кода)!
Виталий Дерягина, все Вы правильно понимаете, просто нужно быть внимательней! Пробуйте тот же код:
Код
function OnCalculate(index)
local median = (H(index)+L(index))*0.5 or C(index);
local label={TEXT="Тарам",
FONT_HEIGHT=25,
R=255,G=255,B=0,
FONT_FACE_NAME='Times New Roman',
FONT_HEIGHT=18,
DATE = get_date( T(index) ),TIME = get_time( T(index) )
YVALUE=median,
};
AddLabel ('20', label)
if index == Size()-1 then
return С(index)
end
end
Serge123, У меня подобная проблема решилась после удаления сам описных скриптов (индикаторов и роботов) из папки терминала, Видимо на скапливались ошибки, что и приводила к тормозам.
Виталий Дерягина написал: Спасибо за помощь VPM ! Я понял почему не видно меток, они просто за пределами масштаба и их просто не видно, но они есть. А что по оси Y масштабирования нет? Или еще есть какой-то подвох?
По чему нет, собственно метка для этого и нужна, для вывода, какого то полученного или расчётного значения, YVALUE = (H(I)+L(I))*0.5 or С(I); Это можно представить как координаты на плоскости где х=DATE ,TIME, а у=значение цены.
Попробуйте так (на график добавьте 20 - chart_tag – тег графика, к которому привязывается метка) function get_date(td)-- получаем local d = string.format('%.4d%.2d%.2d',td.year,td.month,td.day) if d~=nil then return d else return '0' end end function get_time(td)-- получаем local t = string.format('%.2d%.2d%.2d',td.hour,td.min,td.sec) --or T--.datetime if t~=nil then return t else return '000000' end end
OnCalcul ate = function(index)
--if index == 1 then label={ TEXT="Тарам", FONT_HEIGHT=25, R=255, G=255, B=0, FONT_FACE_NAME='Times New Roman', FONT_HEIGHT=18, --Yvalue=101, ---datetime"]=20191007 YVALUE=101, DATE = get_date( T(index) ), TIME = get_time( T(index) ) } AddLabel ('20', label)
Виталий Дерягина, В каждой версии терминала содержится такой файл "QLUA.chm" это справка "Руководство пользователя QLua, "находится там куда установили квик.
Открываете, читаем: "Добавляет метку с заданными параметрами.
Формат вызова:
NUMBER AddLabel(STRING chart_tag, TABLE label_params)
Параметры:
chart_tag – тег графика, к которому привязывается метка,
label_params – таблица с параметрами метки.
Функция возвращает числовой идентификатор метки. В случае неуспешного завершения функция возвращает «nil».
Это то о чем Вам подсказал Nikolay, теперь в Вашем примере
Nikolay написал: Есть компании с огромной капитализацией, но польза от них ничтожна.
Вы вероятно имеете ввиду маркетинг, который занимает львиную долю в оценке, а затем и стоимости. Нет я о Майкрософт и другом обкушенном продукте.
Насколько я помню, мы с Вами из одних прошлых лет (+-10).
Вот вам другая история, сегодня это покажется дикостью, но будучи молодым специалистом - инженер, руководитель отдела, получив "железо" в пользование, не нечем было работать, (тогда было все еще под DOC), пришлось лететь в Казахстан, там мой товарищ возглавлял автоматизацию золотодобывающего предприятия (писали САУ под DOC), у них водились "денюжки", и они могли себе позволить, чтоб получить на выходе электронную таблицу и редактор. на дискетке.
Сегодня просто из Москвы сел на рейс и в любой точке мира, тогда из Сибири почти на "лошадях". Ник то не гнал, по собственному желанию за свой счет.
Результат написал в э. таблице программу, обсчитывала одну из наших задач, то что считали 2 сотрудника 3 суток, теперь в программу нужно было загрузить данные и нажать кнопку.
Чем дело кончилось "на всю жизнь урок" - сократили сотрудника в отделе.
Сегодня школьники пишут подобное в excele, но тем не менее, грузите под э.т. и она работает. Но так мир остановится, а программисты останутся без вознаграждения.
Нет конечно нужен технический руководитель проекта, но и очень важно как написано.
Nikolay написал: Так что SciTE - это такой же новодел как VSCode.
Новодел новоделу рознь!
Вот доступный всем пример, судите сами:
Две компании в недалеком прошлом на стадии становления и развития - занимаются программированием, одни "торгаши" ( без сомнения, нужная вещь и не обходимая) вторые "Программисты" (заглавная буква не случайна).
На старте занимались одним и тем же, ну давайте взглянем на то что нам близко, капитализация компаний ну и на продукт.
Nikolay написал: А лучше добавить параметр -s. Правда если цель - писать скрипты для себя и только для себя, то зачем вообще компилировать. Квик это сам сделает перед запуском.
У меня это в SciTE запрограммировано, делаю это машинально особенно когда переделываешь,
3 кнопки по очереди: 1) сохранил изменения; 2) проверил на исполнение; 3) скомпилировал.
Особенно удобно для индикаторов, так как тело находится в модуле (таблице) , а голова в терминале. Все основные исправления идут в теле индикатора (три кнопочки), редко голова редактируется так как структуру продумываешь сразу.
И дальше можно не продолжать Я шучу кому как удобно и на чем, я просто привык, но есть одно неоспоримое преимущество он Стабилен! Поставил уже на верно лет 20 назад (когда там 5.1 вышло), накидал разного сервиса и забыл как лезть в него.
Цитата
Nikolay написал: Также советую проверить какую команду выдает SciTE для компиляции. Скорее всего без -s, что оставит отладочную информацию и позволит декомпилировать код, если он компилировался в чистом виде.
Вот пример компиляции: >luac54.exe -o "*.luac" "*.lua" >Exit code: 0 Time: 0.138
Начну с конца. Решил сбросить на графики индикатор Структура рынка (Market Structure), помогает определить глобальный тренд. Это тоже самое что всем хорошо известный индикатор Зиг-Заг, пользовался разработкой Nikolay, это больше чем индикатор, это программа анализа, зашел к нему на "поседелочки" посмотреть что нового, взял новую разработку "*zz_algo".
Nikolay, Пока не запускал в терминале, но в SciTE(lua 5.1) выдает ошибку:
lua: ...\Untitled11.lua:2390: function at line 1990 has more than 60 upvalues >Exit code: 1 Time: 0.229
Хотя не знаю может в lua 5.4 не уже ограничения по количеству локальных переменных, но решил Вам оставить сообщение, сам не разбирался.
Кстати если кто знает как перевести SciTE(lua 5.1) на lua 5.4 подскажите пожалуйста? Компилятор легко перевел!
Здесь пока никаких переделок. Есть старый скрипт запущу в работу. Смысл, защита дипозита на просадку (по умолчанию 5% от депозита), при снижении счета на величину допустимой просадки, просто сбрасывает все позиции, и остановка торговли.
Прежде чем заняться редактированием мани менеджментом, нужно испрвить работу моего MarketSimulator - это уже просто какое - то наказание для меня. Ну нет доверия нужно прверять?
Да выводы конечно делать рано, но при новой организации данных, заработал сборщик мусора, взял под контроль память! (хотя не все доделал)
Риск на сделку, здесь все просто. Сделаю метод для моего класса.
Все начинается с капитала. Размер имеет значение!
Задаю в % (от 1% - 10% заввисит от стратегии по умолчанию 2% (т.е. 50 сделок) пересчет в cash - для анализа по залогам; пересчет в pips - для анализа по валотильности.
На выходе: 1) risk на сделку. 2) reward на сделку. 3) contract на сделку.
Вот и подошел в плотную к вопросу менеджмента в трейдинге! Зачастую просматривая материалы на эту тему, заметил, что не делается различие между мани менеджментом и риск менеджментом.
У себя я четко провожу линию различия: риск менеджментом - управление риском; мани менеджментом - управление позицией (количеством а вернее сказать стоимость). Хотя эти направления сильно переплетены, но алгоритмы разные.
Начну с риска риск: риск на сделку риск на день. За структуру данных возьму и создам класс, по примеру класса на позицию описанную выше.
О чем история, а история стара как рынок - "Пропустил козла в свой огород". Ну обо всем и по порядку.
Отключил всех "помощников" - переделываю скрипты от торговли одним инструментом, к торговле портфелем. (Когда начинал переделку, думал добавил цикл по инструментам и все дела, но не ту-то было. Вот уже больше квартала сижу). Есть время, пишу, приторговываю руками (дневки или средней срок, стратегии концеп смарт мани + VSA или свою).
Но история то про "козла", зовется GOLD и то когда убыток по риск менеджменту в радость. Все началось безобидно: Бычий тренд, сильно отскочили от средней, начала дня - коррекция, нашел шортовый ордер блок, посчитал цели, объём сделки, открылся, на цели лимитки. Следующий день, цена не дошла несколько пунктов до цели отскочила, идет откат, пересчет новые цели - лимитки. Все в пределах моего риск менеджмента. Следующий день, цена не дошла несколько пунктов до цели отскочила, бычий тренд, и фаза бычья, плакал мой дневной риск, ну и кто тут не усреднился бы? Риск менеджмент уже и не при делах, примерно 80% депозита в удержании данной позиции, в ущерб другим сделкам, просадки в моменте > 30%. И какова была моя радость сегодняшнему гэпу, когда маркетмейкер перевернул рынок, все прямо по классики! А когда цена пошла в сторону позиции, я уже не на что не обращал внимания, а при каждом удобном случае уменьшал позицию. Огромная медвежья, поглощающая свеча, медведи зарабатывают, на конец и я в тренде, но радовался, я тому что есть возможность закрыть позицию и закрывал!
Вспоминая историю описанную Ларри Вильямсом, когда они (риск - менеджер, у него был РАЛЬФ ВИНС, написавший книгу "Математика управления капиталом", ныне управляющий фондом), участвовали в конкурсе и депозит в 10 000$ превратили в миллион и потом терпели просадку почти в миллион чтоб снова подняться.
Немного хочу отступить от темы обсуждение, рассказать небольшую, но очень поучительную историю. Но прежде по благодарить Nikolay, за поддержку в обсуждениях, и его мудрые советы!
После того как "приказала долго жить статистика сайта", такое в впечатление что общение идет в "кругу тихо сам собою". Ну если у разработчиков "наплевательское" отношение к нам, давайте друг с другом обмениваться мнением, и не важно что иногда бываем не правы, высказывайтесь?
Nikolay написал: На примере массива Price, т.к. я вижу где он используется. Значения дальше P-1 уже не нужны. Поэтому вполне можно написать Price[index - P - 1] = nil. Хотя алгоритм поиска экстремума за период иногда проще делать иначе, через unpack. (Правда для малых P - это не существенно).
Иногда проще не создавать массивы, а просто ввести переменные, постоянно изменяя значения. На примере той же EMA, если не надо иметь данные дальше чем прошлое значение, то достаточно ввести переменную, отвечающую за прошлое значение EMA, вместо массива.
Не совсем понятно, запись Price[index - P - 1] = nil. запишет в массиве nil как значение или уменьшит этот массив.
local Norm={} local Psn={} local Price={} local HH={} local LL={} local Fich={} local Dox={} local I1=0; local hh,ll=0,0; return function( I, FSettings, ds ) local I=I or 1; local ds = ds or nil; local FSettings = FSettings or {}; ............................................. end end
Вот пример, для данного замыкания эти таблицы будут копить данные, в процессе работы, что ведет к потреблению памяти. local Norm={} local Psn={} local Price={} local HH={} local LL={} local Fich={} local Dox={} local I1=0; local hh,ll=0,0;
Как Высчитаете нужно их чистить, обрезать, еще что то в целях уменьшения потреблению памяти?
VPM написал: Мы один раз продумали структуру данных, а дальше через присвоение пользуемся - "по образу и подобию", не задумываясь почему там таблица не обновилась, где ты там забыл переменную локализовать, + "синтаксический сахар". Это просто удобно при использовании портфеля из бумаг.
Это, конечно, так. В теории. Если объект действительно детерминирован. Но, как обычно, примеры ООП из кошек, собак, животных - это просто примеры. Но это также не отменяет простого подхода через вызов метода, возвращающего готовую структуру. Тоже вызвал, получил экземпляр нового объекта.
я не чего не пытаюсь отменить, просто обсуждаю с сообществом. я лишь пришел к выводу, что такой подход в нашей задаче, наиболее оптимален, надежен, лаконичен, да просто удобен!
Создали экземпляр если не нежна переменная ставим(--), нет переменной, и не нужно носиться по всему скрипту. не что не мешает делать так local a=t[i][j] внутри блока.
Но и для писателей это не только конструктор портфелей, но и роботов - "по образу и подобию", мин. изменениями.