Let_it_go (Все сообщения пользователя)

Выбрать дату в календареВыбрать дату в календаре

Страницы: Пред. 1 2 3 4 5 6 7 8 След.
Связь двух виртуалок
 
Я не знаю что такое хост-система.
У меня две виртуалки, арендуемых у UltraVDS.
Связь двух виртуалок
 
Господа, вопрос не совсем по Луа. Но может быть кто то поможет.
У меня две виртуалка, на них установлена Windows Server 2003
На одной виртуалке стоят расчётные роботы, которые "готовят" файлики с параметрами.
На второй виртуалке стоит робот, который торгует. Он должен прочитать файлик с параметрами, лежащий на первой виртуалке, например с помощью функции dofile.
Как это сделать? Папку с файлом на первой виртуалке нужно сделать общей.
Я не умею соединять две виртуалки между собой.  
Спасибо заранее, если кто то знает.
Очищение памяти
 
collectgarbage()  решило проблему
теперь память очищается
Очищение памяти
 
Уточнение.
Выключение скрипта с помощью кнопки Остановить освобождает память.
Но если он останавливается по причине выполнения всех задач (нет вечного цикла while is run do и при этом закончилась функция main), то память не освобождается.
Очищение памяти
 
Господа, прошу подсказать.
Мои скрипты работают на луа. Я объединяю данные в огромную таблицу.
Вот образец данных:

Таких файлов десятки.
Я их склеиваю в одну большую таблицу с помощью функции:
Код
function tableMerge(table1, table2)
    for k,v in pairs(table2) do
   --deceleration()
      table.insert(table1,v)
      --проверим качество данных в таблице. Нет ли разрывов в записях.
   
      -- if v.stime-(remember_prev_time or v.stime)>100 then
         -- mm("в таблице дырка "..v.stime.." "..v.bid)
      -- end
      remember_prev_time=v.stime
    end
   remember_prev_time=nil
    return table1
end 
В итоге получается огромная таблица, которая сильно забивает память.
---
Вот как это выглядит на виртуалке.

А теперь мой вопрос.
в конце работы скрипта я УБИВАЮ эту гигантскую таблицу с помощью строчки
t_big=nil
Надеюсь, что при этом будет освобождена память.
Но этого не происходит.
Более того. Остановка скрипта не освобождает память.
Она освобождается только с выключением КВИКа
подскажите как освобождать память силами самого скрипта.
Спасибо.
---
П.С. Я знаю, что мой подход сам по себе не совершенен. Иду по пути переноса громоздких функций в dll. Но в силу слабеньких мозгов мне ещё далеко до этого. Так что пока работаю в рамках Луа.
пример dll
 
Сначала он ругался на отсутствие lua.h и других. Я их добавил через "Дополнительные каталоги включаемых файлов".
пример dll
 
Suntor
пытаюсь запусить ваш код dll в Visual Studio 2017 Community
Такая ошибка возникает при нажатии на "собрать решение".
Спасибо за помощь.  
not enough memory
 
Нашёл на просторах интернета рецепт как избегать ошибки луа not enough memory
описание
https://www.freelists.org/post/luajit/Extending-LuaJITs-memory-limit-to-4Gbytes
файлы
https://github.com/Neopallium/mmap_lowmem
Я неплохо знаю английский, но тут нашла коса на камень. Если не трудно, подскажите пожалуйста как применить эту рекомендацию и не навредит ли это чему-нибудь.
пример dll
 
Visual Studio C++ очень тяжёлый.
JetBrains CLIon подойдёт?
---
В Code Blocks можно выбирать разные компиляторы. Разве это не то что нужно?
пример dll
 
rinat
Цитата
возможно ему dll в таком виде и не нужно ... :)
кто сказал, что нужно всё тащить в луа-машину?
может брать данные, юзать их снаружи и выполнять как внешнюю транзакцию:
- модульная масштабируемая и кастомизирумая структура, ключевое слово - структура
- разделение на дата-екзекушн -более, чем логично
- исключение gui - как в принципе самой тормозной и ненадежной части
- перспектива на прямое/другое подключение результата усилий
уточните пожалуйста о чём речь.
Вы имеете в виду, что не покидая языка Луа, можно по особому написать код (на Луа), чтобы он был быстрым?
что значит "брать данные, юзать их снаружи и выполнять как внешнюю транзакцию "?
пример dll
 
Я качал эти файлы с сайта lua.org и кидал в папку где лежит моя программа для Си++.
CodeBlocks называется.

Судя по вашим словам их можно было не кидать в эту папку, а подключить как то иначе?
пример dll
 
разобрался.
это берётся в файлах наподобие этого
https://www.lua.org/source/5.1/lua.h.html
пример dll
 
Дошли руки разобраться в этом. Я попутно уже пару недель учу Си++ на уровне элементарных вещей.
При запуске кода программа спотыкается на этом месте:


словно бы у меня не подключены библиотеки.
Стандартная луа у меня установлена:
Заказ ленты всех сделок
 
Добрый день.
Не могу сообразить как мне получать обезличенные сделки без открытия таблицы обезличенных сделок.
Здесь где-то писали, что это можно делать через заказ тикового графика INTERVAL_TICK
Но мне нужны параметры обезличенных сделок, такие как Купля-Продажа.
Как это реализовать через заказ тикового графика?
пример dll
 
Господа, я с горем пополам выучил Луа. Но его возможностей мне уже не хватает, так как накапливаю большие объёмы данных и обрабатываю их. Теперь начал с горем пополам учить С++.
Не могу понять как написать простейший dll-файл под КВИК. Например, файл принимает данные текущей таблицы по инструменту SBER (колбек OnParam). Подскажите пожалуйста. Премного благодарен. Прошу простить за тупенькие вопросы.
Lua+Golang
 
Спасибо за ответ. Я скорее всего так и поступлю.
Какой язык лучше использовать? В моём случае это равносильно вопросу "какой язык учить". Чистый Си или Си++?
Задача будет такая: получение данных из квика и перебор их брутфорсом. Скорость обработки должна быть максимальной.
Lua+Golang
 
Друг посоветовал учить язык Golang. Мой тестер стратегии на Луа просчитывает массив данных за 7 часов. Golang это сделает за час.
Посоветуйте пожалуйста как из скрипта Луа запускать файл с кодом .go
Можно ли это делать через dofile?
Или сделать третий файл с флагом вкл/выкл, который будет читаться скриптом на go?
Тормозит КВИК
 
Добрый день.
У меня при сохранении настроек выставлена опция

В этом состоянии КВИК работал много месяцев.
В КВИКе запущены роботы. Включена лента обезличенных сделок по 1 инструменту Си.
Сегодня заметил, что КВИК тормозит. Начал думать из-за чего.
Увидел, что файл info.log достиг 80 мегабайт. Файл curr_data.log около 10 мегабайт.
Удалил все .dat файлы, удалил info.log и curr_data.log
Запустил чистенький КВИК.
Быстро файл info.log набрал опять под 100 мегабайт.
Торможение никуда не делось. Переключение между вкладками происходит с подвисанием на 3-10 секунд. То есть каждая манипуляция в КВИКе сопровождается дикими торможениями.
Как закрыть файл?
 
Suntor,
эта проблема появилась только сейчас, когда я перестал делать flush на каждой записи. До этого я несколько недель подряд записывал каждый день без перерыва и такой проблемы не было. Она абсолютно новая.
Вызываю я функцию так:
Как закрыть файл?
 
то есть мой метод не сработал. flush раз в 100 записей не помог.
Как закрыть файл?
 
Вот ещё один случай. Что характерно, снова перед закрытием сессии. Почти в то же время.
Как закрыть файл?
 
Получаю данные колбеком OnParam. В него вставлена обсуждаемая функция.
Как закрыть файл?
 
Выключил flush.
Почему-то на всех сегодняшних файлах стал появляться одинаковый глюк: вот такое искажение:

неадекватная (неполная строчка). Плюс пропуск нескольких секунд. До ошибки время 184444, после ошибки 184449. Может быть я в это время его включал-выключал, но я увы не помню этот момент. Днём на 1 из файлов было то же самое. Раньше, когда flush работал, такого не было. Видоизменил функцию. Добавил в неё flush 1 раз в 100 записей по данной бумаге:
Код
count[paper]=(count[paper] or 0)+1
   if count[paper]==100 then
      rn[paper].handler:flush()
      count[paper]=0
   end
Как закрыть файл?
 
Спасибо, друзья. Проясняется, хотя мне очень тяжело с этим разбираться. Не то образование...
Вот текущая редакция функции, которая пишет слепки стакана. Триместр сменился, если путь поменялся. В этом случае закрываем старый файл, открываем новый.
Как закрыть файл?
 
Suntor
если я уберу flush при каждой записи, не появятся ли чрезмерные риски того, что какая-то часть данных не запишется?
Ну например я принудительно остановил скрипт.
Ведь в этом случае какие-то строчки потеряются? Или не потеряются?
Как закрыть файл?
 
Цитата
Алексей написал:
Таблица дескрипторов файлов (rn) у Вас - глобальная. Где-то вне функции rec_big_data Ваш скрипт, судя по всему, в нужный момент понимает, что нужно сменить номер триместра. Что Вам мешает в этот момент просто позакрывать все файлы, зная их дескрипторы из таблицы rn?
Добавил в функцию переменную files_qty - это количество бумаг, которые пишутся. Если размер таблицы rn больше files_qty, значит сменился триместр и надо закрывать старые файлы. Очевиден недостаток: при смене триместра функция один раз закроет хороший файл - файл новенького триместра. Потом ей придётся его переоткрывать.

Спасибо за комментарии. Они очень помогают.
Как закрыть файл?
 
Как мне отлавливать средствами Луа, Windows или специальных программ открытые в данный момент луа-файлы?
В Windows server 2003 эта функция не работает и не лечится. Я искал советы по данной проблеме, но они не сработали.
Как закрыть файл?
 
Спасибо за ответы.
Разрешите задать ещё вопрос.
Я открыл файл с помощью io.open.
После этого я остановил скрипт.
Файл останется открытым, верно?
Если да, то следующий вопрос.
Я запустил скрипт и снова открыл этот же файл с помощью io.open. Теперь у меня два открытых файла?
---
И ещё один вопрос. Как мне принудительно закрыть файл, имея не дескриптор, а только путь file_path?
--

Спасибо.
Как закрыть файл?
 
Спасибо. подумаю
И ещё вопрос.
Я открываю много файлов с помощью dofile
Файлы имеют вид

Файлы  огромных размеров.
После исполнения dofile эти файлы остаются открытыми? Надо ли заботиться о том чтобы их закрывать?
Как закрыть файл?
 
Господа, прошу подсказать.
Этой функцией я записываю текущую маркет дату
Код
function rec_big_data(file_path,value)         
if rn==nil then rn={} end         
   if file_open==nil then file_open={} end
      if file_open[file_path]==nil then
         rn[file_path]=io.open(file_path,"a+")
         file_open[file_path]=true
         mm("QL:open file "..file_path)
      end
      rn[file_path]:write(value.."\n")
      rn[file_path]:flush()
end   
file_path меняется три раза в день (в его название включён тикер, текущая дата и номер триместра: утренняя сессия 1, дневная сессия 2, вечерняя сессия 3).
вот пример historyGDM8 20180511-2.lua
В функции нет закрытия файла, потому что файл становится огромным, и скрипту тяжело его постоянно открывать-закрывать.
Робот пишет большое количество инструментов много дней подряд. Файлы остаются открытыми. Я замечаю, что виртуалка начинает тормозить. Думаю, что это из-за незакрытых файлов.
Подскажите пожалуйста как грамотно закрывать файл в конце триместра (при переходе на новый файл) с помощью close()?
Не могу сообразить, что в неё писать.
Спасибо.
гибкий цикл
 
Спасибо!
Очень полезный ответ!
гибкий цикл
 
Господа, помогите пожалуйста советом. Хочу написать гибкий цикл, в котором можно возвращаться на шаг назад, и перебирать данные с разным шагом.
Постарался описать это здесь:
Код
iterations=20
start=0
finish=100
step=(finish-start)/iterations
for i=start,finish,step do
--делаем расчёт.
   if profit>0 then
      --возвращаемся на step назад
      --iterations=100 (шаг становится более мелким)
   end
end
то есть если я при переборе большого массива данных (слепки стакана) наткнулся на прибыльный участок, то я хочу проанализировать его тщательно, с более мелким шагом.
А потом, когда снова пошли убыточные участки, хочу вернуться на прежний шаг - обычный.  
not enough memory
 
Мда..
переписал код. Теперь оперативная память не заполняется, но продолжительность расчёта возросла невероятно.
Перебираю данные по Си за 3 дня.
Раньше на 1 итерацию (перебор всех данных за 3 дня) уходила 1 секунда, теперь 8.
У меня 10 фьючерсов, и в каждом переборе брут форсом 100 итераций.
--
Моя цель была давать ему на обработку десятки и сотни дней...  
not enough memory
 
Друзья, как вы можете прокомментировать такую информацию с сайта Луа про функцию loadstring
Цитата
The loadstring function is powerful; it must be used with care. It is also an expensive function (when compared to its alternatives) and may result in incomprehensible code. Before you use it, make sure that there is no simpler way to solve the problem at hand.
В нынешнем варианте мой скрипт бегает по полям гигантской таблицы, а теперь будет бегать по строчкам файла.
Не получится ли чрезмерная нагрузка на процессор, замедление работы и т.д.
Торгующий робот установлен там же где и считающий, поэтому для меня такие вещи важны.
not enough memory
 
Разобрался
Код
stroka=string.gsub (stroka, "},", "}")
такая строчка решила вопрос с запятой.
not enough memory
 
Код
local t = loadstring("local t = "..line.." return t")()
Спасибо. Получилось.
А как обрезать запятую в конце?
Код
{data=20180430,stime=102001,stime_ms=215575.842,bid=14668,offer=14674},
пока я не понял в чём дело, запятая давала ошибку nil
not enough memory
 
Suntor,
запустил первоначальный вариант кода на боевой виртуалке, на которой возникает проблема not enough memory. (подвисание квика было не на ней, а на ноутбуке).

not enough memory
 
Николай Камынин, пытаюсь сделать по вашему совету. Читать новую строчку в файле и сразу обрабатывать логику.
Столкнулся с непонятным моментом.
---
Данные хранятся в файле в таком виде:


Ранее я с помощью скрипта рисовал в начале t={
а в конце
}
и исполнял этот файл с помощью dofile() Получал таблицу, а потом объединял её с другими днями-таблицами.
---
Теперь, чтобы не забивать оперативку, я делаю так:


Но прочтённые строки не воспринимаются как таблицы. Это стринг.
Посоветуйте пожалуйста как быть.
Спасибо.

Suntor, чуть позже отпишусь по вашему скрипту.
not enough memory
 
П.С. Памяти как оперативной, так и на диске C хватает, это точно.
not enough memory
 
Suntor
Ваш код сразу вешает КВИК, и его приходится принудительно закрывать. так что результата никакого нет.

Николай Камынин,
collectgarbage()  надо ставить в таком виде как вы написали или в скобках ещё какие-то аргументы?
---
И ещё.
Господа, вопрос немного другой. Мне очень долго будет оптимизировать код по совету Николая "грузите в память лишь то что обрабатываете". Я плохой кодер, а код в нынешнем виде работает и справляется с анализом 5-7 дней (его выбивает когда я хочу прочесать больше данных)
Мой вопрос следующий: можно ли обойти это ограничение Луа "not enough memory"? Или оно непобедимо?
not enough memory
 
Робот работает на виртуалке Windows Server 2003
Я обрабатываю луа-скриптом таблицу с гигантским количеством полей (запись слепков стакана за 10 дней и более).
Робот при добавлении очередного дня-таблицы со слепками в общую огромную таблицу вылетает с ошибкой
not enough memory, хотя оперативной памяти хватает.
Я добавлял на виртуалку ещё 1 ГБ опер.памяти, чтобы наверняка хватало, но всё равно скрипт вылетает с этой ошибкой.
Гуглил эту ошибку в интернете, нашёл такую ветку с обсуждением этой темы:
https://github.com/minetest/minetest/issues/2988
Нашёл там такую фразу Lua has no problem consuming 2GiB, but LuaJIT bails at 1GiB.
Вот:

Я, увы, не сильно понял в чём дело и что такое LuaJIT. Но у меня вылетает скрипт как раз на 1 гигабайте оперативки.
Прошу подсказать решение проблемы.
Также я не понял что это за код, который советует использовать комментатор. Он превращает числа в строки? Но как я это могу применить у себя?
Заранее спасибо.
мелкие числа
 
Добрый день.
У меня в файл записываются мелкие числа в таком виде:
EuM8=7.5599999999996e-005. Это одно из полей таблицы. В дальнейшем робот обращается к этой таблице и не может прочитать это значение.

Вопрос 1.
Как записывать мелкие числа в обычном виде?

Вопрос 2.
Если пробовать работать с этим числом (кривым), то как его читать?

Спасибо
Снятая заявка
 
Добрый день.
Пользуюсь колбеком OnTransReply
При снятии заявки приходит такая строчка:
04/12/18 13:07:20,267 price=0;client_code=.....;balance=4;time=130720;status=3;qty=0;trans_id=930631256;account=;exchange_code=;quantity=0;firm_id=.........;flags=262145;result_msg=(210) Снято заявок: 1. Снято количество: 4. Нельзя снимать: 0.;brokerref=;order_num=0;R=930631256;server_trans_id=359;uid=.........;ordernum=0;

Как эту запись не перепутать с отчётом о зарегистрированной заявке?
В вышеназванной строчке какой признак говорит о том, что пришло снятие?
price=0, qty=0 или другие?
Или достоверным является только result_msg=(210) Снято заявок: 1. Снято количество: 4. Нельзя снимать: 0
Таблица обезличенных сделок
 
Здравствуйте, Сергей.
Спасибо за ответ. В вашей фразе не понятно:
Цитата
там в OnAllTrade или через getItem получаете данные по обезличенным сделкам
Какая связь между CreateDataSource с параметром INTERVAL_TICK и колбеком OnAllTrade ?
Таблица обезличенных сделок
 
Мне нужны параметры открытый интерес и Купля или Продажа.
Они есть в таблице всех сделок.
На графике с помощью вашего метода их ведь нельзя получить.
удаление элементов таблицы
 
прошу подсказать.
Я считаю сумму проторгованных контрактов из таблицы всех сделок. Мне интересны только сделки за последние 60 секунд.
В только что написанном коде следующий алгоритм.
Он внутри колбека OnAllTrade
Код
      sum_vol=0
      for n,w in pairs (simple_volume) do
         vremya_diff=stime-simple_volume[n].time_time
         if vremya_diff>60 then
            simple_volume[n]=nil
         else
            sum_vol=(sum_vol or 0)+simple_volume[n].deal
         end
      end   
simple_volume-это глобальная таблица. В ней есть микро-таблицы, посвящённые каждой сделке.
В каждой из микро-таблиц есть поля time_time(время)  и deal (объём)

Моё сомнение связано со строкой
simple_volume[n]=nil

Я делаю перебор таблицы, и в ходе этого перебора удаляю элемент.
Можно ли так делать, и не собьётся ли итоговый подсчёт суммы контрактов?
Звук на Луа
 
Добрый день.
Хочу настроить робота, чтобы в момент возникновения сигнала он проигрывал звуки.
Посоветуйте аудио библиотеки на Луа
Пароль инвестора
 
Добрый день.
Есть ли в КВИКе такое явление: инвесторские ключи или инвесторский пароль?
Я хочу дать КВИК человеку, чтобы он смотрел счёт, видел рынок, но не мог совершать сделки/отправлять заявки. То есть просмотровый режим
Таблица обезличенных сделок
 
Подскажите пожалуйста. Немного запутался.
Нужно ли мне держать открытой таблицу обезличенных сделок при работе с коллбеком OnAllTrade()?
Или достаточно выставить птички в заказываемых инструментах?
Спасибо.
Открытый интерес. Пропуски
 
Прошу подсказать, как вылечить эту проблему.
График Открытого интереса выглядит так (количество открытых позиций):
Пропуски свечей за сегодня за то время, пока КВИК был выключен.
Брокер Открытие.

---
Получение пропущенных данных включено:

---
Кнопка Обновить нажималась, даже пришло сообщение что "Получены пропущенные данные". Но это не так. Дырки на графике остались.
Страницы: Пред. 1 2 3 4 5 6 7 8 След.
Наверх