Таблица сделок, номер заявки превращается в число e+
Пользователь
Сообщений: Регистрация: 08.05.2020
01.01.2022 14:08:30
У меня все равно это не заработало. Версия квика 7. Я пытаюсь получить номер сделки из таблицы "Все сделки". Там 19 символов. Мне приходится изварачиваться и делать номер сделки из даты, времени и микросекунд (или милисекунд).
Торговый привод на Lua:
Быстродействие Quik
Пользователь
Сообщений: Регистрация: 08.05.2020
01.01.2022 14:05:33
У меня постоянно в корне квика появляется какой-то файл info.log Версия квика 7.21
Этот файл у меня бывает весит 500 мб, 1 гб+. Стоит его удалить и квик сразу наченает летать.
Можно как-то заблокировать ведение логов и отключить их полность?
Торговый привод на Lua:
Таблица сделок, номер заявки превращается в число e+
Пользователь
Сообщений: Регистрация: 08.05.2020
29.12.2021 15:25:00
Цитата
написал: strig.format("%d",1234567890123456789))
Не выводит то, что нужно - выводит "-2147483648"
math.tointeger - не поддерживает такую функцию?...
Торговый привод на Lua:
Таблица сделок, номер заявки превращается в число e+
У меня это не дает результата - все равно на конце: e+018
Торговый привод на Lua:
Таблица сделок, номер заявки превращается в число e+
Пользователь
Сообщений: Регистрация: 08.05.2020
29.12.2021 14:15:09
Читаю таблицу сделок:
Код
local tradelist = {};
for i = 0,getNumberOf("trades") - 1 do
tradelist[i] = "" ..
getItem("trades",i).datetime.day.."."..getItem("trades",i).datetime.month.."."..getItem("trades",i).datetime.year..";"..
getItem("trades",i).datetime.hour..":"..getItem("trades",i).datetime.min..":"..getItem("trades",i).datetime.sec..";"..
tonumber(string.format("%0.17g", getItem("trades",i).trade_num))..";"..
tonumber(getItem("trades",i).order_num)..";"..
tonumber(getItem("trades",i).trans_id)..";"..
getItem("trades",i).sec_code..";"..
getItem("trades",i).brokerref..";"..
getItem("trades",i).price..";"..
getItem("trades",i).qty..";";
Но при попытке получить номер заявки (order_num, trade_num) - длинное число (19 символов) превращается в число вида 1.2929169375034e+018 Как можно получить обычный номер заявки без e+?
написал: Подскажите пожалуйста рекомендации что еще можно сделать?
В ярлычках квика добавил ключ запуска -clear, теперь всякий мусор прям при запуске квика чистится
Цитата
1.8 Ключи запуска Рабочего места QUIK -clear – очистить служебные файлы, которые содержат торговые данные (info.log (или curr_data.log в зависимости от настроек терминала), acnt.dat, alert.ik, alltrade.dat, trades.dat, orders.dat). Это позволяет ускорить загрузку программы.
только аккуратно, а то вдруг для вас вышеуказанные файлы не мусор
А что в этих файлах может быть ценного?
Торговый привод на Lua:
Прибавить к текущей дате 30 дней (или произвольное кол-во дней)
today = os.time () --получаем текущее время
need_day = today + 30 * 24 * 60 * 60 --прибавляем 30 дней (24*60*60 одни сутки)
date = os.date ( "%Y%m%d" ,need_day) --получаем дату (%Y%m%d формат получаемой даты ГодМесяцДень)
Спасибо. То что нужно!
Торговый привод на Lua:
Быстродействие Quik
Пользователь
Сообщений: Регистрация: 08.05.2020
17.12.2021 21:04:58
Есть какие-то рекомендации для увеличения скорости работы (быстродействия) квика? Сегодня нашел в папке квика лог в корневой директории (вес 1 ГБ+). Удалил его и квик вроде как быстрее стал работать раза в 3.
Подскажите пожалуйста рекомендации что еще можно сделать? Версия квика 7.
Торговый привод на Lua:
Как все таки сделать http запрос из Lua?
Пользователь
Сообщений: Регистрация: 08.05.2020
17.12.2021 18:44:25
Цитата
Nikolay написал: В папке mime находится dll. За поиск динамических библиотек отвечает путь package.cpath
Его тоже необходимо указать.
Чтобы искать во вложенных папках можно использовать такую маску
для package.path: path .."\\?.lua;"..path.."\\?\\?.lua;"
для package.cpath: path .."\\?.dll;"..path.."\\?\\?.dll;"
Ооо! Спасибо большое Вам. Заработало наконец-то после добавления пути "package.cpath"
Код
if string.find(package.path, getScriptPath()..'\\EnterTradeLib\\socket\\?.lua') == nil then
package.path=package.path..';'..getScriptPath()..'\\EnterTradeLib\\socket\\?.lua;'
package.cpath=package.cpath..';'..getScriptPath()..'\\EnterTradeLib\\socket\\?.dll;'
end;
w32 = require("w32");
http = require("socket.http");
Торговый привод на Lua:
Как все таки сделать http запрос из Lua?
Пользователь
Сообщений: Регистрация: 08.05.2020
17.12.2021 17:44:25
Цитата
Anton написал: , непонятно, чего вы уцепились за папку LuaIndicators. В этой папке квик ищет именно индикаторы, то есть которые на график. Для скриптов создайте другую папку, "lua", и в нее кладите все либы. Квик сам вам говорит, где он искал, особенно обратите внимание на строки
Цитата
no file 'C:\QUIK\lua\socket\core.lua' no file 'C:\QUIK\lua\socket\core\init.lua'
Здесь квик хочет загрузить библиотеку с именем "socket.core". Для этого он в папке lua ищет подпапку socket, а в ней либо файл core.lua, либо подпапку core, в которой есть скрипт с именем init.lua. Это для всех библиотек так работает, библиотека это либо один файл, либо папка с файлом init.lua.
Я бы хотел что бы у моего скрипта было все в 1 папке и было в 1 папке бибилотеки, которую я специально выделил. Я перенес три вот файла () mime.lua, socket.lua, ltn12.lua, и добавил вот эту строчку в мой скрипта
Код
if string.find(package.path,'C:\\QUIK\\LuaIndicators\\Git\\EnterTradeLib\\Lua\\?.lua') == nil then
package.path=package.path..';C:\\QUIK\\LuaIndicators\\Git\\EnterTradeLib\\Lua\\?.lua;'
end;
И скрипт начал работать. Но как мне быть с папками mime/, и soket/ Если я их переношу, они перестают работать. Я бы тоже хотел их перенести в папку моего скрипта.
Торговый привод на Lua:
Как все таки сделать http запрос из Lua?
Пользователь
Сообщений: Регистрация: 08.05.2020
17.12.2021 17:38:36
Уже и так даже попробовал и все равно не работает, если поместить это все в папку моего скрипта:
Код
-- if string.find(package.path,'C:\\QUIK\\LuaIndicators\\Git\\EnterTradeLib\\Lua\\?.?') == nil then
-- package.path=package.path..';C:\\QUIK\\LuaIndicators\\Git\\EnterTradeLib\\Lua\\?.?;'
-- end;
-- if string.find(package.path,'C:\\QUIK\\LuaIndicators\\Git\\EnterTradeLib\\Lua\\mime\\?.?') == nil then
-- package.path=package.path..';C:\\QUIK\\LuaIndicators\\Git\\EnterTradeLib\\Lua\\mime\\?.?;'
-- end;
-- if string.find(package.path,'C:\\QUIK\\LuaIndicators\\Git\\EnterTradeLib\\Lua\\socket\\?.?') == nil then
-- package.path=package.path..';C:\\QUIK\\LuaIndicators\\Git\\EnterTradeLib\\Lua\\socket\\?.?;'
-- end;
Торговый привод на Lua:
Как все таки сделать http запрос из Lua?
Пользователь
Сообщений: Регистрация: 08.05.2020
17.12.2021 17:23:24
Цитата
Nikolay написал: Чтобы скрипт нашел библиотеку в каталогах отличных от предопределенных, необходимо дополнить путь искателя
Моя идея положить эти библиотеки в папку моего скрипта, но когда я так делаю они перестают работать, работают только когда все добро размещено в папке: C:\QUIK\LuaIndicators Вверху моего скрипта я дополнил путь, библиотеки (скрипты) разместил в соответствующую папке моего скрипта:
Код
if string.find(package.path,'C:\\QUIK\\LuaIndicators\\Git\\EnterTradeLib\\Lua\\?.lua') == nil then
package.path=package.path..';C:\\QUIK\\LuaIndicators\\Git\\EnterTradeLib\\Lua\\?.lua;'
end;
w32 = require("w32"); -> это звуки (они и так находятся)...
http = require("socket.http"); -> а вот это не находится когда я размещаю в папку моего скрипта
Вот исходные файлы библиотек - здесь 2 папки и несколько файлов. Не пойму что я не правильно делаю. Квик пишет
Код
...UIK\LuaIndicators\Git\EnterTradeLib\Lua\socket.lua:13: module 'socket.core' not found:
no field package.preload['socket.core']
no file '.\socket\core.lua'
no file 'C:\QUIK\lua\socket\core.lua'
no file 'C:\QUIK\lua\socket\core\init.lua'
no file 'C:\QUIK\socket\core.lua'
no file 'C:\QUIK\socket\core\init.lua'
no file 'C:\QUIK\Include\socket\core.lua'
no file 'C:\QUIK\Include\socket\core.luac'
no file 'C:\QUIK\LuaIndicators\socket\core.lua'
no file 'C:\QUIK\LuaIndicators\socket\core.luac'
no file 'C:\Program Files (x86)\Lua\5.1\lua\socket\core.luac'
no file 'C:\QUIK\LuaIndicators\Git\EnterTradeLib\Lua\socket\core.lua'
no file '.\socket\core.dll'
no file 'C:\QUIK\socket\core.dll'
no file 'C:\QUIK\loadall.dll'
no file
Торговый привод на Lua:
Как все таки сделать http запрос из Lua?
Пользователь
Сообщений: Регистрация: 08.05.2020
17.12.2021 16:57:43
Цитата
Nikolay написал: Что значит зачем. Lua не имеет встроенной поддержки web soсket. Поэтому необходимы библиотеки (а не программы), чтобы сие действие стало доступно. Ссылки на сборки библиотек недавно обсуждались.
Не могу понять что нужно скачать и что закинуть в папку моего скрипта? Мне помогла эта тема:
Я закинул по списку данные файлы в папку C:/Quik/Luaindicators/
И у меня все работает. Но я бы хотел все это закинуть в папку моего скрипта:
Когда я закидываю все это в папку моего скрипта: C:\QUIK\LuaIndicators\QET\EnterTradeLib\lua\ Это перестает работать: Quik при запуске скрипта пишет: Что не находит таких библиотек.
Как их в эту папку засунуть? Скрипты подключаю так:
Код
w32 = require("w32"); -> вот что интересно это лежит в папке C:\QUIK\LuaIndicators\QET\EnterTradeLib\ и квик его находит
http = require("socket.http"); -> а это нет... находит только когда это лежит в папке C:/Quik/Luaindicators/
Сори за множество вопросов - но здесь в луа реально не так как в PHP с его наймспейсами и прочими фишками...
Торговый привод на Lua:
Как все таки сделать http запрос из Lua?
Пользователь
Сообщений: Регистрация: 08.05.2020
17.12.2021 16:01:55
Вот даже из этого работающего примера я не пойму - зачем нужно ставить дополнительную программу (ну это еще ладно) - ну если мы ее поставил - зачем еще какие-то 2 папки закидывать в luaindicators?
Торговый привод на Lua:
Как все таки сделать http запрос из Lua?
Пользователь
Сообщений: Регистрация: 08.05.2020
17.12.2021 15:51:50
Цитата
Let_it_go написал: Когда-то скачал робота, который заходит на сайт Смарт Лаб и считывает с него календарь дивидендов, сигналит в КВИК если завтра ожидается дивидендный гэп. Сейчас скрипт не работает, потому что смарт лаб поменял вёрстку дивидендной страницы, но раньше я этот скрипт запускал и всё работало.
Код
if string.find (package.path,'C:\\Program Files (x86)\\Lua\\ 5.1 \\lua\\?.lua') = = nil then
package.path = package.path .. ';C:\\Program Files (x86)\\Lua\\ 5.1 \\lua\\?.lua;'
end
if string.find (package.path,'C:\\Program Files\\Lua\\ 5.1 \\lua\\?.lua') = = nil then
package.path = package.path .. ';C:\\Program Files\\Lua\\ 5.1 \\lua\\?.lua;'
end
require "socket"
is_run = true
http = require 'socket.http'
local address = 'http://smart-lab.ru/dividends/index/order_by_t2_date/desc/'
local ts = {"tr","strong","span"}
local lMax = 91 --число строк в таблице
function do_smart ()
local body = http.request (address)
----------------------
for i = 1 , # ts do
body = string.gsub (body,"( < %s * " .. ts[i] .. "[^ > ] * > )","")
body = string.gsub (body,"( < %s * /" .. ts[i] .. "[^ > ] * > )","")
end
body = string.gsub (body," "," ")
local t={} -- результат
local j=0; local k=0; local text=0;
local m=1;
local n=string.find(body," td > ",m, # body, true );
local x = string.byte (body,n - 1 );
m = m + 3 ;
-----------------
while # body > m do
n = string.find (body, "td>" ,m, # body, true );
if n then local n1 = n;
if x~ = 47 then
x = string.byte (body,n - 1 ); if x = = 47 then n = n - 1 ; end
text = string.sub (body, m,n - 2 ); text = nkdelspace(text);
local len = string.len (text);
if len < 20 then
j = j + 1 ; if j = = 1 then k = k + 1 ; t[k] = {} end
local tt = t[k]; tt[ # tt + 1 ] = text;
if j = = 8 then if k = = lMax then break end
j = 0 end
end
else
x = string.byte (body,n - 1 );
end
m = n1 + 3 ;
else break ;
end
end
trade_date = getParamEx ( "TQBR" ,"GAZP","TRADE_DATE_CODE").param_image
prev_date = getParamEx ( "TQBR" ,"GAZP","PREVDATE").param_image
for k,v in ipairs (t) do
local td = trade_date .. " "
local pd=prev_date.." "
if td==t[k][2] then
message (" Zavtra GAP "..t[k][1].." div = "..t[k][6].." | "..t[k][8],1)
end
if pd==t[k][2] then
message (" Segodnya GAP "..t[k][1].." div = "..t[k][6].." | "..t[k][8],1)
end
end
end
function OnCleanUp ()
sleep (700000)
do_smart ()
end
function OnConnected ()
do_smart ()
end
function OnStop ()
return 100
end
--------------------
function nkdelspace(s)
local len=string.len(s); local z=" "; local x1 = 32 ;
for i = 1 ,len do local x = string.byte (s,i); if x < 32 then x = 32 end
if (x~ = 32 or x1~ = 32 ) then
if z = = "" then z = string.char (x) else z = z .. string.char (x) end
x1 = x; end
end --убираем проблелы
return z;
end
do_smart ()
function main ()
while is_run do
sleep ( 1000 )
end
end
в комплекте скрипта в архиве были библиотеки Socket и mime
Вот пост где автор опубликовал этого робота с описанием что он делает
Очень актуален вопрос HTTP-запроса для Lua Quik (отказался от идеи читать почту). Что бы запустить этот вариант пришлось:
1) Установить программу Lua 2) Прописать пути вверху скрипта string.find (package.path,'C:\\Program Files... 3) Закинуть в папку luaIndicators/ папки mime & socket
Для меня этот код запуска для решения задачи + установки дополнительной программы = мягко говоря вынос мозга (в сравнении с PHP - где библиотеки подключаются через композер, по нормальному работают require (inclue), где понимаешь что подключаешь...
А здесь совсем не понимаю как устроен луа в плане подключения библиотек. Может кто-нибудь объяснить как работает подключение библиотек в луа.
И есть ли что-то попроще без установки программ что бы запустить простую функцию file_get_contents (http) в lua? Спасибо.
Торговый привод на Lua:
Quik - чтение почты
Пользователь
Сообщений: Регистрация: 08.05.2020
17.12.2021 15:40:58
Как то у меня так ничего с почтой и не получилось.
Торговый привод на Lua:
Получение из таблицы текущих торгов всех доступных на текущий момент фьючерсов по инструменту
Пользователь
Сообщений: Регистрация: 08.05.2020
17.12.2021 14:21:30
Спасибо - очень помогло. Но у меня заработало получение актуальных фьючерсов только после изменения изменения шаблона поиска для функции gmatch() for test_sec_code in string.gmatch(sec_list, "("..pref.."[^%s,]+)") do -- Перебираем список
Торговый привод на Lua:
Получение из таблицы текущих торгов всех доступных на текущий момент фьючерсов по инструменту
Пользователь
Сообщений: Регистрация: 08.05.2020
17.12.2021 13:47:45
Цитата
BlaZed написал: , у меня когда-то подобная задача стояла
В код зашивать список инструментов так себе идея, если необходимо несколько инструментов отслеживать, то грустно станет списки поддерживать в актуальном состоянии. Динамически будет проще и красивее.
Код
function FindSecCode (class_code,pref,dtmd) -- Определяем инструмент для торговли
local sec_list = getClassSecurities (class_code) -- Получаем список инструментов
for test_sec_code in string.gmatch (sec_list,"( "..pref.." [^,] + )") do -- Перебираем список
local param = getParamEx (class_code,test_sec_code,"DAYS_TO_MAT_DATE")
if (param.result = = "1" ) and (param.param_image~ = "" ) and (param.param_type~ = "0" ) then -- Параметр получен корректно?
if (tonumber(param.param_value) > = dtmd) then return test_sec_code end -- Проверяем дни до экспирации
end
end
end
sec_code = FindSecCode( "SPBFUT" ,"BR", 3 )
if (sec_code) then message ( "actual futures is " .. sec_code) end
Возможно, стоило бы сортировку прикрутить, но сколько не наблюдал, от брокера сразу отсортированный по времени экспирации список прилетает.
Подскажите пожалуйста почему вы остановились именно на 3 днях до экспирации? А не на 1?
Торговый привод на Lua:
Quik - определить актуальный код фьючерса
Пользователь
Сообщений: Регистрация: 08.05.2020
17.12.2021 13:30:40
Спасибо за развернутый ответ. А то по дате погашения собирался искать.
Торговый привод на Lua:
Использование "якоря" для скрипта Lua
Пользователь
Сообщений: Регистрация: 08.05.2020
17.12.2021 13:27:18
Сори не в ту тему написал. Тоже жду якорь!
Торговый привод на Lua:
Использование "якоря" для скрипта Lua
Пользователь
Сообщений: Регистрация: 08.05.2020
17.12.2021 13:26:09
Единственное что в моем решении интересует - насколько это правдоподобное решение?
Торговый привод на Lua:
Использование "якоря" для скрипта Lua
Пользователь
Сообщений: Регистрация: 08.05.2020
17.12.2021 13:25:26
Цитата
Roffild написал: Я уже застолбил это пожелание. Ожидаю реализацию в ближайшие 10 лет...
Ну судя по всему если ближайшие 10 лет - то могу свое решение предложить. Вы всегда знаете первые две буквы кода - например GZ
Получается нужно вычеслить месяц (3 символ) + год (4 символ). Просканировать таблицу текущие торги - фильтруем инструменты по первым двум символам - далее смотрим столбец до даты погашения и ищем самый минимальный срок жизни - это и есть актуальный фьюч.
Если конечно других вариантов нет.
На примере газпрома:
Торговый привод на Lua:
Quik - пустая таблица обезличенных сделок
Пользователь
Сообщений: Регистрация: 08.05.2020
17.12.2021 12:47:50
Цитата
boolean.rat написал: в терминале в настройках не поставлена галочка по интересующему инструмент(у/ам)
Что за галочка?
Цитата
написал:
Цитата
написал: С чем это может быть связано?
Брокер вам не включил тиковые данные. Звоните ему
+
Торговый привод на Lua:
Прибавить к текущей дате 30 дней (или произвольное кол-во дней)
Пользователь
Сообщений: Регистрация: 08.05.2020
17.12.2021 00:36:43
Как на языке луа сделать прибавление текущей даты + 30 дней (или произвольное кол-во)?
Торговый привод на Lua:
Quik - пустая таблица обезличенных сделок
Пользователь
Сообщений: Регистрация: 08.05.2020
17.12.2021 00:35:08
С чем это может быть связано?
Торговый привод на Lua:
Quik - определить актуальный код фьючерса
Пользователь
Сообщений: Регистрация: 08.05.2020
17.12.2021 00:34:40
Можно ли как-то автоматически определить актуальный торгуемый фьючерс?
Торговый привод на Lua:
Использование "якоря" для скрипта Lua
Пользователь
Сообщений: Регистрация: 08.05.2020
16.12.2021 22:27:46
На каждом окне в Квике в верхнем правом углу есть иконки свернуть окно, уменьшить размер, закрыть окно. А также есть иконка якоря позволяет позволяет переключить инструмент.
Можно ли как-то этот якорь аналогичным образом использовать для lua скриптов?
Торговый привод на Lua:
Quik - чтение почты
Пользователь
Сообщений: Регистрация: 08.05.2020
01.12.2021 15:39:30
Сокет смог запустить прочитав этот пост 1) установил программу 2) закинул две папки mime & socket в LuaIndicators 3) подключил в скрипте
написал: Спасибо за развернутый ответ. Можно пример с вашей консольной программы.
Она написана на C#. Я её ещё не выкладывал в открытый доступ.
Но, все можно найти в примерах MailKit:
Уже и туда и сюда попробовал положить эти библиотеки. Но QUIK все равно их не находит... Не пойму что могу делать не правиьно?
Код
...\QUIK_2\LuaIndicators\Git\EnterTrade.lua:64: module 'socket' not found:
no field package.preload['socket']
no file '.\socket.lua'
no file 'C:\QUIK_2\lua\socket.lua'
no file 'C:\QUIK_2\lua\socket\init.lua'
no file 'C:\QUIK_2\socket.lua'
no file 'C:\QUIK_2\socket\init.lua'
no file 'C:\QUIK_2\Include\socket.lua'
no file 'C:\QUIK_2\Include\socket.luac'
no file 'C:\QUIK_2\LuaIndicators\socket.lua'
no file 'C:\QUIK_2\LuaIndicators\socket.luac'
no file 'C:\Program Files (x86)\Lua\5.1\lua\socket.lua'
no file 'C:\Program Files\Lua\5.1\lua\socket.lua'
no file '.\socket.dll'
no file 'C:\QUIK_2\socket.dll'
no file 'C:\QUIK_2\loadall.dll'
no file 'C:\QUIK_2\Include\socket.dll'
no file 'C:\QUIK_2\LuaIndicators\socket.dll'
Торговый привод на Lua:
Quik - чтение почты
Пользователь
Сообщений: Регистрация: 08.05.2020
30.11.2021 18:21:44
Цитата
Nikolay написал: Речь не про консольную команду, а про консольную программу - читай сервис постоянно работающий и читающий почту.
В примере, что был приведен, видны зависимости:
Код
local imap4 = require 'imap4'
local ssl = require ( "ssl" )
т.е. необходимо иметь библиотеку imap4, ссылка на которую была приведена. Также, если используется ssl, то необходима ssl.
Если посмотреть на код библиотеки imap, то видно, что для ее работы необходима socket
Код
local socket = require 'socket'
Поэтому необходимый минимум - это библиотеки imap и socket, что и было написано выше.
Спасибо за развернутый ответ. Можно пример с вашей консольной программы.
Торговый привод на Lua:
Quik - чтение почты
Пользователь
Сообщений: Регистрация: 08.05.2020
30.11.2021 18:10:32
Цитата
Nikolay написал: Если не использовать SSL, то достаточно socket - найдете здесь imap -
Если же использовать SSL, то необходимо иметь luasec. Я стабильно работающую с 5.4 и 5.3 не нашел.
Поэтому, чтобы не зависеть от библиотек lua, уже давно написал себе консольную программку, читающую почту и записывающую в файлы, которые уже скрипт читает и обрабатывает.
1) Очень интересная идея с консольной командой. Можно пример исходник (так понимаю это можно написать через блокнот). Вы ее потом как запускаете - через Quik? 2) Не совсем пойму по вашим ссылкам нужно использовать socket + imap или как? 3) Чем лучше SSL и можно ли без него?
socket - это библиотека для lua. Она включает в себя как lua файлы, так и dll. Она должна быть собрана под нужную версию lua.
imap4 - это тоже библиотека. Поиск любой системе выведет на репозитарий проекта.
Если есть знатоки и у кого-то есть возможность (готов за вознаграждение) - помогите пожалуйста реализовать чтение почты на lua в Quik 8-версии. Нужны исходники Lua-скрипта, который читает почтовый ящик mail.ru и файлы библиотек, которые нужно закинуть в папку quik. У меня не получило найти библиотки и запустить чтение почты.
Торговый привод на Lua:
Quik - чтение почты
Пользователь
Сообщений: Регистрация: 08.05.2020
04.10.2021 21:17:30
Жалко - что никто не может подсказать...
Торговый привод на Lua:
Quik - чтение почты
Пользователь
Сообщений: Регистрация: 08.05.2020
01.10.2021 21:53:11
Цитата
Nikolay написал: Да. socket найти под x64 lua 5.3 можно. А вот ssl - уже сложнее. Хотя, кажется, на форуме выкладывали собранные, рабочие варианты.
Не совсем понимаю - здесь требуется подключить следующие библиотеки? local imap4 = require "imap4" local Message = require "pop3.message"
Зачем сокет? Где найти эти imap4, pop3? Искать нужно dll файлы?
Торговый привод на Lua:
Quik - чтение почты
Пользователь
Сообщений: Регистрация: 08.05.2020
30.09.2021 21:26:11
Понимаю что нужны библиотеки. Но где их скачать? Это должны быть dll-файлы?
Торговый привод на Lua:
Quik - чтение почты
Пользователь
Сообщений: Регистрация: 08.05.2020
29.09.2021 21:35:58
Нашел более понятный пример, но не пойму где взять библиотеки для подключения?
Код
local imap4 = require "imap4"
local Message = require "pop3.message"
local connection = imap4('imap.qip.ru', 143)
assert(connection:isCapable('IMAP4rev1'))
connection:login('****', '****')
-- Sel ect INBOX with read only permissions.
local info = connection:examine('INBOX')
print(info.exist, info.recent)
-- List info on the 4 most recent mails.
for _,v in pairs(connection:fetch('(UID BODY.PEEK[HEADER.FIELDS (Subject To From Date)])', (info.exist-4)..':*')) do
print("-------------------------")
local msg = Message(v.BODY.value)
print("ID: ", msg:id())
print("subject: ", msg:subject())
print("to: ", msg:to())
print("from: ", msg:from())
print("fr om addr: ", msg:from_address())
print("reply: ", msg:reply_to())
print("reply addr: ", msg:reply_address())
print("trunc: ", msg:is_truncated())
for i,v in ipairs(msg:full_content()) do
if v.text then print(" ", i , "TEXT: ", v.type, #v.text)
else print(" ", i , "FILE: ", v.type, v.file_name or v.name, #v.data) end
end
end
-- close connection
connection:logout()
local version = getInfoParam ( "VERSION" )
local bits = version:sub( 1 , 2 ) = = '7.' and 'x86' or 'x64'
local gSPath = getScriptPath ()
local libs_Path = getScriptPath () .. '\\clibs_' .. bits
package.cpath = libs_Path .. "\\?.dll;" .. libs_Path .. "\\?\\?.dll;" .. package.cpath
package.path = gSPath .. "\\?.lua;" .. gSPath .. "\\?\\?.lua;" .. gSPath .. "\\?\\init.lua;" .. package.path
local imap4 = require 'imap4'
local ssl = require ( "ssl" )
local imapServer = 'imap.yandex.com'
local serverPort = 993
local login = 'login'
local password = 'pass'
-- If in doubt, see RFC 3501:
-- https://tools.ietf.org/html/rfc3501#section-6
-- Create new imap4 connection.
-- Port is optional and defaults to 143.
local connection = imap4(imapServer, serverPort, {protocol = 'tlsv1' })
-- If you are connecting to gmail, yahoo or any other server that needs a SSL
-- connection before accepting commands, uncomment this line:
--
-- connection:enabletls{protocol = 'sslv3'}
--
-- You can skip this step by creating the connection using
--
-- local connection = imap4('imap.gmail.com', 993, {protocol = 'sslv3'})
-- Print the servers capabilities.
print ( table.concat (connection:capability(), ', ' ))
-- Make sure we can do what we came for.
assert(connection:isCapable( 'IMAP4rev1' ))
-- Login. Warning: The credentials are sent in plaintext unless you
-- tunnel the connection over ssh, or use SSL (either via the method shown
-- above or calling connection:starttls(params) before logging in).
connection:login(login, password)
-- connection:lsub() lists all subscribed mailboxes.
for mb, info in pairs(connection:lsub()) do
-- connection:status(mailbox, items) queries status of a mailbox.
-- Note: The mailbox name may contain unescaped whitespace. You are
-- responsible to escape it properly - try ("%q"):format(mb).
local stat = connection:status(mb, {'MESSAGES', 'RECENT' , 'UNSEEN' })
print (mb, stat.MESSAGES, stat.RECENT, stat.UNSEEN)
end
-- Sel ect INBOX with read only permissions.
local info = connection:examine( 'INBOX' )
print (info.exist, info.recent)
-- List info on the 4 most recent mails.
-- See https://tools.ietf.org/html/rfc3501#section-6.4.5
for _,v in pairs(connection:fetch( '(UID BODY.PEEK[HEADER.FIELDS (From Date Subject)])' , (info.exist) .. ': * ')) do
-- `v' contains the response as mixed (possibly nested) table.
-- Keys are stored in the list part. In this example:
--
-- v[1] = "UID", v[2] = BODY
--
-- `v[key]' holds the value of that part, e.g.
--
-- v.UID = 10
--
-- `v.BODY' is the only exception and returns a table of the format
--
-- {parts = part-table, value = response}
--
-- For example:
--
-- v.BODY = {
-- parts = {"HEADER.FIELDS", {"From", "Date", "Subject"}},
-- value = "Fr om: Foo <foo@bar.baz>\r\nDate:..."
-- }
print (v.id, v.UID, v.BODY.value)
local txt = connection:fetch( '(BODY.PEEK[TEXT])' , v.id)
if # txt > 0 then
print (txt[ 1 ].BODY.value)
end
end
-- close connection
connection:logout()
Не пойму какие библиотеки нужно подключить? Нашел еще на
Торговый привод на Lua:
Quik - чтение почты
Пользователь
Сообщений: Регистрация: 08.05.2020
27.09.2021 05:32:44
Можно ли через QUIK с помощью LUA прочитать список email писем (mail.ru)? Есть ли образец скрипта как это можно сделать?
Торговый привод на Lua:
№ номер заявки 1.952337642788e+018 VS 2 952 137 242 587 989 181
Правильно ли понимаю если у меня по какой-то причине будет в течении дня сгенерировано два одинаковых TRANS_ID с одинаковыми номерами - максимум чем мне это грозит при снятии стоп-лоса, это то, что будет снят только 1, а второй останется болтаться?
Торговый привод на Lua:
№ номер заявки 1.952337642788e+018 VS 2 952 137 242 587 989 181
UNIX TIME - это просто количество секунд начиная с какой-то даты (1 января 1970г). можно получить через тот же os.date Судя по всему, Вам не это нужно. Просто сами определите для себя какое число Вам требуется и сгенерируйте. тех поддержка в этом месте не причем. Вопрос только и только на Вашей стороне. Хотите, считайте тот же UNIX TIME но с 2000 года или "сожмите" дату до нужного размера (например сложив чила) Или другие варианты которые Вам понравятся.
Мне нужно как-то сгенерировать TRANS_ID - уникальное число со смыслом. А не просто уникальное число.
Торговый привод на Lua:
№ номер заявки 1.952337642788e+018 VS 2 952 137 242 587 989 181
Пользователь
Сообщений: Регистрация: 08.05.2020
16.07.2021 10:45:52
Цитата
Sergey Gorokhov написал: , Дополним, судя по всему вопрос не технический, а логический. Нам не важно что вы напишите в TRANS_ID, главное чтобы размер был не больше «2 147 483 647»
Вы сами решите для себя нужна ли Вам вообще os.date("%d%H%M%S"), может ее не надо там указывать и все? если нужна, сами для себя решите зачем, может там достаточно краткого формата ДДММГГ
Если вопрос в том, как в os.date указать выходной формат, то ответ есть в
Таким образом я пытаюсь сгенерировать уникальное число для ID-транзакции. А UNIX TIME как получить?
Торговый привод на Lua:
№ номер заявки 1.952337642788e+018 VS 2 952 137 242 587 989 181
Для корректной работы с 19-значными номерами заявок, терминал потребуется обновить до версии не ниже 8.4 (лучше сразу выполнить обновление до актуальной версии).
Также заметим, что для работы терминала версии 8.0 и выше, требуется 64 -разрядная операционная система. Если у Вас 32-разрядная ОС, ее также потребуется обновить.
Если бы так просто было обновиться - я бы с удовольствием... Судя по всему проблема в ограничениях на кол-во символов для поля TRANS_ID
TRANS_ID
-
Уникальный идентификационный номер заявки, значение от «1» до «2 147 483 647»
Нашел решение в генерации уникального числа следующим образом:
500 служебный код + os.date("%d%H%M%S") + № контракта (++) Проблема в том что не влажу в число символов.
Можно ли как-то вот это " os.date("%d%H%M%S") " преобразовать в меньшее число символов? По аналогии как md5() но только нужны числа.
Торговый привод на Lua:
№ номер заявки 1.952337642788e+018 VS 2 952 137 242 587 989 181
Уточните, пожалуйста, какая версия рабочего места используется?
7.27.2.1
Торговый привод на Lua:
№ номер заявки 1.952337642788e+018 VS 2 952 137 242 587 989 181
Пользователь
Сообщений: Регистрация: 08.05.2020
15.07.2021 18:10:46
Попробовал сделать еще проще:
local bbb = 1952337642787989182; message("Hi = " .. bbb);
Выводит Hi = 1.952337642788e+018
А нужно обычное целое число. Как быть?
Торговый привод на Lua:
№ номер заявки 1.952337642788e+018 VS 2 952 137 242 587 989 181
Пользователь
Сообщений: Регистрация: 08.05.2020
15.07.2021 18:00:22
Добрый день.
Подскажите пожалуйста столкнулся с проблемой - номера заявок очень длинные и когда в функцию
function OnTrade(trade) local trade_num = trade.trade_num; local trans_id = trade.trans_id;
приходит trade_num вместо обычного числа из 18 символов приходит что то типа: 1.952337642788e+018. В результате пишет не возможно создать заявку (стоп-ордер).
Как преобразовать такое число с "e+018" в обычное число сколько бы там не было символов?
Торговый привод на Lua:
Enter Trade 0.1 - Торговый привод для терминала Quik с открытым исходным кодом
Пользователь
Сообщений: Регистрация: 08.05.2020
17.06.2020 20:38:03
Цитата
Nikolay написал: Ну а форма подачи Вашего произведения говорит больше о рекламе, а не о разработке. Поэтому была озвучена рекомендация о GitHub. Я бы хотел бысто взглянуть на код не продираясь сквозь посторонюю информацию. Тем более, что код открытый, как никак. Скачивать с неизвестного сайта архивы... Это было опасно уже в 1994 году.
В этом плане вы правы - да лучше на GitHub выложить и удобнее будет смотреть исходный код. Исходники опубликовал на GitHub-е:
Торговый привод на Lua:
Enter Trade 0.1 - Торговый привод для терминала Quik с открытым исходным кодом
Пользователь
Сообщений: Регистрация: 08.05.2020
17.06.2020 19:09:51
Цитата
Nikolay написал: Такого добра полно на просторах. Такого добра полно на просторах. Кто не писал логгинг и журналы сделок, скринеры, роботы и т.д...
Возможно и полно, возможно есть и платные за небольшую сумму и бесплатные. Возможно есть и очень дорогие. Но мне ни один из них не подошел в рамках того, то что мне повседневно нужно в одном флаконе для рынка Forts (открытие сделок с расчетом позиции, закрытие по частям, автостопы к таким открытым позициям, автозакрытие по параметрам, риск-менеджер с настраиваемыми параметрами, и алерты, которые можно было бы поставить за 1-2 секунды. А самое главное журнал сделок - тот же простой журнал есть в Metatrader. Кроме того я не практикую алготрейдинг (во всяком случае пока и точно для него использовал бы другие готовые инструменты). И мне не было бы необходимым проделывать такую масштабную работу по разработке такого привода и погружении в Lua-скрипт.
Цитата
Nikolay написал: Только не стоит сюда выносить. На СмартЛабе или любой социальной ... будет самое то... Здесь же хотелось бы обсуждать технические вопросы, не более.
Я бы очень хотел видеть такой штатный функционал в рамках самого Quik. Как он мог бы выглядеть оформил в виде такого привода. Metatrader я например не использую по психологическим и иным причинам. Пока для меня Quik 7 является основой.
На данный момент, главное концептуальное неудобство привода пока есть только в том, что он не удобен для тех кто торгует больше 1 инструмента - переключатель не удобный. И чем это не технический вопрос? - вопрос то к поддержке, а не к Вам. Форум насколько полагаю полностью посвящен терминалу.
(PS. Заведите аккаунт на GitHub, поменьше используейте dofile, глобальные переменные и функции, ну и callback не место для сложных действий и точно не для совершения транзакций)
Пока не вижу необходимости в аккаунте GitHub. По поводу того, что вы советуете использовать и не использовать - не вижу в ваших словах конструктивных замечаний. Вы бы предложили какую-то часть кода и сказали бы что вот здесь лучше так, а здесь лучше так и было бы что обсудить и улучшить с технической точки зрения.
Торговый привод на Lua:
Enter Trade 0.1 - Торговый привод для терминала Quik с открытым исходным кодом
Пользователь
Сообщений: Регистрация: 08.05.2020
17.06.2020 14:09:08
Для поддержки - будет желание зарегистрируйте пожелание на совместный проект по разработке вот такого привода для QUIK с журналом сделок, что бы его включить в коробку терминала по умолчанию. Мне очень не хватало подобного функционала на начальном этапе знакомства с терминалом и после когда уже разобрался в нем. Полагаю для многих частных трейдоров это сделает торговлю более удобной, по крайней мере мне это экономит достаточно большое кол-во времени по выставлению заявок, расчету депозита, и текущих сделанных сделках.
Периодически люди пишут комментарии с идеями на доработку - полагаю у этого есть потенциал. А также просьбы адаптировать привод для Quik 8. Мне пока вполне хватило того, что реализовано уже сейчас и для Quik 7. Единственное что еще бы очень хотел реализовать в приоритетном порядке - это автозакрытие и БУ.
Контактные данные для связи есть на моем сайте. Иван.