Стандартные арифметические операции:
"+" - сложение,
"-" - вычитание,
"/" - деление,
"*" - умножение,
"%" - остаток от деления (5%2 == 1).
math.abs (x) -- Модуль x.
math.acos(x) -- Возвращает арккосинус x
math.asin(x) -- Возвращает арксинус x (в радианах).
math.atan(x) -- Возвращает арктангенс x (в радианах).
math.atan2(x, y) -- Возвращает арктангенс x/y (в радианах), но использует знаки обоих параметров для вычисления «четверти» на плоскости. (Также корректно обрабатывает случай когда y равен нулю.)
math.ceil(x) -- Возвращает наименьшее целое число, большее или равное x. (Округление «вверх»).
math.cos(x) -- Возвращает косинус x (Угол – в радианах).
math.cosh(x) -- Возвращает гиперболический косинус x.
math.deg(x) -- Переводит угол, заданный в радианах (x) в градусы.
math.exp(x) -- Возвращает e^x.
math.floor(x) -- Возвращает наибольшее целое число, меньшее или равное x. (Округление «вниз»)
math.fmod(x, y) -- Возвращает остаток от деления x на y.
math.frexp(x) -- Возвращает m и e такие, что x = m*2^e, e – целое, а модуль m находится в интервале [0.5, 1], либо ноль, если x равен нулю (разложение числа с фиксированной запятой).
math.huge -- Значение HUGE_VAL, значение большее, либо равное любому числовому значению.
math.ldexp(m, e) -- Возвращает m^2e (e должно быть целым). (Восстановление значения по мантиссе и показателю).
math.log(x) -- Возвращает натуральный логарифм x.
math.log10(x) -- Возвращает логарифм x по основанию 10.
math.max(x,...) -- Возвращает максимальный из аргументов.
math.min(x,...) -- Возвращает минимальный из аргументов.
math.modf(x) -- Возвращает два числа: целую часть x и дробную часть x.
math.pi -- Значение pi.
math.pow(x, y) -- Возвращает x^y
math.rad(x) -- Конвертирует угол x, заданный в градусах, в радианы.
math.random() -- Возвращает псевдослучайное число, из генератора
Примеры:
math.random(); -- Вернет случайное число от 0 до 1 с точностью до 16 знаков после запятой math.random(10); -- Вернет случайное целое число от 1(включительно) до 10(включительно) math.random(3,5); -- Вернет случайное целое число от 3(включительно) до 5(включительно) |
math.randomseed(x) -- Инициализирует генератор псевдослучайных чисел параметром, каждый параметр порождает соответствующую (но одну и ту же) последовательность псевдослучайных чисел.
math.sin(x) -- Возвращает синус x (аргумент – в радианах).
math.sinh(x) -- Возвращает гиперболический синус x.
math.sqrt(x) -- Возвращает квадратный корень x
math.tan(x) -- Возвращает тангенс угла x (аргумент – в радианах)
math.tanh(x) -- Возвращает гиперболический тангенс x
Если у Вас появились какие-то вопросы, задайте их в комментариях под статьей !!!
Доброго дня! Интересуют такие возможности в lua:
Хочу произвести арифметическую операцию такого порядка - собрать данные последних 50 свечей скажем, и указать условие что последняя свече пробила максимум, если пробила то условие true, с условиями понятно как действовать но можно ли как то изложить это лаконичнее чем:
и т. д. 100% есть более простой способ наведите, пожалуйста на мысль как это сделать в lua.
знак больше, почему то на сайте не распознался, "t[50].close> больше t[0].high" для ясности.
Создаете 4 переменные: min, max, index_min, index_max, перебираете в цикле свечи и сравниваете значения с переменными min/max, если нашли новый минимум, или максимум, меняете значение переменной на новое и запоминаете индекс в соответствующей переменной
https://quikluacsharp.ru/?p=145
Спасибо! Попробую.
что то тут я сделал не так, пишет что nill value
Опять криво скопировался)) вышлю текстом
for i=51,51,-1 do
if t[i].high > p_max then
p_max = index_max
to_log("index_max"..index_max)
end
if t[i].low < p_min then
p_min = index_min
to_log("index_min"..index_min)
end
end
Если хотите научиться программировать, то в первую очередь учитесь искать ошибки, квик в тексте ошибки указывает что именно и в какой строке имеет значение nil, поднимайтесь "вверх" по коду и ищите причину, по которой данная переменная имеет значение nil.
for i=51,51,-1 do
проблема в этой строчке, если верить статье, то эта i локальная в цикле, что есть очень не в тему, из- за того что я имею ввиду свою i отсюда
local N=getNumCandles("Price")
t,n,i(именно эта )=getCandlesByIndex("Price", 0, N-51, 51) как мне это связать в цикле, если переменная в нем локальная.
if t[i].high > p_max then
понял что ошибка тут, пишет что пытаюсь сравнить строку с номером, если tonumber ставить перед i, тогда пишет что пытаюсь сравнить нуль, такое ощущение что он эту i в t[i].high не подставляет.
Я РАЗОБРАЛСЯ! Простите за спам снова!((
for i=0,50,1 do
if tostring(t[i].high) > tostring(p_max) then to_log("t[i].high"..t[i].high)
p_max = index_max
to_log("index_max"..index_max)
end
if tostring(t[i].low) < tostring(p_min) then to_log("t[i].low"..t[i].low)
p_min = index_min
to_log("index_min"..index_min)
end
end
Вот правильная версия)
Спасибо за поддержку!))
Всегда пожалуйста! 🙂
Поправить описание math.frexp(x). Заменить x = m^2e на x = m*2^e
Спасибо, исправил!
Дмитрий добрый день!
помогите пожалуйста решить маленькую проблему. У меня скрипт который выводит данные в таблицу. Я бы хотел просуммировать последние 10 значений в определенном столбце этой таблицы, и вывести эту сумму в новую ячейку, не могу грамотно написать цикл.
у меня есть такой вариант: ( здесь, L - номер последней строки, этот скрипт считает сумму нарастающим итогом по всем
ячейкам столбца начиная с 10 строки до последней, но мне нужно считать последние 10 строк, допустим в VBA там есть функция суммы которая все решает, в LUA не могу сообразить как это сделать)
Здравствуйте! Не совсем понял какие колонки Вы считаете и в какие ячейки записываете, но вот пример того, как посчитать сумму последних 10-ти значений в колонке с индексом 7 и потом вывести значение в той же колонке в строку под номером num:
Это то, что Вам нужно?
Спасибо большое Дмитрий, то что нужно.
Всегда пожалуйста
Вот здесь можете о циклах посмотреть: https://quikluacsharp.ru/qlua-osnovy/tsikly-for-while-repeat-v-qlua-lua/
Дмитрий, добрый день, подскажите, как округлить дробную часть? Например: 3.27893 -> 3.28
Либо просто обрезать дробную часть до 2-х цифр.
Заранее благодарю.
Выбирайте на вкус:
math.ceil(x) -- Возвращает наименьшее целое число, большее или равное x. (Округление «вверх»).
math.floor(x) -- Возвращает наибольшее целое число, меньшее или равное x. (Округление «вниз»)
Соответственно если хотите до 2 знаков, тогда например: math.floor(x*100)/100
Спасибо, все работает.
Добрый день!
Можно так:
Дмитрий, спасибо за Ваш проект.
Пожалуйста 🙂
Что я делаю не так?
local price1 = math.round(price, 2)
луа просто не видет такой математической функции, floor работает, но тот до целых чисел округляет
price=getParamEx(p_classcode, ticker, 'offer').param_value
price1= math.floor(price*100,2)
price2=price1/100
разобрался, пошел в обход))
Вы саму функцию в скрипт не добавили
Я не вижу здесь стандартных арифметических операций, которые ищу, а именно +, -, * и /. Пожалуйста, ответьте или ссылкой на эти операции, или, если статья будет ими дополнена, можете не отвечать.
Здравствуйте! Добавил в начало статьи!
Вот здесь есть функция math_round, первый параметр - число, которое нужно округлить, второй параметр - количество знаков после запятой, по умолчанию (если не указывать второй параметр), 0
https://quikluacsharp.ru/nuzhnye-funktsii/
а можете привести пример? Я не пользовался всеми эти math в луа ни разу) и не представляю куда и как их вставить вообще можно.
В Res будет 11
В Res будет 10.65
Спасибо за ответ выше! новая сложность))
Разобрался))
нет, разобрался( все равно иногда вылетает
Простите за спам)
Ошибку разрешил, в разных функциях t[0].close и остальные необходимо разными переменными задавать, иначе они путаются.
Рад, что у Вас все получилось.
Здравствуйте.
При сравнениях условий не плохо бы делать проверку - вдруг еще нет данных по текущему бару.
Или структура бара уже есть, а данных еще нет или уже есть, но равны "0"
t[0].close-t[0].low - вот такое выражение - зло.
if not t[0] then return end
local O, H, L, C = t[0].open, t[0].high, t[0].low, t[0].close
if O ==0 or H == 0 or L == 0 or C == 0 then return end -- если структура бара есть, то значения могут быть равны "0" в моменте.
Вот дальше можно делать сравнения и математику с переменными O, H, L, C без опаски получить исключение
Спасибо!! за идею!
Аналогично, не работает оно, луа не видит math.round
Добавьте функцию в скрипт, луа не может ее видеть, потому что она самописная, а не встроенная