написал: зачем отрицать сильные стороны языка, я не понимаю?
Затем, что инструмент надо выбирать по задаче. У трактора с плугом в 10 метров тоже есть сильные стороны, вот только чтобы грядку вскопать, лучше все же взять лопату - быстрее и проще, и соседский забор сносить не надо.
Ну вот и Вы туда же, никто ни кого не заставляет, нравится Вам лопатой на здоровье, я лишь говорю про возможности. Которые опробовал и привожу рабочие примеры, ну хоть кто бы пример обсудил.
Нет давайте с лопатами!
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
30.12.2023 22:07:47
Glukator, Все равно для чего, этим я лишь сказал что у него есть свои уникальные особенности отличные от других языков в этом его сила.
С Владимир, у нас старая дискуссия, и я у него тоже некоторые моменты перенял, согласен с Вами спасибо ему, я не говорю что так ненужно писать, так писали на заре и будут писать дальше, просто и понятно, но я не понимаю зачем отрицать сильные стороны языка, я не понимаю?
В моем случае первую задачу и закрыл Фреймворк, вторую пишу сам это именно то ради чего, и не вижу никаких проблем чтоб не обсуждать. Чтоб мы с Вами тут не наговорили, каждый наделает свои ошибки. Вы мне не соперник, нет узкие места бесспорно есть, и их публично никто не будет обсуждать.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
30.12.2023 21:39:26
Ну Вот Владимир, в своем амплуа. Язык другого нет. Не знание не освобождает от ответственности.
Постановка задачи для Вас непростительно не верна! Мало сделать "черный ящик", нужно чтоб он стабильно зарабатывал, увеличивал депозит. Вот Вам и постановка конкретной задачи, вот и покажите нам пример.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
30.12.2023 20:03:31
Glukator, Язык создан был под конкретную задачу, он от туда и вырос до современного. Чтоб более разобраться нужно посмотреть книгу профессора "Програмирование на Луа", это там где он рассказывает про ОПП. Здесь есть сообщения на эту тему, не хочется повторять ругаются что "пишем то да потому".
Да Фреймворк не для начинающих, сложноват в начале хотя написано 350 строк кода (но мне кажется Вы не новичок, что то я читал Ваше на другие темы).
Многозадачность - это сопрограммы, способ остановить код, сделать какую то задачу и вернуться в тоже место, где была остановка, продолжить выполнение.
А насчет конкретных задач пишите будем искать решения сообща, у меня их тоже масса не решенных и здесь не поспоришь Игорь М, занимаюсь ерундой.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
30.12.2023 18:11:33
Игорь М, А вы сами то о чем написали, хоть одно слово про код?
Пафоса много, а потом сами обижаетесь что все пустое, да и общаемся мы в одной ветке ни кому не мешаем, принцип здесь простой "не нравится запах отойди в сторону"!
Да код старый, такой старый что за это время лучшего никто не показал, напишите свой будем обсуждать Ваш.
Про "айсберг", чтоб этим алгоритмом пользоваться нужно 2 контракта. Про деньги у кого их не тот, тот их на бирже не сливает.
Ну и с арифметикой полный "пипец". Не достаточно таких средств под Ваши "аппетит" как минимум нужно умножить на 4, иначе счет будет перегружен.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
30.12.2023 17:40:51
Владимир, Ну от Вас не ожидал, под чем подписываетесь, что кого в школе научили "кодить", и они возомнили о себе что стали "супер - пупер" и не хотят развиваться.
Насчет правила , я Вам который раз пытаюсь объяснить, что прежде чем алгоритмы прятать в "черный ящик", нужно сделать понимание с чем имеем дело!
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
30.12.2023 17:32:56
Glukator, Да встревайте конечно здесь не закрытый канал.
Видите в чем дело, чтоб раскрыть весь потенциал использования луа только так и нужно писать, я "не волшебник я только учусь" а хочется делать хорошо! Да я благодарен автору который знает как нужно делать хорошо, сделал - написал, выложил, разрешил пользоваться. А что это хорошо сделано, легко убедиться.
Задачи в торговле одни и те же, а как делать давайте обсуждать, мой подход это всего лишь один из множества.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
30.12.2023 13:46:53
Цитата
Владимир написал: Короче: мы хотим торговать или заниматься онанизмом с "новыми возможностями"?
Именно торговать, а не скальпеть (скакать) на минутка по три минутки. Я достаточно торгую чтоб этим не заниматься. И это совсем не значит что я не торгую минутку, торгую если ситуация позволяет.
Цитата
Владимир написал: О, Господи! КОГДА "нужно держать позицию целый день (или несколько дней)"?! КОМУ? НА КОЙ?
Я сейчас руками так торгую (как и чем есть выше см. позиционная торговля), для того чтобы
Цитата
Владимир написал: заниматься чем угодно, не отвлекаясь на торговлю ВААПЩЕ.
Цитата
Владимир написал: Какие, в жопу, "ступенчатые заявки"?
Использую, когда не нарушены параметры моего риска на сделку, а цена сделала коррекцию, для добавления.
Цитата
Владимир написал: 99.999% трейдеров не имеют денег
Чтоб купить 1 контракт Fut Brent нужно 15000 рублей, чтоб депозит рос нужно соблюсти мат. правило торговать где в сделке есть потенциал не ниже 3/1 (Reward/risk).
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
30.12.2023 11:10:13
Фреймворк подключен и мы про него забыли, не вспоминаем, а занимаемся торговыми решениями. К примеру не сложно реализовать ступенчатые заявки, такие как айсберг
if order.position == 0 then order:update(feed.last, 10) elseif order.position == 10 then order:update(feed.last, 20) end Trade()
Это весь код который мне нужно добавить в логику.
Закрыть позицию: order:update(feed.last, 0)
Вот реверс: if feed.last > ind[-2] then order:update(feed.last, 1) elseif feed.last < ind[-2] then order:update(feed.last, -1) end Trade()
Открыть и Закрыть позицию: repeat order:update(feed.bids[1].price, 3) Trade() until order.filled repeat order:update(feed.offers[1].price, 0) Trade() until order.filled
Мы сами можем писать какую угодно логику.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
А Вы предложите что то другое, когда нужно держать позицию целый день (или несколько дней) , управлять ей, (переносить sl, закрыть часть, до набрать и другие торговые дела)
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
30.12.2023 10:34:10
Владимир, Это всего лишь возможности, а пользоваться ими или нет, решает каждый для себя сам.
Сам фреймворк стабилен без фокусов, написан супер профессионально, избавил меня от множества хлопот, и предоставил множество удобных возможностей.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
29.12.2023 23:34:47
Возвращаясь к вопросу
Цитата
Владимир написал: И за каким хером здесь нужны сопрограммы
Это я Вам должен задавать такие, вопросы!
Я этим лишь пользуюсь, для чего? Из одного потока делаю два логических с разным временим исполнения. Для решения своих задач.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
29.12.2023 23:23:30
Цитата
Владимир написал: Если я что-нибудь в чём-нибудь понимаю, на каждый тикер должен быть свой массив интервалов, а на каждый интервал свой массив свечей
Вы знаете другие примеры? Я этим лишь пользуюсь!
Цитата
Владимир написал: И за каким хером здесь нужны сопрограммы
В своем примере я это показал.
Цитата
Владимир написал: по-прежнему без понятия, как и что такое "умный ордер".
Вот уже 16 лист я рассказываю про один и тот же пример, (наверно плохо . но как умею не обессудьте), Но если Вы с вашим опытом не разобрались, то вероятно фреймворк HackTrade намного опережает свое время Мой совет, вместо моих комментариев, посмотрите сам код, уверяю Вас это намного интересней! Да и комментарии мои сводятся к одному из ..... возможных далеко не лучших (Но рабочих) применений.
Умные заявки. В данном разделе представлена реализация stateful-заявок, которые помнят своё внутреннее состояние и могут динамически принимать изменения параметров. Этот подход сильно отличается от традиционных лимитных заявок.
Заявка в фреймворке HackTrade представляет собой динамическую лимитную заявку с изменяемой ценой.
При этом также может меняться количество и даже направление. Главное, то нужно запомнить, 'умная заявка' будет пытаться набирать указанное количество лотов по заданной цене. Даже если вы снимите заявку торговой систем, SmartOrder породит новую и продолжить добирать заданное ранее количество (представьте, что SmartOrder - это заявка, которая гарантированно набирает зданный объём).
«умные заявки» избавляют от бесконечной отладки; можно наштамповать умных ордеров order1, order2… orderN и каждый умный ордер будет внутри себя отслеживать свою собственную позицию Каждая заявка помнит, сколько она набрала, и сколько надо скидывать. А если ей дать отрицательное значение, она войдёт в шорт (даже из логна с любым остатком). А если в шорте передадите 0, шорт закроется, причём тем объёмом, которым заявка успеет войти, когда будет переворачивать лонг.
Я использую такой подход, 'умная заявка' будет пытаться набирать указанное количество лотов если цена изменилась будет догонять, главное набрать заданную позицию.
Про это я делал сообщения в самом начале.
Помогите в написании скрипта, Помощь в написании скрипта
Пользователь
Сообщений: Регистрация: 15.06.2023
29.12.2023 20:35:16
МихаилСМ, Вы посмотрите по сайту. здесь столько подобных примеров на луа.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
29.12.2023 20:20:56
Цитата
Владимир написал: А все эти "правила на сделку, расчёт количества, подача заявок, стратегии входа и выхода давно прошиты в алгоритмах
Про модульность выше есть большой блок мы обсуждаем с Nikolay, просто не хочется повторяться. Но если что то не понятно или не согласны готов обсудить.
Цитата
Владимир написал: Ну, код-то я уж точно смотреть не буду.
Я не понимаю почему Вы не читаете код, ведь иногда горазда проще показать, чем на 100 страниц описывать!
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
29.12.2023 19:35:32
Владимир, Это не код, я хотел показать принципиальную схему своей программы. тут много чего нет. но принципиально это так, хотя и с ошибками (поторопился).
Вот пояснения: sec - это массив тикеров чем торгуем: tf - это массив интервалов (такт) откуда берем информацию.
while working do -- основной цикл программы --исполнение идет с задержкой sleep(950) -- тормозим чтоб космосе очутиться! end
Внутри этого цикла есть сопрограмма -- Вызов сопрограммы. Trade() -- 2) основная функция - псевдоним стандартной функции coroutine.resume, осуществляет торговых операции
И так Программа бегает в 2 циклах, по двум массивам sec, tf получая данные. по выходу из цикла tf формируется сигнал, если он отвечает правилу допустив открытию позиции, то будет сформирован ордер на покупку (умный ордер и это не для красного словца).
Когда будет управление перейдет к сопрограмме у нее есть внутренний цикл вот он, и у него не задержки, он выполняется на что луа способна!
for trans_id, smartorder in pairs(SmartOrder.pool) do smartorder:process() end
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
28.12.2023 23:37:40
Владимир, Я уже несколько раз отвечал на этот вопрос, вот накидал может так понятней будет. Текущая реализация программы сейчас принципиально выглядит так:
Код
dofile("hacktrade.lua") -- подключаю основной модуль HackTrade (движок)
function Robot() -- 1) основная функция
-----
1) Инициализация (~)
2) Получение констант
3) Предварительные расчеты
4) симулятор фона на истории
while working do -- основной цикл
local (~)
local data={}
for i=1,#sec do ---- цикла по бумагам:
-- Система нескольких окон
for j=1,#tf do ---- цикла по тайм ремам
data[i][j]=algo(index, settigs)
end
F[j]() -- парад стратегий - генератор сигналов
rule={} -- Вырабатываем правила на сделку (открт, закрытие, sl, tp и тд)
rm={} -- определение риска на сделку, расчет цели;
q = mm.calc() -- расчет количества на сделку исходя из правил уставленных риск менеджером и допустимой суммы.
-- Если выполнено правило формирую умный ордер на сделку
if rule.open_pos or rule.close_pos or rule.sl or rule.open_pos then
p = price.last -- получаем предварительную цену на сделку
SmartOrder( p, q ) -- формирую умный ордер на сделку
end
end
-- Вызов сопрограммы.
Trade() -- 2) основная функция - псевдоним стандартной функции coroutine.resume, осуществляет торговых операции
for i=1,#sec do
pos={} -- получаем позицию по инструменту
-- если сделка обрабатываю результат
end
sleep(950) -- тормозим чтоб космосе очутиться!
end
--Сохраняем
--Закрываем
end
Вопрос с модульностью решен,
- пишем свои стратегии входа,
- стратегии выхода,
- управление позицией,
- управление риском,
- алгоритмы.
Все независимо! Собираем все в Торговую Систему!
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
28.12.2023 22:01:35
Цитата
Владимир написал: Не понимаю: ЧТО "классно"? Менять время исполнения скрипта не прибегая к сторонним языкам? Что это такое и на кой это нужно?
Я выше привожу пример как делаю это у себя.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
28.12.2023 21:59:38
Цитата
VPM написал: "Таблицы в Lua — это не одна из структур данных, — это единственная структура данных."
В том числе и модуль, но с этим мы уже разбирались.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
28.12.2023 21:53:42
И так в своих рассуждениях мы подошли к большой теме формализация - "Ценового действия" (Price Action).
Но прежде чем о нем говорить, нужно формализовать участников торгов, с кем мы дело имеем, их можно представить в виде 3 основных групп:
1) Ну конечно "Маркетмейкер"; 2) Это крупный игрок - "SmartMoney" (есть сериал американский "Миллиарды" кому интересно с чем дело имеем посмотрите); 3) Нас по разному называют, не хочется повторять, но по смыслу это "толпа", небольшие разрозненные депозиты, пища для двух первых.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
28.12.2023 20:50:19
Цитата
Владимир написал: В принципе, внутри одной задачи может быть несколько "процессов" - каждый из них тоже не знает друг о друге. Если угодно, это подзадачи.
Ну вот наконец то - "это подзадачи" внутри общей глобальной задачи.
Я никого не призываю так делать, я говорю что есть возможность! Что одна из этих возможностей менять время исполнения скрипта не прибегая к сторонним языкам! Ну согласитесь что классно!
Цитата
Владимир написал: У всех нормальных программистов "подход модульность". В частности, у последней версии моего скрипта 28 модулей, то бишь функций.
В Луа модуль - это не тоже что функция, но я не про это, я про разделение задач, что переделывая один модуль, не нужно переделывать всю программу.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Это задача алгоритма. А моя задача как трейдера - запустить скрипт и отойти в сторонку.
В таком подходе Вы не трейдер, Вы "кнопочник", (я Вас совсем не хочу обидеть, это просто формализация Вашего подхода).
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
28.12.2023 20:23:19
Не давно посмотрел фильм "дурные деньги", кто не видел посмотрите, это рассказ о том как частный трейдер организовав канал общения, держал позицию против хедж фонда. История поучительная.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
28.12.2023 20:15:51
Простите допустил неточность (опять самомнение):
Цитата
VPM написал: Подойдите к зеркалу, что там увидите - маркетмейкер, это вторая сторона нашей сделки!
Уточнение. Это мы сторона их сделки. это их бизнес!
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
28.12.2023 19:59:40
А вот это важно от профессора: Как и функции, сопрограммы Lua являются значениями первого класса; их можно хранить в переменных, передавать в качестве аргументов и возвращать в виде результатов. Не существует явной операции для удаления сопрограммы Lua; как и любое другое значение в Lua, сопрограммы отбрасываются при сборке мусора.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
28.12.2023 19:18:59
Цитата
VPM написал: Позиционная торговля - это прежде всего прочтение ценового действия на графиках разных тайм фреймах.
Ник то не знает куда пойдет рынок, мы можем построить гипотезу,
Цитата
Владимир написал: Это и есть задача алгоритма - торгует ведь он, а не какой-то там "маркетмейкер".
Подойдите к зеркалу, что там увидите - маркетмейкер, это вторая сторона нашей сделки!
Они заключают с биржами договора получают другие условия, но для нас важно что года мы покупаем он продает и наоборот!
Но мы покупаем когда растет, что же он торгует в убыток, нет это его бизнес! На эти и другие вопросы отвечает подход
Цитата
VPM написал: Позиционная торговля - это прежде всего прочтение ценового действия на графиках разных тайм фреймах.
"таймфрейм" - это темп торговли. Это как в музыке.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
28.12.2023 19:05:55
Уважаемые программисты, Вы уже определитесь сами это одно и тоже или чуть чуть нет.
Цитата
Владимир написал: Поэтому "многозадачность" и многопоточность" это как "красное" и "розовое" - две небольшие разницы.
а нам дайте определения.
Владимир, Вы уже нас "неучей" пощадите, от таких оборотов, нам попроще растолкуйте. Нет конечно можно погуглить, но тогда не поймешь, что вы имели ввиду под этим.
Цитата
Владимир написал: Это называется "темпоральная диверсификация".
Если к этому относиться как к проблеме она останется проблемой.
Цитата
Владимир написал: Вообще-то, проблем в трейдинге чуть больше:
это задачи любого трейдера в не зависимости как он торгует, и они гораздо шири чем здесь описано. Если не понимаешь как все устроено, как можно создать рабочий алгоритм? В дальнейшем его работу нужно оценить и не собственным депозитом, понять что происходит, и если нужно поправить алгоритм.
Мой подход модульность, а если валить все в кучу, то получится куча. В своих программах придерживаюсь этого подхода, (здесь есть сообщения на эту тему), это позволяет обсуждать, писать, анализировать, и даже "облизывать" каждую задачу отдельно!
Затем собирая в супер проект, это как собрать автомобиль кто создает двигатель кто то коробку кто то трансмиссию.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
28.12.2023 17:42:27
Но здесь разговор не об этом , как пользоваться сопрограммами и что можно делать при их помощи.
"В многозадачном алгоритме исполнителей несколько и у каждого из них - свое состояние и свой путь в графе состояний. Многопоточные алгоритмы - просто другое название для многозадачных."
это Артур Сэвидж "Я разработчик полного стека с более чем 23-летним опытом разработки корпоративного прикладного программного обеспечения".
Для нас важно другое:
Цитата
nikolz написал: "Это логическая многозадачность - на самом деле в любой момент времени выполняется только один поток. Просто их несколько и они переключаются между собой".
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
28.12.2023 15:39:53
Мои предпочтения - это позиционная торговля!
Позиционная торговля - это прежде всего прочтение ценового действия на графиках разных тайм фреймах. Даже если торговать на 1 секундном графике, то не обходимо учитывать что происходит на 1 минутном, на 5 минутном и старших. Именно такой подход начал давать понимание, что же происходит на рынке в целом, ответы как входить и когда входить.
Алгоритмически я подкрепляю эту торговлю: элементами VSA, Smart Money, уровнями, фильтром трендов это основное. Но главное здесь ценовое действие - распознать куда Маркетмейкер ведет рынок.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
28.12.2023 14:54:54
На самом деле, подняты две очень важных основных темы в трейдинге:
1) Когда открывать позицию; 2) Сколько открывать - это вопрос управления позицией и управления риском.
Как открывать позицию, Когда открывать позицию, в каком направлении вот вечный вопрос трейдера. Так есть здесь какая то опора для стабильных результатов торговли?
Очереди и двойные очереди в луа, Пример из книги Р.Е.
С капиталистами часть ликвидности конечно утекло, это объективно, это видно по рынку, капитал бегает от одного инструмента к другому более часто, но это рынок и капитал здесь замкнут. Все также, есть крупные игроки, есть маркетмейкер обеспечивающий сделки, волатильность все также на "Америке".
Да первоначального капитала много не нужно чтоб еще одну пенсию себе делать, здесь уже важней знание правил управления капиталом. Размер имеет значение! Но это размер открываемой позиции к собственным средствам, не нужно перегружать (ну это я больше в свой адрес).
Ну в общем все как всегда в отношении стратегии, подправив тактику. Допустим мой основной торговый тайм фрейм сейчас Н1 при краткосрочной торговле, редко на америке поглядываю на М20, в основном посматриваю на Н4.
Удачи!
Очереди и двойные очереди в луа, Пример из книги Р.Е.
nikolz, Не знаю в чем я здесь ошибся, это русский перевод текста с английского языка, все что нужно здесь для понимания, это читать начиная с конца. Например если на писали на ангельском "Все хорошо", то понимать нужно "Хорошо все".
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
27.12.2023 18:48:41
Цитата
Владимир написал: Да, скрипт-то зарабатывает, но в последнее время очень плохо - биржа ведь фактически уничтожена, там творится чёрт знает что. А мой любимый долларовый рынок и вообще накрылся медным тазом.
Да нет все не так плохо, зарабатывать можно и нужно!
Правда я сам последнее время руками, скрипт в режиме советник и прогноз, но это то моя проблема, не его. Дело в том что при переходе на обработку портфеля все оказалось немного сложней, чем я ожидал, где то просто банально не хватает знаний в программировании.
Вам удачи, со своей стороны могу посоветовать пересмотреть масштаб, на рынке стало тесно.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
27.12.2023 18:33:07
Уважаемые, я "Ни сном ни духом" в Многопоточности, все мои выдержки это цитаты специалистов и разработчиков языка, Вам нужно спорить с ними, По мне так, если поток один то говорить без сленга можно только о многозадачности. Как она реализована в луа, мне понравилась, я при вожу пример как можно использовать.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
27.12.2023 18:16:57
Цитата
Nikolay написал: Внимательно посмотрите на код решения, что Вы используете, и Вы увидите там точно такой же цикл опрашивающий корутины.
Перечитываю пытаюсь разобраться, Цикл есть, задержки нет! Она выставлена в функции Rовот() т.е. в первой задаче.
Цитата
Nikolay написал: Что касается быстрых и медленных задач, то они реализуются одинаково. У них разное время выполнения
Скорость и время выполнения, а что можно сказать про площадь в геометрии, в технике мощность, в финансах стоимость?
1) s=a*b; 2) P= I*U; 3) cost=p*q;
Это разве не сленг?
Согласен правильно инженеру выражаться "время выполнения", а что тут у нас все инженеры?
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
27.12.2023 17:58:07
Цитата
VPM написал: "Технически вся магия происходит в методе main, там в цикле вызывается сопрограмма, которая создаётся из функции Robot. функция Trade() Это псевдоним стандартной функции coroutine.resume, при вызове этой функции прерывается код робота и происходит отработка умных заявок (обновляются цены лимитников, количество, и т.п.)"
Вот так это работает. Справочно:
Цитата
VPM написал: Как это работает (функционал сопрограмм).Вызов `corutine.create` получает функцию и возвращает спящую ("suspended") сопрограмму. Её можно "разбудить" вызовом `coroutine.resume`( Trade() ) и тогда она начинает выполняться.Выполняется она до тех пор, пока не встретиться вызов `coroutine.yield`. В этот момент управление возвращается к вызывающему потоку. Следующий вызов `coroutine.resume` восстановит выполнение сопрограммы, передавая управление ровно в то место, где она была приостановлена.Сопрограмма может быть вечной - если она время от времени уступает выполнение, то в какой-то момент её можно просто не возобновить. Но она может и завершится и перейти в состояние "dead", возобновить из которого её будет уже невозможно. Вызовы `.resume` и `.yield` могут не только передавать управление, но и обмениваться данными. Вот, собственно, и все.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
27.12.2023 17:39:33
Nikolay, Извините "не фига не понял от слова совсем"?
Цитата
Nikolay написал: Но не надо говорить о многопоточности, многозадачности и т.д.
VPM написал: Только явная передача управление и сохранение состояния.
Нет в lua другого способа вернуться в тоже место. Вы же пишите что перепрыгиваете через состояние идите дальше.
Цитата
Nikolay написал: Единственная задержка добавляется в бесконечный цикл в main,
Так и я об этом весь Ваш код идет с этой задержкой, мой пример 1 задача исполняется с этой задержкой, 2 задача вообще без всякой задержки.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
27.12.2023 17:04:18
Цитата
Владимир написал: 5. Мой скрипт преспокойно обновляет информацию от биржи именно раз в секунду на самом дохлом железе (количество графиков, тиков, стаканов и всех сделок равно нулю).
Владимир, в пору задаться вопросом: А зарабатывает ли ? А то он у Вас как "раб на галерах"
Очереди и двойные очереди в луа, Пример из книги Р.Е.
"В многозадачном алгоритме исполнителей несколько и у каждого из них - свое состояние и свой путь в графе состояний. Многопоточные алгоритмы - просто другое название для многозадачных."
"В Lua реализована "совместная многопоточность", когда потоки явно уступают выполнение друг другу и сохраняют состояние до следующего момента, когда выполнение столь же явно будет передано им снова".
"Только явная передача управление и сохранение состояния. Это логическая многозадачность - на самом деле в любой момент времени выполняется только один поток. Просто их несколько и они переключаются между собой".
Наверняка можно сделать, только зачем если уже есть, и сделано классно.
Вы очереди перебираете в цикле, цикл идет с какой то определенной задержкой на исполнение.
Мой пример это выделение какой то задачи в коде, которую нужно выполнять с максимальной скоростью. Ну к примеру пронестись по тикам, и снова вернуться к аналитике на медленных скоростях и здесь скорости имеют значения.
Я не утверждаю что это единственное использование каротин, но согласитесь видь классно! А главное можно работать со скоростью исполнения скрипта!
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
27.12.2023 15:51:23
Цитата
Nikolay написал: И все это можно воспроизвести на обычном цикле, опрашивая методы-объекты: готово - выполни это, нет - ждем дальше.Они удобны - да, но сказать, что без них нельзя - нет.
Нет нельзя, это две задачи исполняемые с разными скоростями. В моем примере функция Trade() имеет свой внутренний цикл без всяких ограничений.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
27.12.2023 15:42:11
Nikolay, Ну да, так в этом вся суть, что это делается средствами lua, останавливается задача на получение и обработку данных выработку сигала, и начинается исполнение ордеров в цикле со всей дурью на что способна lua.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
27.12.2023 15:32:23
Владимир, да давненько, рад что Ваш скрип поживает хорошо!
Фактически на все Ваши вопросы есть ответы выше.
Цитата
VPM написал: Этот подход позволяет носиться по тикам, писать на чистом lua, и навсегда забыть про тему скоростей (исполнения кода)!
Видите в чем еще дело, я активно в своих работах использую историю данных, это приводит к резкому росту памяти в конце сессии, меня это сильно смущает, поиск оптимального среднего между использованием памяти и скоростью.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
27.12.2023 13:15:04
Цитата
VPM написал: Текущая реализация концептуально выглядит так, код:Кодdofile("hacktrade.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 Вопрос с модульностью решен, пишем свои стратегии входа, стратегии выхода, управление позицией, риском, алгоритмы - все независимо!Собираем Систему (торговую!)
Вот раньше накидывал структуру мною реализуемую.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 15.06.2023
27.12.2023 13:01:13
nikolz, Прежде всего нужно ответить на вопрос зачем что то ускорять, если все скрипты мы тормозим выставляя sleep(х)?
"Lua не только быстро выполняется, но и быстро компилируется. Например, вышеприведенная программа для составления списка авторов обрабатывает 1 Мб данных за одну десятую секунды. (Примечание: На моем старом Пентиуме.)" (от Профессора)
В реализации же HackTrade, при помощи стандартной библиотеки coroutine, поток разделен на две задачи, выполняемых на разных скоростях. (Я выше про это рассказываю).
Цитата
VPM написал: В чем суть, есть 2 основные функции: 1) Pobot() 2) Trade()
Которые между собой взаимодействуют.
Цитата
VPM написал: "В Lua реализована "совместная многопоточность", когда потоки явно уступают выполнение друг другу и сохраняют состояние до следующего момента
Когда взаимодействовать уже решаем Мы.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 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 и позволяет система!