local w32 = require ( "w32" )
local hWnd = w32.FindWindow ( "InfoClass" ,"")
w32.PostMessage (hWnd,w32.WM_COMMAND, 101 , 0 )
Я не понимаю этот код (поэтому не могу его использовать в программе биржевого робота Lua QUIK -- по завету Уоррена Баффета). Могли бы Вы чуть подробней объяснить что это за код и как он работает? У всех ли он будет работать? Какие подводные камни? На сколько это кашерный код?
А таки "Разорвать соединение с информационным сервером" можно программно из Lua QUIK? Отключиться от сервера на ночь.
string.upper(S) - русские буквы, Русские буквы в верхний регистр не получается сделать в string.upper(S) в Lua QUIK версии 8.13
Пользователь
Сообщений: Регистрация: 23.01.2021
07.05.2021 10:58:44
Цитата
Старатель написал: не забыв при этом дать доступ на чтение символа разделителя дробной части числа (для строковых операций с числами).
Да, я тож переживал на тему смены "американской десятичной точки 0.5" на "русскую десятичную запятую 0,5", но вроде норм -- старый код работает в математических выражениях типа
Код
os.setlocale('Russian_Russia.1251') --'ru_RU.CP1251' для FreeBSD, 'rus_RUS.CP1251' для линукса, 'Russian_Russia.1251' для Windows
b = 1
a = b + 0.5
message(tostring(a))
1,5 таки получается -- я переживал, что сглючит, распознав десятичную точку как разделитель тысяч или ещё как и будет математическая ошибка -- но вроде всё норм. Продолжаем в коде писать десятичную точку, хотя во внешнем выводе видим десятичную запятую :-) Потому что если написать
Код
os.setlocale('Russian_Russia.1251') --'ru_RU.CP1251' для FreeBSD, 'rus_RUS.CP1251' для линукса, 'Russian_Russia.1251' для Windows
b = 1
a = b + 0,5
message(tostring(a))
1 будет :-)
string.upper(S) - русские буквы, Русские буквы в верхний регистр не получается сделать в string.upper(S) в Lua QUIK версии 8.13
Пользователь
Сообщений: Регистрация: 23.01.2021
06.05.2021 20:31:00
Цитата
swerg написал: Считаю это ошибкой, которую разработчики QUIK должны исправить. Интерфейс у терминала русский, по умолчанию для русских букв штатные upper / lower должны корректно работать.
Да! Как тут тегнуть разработчиков Lua QUIK? Конечно они должны сделать нормально работающие РУССКИЕ БУКВЫ по умолчанию!
string.upper(S) - русские буквы, Русские буквы в верхний регистр не получается сделать в string.upper(S) в Lua QUIK версии 8.13
-- 'ru_RU.CP1251' для FreeBSD, 'rus_RUS.CP1251' для линукса, 'Russian_Russia.1251' для Windows -- я правильно понимаю?
string.upper(S) - русские буквы, Русские буквы в верхний регистр не получается сделать в string.upper(S) в Lua QUIK версии 8.13
Пользователь
Сообщений: Регистрация: 23.01.2021
05.05.2021 09:56:28
Как просто и грамотно сделать string.upper(S) с русскими буквами в Lua QUIK версии 8.13?
Проблема в том, что string.upper('English') работает, а string.upper('русские буквы') не работатет.
Так как сделать string.upper('русские буквы') == 'РУССКИЕ БУКВЫ'
Неполные лоты валюта. Коды класса и инструментов
Пользователь
Сообщений: Регистрация: 23.01.2021
19.04.2021 21:33:37
Цитата
Илья написал: Подскажите, какие надо указывать коды класса и инструментов (для неполных лотов).
С 26 апреля 2021 Московская биржа начнёт торги основными мировыми валютами от $1 и €1.Сделки будут проходить в режиме TOM. В режиме CETS доступны инструменты USDRUB_TMS и EURRUB_TMS -- от 1 до 999.99 можно покупать
Событие получения данных всех таблиц и графиков после подключения к серверу
Пользователь
Сообщений: Регистрация: 23.01.2021
18.04.2021 11:10:39
Цитата
Артем написал: Если ждать в цикле пока количество свечек станет больше 0, то видно что значение прыгает от 0 сразу к 5000
Очень интересно -- спасибо...
Событие получения данных всех таблиц и графиков после подключения к серверу
Пользователь
Сообщений: Регистрация: 23.01.2021
18.04.2021 11:09:53
Цитата
Kolossi написал: ds(Size) будет отличен от нуля только после завершения загрузки?
Хороший вопрос... я понаблюдаю в динамике этот процесс через PrintDbgStr()...
Как определить, когда идет торговая сессия, а когда нет?
Приведите, пожалуйста, пример конкретного инструмента определенного класса, по которому наблюдается описанное поведение: в таблице терминала статус - открыта , а значение tradingstatus, полученное в Lua - закрыта . Пришлите, пожалуйста, снимок экрана, наглядно демонстрирующий проблему и фрагмент кода.
Заранее благодарим.
Проверил. Проблема не у вас в Lua QUIK, проблема в криворуких макаках на биржах России или у брокера на Сервере. Вот прямо сейчас, 9:40 суббота -- все биржи закрыты -- а при этом статус "торгуется" "открыта" стоит практически у всех акции Московской биржи и у всех акций биржи СПБ (кроме немецких, немецкие в статусе "закрыта") -- макаки-с... К вам претензий нет. Как писать грамотную программу на Lua QUIK, если на Московской бирже и на Бирже СПБ макаки -- я не знаю... открыта RUAL на Московской бирже, открыта GOOG на бирже СПБ -- в 9:45 субботы, ага... Или кто за это отвечает? Кто настраивает поле "статус" - "торгуется" -- оно же getParamEx(XXXXsFull[key].birzha, key, 'TRADINGSTATUS').param_image == 'открыта'?! Кто за это отвечает?!
Как рассчитывается УДС? Как его самому можно рассчитать?, Как рассчитывается УДС? Как его самому можно рассчитать?
Как программно на Lua QUIK взять УДС? Или только считать? Примерчик кода можете показать? Например НПР1 и НПР2 я легко могу взять на Lua QUIK -- как аналогично взять УДС?
Я так написал робот на Lua QUIK который проверяет при старте всё ли хорошо -- почему-то именно так меня всё работает:
Код
function OnInit(script)
is_run = true
end
function OnStop()
is_run = false
end
function main()
birzhaSPB = 'SPBXM'
birzhaSPBDE = 'SPBDE'
birzhaMSK = 'TQBR'
birzhaNYSEbest = 'NYSE_BEST'
birzhaNasdaqBest = 'NASDAQ_BEST'
birzhaMSKvalyuta = 'CETS'
BabloKodUSD = 'USD000UTSTOM'
BabloKodEUR = 'EUR_RUB__TOM'
birzhaMSKvalyutaSmall = 'CETS_S1'
BabloKodUSDsmall = 'USD000SMALL'
BabloKodEURsmall = 'EUR000SMALL'
is_run_test = true
while is_run_test and is_run do is_run_test = false; message('Загрузка...'); sleep(9999)
for key in pairs(XXXXsFull) do local result = getParamEx(XXXXsFull[key].birzha, key, 'TRADINGSTATUS')
if result.result == '1' then elseif result.result == '0' then is_run_test = true else message('пипец is_run_test TRADINGSTATUS '..key, 3) end
if getBuySellInfo(firm, clients[1], XXXXsFull[key].birzha, key, 0).share == nil then is_run_test = true end
end --for key in pairs(XXXXsFull)
end --while is_run_test
sleep(9999)
-- дальше робот работает спокойно
while is_run do
USDRUB = getParamEx(birzhaMSKvalyuta, BabloKodUSD, 'LAST').param_value
EURRUB = getParamEx(birzhaMSKvalyuta, BabloKodEUR, 'LAST').param_value
EURUSD = EURRUB/USDRUB
-- дальше робот работает спокойно
if os.date('%H%M')=='2304' then is_run = false else sleep(9999) end -- настоящие торги закончены -- пора спать
end --while is_run
end --main()
Замечания по коду приветствуются!
Событие получения данных всех таблиц и графиков после подключения к серверу
Пользователь
Сообщений: Регистрация: 23.01.2021
06.04.2021 18:57:35
Цитата
Михаил Понамаренко написал: local chart = getCandlesByIndex("chart", 0, getNumCandles("chart") - 1, 1)[0].close
У меня Ваш код выпадает сейчас в ошибку: qwe.lua:42: attempt to index a nil value (field 'integer index')
Событие получения данных всех таблиц и графиков после подключения к серверу
Хороший код. Я бы добавил sleep(9999) на входе и в каждой таблице -- торопиться нам некуда -- весь день вперед -- пусть всё спокойно прогрузится.
Как определить, когда идет торговая сессия, а когда нет?
Пользователь
Сообщений: Регистрация: 23.01.2021
01.04.2021 11:27:06
Цитата
Sergey Gorokhov написал: Проверить можно через параметры TRADINGSTATUS или STATUS с помощью функции getParamEx
Нет, нельзя. Сейчас проверил на большом массиве с помощью dbgview и PrintDbgStr
for key in pairs(XXXXsFull) do local qwe = getParamEx(XXXXsFull[key].birzha, key, 'TRADINGSTATUS').param_image PrintDbgStr('key = '..key) PrintDbgStr('.param_image = '..qwe) PrintDbgStr('.param_type = '..getParamEx(XXXXsFull[key].birzha, key, 'TRADINGSTATUS').param_type) PrintDbgStr('.param_value = '..getParamEx(XXXXsFull[key].birzha, key, 'TRADINGSTATUS').param_value) PrintDbgStr('.result = '..getParamEx(XXXXsFull[key].birzha, key, 'TRADINGSTATUS').result) end
примерно в 30% чушь -- [8928] .param_image = закрыта примерно в 70% правильно -- [8928] .param_image = открыта
остальные [8928] .param_type = 4 [8928] .param_value = 1.000000 [8928] .param_value = 1.000000 всегда идентичны.
И чё? Как нам узнать идут тогри или нет по данной позиции с помощью Lua QUIK?! Без 30% ошибок!
Как определить, когда идет торговая сессия, а когда нет?
Пользователь
Сообщений: Регистрация: 23.01.2021
01.04.2021 11:11:56
Цитата
Sergey Gorokhov написал: Здравствуйте, Проверить можно через параметры TRADINGSTATUS или STATUS с помощью функции getParamEx Или еще проще, добавить проверку текущего времени. Расписание торгов заранее известно и меняется крайне редко
Ваша фантазия не соответствует реальной жизни. Вот прямо сейчас торги идут, а в Lua QUIK 8.13 мы видим: 11:07 01.04.2021 [8928] key = CCL [8928] .param_image = закрыта [8928] .param_value = 0.000000 [8928] .result = 1
ВАША TRADINGSTATUS с помощью функции getParamEx НЕ РАБОТАЕТ В РЕАЛЬНОЙ ЖИЗНИ. СОВСЕМ НЕ РАБОТАЕТ. Проблема. Надо как-то реагировать. Ваш косяк? Косяк брокера? Косяк биржи? Кто у нас колхозник сегодня?
Какой функцией получить прибыль по инструменту., LUA скрипты
Событие получения данных всех таблиц и графиков после подключения к серверу
Пользователь
Сообщений: Регистрация: 23.01.2021
01.04.2021 10:39:00
Цитата
Владимир написал: Сам считает, сам, по своему таймеру и по данным ТТТ (ориентируясь на цену последней сделки). По тем тикерам, по которым торги не идут (по любой причине) свечи будут похожи
Да, вариант интересный... и наверно, надёжный... "хочешь что-то сделать хорошо -- сделай это сам"...
Как определить, когда идет торговая сессия, а когда нет?
Пользователь
Сообщений: Регистрация: 23.01.2021
01.04.2021 09:40:43
Цитата
Владимир написал: Что делать? Видимо, то же, что и я: ВААПЩЕ не использовать TRADINGSTATUS!
Это ужасно, но Вы наверно правы! Сейчас все индикаторы TRADINGSTATUS -- ОДИНАКОВЫЕ -- хотя торги по AAPL на бирже СПБ идут, а торгов по Северсталь на Московской бирже нет! Я проверил по массиву из более чем 100 акций через dbgview -- ВСЕ ИНДИКАТОРЫ ОДИНАКОВЫЕ! По TRADINGSTATUS утренняя сессия на бирже СПБ неотличима никак! Золхоз и колхозники, их жеж мать!
ТАК КАК ЖЕ НАМ ОПРЕДЕЛИТЬ -- ЕСТЬ ТОРГИ ИЛИ НЕТ ПО ДАННОЙ ПОЗИЦИИ? По любой бирже -- биржа СПБ (утром и в нормальное время), Московская биржа, NYSE, Nasdaq...
Какой функцией получить прибыль по инструменту., LUA скрипты
Какой функцией получить прибыль по инструменту., LUA скрипты
Пользователь
Сообщений: Регистрация: 23.01.2021
31.03.2021 21:52:50
Цитата
Владимир написал: именно "один отдельный инструмент", чтобы вложить деньги здесь и сейчас именно туда, куда нужно, а не распылять их по всему "целому списку"
Да, с точки зрения уже не инвестора, а трейдера -- именно это важно в моменте -- один лучший вариант "здесь и сейчас"
Какой функцией получить прибыль по инструменту., LUA скрипты
Пользователь
Сообщений: Регистрация: 23.01.2021
31.03.2021 21:51:20
Цитата
Артем написал: проверить в цикле все 100 акций на предмет просадки цены
Спасибо. Да, наверно надо искать именно просадку -- остальные критерии в данном случае вторичны, имхо...
Какой функцией получить прибыль по инструменту., LUA скрипты
Пользователь
Сообщений: Регистрация: 23.01.2021
30.03.2021 18:43:18
Цитата
Владимир написал: Реальность, правда, несколько более сложная - принимаем решения, ориентируясь на данные
А как в Lua QUIK из списка, скажем, 100 акций выбрать ту, которая временно просела в цене, чтобы именно её купить именно сейчас? Как быстро и красиво определить по каждой акции из списка те, которые просели сегодня по какой-то причине относительно своего "нормального" уровня?
Какой функцией получить прибыль по инструменту., LUA скрипты
Пользователь
Сообщений: Регистрация: 23.01.2021
30.03.2021 13:26:14
Цитата
Egor Zaytsev написал: Параметр Нереал.PL можно получить из таблицу Купить/Продать, параметр Прибыль дня.
Можете привести кусочек программного кода Lua QUIK, который быстро и красиво находит и возвращает код самой прибыльной акции в портфеле этого счёта через таблицу Купить/Продать?
Какой функцией получить прибыль по инструменту., LUA скрипты
Пользователь
Сообщений: Регистрация: 23.01.2021
30.03.2021 13:21:02
Цитата
Egor Zaytsev написал: Параметр Нереал.PL можно получить из таблицу Купить/Продать, параметр Прибыль дня.
Интересно... Но я не совсем Вас понимаю... Можно кусок кода Lua QUIK для примера? Я только с примерами понимаю :-)
Неполные лоты валюта. Коды класса и инструментов
Пользователь
Сообщений: Регистрация: 23.01.2021
30.03.2021 12:26:48
Цитата
Илья написал: Подскажите, какие надо указывать коды класса и инструментов (для неполных лотов).
Нормальные (минимум 1 лот $1000) -- код Московской биржи для покупки USD и EUR и код USD и EUR расчётами завтра (самый ходовой) birzhaMSKvalyuta = 'CETS' BabloKodUSD = 'USD000UTSTOM' BabloKodEUR = 'EUR_RUB__TOM'
Неполные лоты расчётами завтра -- код биржи-брокера и код USD и EUR -- можно купить или продать 1 доллар или 1 евро: birzhaMSKvalyutaSmall = 'CETS_S1' BabloKodUSDsmall = 'USD000SMALL' BabloKodEURsmall = 'EUR000SMALL'
Какой функцией получить прибыль по инструменту., LUA скрипты
Пользователь
Сообщений: Регистрация: 23.01.2021
29.03.2021 18:07:37
Цитата
Илья написал: Как получить с помощью LUA скрипта значение "Нереал PL" из таблицы "Состояние счета" ?
Вот так можно получить значение "Нереал. PL" из таблицы "Состояние счета": message('= '..getBuySellInfo(firm, client, birzhaSPBDE, 'DPW@DE', 0).profit_loss)
Какой функцией получить прибыль по инструменту., LUA скрипты
Egor Zaytsev написал: Доступа через QLUA к таблице "Состояние счета" в текущей реализации нет.
т.е. Получить "Нереал PL" никак невозможно, только в ручную? Это крайне не удобно. В будующем эта опция будет доступна ?
Добрый день,
Можем зарегистрировать пожелание на доработку относительно возможности работы с таблицей "Состояние счета" из QLUA. Регистрируем?
Конечно регистрируйте! Сейчас конец марта 2021 -- в версии 8.11.00.66 можно получить доступ "Нереал PL" из таблицы "Состояние счета" ? Очень нужная вещь!
Как определить, когда идет торговая сессия, а когда нет?
я некоторые ключевые показатели -- втч getParamEx(XXXXsFull[key].birzha, key, 'TRADINGSTATUS').param_image пересчитываю каждые 9999 милисекунд... а что делать...
getParamEx
Пользователь
Сообщений: Регистрация: 23.01.2021
29.03.2021 11:21:32
А если биржа и у нас и в США не работает, то у меня param_image = 'закрыта'
getParamEx
Пользователь
Сообщений: Регистрация: 23.01.2021
29.03.2021 11:11:14
Цитата
Старатель написал: А вот так, если параметр получен:
Как определить, когда идет торговая сессия, а когда нет?
Пользователь
Сообщений: Регистрация: 23.01.2021
29.03.2021 10:32:20
Цитата
Sergey Gorokhov написал: Проверить можно через параметры TRADINGSTATUS или STATUS с помощью функции getParamEx Или еще проще, добавить проверку текущего времени. Расписание торгов заранее известно и меняется крайне редко
Спасибо, попробую так и сделать. P.S. Это в США стабильность и понятный график торгов по времени -- а у нас суета -- на бирже СПБ теперь есть утренняя торговая сессия -- и хаотично меняющийся список "кто утром есть, а кого утром нет". Бардак и суета на ровном месте, как в колхозе.