Есть ли возможность продлевать демо доступ, чтобы не регистрироваться каждый раз и не создавать отдельные ветки каждый месяц? Может быть стоит создать одну ветку где все желающие могли бы просить продлиться и закрепить ее вверху? Мой аккаунт U0132383 Спасибо!
Я пробовал оба варианта. Точнее много разных вариантов. Вы скажите, в присланном мной архиве у вас воспроизводится ошибка? И пропадает ли она после применения вашего совета на моем архиве?
В демо квике на демо сервере при запросе параметра получаю 0. Если открыть таблицу текущих торгов, то там тоже 0. Не смотря на то, что этот 0 подсвечивается то зеленым, то красным, что означает изменение параметра.
Код
function main()
local last_change = getParamEx('QJSIM', 'GAZP', "LASTCHANGE")
message("result:" .. tostring(last_change.result) .. ", value = " .. tostring(last_change.param_value) .. ", image = " .. tostring(last_change.last_change))
end
Значение "OPEN" возвращает корректно, а вот "CHANGE" опять 0. Это ограничения демо?
Nikolay Pavlov написал: Добрый день. В приведенном примере создания таблицы нет кода добавления значений в ячейки (функция SetCell). Вот выдержка из справки: ------------------------------------------------------------------------------------------------------------------------------------------------------------ BOOLEAN SetCell(NUMBER t_id, NUMBER key, NUMBER code, STRING text, NUMBER value) Параметр «text» задает строковое представление значение параметра «value». Параметр «value» необязательный и по умолчанию равен «0». Для столбцов со строковыми типами данных параметр «value» не задается. Если параметр «value» не задан для ячеек всех остальных типов, то по столбцам, содержащим такие ячейки, не будет корректно работать сортировка, фильтрация и условное форматирование (см. Приложение 2). ------------------------------------------------------------------------------------------------------------------------------------------------------------
Именно по значению value происходит сравнение значений при форматировании, а значение text служит для визуализации значения в ячейке таблицы. Соответственно проверьте какие значения передаются в value при заполнении Вашей таблицы.
Пытаюсь применить условное форматирование как на скрине. И результат тоже не скрине.
Т.е. Крик считает все числа больше 10.5. То же самое с фильтром. Ставлю на эту же колонку условие "Меньше 500", но ни одна строка не исчезает. Ставлю "Больше 500" и исчезают все строки.
Еще такой вопрос: почему не смотря на то, что при инициализации таблицы я указал, что тип колонки double, перед установкой значения ячейки необходимо преобразовывать значение в строку иначе она в таблице не появляется?
Указанная вами callback-функция myFunc() и не должна была сработать ни разу. На момент компиляции строки ds:SetUpdateCallback(myFunc) у вас myFunc содержит значение nil. Поэтому дальше все действия определяются именно этим. Вам необходимо переместить тело callback-функции, так, чтобы она располагалась в коде скрипта до ее фактического упоминания или вызова.
Вы в корне не правы. Пример для вас (стрелкой пометил место отличия скрипта в топике):
Сам параметр bid в таблице текущих торгов присутствует, данные на графике есть? Проверьте еще настройку: пункт меню Система/Настройки/Основные настройки/Программа/Получение данных/ и выберите пункт "Исходя из настроек открытых пользователем таблиц"
Параметр bid в таблице есть и он меняется. График тоже рисуется. Пункт "Исходя из настроек открытых пользователем таблиц" не был установлен. Установил, перезапустил квик - результат тот же.
stopped = false
function main()
ds, err = CreateDataSource('QJSIM', 'GAZP', INTERVAL_M1, 'bid')
while (err == "" or err == nil) and ds:Size() == 0 do
sleep(5)
end
if err ~= "" and err ~= nil then
message("Error: " .. err)
return
end
message("size:" .. tostring(ds:Size()))
ds:SetUpdateCallback(myFunc)
while stopped ~= true do
sleep(50)
end
end
function myFunc(index)
message(tostring(index))
end
На любой тикер и любой параметр param сервер возвращает пустую таблицу (т.е. ds:Size() всегда 0) пробовал выставлять sleep больше - не помогает. В любом случае должен был бы сработать callback, но ожидание в 5 минут после старта ничего не дало. Тот же самый код в версии 6 в демо quik возвращает таблицу с данными.
В старой версии форума давал ссылку на информацию по созданному мной решению для экспорта данных из QUIK в AmiBroker x64, дублирую инфу здесь, если кому-то она может быт полезной: Экспорт в AmiBroker x64
Кому нужно - стучитесь в личку или по e-mail.
Коллега, ссылка ведет на страницу с описанием успешной разработки автоматизированной торговой системы, а не на то, что указано в названии ссылки и в теме.
тот самый написал: Кроме того, у Вас там версия Квика 7.1.2.2 - явно устаревшая. Советую Вам его обновить.
Как это сделать, если у брокера последней версии нет, а на офф сайте написано "Дистрибутив может использоваться для подключения к серверам Технического центра ARQA Technologies. Для подключения к серверам брокеров необходимо использовать дистрибутив, предоставленный брокером."?
Цитата
тот самый написал: задам глупый вопрос: Вы с системными часами, что-то делали во время работы Квика до его краша?
Вопрос: Программа, скомпилированная в Visual Studio 2013, не работает в Windows XP
В ОС Windows 7 Home Base 32 bit установлены Visual Studio 2008 Express и Visual Studio 2013 Ultimate. Простую консольную программу:
Код
# include < iostream > # include < string > int main() {
setlocale(LC_ALL, "Russian" ); std::cout < < "Здравствуй, Мир!"
< < std::endl; std:: cin.get (); }
компилирую в Visual Studio 2008 и Visual Studio 2013 с многопоточной библиотекой времени выполнения(/MT), остальные параметры сред программирования по умолчанию.Релиз программы TestCppVS2008.exe нормально запускается в Windows XP, 7, 8, 8.1, а релиз программы TestCppVS2013.exe в Windows 7, 8, 8.1 запускается нормально, а при запуске в Windows XP дает сообщение, что TestCppVS2013.exe не является приложением Win32. Подскажите, пожалуйста, какие параметры Visual Studio 2013 нужно установить, чтобы программа нормально запускалась в Windows XP.Реальную программу нужно будет запускать в разных версиях Windows, включая и Windows XP. Тестовые проекты и исполняемые файлы прикрепил.
Ответ: Спасибо огромное, помогло. Свойства проекта – Свойства конфигурации – Общие – Набор инструментов платформы – выбрать Visual Studio 2013 - Windows XP (v120_xp) вместо Visual Studio 2013
Действительно заработало. После того, как выбрал Набор инструментов платформы = Visual Studio 2013 - Windows XP (v120_xp), получил ошибку "An Error has occurred while saving the edited properties listed below: One or more values are invalid. Value cannot be null. Parameter name: userSuppliedValue". В поле "Версия целевой платформы" указал "8.1", сохранил (после повторного открытия поля "Версия целевой платформы" и "Целевая платформа" пропали. http://take.ms/wG3Af В зависимостях стало вот так. http://take.ms/merjZ
тот самый написал: Внимательно прочти о том, как заполняются ВСЕ поля в Свойствах Проекта!! И... заполни их уже наконец соответствующе.
Где прочитать, я так и не понял. Если речь идет о ссылке https://msdn.microsoft.com/ru-ru/library/jj851139.aspx, то не совсем понятно, что нужно сделать. Создал новый проект https://msdn.microsoft.com/ru-ru/library/jj851139.aspx "Целевая платформа" не выбирается. Пробовал очищать поле "Версия целевой платформы" (потому, как там ничего не выбирается больше), а сейчас вообще пропал выбор "целевой платформы" и "Версии". http://take.ms/Rl7vy Менял поле "Набор инструментов платформы" на "Visual Studio 2015 - Windows XP (v140_xp)". Результат тот же.
Николай Камынин написал: проблема в том, что на компе нет библиотек, которые есть на компе разработчика.
Я собираю проект с опцией "Runtime libriry = Multi-threaded". Если верить описанию, то это должно избавить от проблемы с зависимостями.
Цитата
Николай Камынин написал: проверьте свою dll на зависимости на компе разработчика и пользователя.
Уже сделал. О чем писал в самом пером посте. С зависимостями все ок.
Цитата
swerg написал: Обратите внимание: у вас конфигурация, от которой вы показываете настройки, Debug, а библиотеку вы выбрали не debug для этой конфигурации.
Написал собственную библиотеку для работы с Quik через lua. На компьютере, где велась разработка (Win7), все работает отлично. На другом компьютере с тем же квиком (WinServer 2012R2) получаю ошибку "error loading module 'MyDll' from file '.\MyDll.dll':The specified module could not be found." Проект собирал с конфигурацией "Release", "Win32", "Runtime libriry = Multi-threaded". Прошелся программой Dependency Walker - почти все зависимости есть (http://take.ms/6Knry). Тот же release на компьютере, где писалась библиотека работает на ура. На сервере устанавливал vcredist_x64.exe и vcredist_x86.exe. Что еще я не сделал или сделал не так?
Вопрос в названии темы. При постановке заявки я могу посчитать какое количество контрактов до меня по этой же цене. Но стакан ведь "живой", данные меняются, кто-то снимает заявки, кто-то ставит. Как в любой момент времени посчитать сколько контрактов передо мной?
Дмитрий Минеев пишет: Как "280" разбивать на флаги, если максимум, что мы должны получить - это 255? Иногда проскальзывает "284". Проблема только с маркетными заявками отправляемыми программно. Код отправки:
Кто сказал что до 255? Таблица 5.1 280 = 0x100 + 0x10 + 0x08 284 = 0x100 + 0x10 + 0x08 + 0х04
Да. Все работает. Спасибо. Почему-то подумал, что это битовое значение.
Как "280" разбивать на флаги, если максимум, что мы должны получить - это 255? Иногда проскальзывает "284". Проблема только с маркетными заявками отправляемыми программно. Код отправки:
Код
--Send limit or market order
function SendOrder(operation, price, quantity, type_order, comment)
-- Если это маркет заявка и цена не указана, то подставим цену в зависимости от типа заявки
if type_order == "M"
and price == 0 then
if operation == "B" then
price = tonumber(getParamEx(params.p_classcode, params.p_seccode, "pricemax").param_value)
elseif operation == "S" then
price = tonumber(getParamEx(params.p_classcode, params.p_seccode, "pricemin").param_value)
end
end
transaction = {
["CLASSCODE"] = params.p_classcode,
["ACTION"]="NEW_ORDER",
["ACCOUNT"]=params.account,
["OPERATION"] = operation,
["SECCODE"] = params.p_seccode,
["PRICE"] = tostring(round(price)),
["QUANTITY"] = tostring(quantity),
["TYPE"] = tostring(type_order),
["Условие исполнения"]=tostring("Поставить в очередь"),
["Переносить заявку"] = tostring("Да"),
["Дата экспирации"] = os.date("%Y%m%d", os.time() + 60 * 60 * 24),
}
--Check connection
if isConnected == 0 then
WriteLog("SendOrder", "Try to send limit in offline mode")
else
transaction.TRANS_ID = tostring(trans_id)
transaction.CLIENT_CODE = comment
res = sendTransaction(transaction)
end
if string.len(res) ~= 0 then
message(res)
end
end
Michael Bulychev пишет: При инициализации Lua смотрит на две переменные - LUA_PATH и LUA_CPATH. Если Вы планируете загружать модуль как dll, то он должен находиться в package.cpath, если это код Lua, то package.path. Ошибка, которую Вы получаете, говорит о том, что Lua пытается загрузить dll как свой нативный код. Даже в Вашем примере "..\lib\mingw_dll\?.dll;;;;F :\ lua\5.1\lua\?.luac" смешаны файлы luac и dll. В общем Вам надо разобраться откуда что загружается и навести порядок в библиотеках и путях.
Огромное спасибо!!! Действительно. Все заработало вот так:
Michael Bulychev пишет: добрый день. в присланном файле только это:
Код
require "iuplua"
При этом:
Цитата
Дмитрий Минеев пишет: Добавьте маску c \путь\\?.dll в package.cpath Это уже сделано
Где-то не сходится.
Если Вы копируете библиотеки в папку со скриптом, то: package.cpath = getScriptpath() .. "\\?.dll;".. package.cpath Либо вместо getScriptpath добавьте правильный путь к библиотекам
возможно слишком длинная строка LUA_PATH посмотрите в командной строке командой set не обрезается ли путь
Тут тоже все норм. Вот. Мне кажется не в том направлении идем. Если проблема в пути, то ошибка будет вот такой:
Код
...terminals\QUIK Junior\scripts\RangeForTrade\test.lua:1: module 'iuplua' not found:
no field package.preload['iuplua']
no file '.\iuplua.lua'
no file 'F:\work\trade\ММВБ\terminals\QUIK Junior\lua\iuplua.lua'
no file 'F:\work\trade\ММВБ\terminals\QUIK Junior\lua\iuplua\init.lua'
no file 'F:\work\trade\ММВБ\terminals\QUIK Junior\iuplua.lua'
no file 'F:\work\trade\ММВБ\terminals\QUIK Junior\iuplua\init.lua'
no file 'F:\Lua\5.1\clibs\iuplua51.dll'
no file '.\iuplua.dll'
no file '.\iuplua.so'
no file '..\lib\iuplua.so'
no file '..\lib\vc_dll\iuplua.dll'
no file '..\lib\bcc_dll\iuplua.dll'
no file '..\lib\mingw_dll\iuplua.dll'
no file '.\iuplua.lua'
no file 'F:\work\trade\ММВБ\terminals\QUIK Junior\lua\iuplua.lua'
no file 'F:\work\trade\ММВБ\terminals\QUIK Junior\lua\iuplua\init.lua'
no file 'F:\work\trade\ММВБ\terminals\QUIK Junior\iuplua.lua'
no file 'F:\work\trade\ММВ
Старатель пишет: Наверное, вы какую-то другую строку добавляли:
Цитата
Дмитрий Минеев пишет: error loading module 'iuplua' from file ' C :\ Program Files (x86) \Lua\5.1\clibs\iuplua51.dll': C :\ Program Files (x86) \Lua\5.1\clibs\iuplua51.dll:1: '=' expected near 'ђ'
Это потому, что я переустановил Луа на другой диск. Думал, может что-то с доступом связано.
Michael Bulychev пишет: добрый день. в присланном файле только это:
Код
require "iuplua"
При этом:
Цитата
Дмитрий Минеев пишет: Добавьте маску c \путь\\?.dll в package.cpath Это уже сделано
Где-то не сходится.
Если Вы копируете библиотеки в папку со скриптом, то: package.cpath = getScriptpath() .. "\\?.dll;".. package.cpath Либо вместо getScriptpath добавьте правильный путь к библиотекам
Это уже сделано. Только что отказалась работать еще одна библиотека, которая еще вчера отлично работала. Ошибка та же. Библиотека находится в корне с папкой квика. Вспоминаю, что со вчерашнего дня менялось...