local w32 = require ( "w32" )
local hWnd = w32.FindWindow ( "InfoClass" ,"")
w32.PostMessage (hWnd,w32.WM_COMMAND, 101 , 0 )
Я не понимаю этот код (поэтому не могу его использовать в программе биржевого робота Lua QUIK -- по завету Уоррена Баффета). Могли бы Вы чуть подробней объяснить что это за код и как он работает? У всех ли он будет работать? Какие подводные камни? На сколько это кашерный код?
Старатель написал: не забыв при этом дать доступ на чтение символа разделителя дробной части числа (для строковых операций с числами).
Да, я тож переживал на тему смены "американской десятичной точки 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))
swerg написал: Считаю это ошибкой, которую разработчики QUIK должны исправить. Интерфейс у терминала русский, по умолчанию для русских букв штатные upper / lower должны корректно работать.
Да! Как тут тегнуть разработчиков Lua QUIK? Конечно они должны сделать нормально работающие РУССКИЕ БУКВЫ по умолчанию!
Илья написал: Подскажите, какие надо указывать коды класса и инструментов (для неполных лотов).
С 26 апреля 2021 Московская биржа начнёт торги основными мировыми валютами от $1 и €1.Сделки будут проходить в режиме TOM. В режиме CETS доступны инструменты USDRUB_TMS и EURRUB_TMS -- от 1 до 999.99 можно покупать
Приведите, пожалуйста, пример конкретного инструмента определенного класса, по которому наблюдается описанное поведение: в таблице терминала статус - открыта , а значение 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()
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 НЕ РАБОТАЕТ В РЕАЛЬНОЙ ЖИЗНИ. СОВСЕМ НЕ РАБОТАЕТ. Проблема. Надо как-то реагировать. Ваш косяк? Косяк брокера? Косяк биржи? Кто у нас колхозник сегодня?
Владимир написал: Сам считает, сам, по своему таймеру и по данным ТТТ (ориентируясь на цену последней сделки). По тем тикерам, по которым торги не идут (по любой причине) свечи будут похожи
Да, вариант интересный... и наверно, надёжный... "хочешь что-то сделать хорошо -- сделай это сам"...
Владимир написал: Что делать? Видимо, то же, что и я: ВААПЩЕ не использовать TRADINGSTATUS!
Это ужасно, но Вы наверно правы! Сейчас все индикаторы TRADINGSTATUS -- ОДИНАКОВЫЕ -- хотя торги по AAPL на бирже СПБ идут, а торгов по Северсталь на Московской бирже нет! Я проверил по массиву из более чем 100 акций через dbgview -- ВСЕ ИНДИКАТОРЫ ОДИНАКОВЫЕ! По TRADINGSTATUS утренняя сессия на бирже СПБ неотличима никак! Золхоз и колхозники, их жеж мать!
ТАК КАК ЖЕ НАМ ОПРЕДЕЛИТЬ -- ЕСТЬ ТОРГИ ИЛИ НЕТ ПО ДАННОЙ ПОЗИЦИИ? По любой бирже -- биржа СПБ (утром и в нормальное время), Московская биржа, NYSE, Nasdaq...
Владимир написал: именно "один отдельный инструмент", чтобы вложить деньги здесь и сейчас именно туда, куда нужно, а не распылять их по всему "целому списку"
Да, с точки зрения уже не инвестора, а трейдера -- именно это важно в моменте -- один лучший вариант "здесь и сейчас"
Владимир написал: Реальность, правда, несколько более сложная - принимаем решения, ориентируясь на данные
А как в Lua QUIK из списка, скажем, 100 акций выбрать ту, которая временно просела в цене, чтобы именно её купить именно сейчас? Как быстро и красиво определить по каждой акции из списка те, которые просели сегодня по какой-то причине относительно своего "нормального" уровня?
Egor Zaytsev написал: Параметр Нереал.PL можно получить из таблицу Купить/Продать, параметр Прибыль дня.
Можете привести кусочек программного кода Lua QUIK, который быстро и красиво находит и возвращает код самой прибыльной акции в портфеле этого счёта через таблицу Купить/Продать?
Илья написал: Подскажите, какие надо указывать коды класса и инструментов (для неполных лотов).
Нормальные (минимум 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 скрипта значение "Нереал PL" из таблицы "Состояние счета" ?
Вот так можно получить значение "Нереал. PL" из таблицы "Состояние счета": message('= '..getBuySellInfo(firm, client, birzhaSPBDE, 'DPW@DE', 0).profit_loss)
Egor Zaytsev написал: Доступа через QLUA к таблице "Состояние счета" в текущей реализации нет.
т.е. Получить "Нереал PL" никак невозможно, только в ручную? Это крайне не удобно. В будующем эта опция будет доступна ?
Добрый день,
Можем зарегистрировать пожелание на доработку относительно возможности работы с таблицей "Состояние счета" из QLUA. Регистрируем?
Конечно регистрируйте! Сейчас конец марта 2021 -- в версии 8.11.00.66 можно получить доступ "Нереал PL" из таблицы "Состояние счета" ? Очень нужная вещь!
я некоторые ключевые показатели -- втч getParamEx(XXXXsFull[key].birzha, key, 'TRADINGSTATUS').param_image пересчитываю каждые 9999 милисекунд... а что делать...
Sergey Gorokhov написал: Проверить можно через параметры TRADINGSTATUS или STATUS с помощью функции getParamEx Или еще проще, добавить проверку текущего времени. Расписание торгов заранее известно и меняется крайне редко
Спасибо, попробую так и сделать. P.S. Это в США стабильность и понятный график торгов по времени -- а у нас суета -- на бирже СПБ теперь есть утренняя торговая сессия -- и хаотично меняющийся список "кто утром есть, а кого утром нет". Бардак и суета на ровном месте, как в колхозе.