Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
26.12.2023 16:48:15
Цитата
nikolz написал: Поэтому коруунды ничего не ускоряют.
А никто не утверждает что они что ускоряют, речь идет о разделении скорости исполнения кода на две части. Там где нужна максимальная - исполнения ордера, и где можно раз в секунду.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
26.12.2023 16:41:32
Цитата
nikolz написал: О псевдо поточности коруундов можно почитать в учебниках по программированию и документации по Луа.
Не так важно, выполняются ли потоки разными физическими процессорами или разными потоками одного, переключаются ли они операционной системой, "главным" потоком или явно передают управление друг другу - главное, что каждый поток (строго говоря "нить", от английского "thread" ) имеет свое состояние!
Цитата
VPM написал: При вызове функции Trade() прерывается код функции Pobot(), идет исполнение сопрограммы со всей той скорость на что способна lua и позволяет система! Этот подход позволяет носиться по тикам, писать на чистом lua, и навсегда забыть про тему скоростей (исполнения кода)!
Именно в сопрограмме достигается максимальное исполнение кода,
Цитата
VPM написал: В функции Robot получаем информацию от терминала обрабатываем ее формируем правило торговой системы, именно здесь работает задержка основного цикла sleep()!
нету смысла гонять быстрее 1 миллисекунды, так как нет обновления информации, а намой в взгляд и быстрее 1 секунды нету смысла.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
26.12.2023 13:35:13
Как это работает (функционал сопрограмм).
Вызов `corutine.create` получает функцию и возвращает спящую ("suspended") сопрограмму. Её можно "разбудить" вызовом `coroutine.resume`( Trade() ) и тогда она начинает выполняться.
Выполняется она до тех пор, пока не встретиться вызов `coroutine.yield`. В этот момент управление возвращается к вызывающему потоку. Следующий вызов `coroutine.resume` восстановит выполнение сопрограммы, передавая управление ровно в то место, где она была приостановлена.
Сопрограмма может быть вечной - если она время от времени уступает выполнение, то в какой-то момент её можно просто не возобновить. Но она может и завершится и перейти в состояние "dead", возобновить из которого её будет уже невозможно.
Вызовы `.resume` и `.yield` могут не только передавать управление, но и обмениваться данными.
Вот, собственно, и все. Эта простая реализация дает возможность реализовывать многозадачные алгоритмы даже не в многозадачной среде.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
26.12.2023 12:39:34
Цитата
nikolz написал: Но корунды имеют накладные расходы. Поэтому вместо выигрыша может быть проигрыш.
Это совсем не понятно? Я привожу конкретный пример реализации,
Цитата
VPM написал: В функции Robot получаем информацию от терминала обрабатываем ее формируем правило торговой системы,именно здесь работает задержка основного цикла sleep()!При вызове функции Trade() прерывается код функции Pobot(), идет исполнение сопрограммы со всей той скорость на что способна lua и позволяет система!
Где тут проигрыш?
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
26.12.2023 12:33:14
Цитата
nikolz написал: и еще... одновременно с этим практически бесплатно (в смысле затрат времени процессора) реализуется WatchDog
Вы блещете эрудицией, но какое это практическое значение имеет к нашей небольшой прикладной задаче?
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
26.12.2023 12:29:43
Цитата
nikolz написал: Если действительно хотите многопоточность без загрузки процессора пустыми циклами и пропуска данных по тикам,то смотрите Event OC.
Все что пытаюсь добиться это стабильной работы скриптов!
Пример HackTrade я реализую у себя с не большой доработкой, но об этом я делал сообщения. В этом сообщении я рассказал о еще одной стороне HackTrade - почему это лучшая работа. Более того он опубликован и каждый желающий может его опробовать.
Lua реализовывался как язык сценариев (посмотрите игры созданные на нем) но это уже другая тема. Мы здесь о быстродействии.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
26.12.2023 12:16:56
Цитата
nikolz написал: Вы либо умолчали, либо заблуждаетесь.---------------------Корутина - это псевдо многопоточность. т е исполняются они на одной VMLua и в одном потоке OC.--------------------
nikolz, Я совсем не обсуждал как реализована многозадачность в lua (какой смысл это уже есть), это доступная известная информация:
"В Lua реализована "совместная многопоточность", когда потоки явно уступают выполнение друг другу и сохраняют состояние до следующего момента, когда выполнение столь же явно будет передано им снова. Никакого разделения на физические процессоры или совместного использования процессорного времени. Никакой вытесняющей многозадачности, неблокирующего доступа, семафором, диспетчеров. Только явная передача управление и сохранение состояния. Это логическая многозадачность - на самом деле в любой момент времени выполняется только один поток. Просто их несколько и они переключаются между собой."
Я лишь говорю о том что, не используются, те возможности которые нам представляет lua, что зачастую совсем не нужно "городить огород", а стоит разобраться с lua!
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
26.12.2023 10:38:35
Добрый день!
На страницах данного форума очень часто и много обсуждается быстродействие lua. Чего только не услышишь от "заслуженных метров данного форума", но на мой взгляд не заслуженно, не уделяется внимание многопоточности уже реализованной в lua. На русском языке, да и техническое исполнение, правильно определять как многозадачность, на английском - это "корутины".
Ну давайте, об всем и по порядку!
Lua быстрый язык, (в этом легко убедиться уберите в Вашей программе sleep()). В терминале квик, минимальный тик времени это 1 миллисекунда, информация обновляется один раз в секунду (таблица текущих параметров), это срезы в какой-то момент времени и трансляция информации от биржи, через сервер в терминал.
То есть технически обновить информацию от биржи можно 1 раз в секунду (это еще зависит от количества графиков открытых, "железа" ...) Но есть еще тики, стакан и таблица всех сделок.
Но причём тут многозадачность, я много на страницах этого поста пишу про пример от Дениса Колодина фреймворк HackTrade. Это пример реализации многозадачности в lua!
В чем суть, есть 2 основные функции: 1) Pobot() 2) Trade()
"Технически вся магия происходит в методе main, там в цикле вызывается сопрограмма, которая создаётся из функции Robot. функция Trade() Это псевдоним стандартной функции coroutine.resume, при вызове этой функции прерывается код робота и происходит отработка умных заявок (обновляются цены лимитников, количество, и т.п.)"
В функции Robot получаем информацию от терминала обрабатываем ее формируем правило торговой системы, именно здесь работает задержка основного цикла sleep()!
При вызове функции Trade() прерывается код функции Pobot(), идет исполнение сопрограммы со всей той скорость на что способна lua и позволяет система!
Этот подход позволяет носиться по тикам, писать на чистом lua, и навсегда забыть про тему скоростей (исполнения кода)!
Сравнение языков программирования
Пользователь
Сообщений: Регистрация: 15.06.2023
15.12.2023 14:05:20
"Русский Язык - Язык Мироздания (математики, программирования, творца)" Говоров В.И.
Учусь работать с метками, Помощь в написании кода для выставлении меток на графике
Пользователь
Сообщений: Регистрация: 15.06.2023
13.12.2023 16:26:51
Виталий Дерягина, все Вы правильно понимаете, просто нужно быть внимательней! Пробуйте тот же код:
Код
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
Почему так сильно тормозит ввод/изменение заявки?
Пользователь
Сообщений: Регистрация: 15.06.2023
13.12.2023 11:25:41
Serge123, У меня подобная проблема решилась после удаления сам описных скриптов (индикаторов и роботов) из папки терминала, Видимо на скапливались ошибки, что и приводила к тормозам.
Учусь работать с метками, Помощь в написании кода для выставлении меток на графике
Пользователь
Сообщений: Регистрация: 15.06.2023
13.12.2023 11:18:15
Цитата
Виталий Дерягина написал: Спасибо за помощь VPM ! Я понял почему не видно меток, они просто за пределами масштаба и их просто не видно, но они есть. А что по оси Y масштабирования нет? Или еще есть какой-то подвох?
По чему нет, собственно метка для этого и нужна, для вывода, какого то полученного или расчётного значения, YVALUE = (H(I)+L(I))*0.5 or С(I); Это можно представить как координаты на плоскости где х=DATE ,TIME, а у=значение цены.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
11.12.2023 12:17:54
Добрый день!
На графике квик есть прогнозная зона, подскажите как правильно индексировать там значения чтоб не пропадали?
Учусь работать с метками, Помощь в написании кода для выставлении меток на графике
Пользователь
Сообщений: Регистрация: 15.06.2023
09.12.2023 23:33:32
Попробуйте так (на график добавьте 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)
-- end
return 100 end
Учусь работать с метками, Помощь в написании кода для выставлении меток на графике
Пользователь
Сообщений: Регистрация: 15.06.2023
09.12.2023 17:13:05
Виталий Дерягина, В каждой версии терминала содержится такой файл "QLUA.chm" это справка "Руководство пользователя QLua, "находится там куда установили квик.
Открываете, читаем: "Добавляет метку с заданными параметрами.
Формат вызова:
NUMBER AddLabel(STRING chart_tag, TABLE label_params)
Параметры:
chart_tag – тег графика, к которому привязывается метка,
label_params – таблица с параметрами метки.
Функция возвращает числовой идентификатор метки. В случае неуспешного завершения функция возвращает «nil».
Это то о чем Вам подсказал Nikolay, теперь в Вашем примере
chart_tag – тег графика, к которому привязывается метка,
2) return 100, что за 100 хотите вернуть в параметрах пишите ["Yvalue"]=101,
Прежде чем задавать какие то вопросы, попробуйте прочитать, справку хотя бы для того чтоб Вас понимали и разговаривать на одном языке.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
08.12.2023 20:54:52
Цитата
Nikolay написал: Есть компании с огромной капитализацией, но польза от них ничтожна.
Вы вероятно имеете ввиду маркетинг, который занимает львиную долю в оценке, а затем и стоимости. Нет я о Майкрософт и другом обкушенном продукте.
Насколько я помню, мы с Вами из одних прошлых лет (+-10).
Вот вам другая история, сегодня это покажется дикостью, но будучи молодым специалистом - инженер, руководитель отдела, получив "железо" в пользование, не нечем было работать, (тогда было все еще под DOC), пришлось лететь в Казахстан, там мой товарищ возглавлял автоматизацию золотодобывающего предприятия (писали САУ под DOC), у них водились "денюжки", и они могли себе позволить, чтоб получить на выходе электронную таблицу и редактор. на дискетке.
Сегодня просто из Москвы сел на рейс и в любой точке мира, тогда из Сибири почти на "лошадях". Ник то не гнал, по собственному желанию за свой счет.
Результат написал в э. таблице программу, обсчитывала одну из наших задач, то что считали 2 сотрудника 3 суток, теперь в программу нужно было загрузить данные и нажать кнопку.
Чем дело кончилось "на всю жизнь урок" - сократили сотрудника в отделе.
Сегодня школьники пишут подобное в excele, но тем не менее, грузите под э.т. и она работает. Но так мир остановится, а программисты останутся без вознаграждения.
Нет конечно нужен технический руководитель проекта, но и очень важно как написано.
"Вот истории конец , а кто слушал молодец"!
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
08.12.2023 19:22:20
Цитата
Nikolay написал: Так что SciTE - это такой же новодел как VSCode.
Новодел новоделу рознь!
Вот доступный всем пример, судите сами:
Две компании в недалеком прошлом на стадии становления и развития - занимаются программированием, одни "торгаши" ( без сомнения, нужная вещь и не обходимая) вторые "Программисты" (заглавная буква не случайна).
На старте занимались одним и тем же, ну давайте взглянем на то что нам близко, капитализация компаний ну и на продукт.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
08.12.2023 19:04:05
Ок, спасибо безопасность превыше всего!
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
08.12.2023 18:53:23
Цитата
Nikolay написал: А лучше добавить параметр -s. Правда если цель - писать скрипты для себя и только для себя, то зачем вообще компилировать. Квик это сам сделает перед запуском.
У меня это в SciTE запрограммировано, делаю это машинально особенно когда переделываешь,
3 кнопки по очереди: 1) сохранил изменения; 2) проверил на исполнение; 3) скомпилировал.
Особенно удобно для индикаторов, так как тело находится в модуле (таблице) , а голова в терминале. Все основные исправления идут в теле индикатора (три кнопочки), редко голова редактируется так как структуру продумываешь сразу.
И дальше можно не продолжать Я шучу кому как удобно и на чем, я просто привык, но есть одно неоспоримое преимущество он Стабилен! Поставил уже на верно лет 20 назад (когда там 5.1 вышло), накидал разного сервиса и забыл как лезть в него.
Цитата
Nikolay написал: Также советую проверить какую команду выдает SciTE для компиляции. Скорее всего без -s, что оставит отладочную информацию и позволит декомпилировать код, если он компилировался в чистом виде.
Вот пример компиляции: >luac54.exe -o "*.luac" "*.lua" >Exit code: 0 Time: 0.138
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
08.12.2023 15:55:01
"Рекламная пауза"
Цитата
Nikolay написал: SciTE не использую, так что не знаю. После VSCode - особого желания нет.
SciTE - это просто, эффективно, наглядно, удобно, быстро компилируется для кодирования в луа супер! VSCode - За ним самим нужно следить.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
08.12.2023 15:08:08
Добрый день!
Начну с конца. Решил сбросить на графики индикатор Структура рынка (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 подскажите пожалуйста? Компилятор легко перевел!
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
07.12.2023 15:54:24
Риск на день.
Здесь пока никаких переделок. Есть старый скрипт запущу в работу. Смысл, защита дипозита на просадку (по умолчанию 5% от депозита), при снижении счета на величину допустимой просадки, просто сбрасывает все позиции, и остановка торговли.
Прежде чем заняться редактированием мани менеджментом, нужно испрвить работу моего MarketSimulator - это уже просто какое - то наказание для меня. Ну нет доверия нужно прверять?
Да выводы конечно делать рано, но при новой организации данных, заработал сборщик мусора, взял под контроль память! (хотя не все доделал)
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
06.12.2023 13:35:43
Риск на сделку, здесь все просто. Сделаю метод для моего класса.
Все начинается с капитала. Размер имеет значение!
Задаю в % (от 1% - 10% заввисит от стратегии по умолчанию 2% (т.е. 50 сделок) пересчет в cash - для анализа по залогам; пересчет в pips - для анализа по валотильности.
На выходе: 1) risk на сделку. 2) reward на сделку. 3) contract на сделку.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
05.12.2023 11:44:53
А как делать можно - нужно?
Вот и подошел в плотную к вопросу менеджмента в трейдинге! Зачастую просматривая материалы на эту тему, заметил, что не делается различие между мани менеджментом и риск менеджментом.
У себя я четко провожу линию различия: риск менеджментом - управление риском; мани менеджментом - управление позицией (количеством а вернее сказать стоимость). Хотя эти направления сильно переплетены, но алгоритмы разные.
Начну с риска риск: риск на сделку риск на день. За структуру данных возьму и создам класс, по примеру класса на позицию описанную выше.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
04.12.2023 23:06:04
О чем история, а история стара как рынок - "Пропустил козла в свой огород". Ну обо всем и по порядку.
Отключил всех "помощников" - переделываю скрипты от торговли одним инструментом, к торговле портфелем. (Когда начинал переделку, думал добавил цикл по инструментам и все дела, но не ту-то было. Вот уже больше квартала сижу). Есть время, пишу, приторговываю руками (дневки или средней срок, стратегии концеп смарт мани + VSA или свою).
Но история то про "козла", зовется GOLD и то когда убыток по риск менеджменту в радость. Все началось безобидно: Бычий тренд, сильно отскочили от средней, начала дня - коррекция, нашел шортовый ордер блок, посчитал цели, объём сделки, открылся, на цели лимитки. Следующий день, цена не дошла несколько пунктов до цели отскочила, идет откат, пересчет новые цели - лимитки. Все в пределах моего риск менеджмента. Следующий день, цена не дошла несколько пунктов до цели отскочила, бычий тренд, и фаза бычья, плакал мой дневной риск, ну и кто тут не усреднился бы? Риск менеджмент уже и не при делах, примерно 80% депозита в удержании данной позиции, в ущерб другим сделкам, просадки в моменте > 30%. И какова была моя радость сегодняшнему гэпу, когда маркетмейкер перевернул рынок, все прямо по классики! А когда цена пошла в сторону позиции, я уже не на что не обращал внимания, а при каждом удобном случае уменьшал позицию. Огромная медвежья, поглощающая свеча, медведи зарабатывают, на конец и я в тренде, но радовался, я тому что есть возможность закрыть позицию и закрывал!
Вспоминая историю описанную Ларри Вильямсом, когда они (риск - менеджер, у него был РАЛЬФ ВИНС, написавший книгу "Математика управления капиталом", ныне управляющий фондом), участвовали в конкурсе и депозит в 10 000$ превратили в миллион и потом терпели просадку почти в миллион чтоб снова подняться.
И Вся эта история про то как делать нельзя.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
04.12.2023 20:20:08
Всем добрый вечер!
"В чем сила брат" - сила "братцы" в гэпе!
Немного хочу отступить от темы обсуждение, рассказать небольшую, но очень поучительную историю. Но прежде по благодарить Nikolay, за поддержку в обсуждениях, и его мудрые советы!
После того как "приказала долго жить статистика сайта", такое в впечатление что общение идет в "кругу тихо сам собою". Ну если у разработчиков "наплевательское" отношение к нам, давайте друг с другом обмениваться мнением, и не важно что иногда бываем не правы, высказывайтесь?
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
01.12.2023 18:30:37
Цитата
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;
Как Высчитаете нужно их чистить, обрезать, еще что то в целях уменьшения потреблению памяти?
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
01.12.2023 13:30:37
Nikolay, А что думаете насчет все таки восстановить очереди, это примеры с 1 поста данной ветки?
Очереди и двойные очереди в луа, Пример из книги Р.Е.
написал: Мы один раз продумали структуру данных, а дальше через присвоение пользуемся - "по образу и подобию", не задумываясь почему там таблица не обновилась, где ты там забыл переменную локализовать, + "синтаксический сахар". Это просто удобно при использовании портфеля из бумаг.
Это, конечно, так. В теории. Если объект действительно детерминирован. Но, как обычно, примеры ООП из кошек, собак, животных - это просто примеры. Но это также не отменяет простого подхода через вызов метода, возвращающего готовую структуру. Тоже вызвал, получил экземпляр нового объекта.
я не чего не пытаюсь отменить, просто обсуждаю с сообществом. я лишь пришел к выводу, что такой подход в нашей задаче, наиболее оптимален, надежен, лаконичен, да просто удобен!
Создали экземпляр если не нежна переменная ставим(--), нет переменной, и не нужно носиться по всему скрипту. не что не мешает делать так local a=t[i][j] внутри блока.
Но и для писателей это не только конструктор портфелей, но и роботов - "по образу и подобию", мин. изменениями.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
01.12.2023 12:49:36
Цитата
Nikolay написал: Очиститься, а точнее, цитируя: "локальная переменная перестает существовать, как только заканчивается ее область видимости, позволяя сборщику мусора освободить память, занимаемую ее значением". Блок же закончился. И в вышеупомянутой книге - это описывается.
Действительно я зарапортовался!
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
01.12.2023 12:47:57
Цитата
Nikolay написал: Что касается примера, основной вопрос - зачем? Какую задачу это решает. Создавать объект ради объекта - это тупиковый путь, хоть и популярный лет 20 назад. А во многих языках даже обязательный. Но это не относится к Lua. Да, здесь многое завязано на таблицы, если не почти все, если считать _G. Но это не значит, что нет других объектов first class citizen.
На мой взгляд это из области "написал и забыл"!
Мы один раз продумали структуру данных, а дальше через присвоение пользуемся - "по образу и подобию", не задумываясь почему там таблица не обновилась, где ты там забыл переменную локализовать, + "синтаксический сахар". Это просто удобно при использовании портфеля из бумаг.
"Структура с методами это простейший вариант объекта". т.е. создавая таблицу мы уже создали объект.
"Что же нам это дает? Вся сила мета таблиц в мета методах".
Пока в этом только разбираюсь, но у меня рабочий вариант которым пользуюсь - фреймворк HackTrade! Написан по этому принципу, и я не устаю "петь дифирамбы" его автору: надежность, лаконичность, скорость, минимализм, минимальное потребление памяти...
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
01.12.2023 12:09:39
Цитата
Nikolay написал: Я не использую Дзен, так что, видимо, это не про меня.
"Код торгового робота" это не Ваше?
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
01.12.2023 11:04:36
nikolz, Вы как то все пытаетесь усложнить, ну смотрите если "Таблицы в Lua —... — это единственная структура данных", из которой легко выводятся все остальные, то зачем изобретать очередной "велосипед", если это прекрасно работает, а примеры описываются первоклассными специалистами. Берем и пользуемся!
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
01.12.2023 10:53:22
Добрый день!
Да под запутался опять с видимостью переменных, а она напрямую зависит с очисткой. К истокам!
Цитата
Игорь М написал: Да какой сарказм-то... Я реально думаю, что автор будет впечатлён тем, что его фраза "Таблицы в Lua —... — это единственная структура данных" способна вызвать действие "перевожу все переменные в формат таблицы луа". Что это такое "перевожу все переменные в формат таблицы луа", как и зачем?
Так вот выше я показываю пример:
Цитата
Вот пример организации таблицы.
local pos={}; function pos:new() -- проинициализируем поля, процедуры и функции нашего класса ---- Создает экземпляр теперь уже объекта, описывает поля объекта и присваивает полям начальные значения. local obj = { [0]=0, ['d']='0', ['t']='0', ['o']='x', ['q']=0, ['p']=0, ['id']=0, ['f']=nil, tp=function(self,v) if self.q>0 then return self.p+v elseif self.q<0 then return self.p-v else return 0 end end, sl=function(self,v) if self.q>0 then return self.p-v elseif self.q<0 then return self.p+v else return 0 end end, }; ----далее превращаем таблицу в класс setmetatable(obj,self) ---- объект получает доступ к методам класса self.__index = self ---- возвращаем наш объект (экземпляр класса) return obj end
Цитата
Вот пример организации таблицы.
local pos={}; function pos:new() -- проинициализируем поля, процедуры и функции нашего класса ---- Создает экземпляр теперь уже объекта, описывает поля объекта и присваивает полям начальные значения. local obj = { [0]=0, ['d']='0', ['t']='0', ['o']='x', ['q']=0, ['p']=0, ['id']=0, ['f']=nil, tp=function(self,v) if self.q>0 then return self.p+v elseif self.q<0 then return self.p-v else return 0 end end, sl=function(self,v) if self.q>0 then return self.p-v elseif self.q<0 then return self.p+v else return 0 end end, }; ----далее превращаем таблицу в класс setmetatable(obj,self) ---- объект получает доступ к методам класса self.__index = self ---- возвращаем наш объект (экземпляр класса) return obj end
"ООП, "которого нет" Структура с методами это простейший вариант объекта. Метод это функция, сохраненная в элементе таблицы. Метатаблица способна менять обычное поведение других таблиц.
Что же нам это дает?
Вся сила метатаблиц в метаметодах. Метаметоды - Это "магические" методы, которые позволяют менять существующее поведение таблицы. "Магические" они потому, что их логика зависит от того, как они называются."
Маленькая книга о Lua
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
30.11.2023 20:23:30
Цитата
Nikolay написал: Локальные переменные по выходу из области видимости (функции, например) уничтожаются сборщиком мусора.
Область видимости это как минимум 3 блока, если записать так
Код
do
local a=1
end
то она не очистится, получается так?
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
30.11.2023 20:03:17
Да забыл сказать, таблицу луа организую с помощью setmetatable, может они плохо чистятся? Вот пример организации таблицы.
local pos={}; function pos:new() -- проинициализируем поля, процедуры и функции нашего класса ---- Создает экземпляр теперь уже объекта, описывает поля объекта и присваивает полям начальные значения. local obj = { [0]=0, ['d']='0', ['t']='0', ['o']='x', ['q']=0, ['p']=0, ['id']=0, ['f']=nil, tp=function(self,v) if self.q>0 then return self.p+v elseif self.q<0 then return self.p-v else return 0 end end, sl=function(self,v) if self.q>0 then return self.p-v elseif self.q<0 then return self.p+v else return 0 end end, }; ----далее превращаем таблицу в класс setmetatable(obj,self) ---- объект получает доступ к методам класса self.__index = self ---- возвращаем наш объект (экземпляр класса) return obj end
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Посмотрел Вас на дзене, кое что интересного нашел для себя, переделаю работу со временем.
Касаемо памяти, выше я привел пример индикатора, это основной мой подход, он написан так чтоб можно было использовать и торговом алгоритме без переделок, так я и делаю. Нет я конечно понимаю что там есть область констант которые будут накапливаться, да еще передача целого массива данных, она хоть и локальна но все равно растет, особенно на малых тайм фреймах.
Можете здесь что то посоветовать, в организации переменных и их очистке? Я собственно начинал эту веточку с организации очередей, но Вы и Владимир не советовали с этим связываться?
Очереди и двойные очереди в луа, Пример из книги Р.Е.
VPM написал: Прислушался к автору, "Таблицы в Lua — это не одна из структур данных, — это единственная структура данных.", перевожу все переменные в формат таблицы луа, не знаю поможет?
Я думаю, что автор будет впечатлён.
Не понимаю к чему этот сарказм?
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
30.11.2023 17:12:41
Но все это лирика, а вот организация структуры данных в программе, оказывается не простым делом в луа. В очередной раз поймал утечку памяти в скрипте. 1000кВ на старте до 30000кВ на конец дня Такое поведение, раньше замечалось при наличии ошибки в программе, которую луа по какой то причине пропускает.
Прислушался к автору, "Таблицы в Lua — это не одна из структур данных, — это единственная структура данных.", перевожу все переменные в формат таблицы луа, не знаю поможет?
Другая проблема локальная переменная внутри блока не обновляется, помнит свое первое значение, в формате таблицы обновляется в качестве локальной нет? Кто то знаком с такой проблемой?
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
30.11.2023 16:48:01
Поясню для всех, о чем собственно разговор (или обо всем и по порядку).
Так как мы занимаемся алгоритмической торговлей, то один из подходов для успешной торговли, это получение цифровой модели поведения цены. А что еще нужно, у Вас есть функция получаете ответ и торгуете!
Упрощенное представление модели, это разложение источника на примитивы. В тех. анализе: - низкочастотная составляющая (тренд) - это средние, регрессия и т.д.; - высокочастотная составляющая - это осцилляторы. В сумме это модель.
Мое утверждение что скрин отражает лишь одну из компонент более сложной модели. TGB, усмотрел в этом модель.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
30.11.2023 14:14:06
Что делает алгоритм:
1) За период находит Мах Мин; 2) Проводится нормировка; 3) Усредняем полученный результат, получаем задержку в 1 бар; 4) Применяем преобразование Фишера (усиление сигнала на хвостах, перевод к норм. распределению, что позволяет оперировать аппаратом т. вероятности) 5) Компенсация отставания.
Гасит низко частотные колебания, сохраняя при этом высоко частотную компоненту с минимальной задержкой. Я искал замену стандартному схоластику, работает точнее и с минимальным отставанием.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Как ни странно, но ваш фильтр это грубая модель учета
Цитата
написал: пирамидального поведения "толпы" рвущейся за прибылью
::
TGB, Не совсем понимаю, что Вы имеете ввиду? Вероятно Вы хорошо знакомы с организацией бух. учета, и имеете ввиду модели используемые 1С?
Что это модель - "грубая модель учета пирамидального поведения "толпы" рвущейся за прибылью"?
И зачем ее вообще нужно описывать поведения "толпы"? У толпы всегда есть вожак (Маркет Мейкер).
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
28.11.2023 23:00:24
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
28.11.2023 21:58:18
TGB, Ну вот добрались и до "модели рынка", а все начиналось с безобидной статистической экспрес оценки сделок торговой системы.
Ну давайте сначала, речь идет о преобразовании данных, с применением прямого преобразования Фишера:
Утверждение 1) "Преобразование Фишера, изменяет плотность распределения любой волны таким образом, что оно приближается к нормальному (гауссову) распределению"; Утверждение 2) Преобразование Фишера, увеличивает идентификацию маловероятного события - “черного лебедя”;
В приведённом примере, торговая стратегия, основана (не на событии) на предсказании возвращения назад к норме (к своей средней), после выявленного маловероятного события "черного лебедя".
Нету здесь не вероятностной модели рынка, не еще какой либо, скорее это фильтр (detrender), который можно интерпретировать и как стратегию во флате.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
28.11.2023 20:11:11
P. S. Скрипт выводит 6 линий: 2 это придельные для наглядности нужно перевести значение на 1.5; сам ответ функции; опережающая линия компенсация отставания; гистограммы зеленая и красная отражают ускорение. Ниже 0 - медведи, выше 0 - быки.
Это полноценная торговая стратегия, конечно применять без дополнительного фильтра нужно осторожно. Функция циклическая сильно зависит от периода оценки. Я использую как дополнительный фильтр для оценки зон пере(куплено/продано).
Если будут идеи пишите. Удачной торговли.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
28.11.2023 19:09:51
Цитата
nikolz написал: Оказывается, выборочное распределение этой преобразованной переменной следует нормальному распределению .
Ну так вот же
Цитата
VPM написал: "Преобразование Фишера, изменяет плотность распределения любой волны таким образом, что оно приближается к нормальному (гауссову) распределению". Код local trasform_fisher=function()--преобразования Фишера (Fisприводятсяher Transform) --Преобразование Фишера имеет вид: 0.5* (log( (1 + x) / (1 - x) ) )
local log=math.log local F={}; F[1] = 0 local start=true return function(I,x)
if I == 1 or start then F={}; F = 0; start=false end x = x and (x>=1 and 0.999 or x 1 and F[I-1] or 0) local fich = (1-x)~=0 and 0.25*log((1+x)/(1-x)) + 0.5*f1 or 0 F = fich return F--fich end end