Nikolay написал: Никак. Более того это зависит от выбранного шрифта и его размера. Плюс надо не забывать, что есть шапка окна, её необходимо не включать в расчёты, т.к. она есть если строк 0. Так что я просто делаю доступным параметры масштабирования, чтобы можно было задать для каждого скрипта.
Подскажите, пожалуйста, как рассчитать размеры окна для функции SetPosition? Я знаю кол-во строк, я знаю кол-во столбцов и их размер (заданный при создании столбца) По какой формуле с какими коэффициентами рассчитать dx-dy? Устал подбирать... У меня таблички динамические и хотелось бы что-бы окно само адаптировалось.
Я бы хотел иметь возможность в LUA видеть статус отправки сообщений в Телегу и если сообщения перестали уходить, то получить какой-то message, Версия с io.popen это позволяла бы сделать, как в приведённом выше примере, но он не работает :(. Ваш вариант отличный, но он позволит только постфактум узнать о проблемах. Но все равно, Вам огромное спасибо за идею в принципе! Это просто прекрасное решение почти всех моих запросов!
Отправьте по аналогии как я написал запрос /update и получите все сообщения. Можно запросить только последнее. Но как Вы собираетесь определить что сообщения перестали приходить ? ---------------- Возможно я не понял, но о каких проблемах Вы хотите узнать? О проблемах с bot в Telegram или о проблемах в QUIK или о проблемах с ПК или о проблемах со связью с биржей?
Я хочу в QUIK увидеть статус отправки сообщения в Telegram. И вовремя увидеть, что статус сделок перестал улетать в телеграмм. Чтобы было понятно, я делюсь сделками, которые совершаю руками в QUIK с коллегами и хочу вовремя увидеть, что они перестали их получать, если что-то отвалилось в телеге.
Я бы хотел иметь возможность в LUA видеть статус отправки сообщений в Телегу и если сообщения перестали уходить, то получить какой-то message, Версия с io.popen это позволяла бы сделать, как в приведённом выше примере, но он не работает :(. Ваш вариант отличный, но он позволит только постфактум узнать о проблемах. Но все равно, Вам огромное спасибо за идею в принципе! Это просто прекрасное решение почти всех моих запросов!
Не знаю, что у вас не так, у меня io.popen работает, и ответ от curl я получаю. Может, дело в версии curl
у меня io.popen вообще ничего не возвращает и команду не выполняет. Я пробовал просто dir отправить. У вас windows какой версии?
Я бы хотел иметь возможность в LUA видеть статус отправки сообщений в Телегу и если сообщения перестали уходить, то получить какой-то message, Версия с io.popen это позволяла бы сделать, как в приведённом выше примере, но он не работает :(. Ваш вариант отличный, но он позволит только постфактум узнать о проблемах. Но все равно, Вам огромное спасибо за идею в принципе! Это просто прекрасное решение почти всех моих запросов!
function tgmsg (text)
local curl = 'curl.exe'
local token = '.....'
local chatid = '....'
text = string.gsub (text, '[^0-9a-zA-Z\x80-\xff._~-]' , function (chr) return string.format ( "%%%02x" , string.byte (chr)) end )
local h, e, c = io.popen (curl .. ' -X POST --data-raw text="' .. text .. '" https://api.telegram.org/bot' .. token .. '/sendMessage?chat_id=' .. chatid)
if h then
local a = h:read( 'a' )
return a, h:close()
else
return false , e, c
end
end
Код у вас не работает. Не выполняется io.popen, при этом ошибок нет. Если поменять на execute, то все работает
2. Можно написать индикатор, добавляющий и обновляющий метку на график, где в тексте или подсказке добавить всю нужную информацию. А уже из скрипта прочитать данные этой метки.
Николай, подскажите, пожалуйста, а как можно прочитать данные метки в скрипте lua? Нигде не смог найти, как это сделать. Только если через сохранение в файле и чтении его в скрипте.
Названия параметров метки TEXT, DATE, TIME, как и прочих, должны быть записаны в верхнем регистре. Дополнительно убедитесь, что графику, на котором необходимо создать метку, присвоен идентификатор "TEST", а значения DATE, TIME и YVALUE находятся в видимой области.
Что-то не получается у меня выводить метки в индикаторе. Сделал простой тестовый индикатор. Линии рисует, а текстовую метку не выводит. Что я делаю не так?
Settings = {} Settings.Name = "PercentLevel"
label={ text = "Метка 333", FONT_HEIGHT = 25, YVALUE = 301, date = "20240305", time = "170000" }
function Init () return 2 end
function OnCalculate(index) AddLabel("TEST", label) return 300, 298 end
Anatolii написал: Используйте индикатор с TYPE_HISTOGRAM в Settings.line Пример: if math.fmod(index, 1000)==0 then SetValue(index, 1, C(index)) end Рисует вертикальные линии до цены в каждой 1000-й точке. Палка отображается только в диапазоне свечей окна (до нуля не тянется и масштаб графика не ломает)
Если подразумеваете в виду автоматическую разметку, то такой возможности нет.
Наверное стоит уточнить вопрос, можно ли написать на LUA индикатор, который будет рисовать границы торговых сессий? Не нашел, как рисовать вертикальные линии.
Подскажите, а я правильно понимаю, что нельзя стандартными средствами сделать индикатор, который будет рисовать разделение сессий вертикальной линией?А еще лучше залитыми областями. Например, утро желтый прозрачный, день розовый прозрачный, а вечерка голубой прозрачный.
Использую Ваш скрипт получения Греков. Сделал из него функцию и встроил к себе. Получилось не плохо. Но сейчас появилась задача получать греки не по всем опционами серии, а по конкретным. Скрэт это прекрасно умеет, но как правильно его использовать, если этот список меняется. Например, я хочу выводит только те опционы с греками по которым у меня открыта позиция. Но позицию я могу менять. Покупать опционы, продавать и соответственно список будет меняться динамически. И в целом понятно как это сделать, но смущает функция CreateDataSource. У меня открыты потоки на определённые инструменты. И мне нужно как-то на старые закрыть , а на новые открыть. Или закрывать ничего не нужно, просто отрывать на новые? В общем, как-то я подзапутался....
Nikolay написал: Очень советую не полагаться на отладчик, а немного пересмотреть подход к написанию скриптов. В частности, покрывайте тестами свой код, проверяйте входящие переменные по типу и значению. Критически важные участки, оборачивайт в pcall, чтобы обработать исключение. Вы же пишете скрипт на клиенте, а значит Вы должны работать в ситуации когда в любой момент времение у Вас обрывается связь с непредсказуемым временем восстановления. Также Вам никто не гарантирует время ответа от сервера на ваши запросы и команды. А значит Вам все равно надо проерять все, что Вы ожидаете.
А дебаг, Вы же, скорее всего, будете делать лог файл. Так отладочную информацию можно и нужно выодить в лог по уровню дебаг. Тогда, включая режим отладки, увидите сообщения отладки, а в простом режиме будет просто информационная часть лога. Тем более, что если Вы передаете скрипт заказчику, то о возможных ошибках Вы только из лога и узнаете.
Вы все правильно пишите. Но иногда отладчик очень полезен.
Появилось желание пересчитать греки с учетом свои нужд. Полез в тело скрипта и появились вопросы. Подскажите, пожалуйста, что это за функция? Что за константы в ней использованы? Можно увидеть формулу "на бумаге" Заранее спасибо!
Код
function N(x) --Нормальное среднее
if (x > 10) then
return 1
elseif (x < -10) then
return 0
else
local t = 1 / (1 + 0.2316419 * math.abs(x))
local p = 0.3989423 * math.exp(-0.5 * x * x) * t * ((((1.330274 * t - 1.821256) * t + 1.781478) * t - 0.3565638) * t + 0.3193815)
if x > 0 then
p=1-p
end
return p
end
end
Павел Bosco написал: если выбрать скрипт в списке, то в окошке под ним будет написана ошибка, по которой он отвалился. с номером строки. желательно обрабатывать OnConnected / OnDisconnected, проставляя переменную и анализировать её в скрипте. тогда проблемы быть не должно. некоторые функции работают и без сервера, а некоторые дают разного рода некорректные данные.
Спасибо. не обратил на это внимание. Была не определена переменная обращение к которой было только при отсутствии связи.
Подскажите, почему скрипт QLUA переходит в неактивное состояние после ночи? Ночью QUIK отваливается, т.к. брокер гасит сервер, утром крик снова подключается, а вот скрипт QLUA остается не активным.