Очереди и двойные очереди в луа

Страницы: Пред. 1 ... 13 14 15 16 17 ... 26 След.
RSS
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Цитата
Nikolay написал:
Я не использую Дзен, так что, видимо, это не про меня.
"Код торгового робота"  это не Ваше?
 
Как я сказал выше - я не использую Дзен. Да и зачем, когда есть GitHub, GitHub Pages.
 
Цитата
Nikolay написал:
Что касается примера, основной вопрос - зачем? Какую задачу это решает. Создавать объект ради объекта - это тупиковый путь, хоть и популярный лет 20 назад. А во многих языках даже обязательный. Но это не относится к Lua. Да, здесь многое завязано на таблицы, если не почти все, если считать _G. Но это не значит, что нет других объектов first class citizen.
На мой взгляд это из области "написал и забыл"!

Мы один раз продумали структуру данных, а дальше через присвоение пользуемся - "по образу и подобию",
не задумываясь почему там таблица не обновилась, где ты там забыл переменную локализовать, + "синтаксический сахар".
Это просто удобно при использовании портфеля из бумаг.

"Структура с методами это простейший вариант объекта". т.е. создавая таблицу мы уже создали объект.

"Что же нам это дает? Вся сила мета таблиц в мета методах".

Пока в этом только разбираюсь, но у меня рабочий вариант которым пользуюсь - фреймворк HackTrade!
Написан по этому принципу, и я не устаю "петь дифирамбы" его автору:
надежность, лаконичность, скорость, минимализм, минимальное потребление памяти...
 
Цитата
Nikolay написал:
Очиститься, а точнее, цитируя: "локальная переменная перестает существовать, как только заканчивается ее область видимости, позволяя сборщику мусора освободить память, занимаемую ее значением". Блок же закончился. И в вышеупомянутой книге - это описывается.
Действительно я зарапортовался! :cry:  
 
Цитата
VPM написал:
Мы один раз продумали структуру данных, а дальше через присвоение пользуемся - "по образу и подобию",
не задумываясь почему там таблица не обновилась, где ты там забыл переменную локализовать, + "синтаксический сахар".
Это просто удобно при использовании портфеля из бумаг.
Это, конечно, так. В теории. Если объект действительно детерминирован. Но, как обычно, примеры ООП из кошек, собак, животных - это просто примеры.
Но это также не отменяет простого подхода через вызов метода, возвращающего готовую структуру. Тоже вызвал, получил экземпляр нового объекта.
 
Цитата
Nikolay написал:
Цитата
VPM написал:
Мы один раз продумали структуру данных, а дальше через присвоение пользуемся - "по образу и подобию",
не задумываясь почему там таблица не обновилась, где ты там забыл переменную локализовать, + "синтаксический сахар".
Это просто удобно при использовании портфеля из бумаг.
Это, конечно, так. В теории. Если объект действительно детерминирован. Но, как обычно, примеры ООП из кошек, собак, животных - это просто примеры.
Но это также не отменяет простого подхода через вызов метода, возвращающего готовую структуру. Тоже вызвал, получил экземпляр нового объекта.
Nikolay, Не совсем Вас понимаю,

я не чего не пытаюсь отменить, просто обсуждаю  с сообществом.
я лишь пришел к выводу, что такой подход в нашей задаче, наиболее оптимален, надежен, лаконичен, да просто удобен!

Создали экземпляр если не нежна переменная ставим(--), нет переменной, и не нужно носиться по всему скрипту.
не что не мешает делать так
local a=t[i][j]
внутри блока.

Но и для писателей это не только конструктор портфелей,  но и роботов - "по образу и подобию", мин. изменениями.
 
Nikolay,  А что думаете насчет все таки восстановить очереди, это примеры с 1 поста данной ветки?
 
Очередь - это просто такой массив, абстракция, не более. Вопрос применения. Где-то они необходимы, а где-то не нужны.
И так для каждой сущности, для каждой задачи выбирается оптимальное решение.
 
Цитата
VPM написал:
function Cached.Channel_PDF_Ehlers()

  ---- Выведение торговли стратегий от Функций Распределения Вероятности (Джон Эхлерс)
  ---- VPM ©
 
  local log=math.log;
  local floor=math.floor;
 
  local fPeriodDC;
  local ftrasform_fisher;

  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;

Как Высчитаете нужно их чистить, обрезать, еще что то в целях уменьшения потреблению памяти?
 
На примере массива Price, т.к. я вижу где он используется.
Значения дальше P-1 уже не нужны. Поэтому вполне можно написать Price[index - P - 1] = nil.
Хотя алгоритм поиска экстремума за период иногда проще делать иначе, через unpack. (Правда для малых P - это не существенно).

Иногда проще не создавать массивы, а просто ввести переменные, постоянно изменяя значения. На примере той же EMA, если не надо иметь данные дальше чем прошлое значение, то достаточно ввести переменную, отвечающую за прошлое значение EMA, вместо массива.
 
Цитата
Nikolay написал:
На примере массива Price, т.к. я вижу где он используется.
Значения дальше P-1 уже не нужны. Поэтому вполне можно написать Price[index - P - 1] = nil.
Хотя алгоритм поиска экстремума за период иногда проще делать иначе, через unpack. (Правда для малых P - это не существенно).

Иногда проще не создавать массивы, а просто ввести переменные, постоянно изменяя значения. На примере той же EMA, если не надо иметь данные дальше чем прошлое значение, то достаточно ввести переменную, отвечающую за прошлое значение EMA, вместо массива.
Не совсем понятно, запись Price[index - P - 1] = nil. запишет в массиве nil как значение или уменьшит этот массив.
 
Такая запись установит nil по индексу, а значит сборщик мусора освободит память. Но такая запись не позволит использовать типовой метод #.
Так что, если # необходимо, то либо использовать другие методы оптимизации, либо переопределить метаметод __len.
 
Всем добрый вечер!

"В чем сила брат" - сила "братцы" в гэпе! :smile:

Немного хочу отступить от темы обсуждение, рассказать небольшую, но очень поучительную историю.
Но прежде по благодарить Nikolay,  за поддержку в обсуждениях, и его мудрые советы!

После того как "приказала долго жить статистика сайта", такое в впечатление что общение идет в "кругу тихо сам собою". :cry:
Ну если у разработчиков "наплевательское" отношение к нам,
давайте друг с другом обмениваться мнением, и не важно что иногда бываем не правы, высказывайтесь?
 
О чем история, а история стара как рынок - "Пропустил козла в свой огород". Ну обо всем и по порядку.

Отключил  всех "помощников" - переделываю скрипты от торговли одним инструментом, к торговле портфелем.
(Когда начинал переделку, думал добавил цикл по инструментам и все дела, но не ту-то было. Вот уже больше квартала сижу).
Есть время, пишу, приторговываю руками (дневки или средней срок, стратегии концеп смарт мани + VSA или свою).

Но история то про "козла", зовется GOLD и то когда убыток по риск менеджменту в радость.
Все началось безобидно:
Бычий тренд, сильно отскочили от средней, начала дня - коррекция, нашел шортовый ордер блок,
посчитал цели, объём сделки, открылся, на цели лимитки.
Следующий день, цена не дошла несколько пунктов до цели отскочила, идет откат,
пересчет новые цели - лимитки. Все в пределах моего риск менеджмента.
Следующий день, цена не дошла несколько пунктов до цели отскочила, бычий тренд, и фаза бычья,
плакал мой дневной риск, ну и кто  тут не усреднился бы?
Риск менеджмент уже и не при делах, примерно 80% депозита в удержании данной позиции, в ущерб другим сделкам, просадки в моменте > 30%.
И какова была моя радость сегодняшнему гэпу, когда маркетмейкер перевернул рынок, все прямо по классики!
А когда цена пошла в сторону позиции, я уже не на что не обращал внимания, а при каждом удобном случае уменьшал позицию.
Огромная медвежья, поглощающая свеча, медведи зарабатывают, на конец и я в тренде,
но радовался, я тому что есть возможность закрыть позицию и закрывал!

Вспоминая историю описанную Ларри Вильямсом, когда они (риск - менеджер, у него был РАЛЬФ ВИНС,
написавший книгу "Математика управления капиталом", ныне управляющий фондом),
участвовали в конкурсе и депозит в 10 000$ превратили в миллион и потом терпели просадку почти в миллион чтоб снова подняться.

И Вся эта история про то как делать нельзя.  
 
А как делать можно - нужно?

Вот и подошел в плотную к вопросу менеджмента в трейдинге!
Зачастую просматривая материалы на эту тему, заметил, что не делается различие между
мани менеджментом и риск менеджментом.

У себя я четко провожу линию различия:
риск менеджментом - управление риском;
мани менеджментом - управление позицией (количеством а вернее сказать стоимость).
Хотя эти направления сильно переплетены, но алгоритмы разные.

Начну с риска риск: риск на сделку риск на день.
За структуру данных возьму и создам класс, по примеру класса на позицию описанную выше.
 
Риск на сделку, здесь все просто. Сделаю метод для моего класса.

Все начинается с капитала. Размер имеет значение!

Задаю в % (от 1% - 10% заввисит от стратегии по умолчанию 2% (т.е. 50 сделок)
пересчет в cash - для анализа по залогам;
пересчет в pips - для анализа по валотильности.

На выходе:
1) risk на сделку.
2) reward на сделку.
3) contract на сделку.
 
Риск на день.

Здесь пока никаких переделок. Есть старый скрипт запущу в работу.
Смысл, защита дипозита на просадку (по умолчанию 5% от депозита),
при снижении счета на величину допустимой просадки, просто сбрасывает все позиции, и остановка торговли.

Прежде чем заняться редактированием мани менеджментом,
нужно испрвить работу моего MarketSimulator - это уже просто какое - то наказание для меня. :cry:
Ну нет доверия нужно прверять?

Да выводы конечно делать рано, но при новой организации данных, заработал сборщик мусора, взял под контроль память!
(хотя не все доделал) :lol:  
 
Добрый день!

Начну с конца. Решил сбросить на графики индикатор Структура рынка (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 подскажите пожалуйста?
Компилятор легко перевел!
 
Цитата
VPM написал:
Добрый день!

Хотя не знаю может в lua 5.4 не уже ограничения по количеству локальных переменных, но решил Вам оставить сообщение, сам не разбирался.
В lua 5.1 в исходном файле luaconf.h переменная LUAI_MAXUPVALUES = 60. Хотя можно увеличить до 250 и скомпилировать свою dll. Хотя Квик и не даст с ней работать. В lua 5.3 кажется увеличили это число.
Было бы конечно хорошо, если бы OnCalculate давал возможность работать с таблицей, а не конкретными значениями, или как-то иначе задавать значения линий. Иначе большое число линий вызывает проблемы.
 
SciTE не использую, так что не знаю. После VSCode - особого желания нет.
 
"Рекламная пауза" :smile:
Цитата
Nikolay написал:
SciTE не использую, так что не знаю. После VSCode - особого желания нет.
SciTE - это просто, эффективно, наглядно, удобно, быстро компилируется для кодирования в луа супер!
VSCode - За ним самим нужно следить.
 
Кошек надо просто уметь готовить. VSCode - это просто среда. Все компилируется в терминале скриптами, самим же lua (или любым другим bash). Зачем для этого редактор - не ясно.
SciTE хорош, но, для примера, ZeroBrane Studio (по моему мнению) - лучше. Но она не умеет win1251.
Также советую проверить какую команду выдает SciTE для компиляции.  Скорее всего без -s, что оставит отладочную информацию и позволит декомпилировать код, если он компилировался в чистом виде.
 
Вот,
Цитата
Nikolay написал:
SciTE хорош
И дальше можно не продолжать :smile:  Я шучу кому как удобно и на чем, я просто привык,
но есть одно неоспоримое преимущество он Стабилен!
Поставил уже на верно лет 20 назад (когда там 5.1 вышло), накидал разного сервиса и забыл как лезть в него.

Цитата
Nikolay написал:
Также советую проверить какую команду выдает SciTE для компиляции.  Скорее всего без -s, что оставит отладочную информацию и позволит декомпилировать код, если он компилировался в чистом виде.
Вот пример компиляции:
>luac54.exe -o "*.luac" "*.lua"
>Exit code: 0    Time: 0.138
 
Цитата
VPM написал:
декомпилировать код,
Да на здоровье, я это делаю предполагаю, что так быстрее исполнение луа не отвлекается?
 
Цитата
VPM написал:
Поставил уже на верно лет 20 назад (когда там 5.1 вышло), накидал разного сервиса и забыл как лезть в него.
Ну это дело такое - когда-то turbo pascal был чудесен. Или, для примера, Emacs, как среда  разработки, - великолепна. И до сих пор великолепна. Так что SciTE - это такой же новодел как VSCode.

Цитата
luac54.exe -o "*.luac" "*.lua"

А лучше добавить параметр -s. Правда если цель - писать скрипты для себя и только для себя, то зачем вообще компилировать. Квик это сам сделает перед запуском.
 
Ну прямо не рынок сегодня, а сплошная красота, или я навыки анализа и ручной торговли вспомнил :smile:  
 
Цитата
Nikolay написал:
А лучше добавить параметр -s. Правда если цель - писать скрипты для себя и только для себя, то зачем вообще компилировать. Квик это сам сделает перед запуском.
У меня это в SciTE запрограммировано, делаю это машинально особенно когда переделываешь,

3 кнопки по очереди:
1) сохранил изменения;
2) проверил на исполнение;
3) скомпилировал.

Особенно удобно для индикаторов, так как тело находится в модуле (таблице) , а голова в терминале.
Все основные исправления идут в теле индикатора (три кнопочки), редко голова редактируется так как структуру продумываешь сразу.
Цитата
Nikolay написал:
А лучше добавить параметр -s.
А что это у куда добавить?
 
luac54.exe -s -o "*.luac" "*.lua"

Это убирает debug информацию.
 
Ок,  спасибо безопасность превыше всего!
 
Цитата
Nikolay написал:
Так что SciTE - это такой же новодел как VSCode.
Новодел новоделу рознь!

Вот доступный всем пример, судите сами:

Две компании в недалеком прошлом на стадии становления и развития - занимаются программированием,
одни "торгаши" ( без сомнения, нужная вещь  и не обходимая)
вторые "Программисты" (заглавная буква не случайна).

На старте занимались одним и тем же, ну давайте взглянем на то что нам близко,
капитализация компаний
ну  и на продукт.
 
Как показывает история, программисты сами себе не делают Продукт, а делают костыли. Чтобы сделать продукт одних программистом мало. А капитализация не имеет никакого отношения к этому. Есть компании с огромной капитализацией, но польза от них ничтожна.
 
Цитата
Nikolay написал:
Есть компании с огромной капитализацией, но польза от них ничтожна.
Вы вероятно имеете ввиду маркетинг, который занимает львиную долю в оценке, а затем и стоимости.
Нет я о Майкрософт и другом обкушенном продукте.

Насколько я помню, мы с Вами из одних прошлых лет (+-10).

Вот вам другая история,
сегодня  это покажется дикостью, но будучи молодым специалистом - инженер, руководитель отдела, получив "железо" в пользование,
не нечем было работать, (тогда было все еще под  DOC), пришлось лететь в Казахстан,
там мой товарищ возглавлял автоматизацию золотодобывающего предприятия (писали САУ под  DOC),
у них водились "денюжки", и они могли себе позволить, чтоб получить на выходе электронную таблицу и редактор. на дискетке.

Сегодня просто из Москвы сел на рейс и в любой точке мира, тогда из Сибири почти на "лошадях".
Ник то не гнал, по собственному желанию за свой счет.

Результат написал в э. таблице программу,  обсчитывала одну из наших задач,
то что считали 2 сотрудника  3 суток, теперь в  программу нужно было загрузить данные и нажать кнопку.

Чем дело кончилось "на всю жизнь урок" - сократили сотрудника в отделе.

Сегодня школьники пишут подобное в excele, но тем не менее, грузите под э.т.  и она работает.
Но так мир остановится, а программисты останутся без вознаграждения.

Нет конечно нужен технический руководитель проекта, но и очень важно как написано.

"Вот истории конец , а кто слушал молодец"!
 
Добрый день!

На графике квик есть прогнозная зона,
подскажите как правильно индексировать там значения чтоб не пропадали?
 
Добрый день!

На страницах данного форума очень часто и много обсуждается быстродействие lua.
Чего только не услышишь от "заслуженных метров данного форума",
но на мой взгляд не заслуженно, не уделяется внимание многопоточности уже реализованной в lua.
На русском языке, да и техническое исполнение, правильно определять как многозадачность, на английском - это "корутины".

Ну давайте, об всем и по порядку!

Lua быстрый язык, (в этом легко убедиться уберите в Вашей программе sleep()).
В терминале квик, минимальный тик времени это 1 миллисекунда,
информация обновляется один раз в секунду (таблица текущих параметров),
это срезы в какой-то момент времени и трансляция информации от биржи, через сервер в терминал.

То есть технически обновить информацию от биржи можно 1 раз в секунду (это еще зависит от количества графиков открытых, "железа" ...)
Но есть еще тики, стакан и таблица всех сделок.

Но причём тут многозадачность, я много на страницах этого поста пишу про пример от Дениса Колодина фреймворк HackTrade.
Это пример реализации многозадачности в lua!

В чем суть, есть 2 основные функции:
1) Pobot()
2) Trade()

"Технически вся магия происходит в методе main, там в цикле вызывается сопрограмма, которая создаётся из функции Robot.
функция Trade() Это псевдоним стандартной функции coroutine.resume, при вызове этой функции прерывается код робота
и происходит отработка умных заявок (обновляются цены лимитников, количество, и т.п.)"

В функции Robot получаем информацию от терминала обрабатываем ее формируем правило торговой системы,
именно здесь  работает задержка основного цикла sleep()!

При вызове функции Trade() прерывается код функции Pobot(), идет исполнение сопрограммы со всей той скорость на что способна lua и позволяет система!

Этот подход  позволяет носиться по тикам, писать на чистом lua, и навсегда забыть про тему скоростей (исполнения кода)!
 
Вы либо умолчали, либо заблуждаетесь.
---------------------
Корутина - это псевдо многопоточность. т е исполняются они на одной VMLua и в одном потоке OC.
--------------------
Они дают выигрыш если у вас в скрипте есть синхронный ввод/вывод с медленных устройств.
В скриптах КВИКА таких медленных синхронных вводов выводов нет.
Но корунды имеют накладные расходы.
Поэтому вместо выигрыша может быть проигрыш.
 
Если действительно хотите многопоточность без загрузки процессора пустыми циклами и пропуска данных по тикам,
то смотрите  Event OC.
 
и еще...
Фактически весть механизм коррутин с большим быстродействием реализуется через один EVENT и оператор if.
При этом скорость переключения составляет микросекунды.
 
и еще... одновременно с этим практически бесплатно (в смысле затрат времени процессора)  реализуется WatchDog  
 
Цитата
nikolz написал:
Вы либо умолчали, либо заблуждаетесь.---------------------Корутина - это псевдо многопоточность. т е исполняются они на одной VMLua и в одном потоке OC.--------------------
nikolz,  Я совсем не обсуждал как реализована многозадачность в lua (какой смысл это уже есть), это доступная известная информация:

"В Lua реализована "совместная многопоточность", когда потоки явно уступают выполнение друг другу и сохраняют состояние до следующего момента, когда выполнение столь же явно будет передано им снова.
Никакого разделения на физические процессоры или совместного использования процессорного времени.
Никакой вытесняющей многозадачности, неблокирующего доступа, семафором, диспетчеров.
Только явная передача управление и сохранение состояния.
Это логическая  многозадачность - на самом деле в любой момент времени выполняется только один поток.
Просто их несколько и они переключаются между собой."

Я лишь говорю о том что, не используются, те возможности которые нам представляет lua,
что зачастую совсем не нужно "городить огород", а стоит разобраться с lua!
 
Цитата
nikolz написал:
Если действительно хотите многопоточность без загрузки процессора пустыми циклами и пропуска данных по тикам,то смотрите  Event OC.
Все что пытаюсь добиться это стабильной работы скриптов!

Пример HackTrade я реализую у себя с не большой доработкой, но об этом я делал сообщения.
В этом сообщении я рассказал о еще одной стороне HackTrade - почему это лучшая работа.
Более того он опубликован и каждый желающий может его опробовать.

Lua реализовывался как язык сценариев (посмотрите игры созданные на нем) но это уже другая тема.
Мы здесь о быстродействии.
 
Цитата
nikolz написал:
и еще... одновременно с этим практически бесплатно (в смысле затрат времени процессора)  реализуется WatchDog  
Вы блещете эрудицией, но какое это практическое значение имеет  к нашей небольшой прикладной задаче?
 
Цитата
nikolz написал:
Но корунды имеют накладные расходы. Поэтому вместо выигрыша может быть проигрыш.
Это совсем не понятно?
Я привожу конкретный пример реализации,
Цитата
VPM написал:
В функции Robot получаем информацию от терминала обрабатываем ее формируем правило торговой системы,именно здесь  работает задержка основного цикла sleep()!При вызове функции Trade() прерывается код функции Pobot(), идет исполнение сопрограммы со всей той скорость на что способна lua и позволяет система!
Где тут проигрыш?
 
Как это работает (функционал сопрограмм).

Вызов `corutine.create` получает функцию и возвращает спящую  ("suspended") сопрограмму.
Её можно "разбудить" вызовом `coroutine.resume`( Trade() ) и тогда она начинает выполняться.

Выполняется она до тех пор, пока не встретиться вызов `coroutine.yield`.
В этот момент управление возвращается к вызывающему потоку.
Следующий вызов `coroutine.resume` восстановит выполнение сопрограммы, передавая управление ровно в то место, где она была приостановлена.

Сопрограмма может быть вечной - если она время от времени уступает выполнение, то в какой-то момент её можно просто не возобновить.
Но она может и завершится и перейти в состояние "dead", возобновить из которого её будет уже невозможно.

Вызовы `.resume` и `.yield` могут не только передавать управление, но и обмениваться данными.

Вот, собственно, и все.
Эта простая реализация дает возможность реализовывать многозадачные алгоритмы даже не в многозадачной среде.  
 
Цитата
VPM написал:
Цитата
nikolz написал:
Но корунды имеют накладные расходы. Поэтому вместо выигрыша может быть проигрыш.
Это совсем не понятно?
Я привожу конкретный пример реализации,  
Цитата
VPM написал:
В функции Robot получаем информацию от терминала обрабатываем ее формируем правило торговой системы,именно здесь  работает задержка основного цикла sleep()!При вызове функции Trade() прерывается код функции Pobot(), идет исполнение сопрограммы со всей той скорость на что способна lua и позволяет система!
Где тут проигрыш?
Попробую объяснить еще раз.
функция main работает в единственном потоке и в единственном стайке, который в этом потоке создан.
Поэтому, чтобы Вы не запустили на луа внутри main, это будет исполняться в потоке main.
Т е все коруунды исполняются в одном потоке ОС т.  е последовательно на одном ядре процессора.
-------------------
Потери будут на затратах времени на сохранение состояния коруунды и на возобновления ее работы.
Коруунды позволяют исключить простои потока если у Вас выполняется например ввод данных, которые ждет исполняемая функция. Вот во время этого ожидания можно запустить другую функцию.  Но в скриптах КВИК нет таких ааодов выводов. Поэтому коруунды ничего  не ускоряют. А затраты времени на сохранение состояний коруунды и вновь его восстановление - это и есть пустая трата времени потока.
--------------------  
О псевдо поточности коруундов можно почитать в учебниках по программированию и документации по Луа.
 
Цитата
nikolz написал:
О псевдо поточности коруундов можно почитать в учебниках по программированию и документации по Луа.
Не так важно,
выполняются ли потоки разными физическими процессорами или разными потоками одного,
переключаются ли они операционной системой, "главным" потоком или явно передают управление друг другу - главное,
что каждый поток (строго говоря "нить", от английского "thread" ) имеет свое состояние!
Цитата
VPM написал:
При вызове функции Trade() прерывается код функции Pobot(), идет исполнение сопрограммы со всей той скорость на что способна lua и позволяет система! Этот подход  позволяет носиться по тикам, писать на чистом lua, и навсегда забыть про тему скоростей (исполнения кода)!
Именно в сопрограмме достигается максимальное исполнение кода,
Цитата
VPM написал:
В функции Robot получаем информацию от терминала обрабатываем ее формируем правило торговой системы, именно здесь  работает задержка основного цикла sleep()!
нету смысла гонять быстрее 1 миллисекунды, так как нет обновления информации,
а намой в взгляд и быстрее 1 секунды нету смысла.
 
Цитата
nikolz написал:
Поэтому коруунды ничего  не ускоряют.
А никто не утверждает что они что ускоряют, речь идет о разделении скорости исполнения кода на две части.
Там где нужна максимальная - исполнения ордера, и где можно раз в секунду.
 
Цитата
VPM написал:
Цитата
nikolz написал:
Поэтому коруунды ничего  не ускоряют.
А никто не утверждает что они что ускоряют, речь идет о разделении скорости исполнения кода на две части.
Там где нужна максимальная - исполнения ордера, и где можно раз в секунду.
Не понял.
Что значит "разделении скорости исполнения кода на две части"?
И зачем Вы разделяете СКОРОСТЬ?
Как Вы разделяете скорость и в чем это выражается?
 
nikolz,  Прежде всего нужно ответить на вопрос зачем что то ускорять, если все скрипты мы тормозим выставляя sleep(х)?

"Lua не только быстро выполняется, но и быстро компилируется.
Например, вышеприведенная программа для составления списка авторов
обрабатывает 1 Мб данных за одну десятую секунды. (Примечание: На
моем старом Пентиуме.)" (от Профессора)

В реализации же HackTrade, при помощи стандартной библиотеки coroutine,
поток разделен на две задачи, выполняемых на разных скоростях. (Я выше про это рассказываю).
Цитата
VPM написал:
В чем суть, есть 2 основные функции: 1) Pobot() 2) Trade()
Которые между собой взаимодействуют.
Цитата
VPM написал:
"В Lua реализована "совместная многопоточность", когда потоки явно уступают выполнение друг другу и сохраняют состояние до следующего момента
Когда взаимодействовать уже решаем Мы.
 
Цитата
VPM написал:
Текущая реализация концептуально выглядит так, код:Кодdofile("hacktrade.lua") -- основной модуль

function Robot() -- основной функции

     -- 1) (~) Инициализация
        2) Получение констант
        3) Предварительные расчеты

     while working do -- основной цикл
         
         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
Вопрос с модульностью решен, пишем свои стратегии входа,  стратегии выхода, управление позицией, риском, алгоритмы - все независимо!Собираем Систему (торговую!)
Вот раньше накидывал структуру мною реализуемую.
 
Давненько я сюда не заглядывал:
1. Быстродействие lua более, чем удовлетворительное, чтобы обслуживать сотни тикеров, то есть портфель, кратно превышающий оный у любого участника этого форума.
2. От заслуженных мэтров данного форума не услышишь ничего хорошего.
3. За каким хреном здесь нужна многопоточность - это выше моего понимания.
4. Многопоточность, многозадачность и "корутины" - это разные вещи. Ни одна из них здесь нафиг не нужна.
5. Мой скрипт преспокойно обновляет информацию от биржи именно раз в секунду на самом дохлом железе (количество графиков, тиков, стаканов и всех сделок равно нулю).
Страницы: Пред. 1 ... 13 14 15 16 17 ... 26 След.
Читают тему
Наверх