Как получить 2 целых числа отдельно до и после точки
Пользователь
Сообщений: Регистрация: 30.01.2015
19.07.2022 09:37:12
с учетом преобразования числа в строку получим следующее
Код
local x=123.456
nkarray.start()
local a,b=math.modf (x)
local u=0.1*nkarray.stop()
print(a,b,u)
nkarray.start()
local s=tostring(x);
local a,b=string.match(s,"(%d+)%.?(%d*)")
local u=0.1*nkarray.stop()
print(a,b,u)
nkarray.start()
local s=tostring(x);
x1,x2,a,b=string.find(s,"(%d+)%.?(%d*)")
--local a=string.sub(x,1,m-1);
--local b=string.sub(x,m+1);
local u=0.1*nkarray.stop()
print(a,b,u)
nkarray.start()
local s=tostring(x);
local m=string.find(s,".",1,true)
local a=string.sub(s,1,m-1);
local b=string.sub(s,m+1);
local u=0.1*nkarray.stop()
print(a,b,u)
123 0.456 0.6 123 456 8.5 123 456 1.9 123 456 2.1
Как получить 2 целых числа отдельно до и после точки
Пользователь
Сообщений: Регистрация: 30.01.2015
19.07.2022 09:32:09
Цитата
написал:
Цитата
написал: Не заметил, что целое. Если известен scale, то умножить на 10 в степени.
Или можно воспользоваться магией динамической
tonumber(tostring(3.12459):match("%.(%d+)")) or 0
Почему не сделать просто? a,b=string.match(123.456,"(%d+)%.?(%d*)")
Впрочем, интересно, а в курсе ли уважаемый топикстартер, что 1.2 и 1.02 дадут одинаковый результат?
еще один вариант и в итоге все варианты : -----------
Код
local x=123.456
local s=tostring(x);
nkarray.start()
local a,b=math.modf (x)
local u=0.1*nkarray.stop()
print(a,b,u)
nkarray.start()
local a,b=string.match(s,"(%d+)%.?(%d*)")
local u=0.1*nkarray.stop()
print(a,b,u)
nkarray.start()
x1,x2,a,b=string.find(s,"(%d+)%.?(%d*)")
--local a=string.sub(x,1,m-1);
--local b=string.sub(x,m+1);
local u=0.1*nkarray.stop()
print(a,b,u)
nkarray.start()
local m=string.find(s,".",1,true)
local a=string.sub(s,1,m-1);
local b=string.sub(s,m+1);
local u=0.1*nkarray.stop()
print(a,b,u)
Ошибка при расчёте стохастика, Выдаёт ошибку при обращении к SO.lua
Пользователь
Сообщений: Регистрация: 30.01.2015
19.07.2022 09:18:21
в 311 строке SO.lua
Ошибка при расчёте стохастика, Выдаёт ошибку при обращении к SO.lua
Пользователь
Сообщений: Регистрация: 30.01.2015
19.07.2022 09:17:49
Цитата
Евгений написал: Здравствуйте. При попытке расчёта стохастика квик выдаёт ошибку: SO.lua:311:attempt to call a number value (global 'C'). Подскажите, пожалуйста, что может быть.
Возможно неправильно указали параметр. покажите как вызываете.
Как получить 2 целых числа отдельно до и после точки
Пользователь
Сообщений: Регистрация: 30.01.2015
19.07.2022 09:16:38
local x=123.456 nkarray.start() local a,b=math.modf (x) local u=0.1*nkarray.stop() print(a,b,u)
Как получить 2 целых числа отдельно до и после точки
Пользователь
Сообщений: Регистрация: 30.01.2015
19.07.2022 09:15:30
если надо целую и дробную часть, то так: local x=123.456 local a,b=math.modf (x) local u=0.1*nkarray.stop() print(a,b,u) ------------------------- результат (мкс): 123 0.456 0.6 ================ в 12 раз быстрее, чем с match и в 3 раза быстрее чем с find
Как получить 2 целых числа отдельно до и после точки
Пользователь
Сообщений: Регистрация: 30.01.2015
19.07.2022 09:11:49
Цитата
написал:
Цитата
написал: Не заметил, что целое. Если известен scale, то умножить на 10 в степени.
Или можно воспользоваться магией динамической
tonumber(tostring(3.12459):match("%.(%d+)")) or 0
Почему не сделать просто? a,b=string.match(123.456,"(%d+)%.?(%d*)")
Впрочем, интересно, а в курсе ли уважаемый топикстартер, что 1.2 и 1.02 дадут одинаковый результат?
если надо быстрее, то так: x1,x2,a,b=string.find(x,"(%d+)%.?(%d*)") ================== сравним: local x=123.456 nkarray.start() local a,b=string.match(x,"(%d+)%.?(%d*)") local u=0.1* nkarray.stop() print(a,b,u)
nkarray.start() x1,x2,a,b=string.find(x,"(%d+)%.?(%d*)") local u=0.1*nkarray.stop() print(a,b,u) =================== результат (мкс): 123 456 8.6 123 456 1.8 ================== вариант с find в 4 раза быстрее.
Неправильный объем продажи
Пользователь
Сообщений: Регистрация: 30.01.2015
18.07.2022 19:13:57
кроме того, заявка может быть исполнена по разным ценам, если первая встречная имеет меньший объем, то будет и вторая встречная.
написал: На момент выставления заявки цена была -одна, а когда выставилась Ваша заявка рынок уже ушел покурить и цена фактическая другая.
Вы невнимательны.
1. Заявка выставлена по рыночной цене и поэтому удовлетворяется вне очереди, а при наличии ликвидности (это высоколиквидный GAZP) - мгновенно. 2. От начала редактирования заявки, до выставления не было такого большого перепада цен, я проверил по ТОС
Цитата
написал: Вы что хотите?
Нулевой объем в ТЗ до момента, пока заявка не начнет удовлетвлряться, а по завершении сделки - реальный объем из таблицы сделок
Объем в заявке расчитывается по цене выставляемой заявки если заявка отправлена по планке то и объем в деньгах будет по планке
что такое -планка? Объем в рыночной заявке рассчитывается по лучшей цене в последнем полученном стакане перед расчетом, а объем в сделке рассчитывается по цене встречной заявки в которую ударилась ваша заявка.
Как получить 2 целых числа отдельно до и после точки
Пользователь
Сообщений: Регистрация: 30.01.2015
18.07.2022 19:08:14
из строки
Как получить 2 целых числа отдельно до и после точки
Пользователь
Сообщений: Регистрация: 30.01.2015
18.07.2022 19:07:56
если "0." мешают, просто удалите 2 первых символа из стори
Как получить 2 целых числа отдельно до и после точки
Пользователь
Сообщений: Регистрация: 30.01.2015
18.07.2022 19:06:06
например есть число x=1.3 z,e=math.modf (x) print(z,e) ------------------ результат: 1 0.3
Тормозит квик при установке сделок на графике индикатора (случайно)
Пользователь
Сообщений: Регистрация: 30.01.2015
18.07.2022 18:53:41
Цитата
Евгений написал: в любом случае это не правильно делать привязку сделок к индикаторам, надо ее убрать и оставить только к цене
Вы просто измерьте время выполнения вашего скрипта, либо поставьте блоковый комментарий на весь код скрипта и будет понятно, влияет ли он.
написал: На момент выставления заявки цена была -одна, а когда выставилась Ваша заявка рынок уже ушел покурить и цена фактическая другая.
Вы невнимательны.
1. Заявка выставлена по рыночной цене и поэтому удовлетворяется вне очереди, а при наличии ликвидности (это высоколиквидный GAZP) - мгновенно. 2. От начала редактирования заявки, до выставления не было такого большого перепада цен, я проверил по ТОС
Цитата
написал: Вы что хотите?
Нулевой объем в ТЗ до момента, пока заявка не начнет удовлетвлряться, а по завершении сделки - реальный объем из таблицы сделок
перед выставлением заявки брокер оценивает достаточность у вас средств , очевидно эту оценку Вы и видите. Подача Вами заявки никаких обязательств для брокера не создает. Вы можете просто не обращать на это внимание.
Неправильный объем продажи
Пользователь
Сообщений: Регистрация: 30.01.2015
18.07.2022 10:56:45
Цитата
NoneB написал: Продал по рыночной цене. В таблице заявок указан неправильный объем сделки в деньгах, а таблице сделок правильный quik 9.4.0
На момент выставления заявки цена была -одна, а когда выставилась Ваша заявка рынок уже ушел покурить и цена фактическая другая. Вы что хотите?
Тормозит квик при установке сделок на графике индикатора (случайно)
Пользователь
Сообщений: Регистрация: 30.01.2015
17.07.2022 15:16:34
Цитата
Евгений написал: Все равно не пойму как индикатор связан с этими метками. Надо копать в функции квика а не в индикаторе, так как индикатор работает прекрасно и нигде ничего не тормозит. Ну и не вижу смысла в привязке к индикаторам этих меток, она просто не нужна
Если выставление меток и работа индикатора производится в одном потоке, то эти действия будут выполняться последовательно. Т е пока индикатор не закончит свои вычисления, метки выставляться не будут. Один поток -одно ядро - все исполняется последовательно.
Тормозит квик при установке сделок на графике индикатора (случайно)
Пользователь
Сообщений: Регистрация: 30.01.2015
16.07.2022 22:07:23
Цитата
Евгений написал: на ваших индикаторах нет (все не проверял), на моем есть. Все равно это не должно быть связано с индикатором. Скорее всего в квике стоит цикл который сканирует таблицу сделок, и если например много графиков с одним и тем же индикатором, например 20 , то пока все эти 20 раз этот цикл не отсканирует таблицу сделок графики дальше не поедут. Это у вас как то по особенному эта функция запрограммирована. Так как мой индикатор, совершенно нормальный.
И вобще предлагаю удалить эту привязку к индикаторам, так как может быть включена случайно к двум и более.
Например и к цене и к индикатору. Или сделать блокировку на другие привязки если уже где то стоит. Вот реально не понятно зачем эта функция. Если бы была привязка к разным счетам еще можно понять, но к индикаторам то зачем ?
Предположу, что с индикатором это может быть связано с вызовом функции OnCalculate(i) Это примерно так же как вызов колбеков в скриптах. Вы тормозите в скрипте индикатора, а он тормозит основной поток терминала. ----------------- проверить это очень просто. Закомментируйте все в индикаторе от OnCalculate(i) до оператора return и будет Вам счастье.
Большие колебания требуемой оперативной памяти.
Пользователь
Сообщений: Регистрация: 30.01.2015
16.07.2022 06:29:35
Цитата
Сергей написал: Похоже, что от того активны окна или нет объем памяти не зависит. Кроме того, если менять на графиках тайм фреймы с дневного на пятиминутный, то занятая память увеличивается с 500 Мбайт до больше чем 3000 Мбайт, однако если снова переключиться на дневные графики, то объем памяти хоть и уменьшается, но не возвращается к 500 Мбайтам, а становится равным примерно 1100 Мбайт. Видимо QUIK не может полностью освободить оперативную память даже если она ему не нужна, а жаль.
Очевидно у Вас накопился большой архив 5-ти минуток. Посмотрите дату начала графика на 5 минутном интервале. без накопления архива он будет примерно от мая 2022. Проще всего стереть все в папке архив и тогда будет вам счастье некоторое время. ------------------- На самом деле КВИК не предназначен для открытия много количества графиков и стаканов. Это программа изначально разрабатывалась лишь для подачи заявок брокеру. --------------------------------------- Телега - она тоже транспорт, но летать не может.
Почему у Quika - нет нормального полноценного API ?
Мне вот просто из любопытства интересно, почему разработчики Quik`а - не могут сделать нормальное полноценное API к своему (своему ли?) продукту ?? Чтобы можно было нормально и просто взаимодейстовать через единый интерфейс без всяких костылей типа: DDE, ODBC, QLUA, QPILE, trans2quik - какой б?ть шикарный выбор, аж глаза разбегаются.
Извините. :)
DDE,ODBC и QPILE, trans2quik сделали 20 лет назад. ------------------ VM Lua встроили 10 лет назад. ----------------------- Можете сами посчитать , когда сделают полноценный API. ------------------------------ "Вот только жить в эту пору прекрасную уж не придется.."
Денис написал: FileWrite:write("Порт = ",getPortfolioInfoEx("фмрма","аккаунт",2).all_assets, "\n") -- Полная стоимость
напишите так: FileWrite:write("Порт = "..tostring(getPortfolioInfoEx("фмрма","аккаунт",2).all_assets).. "\n") -- Полная стоимость
Какая функция читает ДОСКУ ОПЦИОНОВ ?
Пользователь
Сообщений: Регистрация: 30.01.2015
15.07.2022 13:14:04
Цитата
Alex написал: Какая функция читает ДОСКУ ОПЦИОНОВ ?
нет такой функции в луа.
Большие колебания требуемой оперативной памяти.
Пользователь
Сообщений: Регистрация: 30.01.2015
15.07.2022 13:12:22
Цитата
Сергей написал: Архив у меня большой. Со временем он только увеличивается. Все рекомендации здесь направлены на уменьшение требуемой оперативной памяти и никак не объясняют ее очень большие колебания. Ведь во время когда требуется 500 Мбайт памяти и во время когда требуется 3500 Мбайт памяти все настройки, архивы и другие файлы все те же.
возможно объем памяти при страте определяется числом активных окон на экране. Можно сделать следующий эксперимент. Сверните все окна с графиками и стаканы. Закройте квик нажав выход в меню система после этого откройте квик и посмотрите объем занимаемой памяти. потом активируйте свернутые окна и стаканы и смотрите занимаемую память.
Большие колебания требуемой оперативной памяти.
Пользователь
Сообщений: Регистрация: 30.01.2015
14.07.2022 15:19:42
Цитата
Сергей написал: Добрый день. Файл настроек не удалял. У меня десятки инструментов, графиков с индикаторами, вкладок, стаканов. Новая настройка с нуля это очень долгий и сложный процесс, а то, что в результате будет требоваться меньше памяти маловероятно. Если учесть, что информация из QUIK выводится в базу данных, то если сделать что-то немного не так, то можно повредить эту базу данных. Я ранее уже делал копию терминала и пытался установить Вашу версию программы. ФИНАМ при таком обновлении блокирует двух факторную аутентификацию, что они и подтвердили во время звонка в тех. поддержку. Кроме того, обычно новые версии программы требуют больше памяти, так как появляются новые возможности, если только специально не ставилась задача сократить потребление памяти. Мое предположение, что при входе в QUIK объем требуемой памяти зависит от размера памяти при предыдущем выходе не подтвердилось.
возможно, что у Вас большая история. проверить это можно так: сделайте архив папки "архив" , чтобы потом восстановить. удалите файлы из папки архив. после этого перезакажите данные. закройте квик через выход снова загрузите и посмотрите сколько потребуется памяти.
[BUG] Кривое автомастабирование на графиках с отрицательными ценами
Пользователь
Сообщений: Регистрация: 30.01.2015
13.07.2022 17:16:43
но ничего не обрезается.
[BUG] Кривое автомастабирование на графиках с отрицательными ценами
Пользователь
Сообщений: Регистрация: 30.01.2015
13.07.2022 17:15:47
На предыдущем графике где желтая стрелка, цены в виде черточек лежат на краю потому и не видно.
[BUG] Кривое автомастабирование на графиках с отрицательными ценами
написал: По поводу обрезания свечей при отрицательных значениях, демонстрируем поведение на Рис.2
Ну видно же, что минимумы свечей от 11 числа обрезаются (те, которые упираются в нижний край). Чтобы было наглядней я взял бары и увеличил масштаб (то же 11 число, время на скринах видно). Автомасшатирование: Скрытый текст Сравните с масштабированием вручную: Скрытый текст
Цитата
написал: можно понятным образом интерпретировать такое поведение - по инструменту отсутствует позиция и она принимается равной 0 и соответствующим образом считается цена приобретения - 0. Автомасштабирование же отрабатывает так, чтобы отображать этот нулевой уровень цены приобретения.
Весьма сомнительная версия. Откройте любой график с только положительными ценами и посмотрите будет ли там нулевой уровень цены при тех же настройках.
Потому и упирается, что это минимум т е край. А как по-вашему автоматически должно быть ?
[BUG] Кривое автомастабирование на графиках с отрицательными ценами
Пользователь
Сообщений: Регистрация: 30.01.2015
13.07.2022 07:20:43
а вот цены:
[BUG] Кривое автомастабирование на графиках с отрицательными ценами
Пользователь
Сообщений: Регистрация: 30.01.2015
13.07.2022 07:18:07
[BUG] Кривое автомастабирование на графиках с отрицательными ценами
Пользователь
Сообщений: Регистрация: 30.01.2015
13.07.2022 07:15:42
Цитата
Старатель написал: , это у вас в голове какой-то мусор.
Не надо зеркало винить. Вы читайте внимательно что написано на сайте: [img]data:image/png;base64, *[/img] Где Вы увидели отрицательные цены? Там же Вам по- русски написали- "Синтетический матчинг календарных спредов" -------------------- Что такое "спред" знаете?
Проблема с быстрым вводом/снятием заявки в стакане котировок., Клик по стакану не всегда реализует выставление заявки.
Пользователь
Сообщений: Регистрация: 30.01.2015
12.07.2022 17:47:35
стабильная версия 8.7 Остальное работает нормально лишь на демо.
Проблема с быстрым вводом/снятием заявки в стакане котировок., Клик по стакану не всегда реализует выставление заявки.
Пользователь
Сообщений: Регистрация: 30.01.2015
12.07.2022 17:46:38
Снесите нафиг 9.4 и установите 8.7. И будет Вам счастье.
[BUG] Кривое автомастабирование на графиках с отрицательными ценами
Пользователь
Сообщений: Регистрация: 30.01.2015
12.07.2022 17:43:20
Откуда у Вас отрицательные цены? С сервера по данному инструменту нет отрицательных цен. Полагаю у Вас какой-то мусор. Обновите данные.
LUA QUIK ОШИБКА
Пользователь
Сообщений: Регистрация: 30.01.2015
11.07.2022 19:24:03
Цитата
Евгений написал: Внимание эта функция возвращает таблицу
Функция TABLE getPortfolioInfoEx
Соответственно и получать значение нужно из таблицы
all_assets
STRING
Текущая оценка стоимости всех позиций клиента
in_assets
STRING
Вход. активы. Оценка собственных средств клиента до начала торгов.
TABLE cena = {"all_assets" = 58955,"in_assets" = 58255} - пример
local cena = cena["all_assets"] -- текущая оценка стоимости всех позиций клиента( не цена а оценка стоимости) цены позиций получать нужно из других таблиц
или так:
portfolio_value
STRING
Стоимость портфеля. Для клиентов типа «МД» возвращается значение для строк с максимальным сроком расчётов limit_kind
Стоимость портфеля
cena = getPortfolioInfoEx (firmid,client_code,limit_kind).portfolio_value;
написал: , А зачем Excel и vba? Почему не все на lua?
c VBA я знаком уже давно, некоторые вещи для меня проще делать там, лень переучиваться
езжу в город на телеге с кобылой уже давно, туда и обратно уходит дней пять, в некоторые места отхожие хожу пешком, для меня так проще. Покупать автомобиль - лень переучиваться .
QLua поддерживает работу с метатаблицами?, QLua полностью по функционалу соответствует Lua ?
Пользователь
Сообщений: Регистрация: 30.01.2015
10.07.2022 18:46:25
Цитата
Alexandr написал: Реализована ли в QLua работа с метатаблицами в полном объеме?
setmetatable ( u, mt )
QLua ничего для работы с мета таблицами не реализует ни в каком объеме. Она не про это. -------------------------- Все реализовано в VM (виртуальной машине) Lua, которую разработчики КВИК просто взяли и ничего даже не изучая и не изменяя, просто вставили в свою сборку терминала КВИК . ---------------------------------------- Поэтому вам и говорят, что это Lua версии 5.3 или 5.4. Т е идете на сайт разработчиков LUA и там смотрите на сишные функции виртуальной машины Lua и изучаете в каком объеме в VM Lua реализована работа с мета таблицами. Потом читаете документацию по луа, а не по QLUA, чтобы понять в каком объеме и что реализовано в VM LUA. ------------------------------ QLua - это библиотека функций написанных на си. Эти функции описаны в документации на QLUA. Эти функции позволяют вам (Нам) из скриптов написанных на луа или из функций написанных на СИ обращаться к возможностям терминала QUIK
Меняю Вашу торговую идею на мою автоматизированную торговую систему., Обмен опытом и знаниями
Пользователь
Сообщений: Регистрация: 30.01.2015
10.07.2022 18:29:56
Цитата
Константин написал: В моем случае доверительный интервал это все данные в системе сколько удалось накопить. (3 года)
Вы заблуждаетесь. Доверительный интервал это совершенно другое. ----------------- Если забыли статистику, то хотя бы в Вики посмотрели там сказано: ------------------------- Довери́тельный интерва́л — термин, используемый в при статистических параметров, более предпочтительной при небольшом объёме выборки, чем . Доверительным называют интервал, который покрывает неизвестный параметр с заданной надёжностью.
Доверительным называется интервал, в который попадают измеренные в эксперименте значения, соответствующие доверительной вероятности.
Метод доверительных интервалов разработал американский статистик , исходя из идей английского статистика .
-------------------------------------------
Если Вы действительно горшок называете "горшком", а вероятность "вероятностью", а не наоборот, то вы должны были в своей статье сделать вывод иначе, чем этот (цитата из Вашей статьи). "... поступило всего 10 сигналов на покупку от разных стратегий. У каждого из них вероятность колебалась от 0.4 до 0.6 (40-60%). Средняя вероятность например получилась 0,59 (59%). Следовательно поступившие сегодня сигналы на покупку с вероятностью 59 % сработают." ------------ Пусть "... поступило всего 10 сигналов на покупку от разных стратегий. У каждого из них вероятность колебалась от 0.4 до 0.6 (40-60%). - - непонятно, чтобы это значило - "вероятность колебалась" Средняя вероятность например получилась 0,59 (59%). --если вы считаете среднее состоятельной оценкой, то откуда вы взяли, что плотность вероятностей для этих сигналов симметрична. как минимум она несимметричная, а следовательно оценка ваша смещенная. В действительности Вы понятия не имеете какой закон распределения ваших сигналов, тогда среднее вообще ни о чем. ------------------------------- Следовательно поступившие сегодня сигналы на покупку с вероятностью 59 % сработают." --------------------- Но даже, если предположить что закон симметричный и среднее реально указывает на центр тяжести, и разброс 40 -60, то среднее 50% Допустим что разброс от среднего в 10% - это сигма, то с вероятностью 0.997, доверительный интервал будет 3 сигма. -------------------- В результате получился такой вывод: При разбросе 40-60 среднее значение успешности сделки по этому сигналу составляет 50% с доверительным интервалом от 20% до 80%. -------------------------------- Т е результат успеха такой же , как , если бы Вы просто подбрасывали монету и "Орешка" - купил. " Орел" - продал, а если на ребро - то пьем кофе. ---------------------- Примерно так.
bshl / bshr metamethods
Пользователь
Сообщений: Регистрация: 30.01.2015
10.07.2022 07:54:20
Скажу Вам по секрету, лучше читать не на заборе, особенно , если там написано русскими словами, как правило, те кто пишет на русском списывают это с англоязычных сайтов и с ошибками, а начинать читать с первоисточника. ------------------- Например , в Вашем случае, смотрим документацию на Lua 5.3 (5.4)
Скрытый текст
A detailed list of events controlled by metatables is given next. Each operation is identified by its corresponding key.
__add: the addition (+) operation. If any operand for an addition is not a number (nor a string coercible to a number), Lua will try to call a metamethod. First, Lua will check the first operand (even if it is valid). If that operand does not define a metamethod for __add, then Lua will check the second operand. If Lua can find a metamethod, it calls the metamethod with the two operands as arguments, and the result of the call (adjusted to one value) is the result of the operation. Otherwise, it raises an error.
__sub: the subtraction (-) operation. Behavior similar to the addition operation.
__mul: the multiplication (*) operation. Behavior similar to the addition operation.
__div: the division (/) operation. Behavior similar to the addition operation.
__mod: the modulo (%) operation. Behavior similar to the addition operation.
__pow: the exponentiation (^) operation. Behavior similar to the addition operation.
__unm: the negation (unary -) operation. Behavior similar to the addition operation.
__idiv: the floor division (//) operation. Behavior similar to the addition operation.
__band: the bitwise AND (&) operation. Behavior similar to the addition operation, except that Lua will try a metamethod if any operand is neither an integer nor a value coercible to an integer (see ).
__bor: the bitwise OR (|) operation. Behavior similar to the bitwise AND operation.
__bxor: the bitwise exclusive OR (binary ~) operation. Behavior similar to the bitwise AND operation.
__bnot: the bitwise NOT (unary ~) operation. Behavior similar to the bitwise AND operation.
__shl: the bitwise left shift (<<) operation. Behavior similar to the bitwise AND operation.
__shr: the bitwise right shift (>>) operation. Behavior similar to the bitwise AND operation.
__concat: the concatenation (..) operation. Behavior similar to the addition operation, except that Lua will try a metamethod if any operand is neither a string nor a number (which is always coercible to a string).
__len: the length (#) operation. If the object is not a string, Lua will try its metamethod. If there is a metamethod, Lua calls it with the object as argument, and the result of the call (always adjusted to one value) is the result of the operation. If there is no metamethod but the object is a table, then Lua uses the table length operation (see ). Otherwise, Lua raises an error.
__eq: the equal (==) operation. Behavior similar to the addition operation, except that Lua will try a metamethod only when the values being compared are either both tables or both full userdata and they are not primitively equal. The result of the call is always converted to a boolean.
__lt: the less than (<) operation. Behavior similar to the addition operation, except that Lua will try a metamethod only when the values being compared are neither both numbers nor both strings. The result of the call is always converted to a boolean.
__le: the less equal (<=) operation. Unlike other operations, the less-equal operation can use two different events. First, Lua looks for the __le metamethod in both operands, like in the less than operation. If it cannot find such a metamethod, then it will try the __lt metamethod, assuming that a <= b is equivalent to not (b < a). As with the other comparison operators, the result is always a boolean. (This use of the __lt event can be removed in future versions; it is also slower than a real __le metamethod.)
__index: The indexing access operation table[key]. This event happens when table is not a table or when key is not present in table. The metamethod is looked up in table.
Despite the name, the metamethod for this event can be either a function or a table. If it is a function, it is called with table and key as arguments, and the result of the call (adjusted to one value) is the result of the operation. If it is a table, the final result is the result of indexing this table with key. (This indexing is regular, not raw, and therefore can trigger another metamethod.)
__newindex: The indexing assignment table[key] = value. Like the index event, this event happens when table is not a table or when key is not present in table. The metamethod is looked up in table.
Like with indexing, the metamethod for this event can be either a function or a table. If it is a function, it is called with table, key, and value as arguments. If it is a table, Lua does an indexing assignment to this table with the same key and value. (This assignment is regular, not raw, and therefore can trigger another metamethod.)
Whenever there is a __newindex metamethod, Lua does not perform the primitive assignment. (If necessary, the metamethod itself can call to do the assignment.)
__call: The call operation func(args). This event happens when Lua tries to call a non-function value (that is, func is not a function). The metamethod is looked up in func. If present, the metamethod is called with func as its first argument, followed by the arguments of the original call (args). All results of the call are the result of the operation. (This is the only metamethod that allows multiple results.)
что в переводе гугла означает:
Скрытый текст
Далее приведен подробный список событий, управляемых метатаблицами. Каждая операция идентифицируется соответствующей клавишей.
__add: операция сложения (+). Если какой-либо операнд для сложения не является числом (или строкой, приводимой к числу), Lua попытается вызвать метаметод. Сначала Lua проверит первый операнд (даже если он действителен). Если этот операнд не определяет метаметод для __add, тогда Lua проверит второй операнд. Если Lua может найти метаметод, он вызывает метаметод с двумя операндами в качестве аргументов, и результат вызова (скорректированный на одно значение) является результатом операции. В противном случае возникает ошибка.
__sub: операция вычитания (-). Поведение аналогично операции сложения.
__mul: операция умножения (*). Поведение аналогично операции сложения.
__div: операция разделения (/). Поведение аналогично операции сложения.
__mod: операция modulo (%). Поведение аналогично операции сложения.
__pow: операция возведения в степень (^). Поведение аналогично операции сложения.
__unm: операция отрицания (унарная-). Поведение аналогично операции сложения.
__idiv: операция разделения этажей (//). Поведение аналогично операции сложения.
__band: побитовая операция И (&). Поведение аналогично операции сложения, за исключением того, что Lua попытается выполнить метаметод, если какой-либо операнд не является ни целым числом, ни значением, приводимым к целому числу (см. ).
__bor: побитовая операция ИЛИ (|). Поведение аналогично побитовой операции И.
__bxor: побитовая исключающая ИЛИ (двоичная~) операция. Поведение аналогично побитовой операции И.
__bnot: побитовая НЕ (унарная~) операция. Поведение аналогично побитовой операции И.
__shl: операция побитового сдвига влево (<<). Поведение аналогично побитовой операции И.
__shr: операция побитового сдвига вправо (>>). Поведение аналогично побитовой операции И.
__concat: операция конкатенации (..). Поведение аналогично операции сложения, за исключением того, что Lua попытается выполнить метаметод, если какой-либо операнд не является ни строкой, ни числом (что всегда приводит к строке).
__len: операция length (#). Если объект не является строкой, Lua попробует его метаметод. Если существует метаметод, Lua вызывает его с объектом в качестве аргумента, и результатом вызова (всегда с поправкой на одно значение) является результат операции. Если метаметода нет, но объект представляет собой таблицу, тогда Lua использует операцию длины таблицы (см. ). В противном случае Lua выдает ошибку.
__eq: операция equal (==). Поведение, аналогичное операции сложения, за исключением того, что Lua будет использовать метаметод только тогда, когда сравниваемые значения являются либо обеими таблицами, либо обеими полными пользовательскими данными, и они не являются примитивно равными. Результат вызова всегда преобразуется в логическое значение.
__lt: операция меньше, чем (<) . Поведение аналогично операции сложения, за исключением того, что Lua будет использовать метаметод только тогда, когда сравниваемые значения не являются ни обоими числами, ни обеими строками. Результат вызова всегда преобразуется в логическое значение.
__le: операция less equal (<=) . В отличие от других операций, операция с меньшим равенством может использовать два разных события. Во-первых, Lua ищет __leметаметод в обоих операндах, как в операции меньше, чем. Если он не может найти такой метаметод, то он попробует __ltметаметод, предполагая, что a <= bэто эквивалентно not (b < a). Как и в случае с другими операторами сравнения, результатом всегда является логическое значение. (Это использование __ltсобытия может быть удалено в будущих версиях; это также медленнее, чем настоящий __leметаметод.)
__index: Операция доступа к индексации table[key]. Это событие происходит, когда tableне является таблицей или когда keyотсутствует в table. Метаметод ищется в .table
Несмотря на название, метаметод для этого события может быть либо функцией, либо таблицей. Если это функция, она вызывается с tableаргументами и keyв качестве аргументов, а результат вызова (скорректированный на одно значение) является результатом операции. Если это таблица, конечный результат является результатом индексации этой таблицы с keyпомощью . (Это индексирование является обычным, а не необработанным, и поэтому может вызвать другой метаметод.)
__newindex: Назначение индексации table[key] = value. Как и событие index, это событие происходит, когда tableне является таблицей или когда keyотсутствует в table. Метаметод ищется в .table
Как и в случае с индексацией, метаметодом для этого события может быть либо функция, либо таблица. Если это функция, она вызывается с table, key, и valueв качестве аргументов. Если это таблица, Lua выполняет индексирование для этой таблицы с тем же ключом и значением. (Это назначение является обычным, а не необработанным, и поэтому может вызвать другой метаметод.)
Всякий раз, когда существует __newindexметаметод, Lua не выполняет назначение примитива. (При необходимости сам метаметод может быть вызван для выполнения назначения.)
__call: Операция вызова func(args). Это событие происходит, когда Lua пытается вызвать нефункциональное значение (то funcесть не является функцией). Метаметод ищется в .func Если присутствует, метаметод вызывается с funcпервым аргументом, за которым следуют аргументы исходного вызова (args) . Все результаты вызова являются результатом операции. (Это единственный метаметод, который допускает множественные результаты.)
Примерно так.
Метки в индикаторе, При перезапуске Квика получается наслоение меток
local Labels = {}
function OnCalculate (index)
if index = = 1 then
OnDestroy()
end
.. .
local Label = AddLabel (Settings.tag, Param)
if Label and Label > 0 then
Labels[ # Labels + 1 ] = Label
end
.. .
end
function OnDestroy ()
for i = 1 , # Labels do
PrintDbgStr ( 'DelLabel(' .. Labels[i] .. '): ' .. tostring( DelLabel (Settings.tag, Labels[i])))
end
Labels = {}
end
При закрытии Квика срабатывает OnDestroy, но метки с графиков не удаляются. И при следующем запуске индикатор ставит новые метки поверх старых, что есть не хорошо. Так и было задумано или же ошибка?
Да, это у Вас ошибка в алгоритме. --------------------------- Если хотите удалить все метки при срабатывании OnDestroy то напишите так:
Код
function OnDestroy ()
DelAllLabels(tag);
end
Меняю Вашу торговую идею на мою автоматизированную торговую систему., Обмен опытом и знаниями
Пользователь
Сообщений: Регистрация: 30.01.2015
10.07.2022 07:16:16
Цитата
Константин написал: Немного картинок того что реализовано для тех кому лень читать документацию
интересное решение, но сложно понять достоверность результата. ------------------ Дело в том, что на истории очень легко получить хороший результат , часто это происходит по тому, что строители стратегий используют индикаторы, которые заглядывают в будущее. например те же свечи. В итоге можно получить прибыль на истории и гарантированные убытки в реале. ------------------------ Вы легко используете понятие "вероятность успешной сделки" при малом числе сигналов. Но это не вероятность, а ее оценка. И эта оценка имеет случайную составляющую. Следовательно надо указывать доверительный интервал, а у вас его нет, а оценка - точечная. А закон распределения плотности вероятности Вашей случайной оценки Вами не установлен. следовательно надежность оценки не доказана, а получаемые Вами % вероятности - случайная величина. ------------ Примерно так.
На чем основана Ваша торговая стратегия?
Пользователь
Сообщений: Регистрация: 30.01.2015
10.07.2022 07:02:33
Ну а можно так: С 30 мая 2022 по настоящее время 170 сделок, результат long +100% .,short +93%
bshl / bshr metamethods
Пользователь
Сообщений: Регистрация: 30.01.2015
09.07.2022 16:54:12
Цитата
написал: > t=setmetatable({},{ __div = function(x,y) print(x,y) end})> print (t/2)table: 0000000000620d10 2nilЭто работаетА это не работает. что в 5.3 что в 5.4> t=setmetatable({},{ __bshl = function(x,y) print(x,y) end})> print (t<<2)
написал: на прошлой неделе поставил со сбербанка боевой квик 9.4 ----------------- Сегодня после очередного зависания снес его нафиг и вернул 8.7. ----------------------- Как прекрасен этот мир.
довольно радикально) самое смешное что на сервере сбера как раз таки стоит 9.4.2, а вот у другого брокера, который только брокерской деятельностью и занимается с самого своего основания стоит версия 9.2.3.
сервер и клиент - это две большие разницы. ------------------------ клиент ставите на своей машине, где куча разного и различные версии OC. В итоге может быть все что угодно. --------------- поэтому я всегда делаю так. Если новая версия по каким-то причинам начинает сбоить, а старая работает без нареканий, то я просто возвращаюсь к старой и жду, когда новая отлежится. -------------
Кривые шибки в QLua
Пользователь
Сообщений: Регистрация: 30.01.2015
05.07.2022 11:37:11
Цитата
TGB написал: 3. Существует вариант построения архитектуры встраивания Lua в QUIK, в которой можно использовать однопоточный (нативный) Lua : 1) вместо регистрации функций обратного вызова, регистрация соответствующих очередей событий (возможно, с теми же именами); 2) вместо sleep, использование служебной функции ожидания либо истечения интервала времени (как в sleep), либо появления данных в очередях событий (с выдачей списка непустых очередей); 3) добавление функции чтения очередей событий (их параметров); 4) реализация функций интерфейса c QUIK в виде отдельного пакета dll, подключаемого в Lua. Подключение новых версий Lua станет в описанной выше архитектуре рутинной задачей. Исчезнут все проблемы, вызванные текущей многопоточностью QLua.
Что такое (нативный) Lua ? Это Ваше изобретение? --------------------------- Один тут "чистый" луа придумал, второй "нативный" ------------------- Для изобретателей мусора : ================
Обратимся к Wiki
Машинный код (также употребляются термины собственный код, или платформенно-ориентированный код, или родной код, или нативный код — от native code) — система команд (язык) конкретной вычислительной машины (машинный язык), который интерпретируется непосредственно микропроцессором или микропрограммами данной вычислительной машины.
==================
еще раз повторю для особо тупых:
нет ни чистого ни нативного Луа,
каждая команда байт-кода луа - это функция, написанная на языке C.
----------------------
Кривые шибки в QLua
Пользователь
Сообщений: Регистрация: 30.01.2015
05.07.2022 11:20:08
, вообще-то синхронизация потоков требуется лишь в том случае, если оба потока будут писать в одну и туже область памяти. ---------------------------- В приведенных Вами рассуждениях о проблеме функции LUA_API size_t lua_stringtonumber (lua_State *L, const char *s) нет доказательства, что эта функция изменяет параметры стека луа. Явно лишь, что она их читает, т е конфликта эта функция явно не создает. ---------------------- Тот факт, что Вы не умеете работать с потоками, еще не повод давать советы разработчикам как замедлять работу программ на многоядерных процессорах используя лишь последовательное их исполнение. ---------------------- Медленно ездить на телеге, не всегда безопаснее , чем быстро на автомобиле.
Меняю Вашу торговую идею на мою автоматизированную торговую систему., Обмен опытом и знаниями
Пользователь
Сообщений: Регистрация: 30.01.2015
04.07.2022 21:21:31
Цитата
Константин написал: Если Вы имеете в наличии классную прибыльную торговую идею, но не обладаете навыками программирования предлагаю обмен. Вы озвучиваете свою идею. Я взамен программирую Вашу идею в своей торговой системе и даю Вам программу бесплатно. Моя система реализована на платформе 1С Предприятие 8+ Pyhton. Торгует на Московской бирже через терминал QUIK от Сбербанк брокер. От Вас потребуется только наличие лицензионной версии 1с Предприятие 8 (~от 13 000 за файловый вариант)
Есть торговая рабочая идея на основе логической (бинарной) нейронной сети. Не могу найти алгоритм оптимизации набора наилучших признаков (сеть логическая!!!). Нет такого алгоритма для логической сети даже в принципе. Надо реализация такого алгоритма на любом языке программирования.
Баг? Глюк? Фича?, При открытии 40+ графика QUIK умирает
Пользователь
Сообщений: Регистрация: 30.01.2015
04.07.2022 21:13:08
на прошлой неделе поставил со сбербанка боевой квик 9.4 ----------------- Сегодня после очередного зависания снес его нафиг и вернул 8.7. ----------------------- Как прекрасен этот мир.
Баг? Глюк? Фича?, При открытии 40+ графика QUIK умирает
Пользователь
Сообщений: Регистрация: 30.01.2015
03.07.2022 16:01:04
видел это на 8.7 на 9.4 вижу мелькание окна перед его обновлением
написал: фондовый и валютный - две большие разницы.
это понятно, я про то, считаются ли 2 сделки по валюте одной заявкой? порядковый номер отличается от предыдущей на 1 и время с точностью в мкс одинаковое
если выставляли одной - то одна, но исполнять ее могут множеством сделок.