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

Страницы: Пред. 1 ... 6 7 8 9 10 ... 26 След.
RSS
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
VPM, А чему она должна помочь? Воспринять этот бред за прописную истину?
 
Цитата
Владимир написал:
А чему она должна помочь? Воспринять этот бред за прописную истину?
Здесь со мной то даже бессмысленно дискутировать,  
обращайтесь к Мандельброту с мат. в ладу можете алгоритм Серпинского посмотреть.

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

А в нашем  конкретном примере,
если цена на секундных масштабах достигала значения 100,
то с уверенность в 100%,
можно утверждать что цена за период 1 час достигала этого значения 100, несмотря  что ее средняя имеет значение 90.
 
VPM, Здесь с кем угодно бессмысленно дискутировать,  это БРЕД! Какой бы титулованный дебил это ни утверждал.

График цены отражается в разных масштабах НЕ фрактально, а НЕЗАВИСИМО от других масштабов. В частности, мой скрипт торгует на любом таймфрейме НЕЗАВИСИМО от того, что творится на других.

И "в нашем  конкретном примере" Вы несёте полную ахинею: вполне возможно, что цена УЖЕ достигала значения 100, несмотря на то, что её средняя имеет значение 90. А может и НЕ достигала. Да, мы видим, что в последней (незакрытой) свече она достигала этого значения, но эта свеча ещё НЕ ЗАКРЫТА, и нет гарантии, что туда "вот прям ща" не припрётся какой-нить идиот и не выкупит все тамошние лонги до седьмого колена и к моменту её закрытия средняя не станет, скажем, 80.
 
Цитата
Владимир написал:
Какой бы титулованный дебил это ни утверждал.
Кто говорил про математику, так это математически доказанные утверждения.
Цитата
Владимир написал:
График цены отражается в разных масштабах НЕ фрактально, а НЕЗАВИСИМО от других масштабов.
А здесь просто логика:
если мы рассматриваем диапазон цен за период 1 час, и в этом периоде цена в моменте куда то слетала а Вы срез сделали в этот момент.
Так будет цена среза находится в этом периоде 1 час? Ответе себе сами.
Цитата
Владимир написал:
И "в нашем  конкретном примере" Вы несёте полную ахинею: вполне возможно, что цена УЖЕ достигала значения 100, несмотря на то, что её средняя имеет значение 90.
Ну если математика полная ахинея то несу! :smile:  
 
Цитата
Владимир написал:
А может и НЕ достигала.
А это вообще блеск! Так достигла или нет? Так Вы себе ответьте.
Цитата
Владимир написал:
Да, мы видим, что в последней (незакрытой) свече она достигала этого значения, но эта свеча ещё НЕ ЗАКРЫТА, и нет гарантии, что туда "вот прям ща" не припрётся какой-нить идиот и не выкупит все тамошние лонги до седьмого колена и к моменту её закрытия средняя не станет, скажем, 80.
Так я уже тоже говорил про это, что рассуждать там можно от 1 минутного, что значение старшего периода стало статистически значимым.
И тогда с математической точность можно утверждать что цена достигнет своей средней.

А то думаю что это так у программистов? :smile:  
 
VPM, А на кой мне СЕБЕ отвечать? Средняя - 90, а что там было внутри - незвестно. Может, так весь период и проболталась на 90, может, достигла 100, может, 150. Лично меня это вообще не интересует. Свеча сформирована, поезд ушёл.

Господи, да рассуждайте о чём Вам заблагорассудится! К торговле вся эта хрень не имеет отношения. По крайней мере, к нормальной торговле, как у моего скрипта.
 
Цитата
Владимир написал:
Господи, да рассуждайте о чём Вам заблагорассудится!
Спасибо за разрешение :smile:
Цитата
Владимир написал:
К торговле вся эта хрень не имеет отношения.
Как же не имеет можно норм. распределение считать вероятности получать!
 
VPM, Вот и считайте свои вероятности, а мой скрипт прекрасно торгует без всего этого дерьма.
 
Цитата
Владимир написал:
Вот и считайте свои вероятности, а мой скрипт прекрасно торгует без всего этого дерьма.
Ну мат аппарата не так много чтоб им раскидываться, А за разрешение отдельное спасибо :smile:  
 
Цитата
VPM написал:
Цитата
Как же не имеет можно норм. распределение считать вероятности получать!
Ликбез.
--------------------
А кто Вам сказал, что Вы имеете нормальный закон распределения.
По-секрету Вам скажу, что еще в прошлом веке было доказано что нормальный закон встречается редко.
--------------------------
Если закон не нормальный, то арифметическое среднее не является состоятельной оценкой первого момента плотности вероятности, т е средней величиной.
----------------------------------------
В результате появились методы  робастного оценивания.
--------------------------------------------------------
Ученье -свет, а неучей-тьма.
 
nikolz, уважаемый и здесь мы не первые , пользуйтесь логнормальным и о да прибудет! :smile:  
 
VPM, Для такой примитивной задачи как организация торговли на бирже требуемый мат аппарат вообще курам на смех. Вот скрипт им и не раскидывается на всякую фигню вроде расчёта вероятностей.
 
Владимир,  Ну что тут скажешь, Каждому скрипту свое! :wink:  
 
Всем добрый день!

Конец придумыванию "велосипедов", мчимся на "болид формулы 1" - фреймворк HackTrade!

За все время тестирования, выявлена одна оплошность в HackTrade, не могу назвать ошибкой.
И так, можно подвести некоторые промежуточные итоги эксплуатации фреймворка:

1) Написан на чистом lua (достаточно навыка знаний lua);
2) Взаимодействие с QUIK через стандартную библиотеку qlua (без дополнительных внешних библиотек);
3) Пожалуй самое главное, заявки не теряются, забыть про всякие "затычки"! каждая заявка сформированная HackTrade присматривает сама за собой,
"Каждая заявка помнит, сколько она набрала, и сколько надо скидывать";
4) Легко реализуется стратегии Мани Менеджмента, количество в заявке есть переменная величина;
5) Легко реализуются стратегии спредовые, трендовые, свинг, сетка и т.д., цена в заявке есть переменная величина;
6) Легко реализуются стратегии Риск Менеджмента.

Модульность! дописываем и цепляем, не трогая основное тело скрипта!

HackTrade - уверенно приобретает Искусственный Интеллект:
         решения формирует на основании множества индикаторов,
         адаптируется под цену,
         адаптируется под количество,
         выставляет заявки, а при необходимости легко дописывается "айсберг" заявка, (разбивка на небольшие лоты),
         отслеживает стоп-цену,
         отслеживает таке-профит,
         выводит своё состояние в окно.

Функциональность скрипта его модульность превращается в заслуженный торговый робот с ИИ.
 
VPM, Это Вы описали мой скрипт. Впрочем, нет - мой куда лучше:
1) Написан на чистом lua (и я миллион раз открытым текстом говорил, что этого достаточно).
2) Никаких дополнительных внешних библиотек (да и из стандартной используются только три функции: OnTrade, getParamEx и sendTransaction). Нет, вру, намного больше: open, close, read, write, lines, load, getItem, getNumberOf, AddColumn, AllocTable, CreateWindow, DestroyTable, InsertRow, GetCell, SetCell, SetColor, SetTableNotificationCallback, SetWindowCaption, SetWindowPos, OnStop, bit.band, math.floor, message, find, sub, os.date, os.time, sleep. Но это всё смешно даже упоминать - тем более, что добрая половина всего этого для торговли нафиг не нужна - так, сервис для юзера, которому не лень посидеть за монитором.
3) Ни заявки, ни сделки, ни деньги, ни бумаги не теряются, за всем этим присматривает скрипт, и даже дамп состояния каждые 100 секунд на диск сбрасывает на всякий пожарный.
4) Ежу понятно, что "каждая заявка помнит, сколько она набрала, и сколько надо скидывать, а количество в заявке есть переменная величина"
5) Все необходимые стратегии реализованы, отлажены, работают, а всё "спредовое, трендовое, свинговое, сеточное и прочее дерьмо отправлено на помойку. А вот цена в заявке есть постоянная величина.
6) Минимизация рисков вообще главная задача скрипта.

Модульность присутствует в любой разработке любого нормального программиста, а всё, что можно настраивать пользователю вообще вынесено во внешний файл, что позволяет ВААПЩЕ не трогать тело скрипта,

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

if (order.flags % 2) == 0 then -- Заявка снята. Если флаг не установлен и значение бита «0» равно «0», то заявка исполнена

Цитата
Владимир написал:
Это Вы описали мой скрипт.
Спору нет мы только стремимся к совершенству! :smile:

Цитата
Владимир написал:
Ну да, понятие "Искусственный Интеллект" уже настолько засрано, что любое говно уже можно смело называть ИИ.
А это зря на то он Искусственный что без нас решение принимает, совершенства пока маловато, согласен, но здесь мы ему поможем!
 
Цитата
Владимир написал:
Все необходимые стратегии реализованы, отлажены, работают, а всё "спредовое, трендовое, свинговое, сеточное и прочее дерьмо отправлено на помойку. А вот цена в заявке есть постоянная величина.
Это то что я опробовал, детские ошибки сам пишу, сам делаю, сам исправляю, видимо пора чемоданы собирать и ....
А у нас если поставим last то заявка обязательно исполнится! :lol:
А у нас если поставим лучший bid или ask то встанет в стакан! :wink:  
 
VPM, Корректна вот такая запись (из моего скрипта):
if bit.band(s.flags,1)~=0 then -- если заявка активна...

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

Нет, это не зря - я уже несколько десятилетий гоняю ИИстов. Мой скрипт без единой капли ИИ тоже "без нас решение принимает", и помочь ему в этом мне уже нечем.
 
Цитата
Владимир написал:
Корректна вот такая запись (из моего скрипта):if bit.band(s.flags,1)~=0 then -- если заявка активна...
Спасибо
 
Цитата
Владимир написал:
Нкт, мой скрипт стремится к совершенству в торговле, а здесь всего лишь техническая составляющая.
А что без техники бы делали на лошадях скакали?
 
Цитата
Владимир написал:
Нет, это не зря - я уже несколько десятилетий гоняю ИИстов
А что их гонять?
Если автомобиль едет и между сидением и рулем дядя сидит, то он решение принимает куда повернуть, а если дяди нет то кто? :cry:  
 
VPM, Я дважды предлагал совместно обсудить "технические" утилиты, вплоть до открытых кодов - один раз сам, другой вместе с Борисом. Больше не хочу. У моего скрипта техника вылизана, а остальные идут лесом.

А что их гонять? Да чтобы хернёй не маялись на публичных площадках. Впервые этот термин появился, наверное, в шахматах, причём по поводу "Пионера" Ботвинника, который вообще не сыграл ни одной партии.

В если дяди нет, то решения принимает АЛГОРИТМ.
 
Цитата
Владимир написал:
В если дяди нет, то решения принимает АЛГОРИТМ.
Ну алгоритм это часть чего то большего, а если несколько и на основании этих решений нужно принять решение без участия человека.
А кто Каспарова обыграл? Не думаю что там один алгоритм матрица 8х8, разные фигуры ходят по разному?
 
Цитата
Владимир написал:
Я дважды предлагал совместно обсудить "технические" утилиты, вплоть до открытых кодов
Нет я не про открытые коды, их достаточно много опубликовано достойных маловато, ну вот к примеру
Цитата
VPM написал:
if (order.flags % 2) == 0 then -- Заявка снята. Если флаг не установлен и значение бита «0» равно «0», то заявка исполнена
написал но уверенности что это правильно нет сейчас работает, нужно копаться в битах.
Почему готовое решение не сделать?
 
VPM, Давнее моё определение: "Интеллект - это такой алгоритм"  А Каспарова обыграл "Глубокий Голубой". Полное дерьмо по софту, но с чудовищным быстродействием, которое на чемпионате мира среди компьютеров заняло лишь третье место, проиграв "Фрицу", который работал на 90 МГц пне.

Почему готовое решение не сделать? Я - сделал. Потратил на это несколько месяцев, но сделал. Мой скрипт меня устраивает полностью, что-либо менять в нём я не хочу.
 
Извините, что вмешиваюсь,

Цитата
VPM написал:
if (order.flags % 2) == 0 then -- Заявка снята. Если флаг не установлен и значение бита «0» равно «0», то заявка исполнена

чет/нечет - это проверка нулевого бита.
Из руководства:

Цитата
бит 0 (0x1)  Заявка активна, иначе – не активна
бит 1 (0x2)  Заявка снята. Если флаг не установлен и значение бита «0» равно «0», то заявка исполнена  

Есть еще вариант bit.test(order.flags,0), но чет/нечет самый быстрый.

Код
function main()
  order = getItem("orders", 1)
  start = os.clock()
  for i = 1, 1e6 do
    x = order.flags % 2
    --x = bit.band(order.flags,1)
    --x = bit.test(order.flags,0)  
  end
  message(tostring(os.clock() - start))
end

 
Ziveleos, Спасибо!

Можно утверждать что такая запись надежна?
 
так  order.flags & 1  
быстрее,
чем order.flags % 2,
примерно в 3 раза
 
nikolz, Я про надежность какой вариант надежней? Или все безопасно?
 
VPM, По-нормальному логические операции самые быстрые и самые надёжные (ассемблерные AND, OR, TEST), но, поскольку в Lua всё реализовано  через жопу (я в своё время чуть в обморок не упал, когда увидел на этом месте ФУНКЦИЮ вроде bit.band), то хрен его знает - до ТАКОГО способны додуматься только клинически криворукие, и реализвция может быть ЛЮБОГО уровня тупости.
 
Цитата
VPM написал:
Ziveleos, Спасибо!

Можно утверждать что такая запись надежна?
Цитата
VPM написал:
nikolz, Я про надежность какой вариант надежней? Или все безопасно?
В фрейморке HackTrade так было написано не из-за надежности, а из-за отсутствия побитовых операций в Lua52 на тот момент, они только в 2015 году появились в Lua53.
 
Цитата
Владимир написал:
Lua всё реализовано  через жопу (я в своё время чуть в обморок не упал, когда увидел на этом месте ФУНКЦИЮ вроде bit.band), то хрен его знает - до ТАКОГО способны додуматься только клинически криворукие, и реализвция может быть ЛЮБОГО уровня тупости.
      Несколько слов возражения (написанных мною когда-то) :smile:
                                                                                                         Краткая характеристика Lua
   Lua - интерпретатор динамический: переменным можно присваивать данные любого типа Lua. Данные языка имеют свойство Тип. Контроль типов данных выполняется только в момент исполнения скрипта Lua. По сути, Lua двухуровневый язык программирования:  Lua/C. Эта двухуровневость была заложена в проект языка и реализована изначально (Lua тесно интегрирован с C/C++). С учетом этого, функциональность, разрабатываемых на Lua программ и их эффективность, фактически определяется возможностями C/C++.
   Исходный код скрипта на Lua транслируется в байт-код либо предварительно, либо непосредственно в начале выполнения скрипта. Байт-код выполняется виртуальной ма-шиной Lua. Управление памятью автоматическое, с использованием потокоопасного мусорщика.
   Функционально все (исключая параллелизм выполнения его функций) можно написать на «чистом» Lua, но при необходимости, из Lua можно легко перейти в C/C++ (используя все его возможности) и вернуться обратно.
   Lua очень компактный как по коду его реализации, так и по его описанию, достаточного  для его начального использования. Особенно это заметно на фоне многочисленных монструозных средств разработки программ. Пожалуй, отношение <функциональности  Lua>  к <его компактности> одно из самых высоких среди известных языков программи-рования.
    Для хорошего понимания Lua необходимо четкое представление об устройстве его ассоциативных таблиц (тип table), элементами которых являются неупорядоченные пары: <Ключ таблицы (данные любого типа Lua кроме nil)>   <Поле таблицы (данные любого типа Lua кроме nil, при присвоении которого полю, соответствующая запись таблицы удаляется>.  Доступ к полям таблицы выполняется по ее ключам. Таблица используется, в том числе, и для хранения всех переменных окружения Lua (переменных, без спецификации локализации: local). Имена этих переменных всего лишь ключи, а данные переменных - поля этой глобальной таблицы (видимой из любого места скрипта).
   В Lua используются переменные двух видов: локальные переменные и переменные окружения (общие для всего скрипта и описываемое далее). Локальные переменные имеют блочную лексическую область видимости (в тексте кода видится только то, что создано/объявлено ранее во внешних или текущем блоке, а повторно объявленное все-гда экранирует предыдущее с учетом блочной структуры скрипта). Видимость переменных окружения (в таблице окружения) из некоторого места скрипта определяется выполнением обращения к переменным/ключам таблицы окружения (доступной в любом месте скрипта) не экранированных  из этого места локальными переменными.  
  Рекомендуется там, где это возможно, использовать локальные переменные, объявляемые со спецификацией:   local  <Список локальных переменных>. Эти переменные хранятся в стеках блоков Lua и обращение к ним эффективнее, чем к переменным окружения. При выходе из любого блока, его локальные переменные перестают существовать.
   Типы данных полей таблиц Lua это:
     - значения: nil, boolean , number, string;  
     - ссылочные данные: function, thread, table, userdata.
  При присвоении значения копируются, а на ссылочные данные создаются ссылки. На одно и то же ссылочное данное  может быть несколько одинаковых ссылок из разных переменных.  
  Функции (function) в Lua анонимные (данные первого класса, при присвоении и других базовых операций не отличающиеся от остальных ссылочных данных Lua), не имеющие встроенных имен для обращения к ним. Существует конструктор создания функции с присвоением переменной ссылки на нее. Вариантом конструктора функции является строка с текстом скрипта, из которой может быть создана функция скрипта с использованием служебной функции Lua.  Любую функцию Lua можно вызвать на исполнение с использованием тех переменных, в которых есть ссылка на нее. Как и остальные ссылочные данные, функции, если в процессе  выполнения скрипта на них нет ни одной ссылки, подпадают под уборку мусорщиком Lua. Функцией является сам скрипт Lua. Функция может быть создана/определена внутри любой функции в любом месте и может быть выдана как результат функции. Результатов у функции может быть больше одного. В функциях обеспечивается рекурсия, а также они представляют собой замыкания (в них допускается использование локальных переменных тех блоков, внутри которых создаются функции и которые (внешние локальные переменные,) являются составной частью функций – ее внешним локальным окружением). При создании функции, в том числе и в качестве результата некоторой функции, она создается с состоянием своего внешнего локального окружения, имеющегося на момент ее создания.  
  Строки (string) в Lua битовые (в байтах строки могут быть любые комбинации 1 и 0), семантически являются значениями (внутренне неизменяемыми после их создания, копируемыми при присвоении) и у них есть свойство длина строки. Символ ‘\0’ не является признаком конца строки. Более детально все типы Lua описаны в основном тексте справки.
  Окружение скрипта Lua определяется (начиная с версии 5.2) служебной переменной  _ENV (по умолчанию ссылающуюся на глобальную служебную таблицу _G), которой можно присвоить в скрипте ссылку на любую доступную таблицу Lua.  После такого присвоения, окружением скрипта станет присвоенная таблица.
   Таблицы в Lua можно использовать как метатаблицы. Это таблицы Lua, которые:
1) подключаются служебным оператором подключения метатаблицы к таблице (в том числе можно и к любой метатаблице или к самой себе);
2) при определенных операциях над таблицами (у которых есть метатаблицы) или ситуациях, возникающих при их использовании, Lua обрабатывает служебные ключи (с преопределенными именами) метатаблиц специальным образом (например, запускаются функции, ссылки на которые присвоены полям таких ключей и т.д.).
  В Lua можно использовать сопрограммы: тип thread. Они запускаются в отдельных стеках сопрограмм (thread) и в стандартной конфигурации Lua реализуют псевдопото-ки (нити, обслуживаемые одним потоком). В сопрограммах обеспечивается режим вызова функции с возможностью ее продолжения после программного прерывания, вызываемого с помощью служебной функции yield.
--
  Отдельные стеки сопрограмм реентерабельны и могли бы выполняться в различных потоках, но так как сборка мусора потокоопасная, то в нескольких потоках Lua можно использовать только как разделяемый ресурс под синхронизацией (в специальной конфигурации-сборки Lua). Это относится и к его функциям C-API, являющиеся частью Lua.. При компиляции интерпретатора Lua есть возможность указания режима использования стеков сопрограмм (thread), под синхронизацией, в отдельных потоках. При этом, C-функции, запускаемые в различных  стеках, могут выполняться (в разных потоках) параллельно, но код Lua может выполняться в потоках только в разделяемом режиме (под синхронизацией).
---
  В переводе на другие известные языки ООП: таблицы Lua это динамический список свойств и ее методов (заданных в том числе и в их метатаблицах), связанных с этими свойствами.
   Профессионал, наверное, сможет изучить этот язык, почти в полном объеме, дня за два-три. Для начинающих программировать это язык в своей основе (без использования средств ООП) тоже, наверное, один из самых простых.
   Если делать в программах на Lua проверку типов параметров (а может быть и областей значений) более-менее содержательных функций, то можно обеспечить и надежность разрабатываемых на Lua программ.
---
   Код реализации Lua всего: ~400kb.
   Доступный исходный код Lua может служить одним из примеров того, как можно/нужно программировать на языке C.
-----
  Несколько общих замечаний относительно Lua:
1)  Нотация записи программ не последнее дело и авторы языка зря не использовали проверенную временем нотацию C/C++, как в части записи кода, так и в напи-сании комментариев. Конструктор таблиц можно было при этом представить, на-пример, в виде:  <….>.   Как представляется издалека, сишная нотация Lua, обес-печила бы ему гораздо  большую популярность среди программистов, чем это есть сейчас.
   Показательным подтверждением написанного выше,  является язык python. В нем была выбрана нотация записи программ, которая «зашла» многим пользователям(психология восприятия текстов человеком) и этот язык, использующий многие архитектурные решения Lua (как и Java-sript, появившийся на 2 года позже Lua), стал популярным.
2)  Множественное присвоение в Lua, а также, возможные, множественные значения результата его функций обеспечивают дополнитильную гибкость (вариантность) написания скриптов Lua, однако, являются существенными потенциальны-ми источниками ошибок в них, так как семантика реализация этой множественности слабо отражается в синтаксисе ее записи и это надо контролировать на семантическом уровне (например, если в параметрах функции1 есть вызов функции2, то в качестве параметров могут вставиться несколько значений функции2, но сколько их будет, из имени функции2 формально это не следует).
3)  Влючительно до версии 5.4.1, в кодах стандартных библиотек Lua не был учтен существующий режим конфигурирования (предусмотренный в исходниках Lua)   использования стеков сопрограмм (thread) в отдельных потоках. Функции стандартных библиотек определены в Lua как сишные (потокобезопасные, допускающие параллельное выолнение), но в их коде нередко используется внутренняя среда интерпретатора Lua (не являющаяся потокобезопасной), и нет гарантии на уровне архитектуры реализации языка, того, что стандартные функции Lua по-токобезопасны для упомянутого режима.
4)  Синтаксис Lua простой: основная его сложность перенесена в функциональ-ность его таблиц, реализованных на C. Поэтому трансляция текстого кода Lua в его исполняемый байт-код, реализована эффективно, и это надо учитывать и ис-пользовать при написании скриптов на Lua (понимая возможность динамического создания текстов-скриптов внутри выполняемого скрипта).
5) Выбор в Lua фактически единственного, но универсального типа table, обеспечивающего его полную функциональность, позволяет кратко записывать семантику выполнения скриптов. Кроме того, короткий технологический цикл, от написания кода,  до его запуска, обеспечивает оперативное получение конечного результата.
Интеграция Lua с C/C++ обеспечивает его расширяемость, как в части использования существующих библиотек, так и в части эффективности выполнения его скриптов. При этом надо учитывать то, что динамизм Lua потенциально отрицательно влияет на надежность кодов, написанных непосредственно на нем.
 
Цитата
VPM написал:
nikolz, Я про надежность какой вариант надежней? Или все безопасно?
По надежности и безопасности все варианты одинаковые, полностью безопасные, надежные.
 
TGB,  Да какие тут могут быть возражения? Динамическая типизация УЖЕ кретинизм вселенского уровня, а уж за "тип number" я бы и вообще яйца пообрывал, JS тоже интерпретатор, тоже передранный с C, но всё же не настолько изуродованный. Уборка мусора такой же кретинизм, я его когда-то тоже "мочил в сортире" в своих ранних комментах. И нет здесь никакой "необходимости перейти в C/C++" - задача достаточно просто решается на чистом Lua. А "многочисленные монструозные средства" есть прямое следствие вымирания программистов как класса. Да и надо же чем-то засрать чудовищные возможности по памяти и быстродействию, тысячекратно превышающие реальные потребности пользователей. И что ещё за зверь "отношение функциональности  Lua  к его компактности"? Язык есть полное говно буквально ПО ВСЕМ показателям.

Да хренли там "хорошо понимать"? Где-то через полчаса после знакомства с Lua я уже писал свой первый скрипт на нём. Хренли там "чётко представлять" эти несчастные "ассоциативные таблицы"? Это разве что для малограмотного Роберто Иерусалимского подобная конструкция требует какого-то "осмысления". А про "доступ по ключу" - вот цитата из моей книги:
Совершенно неизбежным и страшным следствием отсутствия упорядоченности является также концепция ключа. Понятие идентификатора, «жульническим» образом изъятое из модели данных, принципиально не может быть убрано также из РСУБД: ведь даже для тривиального чтения значения ключа нужно получить доступ к кортежу каким-то иным способом. Как видим, избавиться от понятия идентификатора нельзя – можно лишь сделать вид, что его не существует при групповой обработке данных. К тому же, говорить о скорости доступа к данным при концепции поиска по ключу – насмешка над здравым смыслом.
Цитата
Код реализации Lua всего: ~400kb.
ВАХ-ВАХ-ВАХ! Одна из версий нашей шахматной шахматн программы была запихнута в "железо" под названием "щахматный электронный партнёр Дебют", которое представляло из себя процессор 8086 с частотой 4.7 МГц, 4К ОЗУ и 16К ПЗУ (это и на саму программу, и на дебютный справочник, и на некое подобие "операционки", которая бы реагировала на нажатия на поля шахматной доски и как-то индицировала свои ходы). Так вот, это убожество ОФИЦИАЛЬНО выполнило в одном из турниров норму КМС! Вот это и называется "всего".

Комментировать остальной словопомол про стеки, сопрограммы или реентерабельность мне лень. Резюме: Lua - один из самых убогих языков программирования, которые мне встречались в жизни. Тем не менее, реализовывать задачу торговли лучше всего на чистом Lua.
 
Цитата
TGB написал:
.
<Поле таблицы (данные любого типа Lua кроме nil, при присвоении которого полю, соответствующая запись таблицы удаляется>.
---------------
Поправлю Вас..
nil - это такая же переменная как и другие. Отличается лишь тем, что ее тип =0, а тип строки =3.
проверка переменной на nil, это  равенство ее типа нулю.
---------------
Поэтому поле таблицы может быть любого типа, в том числе и типа nil.
==================
Команды в байт-коде луа - это просто целое число, которое всегда указывает на функцию  СИ.
Т е внутри VMLua нет никакого чистого луа, там лишь чистый СИ.
 
Цитата
Владимир написал:
Тем не менее, реализовывать задачу торговли лучше всего на чистом Lua.
  Вот она истина  :smile: и это перечеркивает все остальное, написанное в вашем комментарии :smile:
 
TGB, Вот здесь у нас полный консенсус. :smile:  
 
Цитата
nikolz написал:
Поэтому поле таблицы может быть любого типа, в том числе и типа nil.
  Для удаления элемента таблицы ему полю надо присвоить nil.  Читайте матчасть.
 
Цитата
nikolz написал:
По надежности и безопасности все варианты одинаковые, полностью безопасные, надежные.
Спасибо!
 
Цитата
TGB написал:
Влючительно до версии 5.4.1, в кодах стандартных библиотек Lua не был учтен существующий режим конфигурирования (предусмотренный в исходниках Lua)   использования стеков сопрограмм (thread) в отдельных потоках. Функции стандартных библиотек определены в Lua как сишные (потокобезопасные, допускающие параллельное выолнение), но в их коде нередко используется внутренняя среда интерпретатора Lua (не являющаяся потокобезопасной), и нет гарантии на уровне архитектуры реализации языка, того, что стандартные функции Lua по-токобезопасны для упомянутого режима.
Вот это совсем не понял? можно своими словами попроще.
 
Получается что сопрограммы долой?
 
Цитата
VPM написал:
Вот это совсем не понял? можно своими словами попроще.
   Попроще.
 QLua это форк Lua, скомпилированный в режим использования стеков сопрограмм (thread) в отдельных потоках. Колбеки QLua запускаются в потоке отличном от пользовательского потока main.
 Для функций стандартных библиотек QLua  нет гарантии на уровне архитектуры реализации языка, того, что они  потокобезопасны для упомянутого режима.
Например, пользователь Старатель обнаружил "мерцающую" ошибку в tonumber (https://forum.quik.ru/messages/forum10/message57110/topic5823/#message57110), которая, скорее всего, подтверждает вышенаписанное.
 
Цитата
VPM написал:
Получается что сопрограммы долой?
   Про сопрограммы я не писал ничего плохого.
 
Цитата
TGB написал:
Про сопрограммы я не писал ничего плохого.
Спасибо
 
Цитата
Игорь М написал:
В фрейморке HackTrade так было написано не из-за надежности, а из-за отсутствия побитовых операций в Lua52 на тот момент, они только в 2015 году появились в Lua53.
У Вас есть опыт работы с фрейморк HackTrade, если есть может поделитесь на что обратить внимание?
Переписываю свой рабочий вариант встраиваю HackTrade, подкупает модульность, ну и конечно умная заявка.
 
Этот код - это просто демонстрация работы с ордерами как объектами через колбеки и обработка их через корутины. Также есть получение данных ТТТ и данных с графиков. Все.
Сказать что это код для работы можно с очень большой натяжкой. Элементарно - выключил скрипт, все данные потерял. Надо дописывать хранение данных между запусками.
Также пропустил колбек - ордер не будет в актуальном состоянии. Ну и другие вещи - обрывы связи, ожидание получения данных, смена торговой сессии, суток, ошибки чтения данных с графиков и т.д.

Так что как модель, пример - ок. Но оставлять его без присмотра - это надо быть смелым.
 
Цитата
Nikolay написал:
Элементарно - выключил скрипт, все данные потерял. Надо дописывать хранение данных между запусками.
Да это нужно доделать!
Цитата
Nikolay написал:
Также пропустил колбек - ордер не будет в актуальном состоянии.
Там получение через два колбека.

1) OnTransReply активирует получение ordernum:

if trans_reply.status == 3 then
     executor.order.number = trans_reply.ordernum
   else
     executor.order = nil
   end

и 2) OnOrder уже контролирует исполнение заявки:

Нет заказа, если он был выполнен немедленно!
 if executor ~= nil and executor.order ~= nil then
   executor.order.filled = order.qty - order.balance
   if (order.flags % 2) == 0 then --Заявка снята. Если флаг не установлен и значение бита «0» равно «0», то заявка исполнена
     executor.order.active = false
   end
 end
Намой взгляд на оборот более надежно.
Цитата
Nikolay написал:
Ну и другие вещи - обрывы связи, ожидание получения данных, смена торговой сессии, суток, ошибки чтения данных с графиков и т.д.
Это со старых беру.
Цитата
Nikolay написал:
Но оставлять его без присмотра - это надо быть смелым.
До самостоятельности пока далековато.
Я его тоже раньше видел, но тогда показался сложным в написании, а сейчас зашел на раз, да еще закрыл затычки при установлении момент наступления события.

Нет автор большой молодец!
 
Для расчета количества в заявке при выставлении я использую стратегии ММ обычно это optF фракция,
а здесь посчитал и забыл! :smile:  
 
Цитата
VPM написал:
Там получение через два колбека.
Это обычный вариант, если использовать колбеки. Только я писал о проблеме, если колбек пропущен по любой причине.
Страницы: Пред. 1 ... 6 7 8 9 10 ... 26 След.
Читают тему
Наверх