Иван (Все сообщения пользователя)

Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 След.
Таблица сделок, номер заявки превращается в число e+
 
У меня все равно это не заработало.
Версия квика 7. Я пытаюсь получить номер сделки из таблицы "Все сделки". Там 19 символов.
Мне приходится изварачиваться и делать номер сделки из даты, времени и микросекунд (или милисекунд).
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Быстродействие Quik
 
У меня постоянно в корне квика появляется какой-то файл info.log
Версия квика 7.21

Этот файл у меня бывает весит 500 мб, 1 гб+.
Стоит его удалить и квик сразу наченает летать.

Можно как-то заблокировать ведение логов и отключить их полность?
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Таблица сделок, номер заявки превращается в число e+
 
Цитата
s_mike@rambler.ru написал:
strig.format("%d",1234567890123456789))
Не выводит то, что нужно - выводит "-2147483648"


math.tointeger - не поддерживает такую функцию?...
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Таблица сделок, номер заявки превращается в число e+
 
Цитата
_sk_ написал:
tostring
У меня это не дает результата - все равно на конце: e+018
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Таблица сделок, номер заявки превращается в число e+
 
Читаю таблицу сделок:
Код
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+?
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Быстродействие Quik
 
Цитата
BlaZed написал:
Цитата
Иван написал:
Подскажите пожалуйста рекомендации что еще можно сделать?

В ярлычках квика добавил ключ запуска -clear, теперь всякий мусор прям при запуске квика чистится
Цитата
1.8 Ключи запуска Рабочего места QUIK
-clear – очистить служебные файлы, которые содержат торговые данные (info.log (или curr_data.log в зависимости от настроек терминала), acnt.dat, alert.ik, alltrade.dat,
trades.dat, orders.dat). Это позволяет ускорить загрузку программы.
только аккуратно, а то вдруг для вас вышеуказанные файлы не мусор
А что в этих файлах может быть ценного?
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Прибавить к текущей дате 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: https://github.com/iv-litovchenko/Quik-Enter-Trade
Быстродействие Quik
 
Есть какие-то рекомендации для увеличения скорости работы (быстродействия) квика?
Сегодня нашел в папке квика лог в корневой директории (вес 1 ГБ+). Удалил его и квик вроде как быстрее стал работать раза в 3.

Подскажите пожалуйста рекомендации что еще можно сделать?
Версия квика 7.
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Как все таки сделать http запрос из Lua?
 
Цитата
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: https://github.com/iv-litovchenko/Quik-Enter-Trade
Как все таки сделать http запрос из Lua?
 
Цитата
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 папке бибилотеки, которую я специально выделил.
Я перенес три вот файла (https://disk.yandex.ru/d/qRNTqf562u3g8Q) 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: https://github.com/iv-litovchenko/Quik-Enter-Trade
Как все таки сделать http запрос из Lua?
 
Уже и так даже попробовал и все равно не работает, если поместить это все в папку моего скрипта:
Код
-- 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: https://github.com/iv-litovchenko/Quik-Enter-Trade
Как все таки сделать http запрос из Lua?
 
Цитата
Nikolay написал:
Чтобы скрипт нашел библиотеку в каталогах отличных от предопределенных, необходимо дополнить путь искателя

Можно напрямую указать:

package.path=package.path..';C:\QUIK\LuaIndicators\QET\EnterTradeLib\\\?.lua;'

require же должен знать где искать файлы.
Моя идея положить эти библиотеки в папку моего скрипта, но когда я так делаю они перестают работать, работают только когда все добро размещено в папке: 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 папки и несколько файлов. https://disk.yandex.ru/d/qRNTqf562u3g8Q
Не пойму что я не правильно делаю.
Квик пишет
Код
...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: https://github.com/iv-litovchenko/Quik-Enter-Trade
Как все таки сделать http запрос из Lua?
 
Цитата
Nikolay написал:
Что значит зачем. Lua не имеет встроенной поддержки web soсket. Поэтому необходимы библиотеки (а не программы), чтобы сие действие стало доступно.
Ссылки на сборки библиотек недавно обсуждались.
Не могу понять что нужно скачать и что закинуть в папку моего скрипта?
Мне помогла эта тема: https://coderoad.ru/48035241/%D0%BB%D0%BE%D0%BA%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B­%D0%B9-%D1%81%D0%BE%D0%...

Я закинул по списку данные файлы в папку C:/Quik/Luaindicators/
Код
Release
├── socket
│   ├── ftp.lua
│   ├── http.lua
│   ├── smtp.lua
│   ├── tp.lua
│   └── url.lua
├── mime
│   └── core.dll
├── ltn12.lua
├── mime.lua
├── socket.dll    <--- renamed from $(LUA_PATH)\clibs\socket\core.dll
├── socket.lua
├── lua5.1.dll
├── sample.exe
└── sample.lua
И у меня все работает.
Но я бы хотел все это закинуть в папку моего скрипта:

Когда я закидываю все это в папку моего скрипта: C:\QUIK\LuaIndicators\QET\EnterTradeLib\lua\
Это перестает работать: Quik при запуске скрипта пишет:
Что не находит таких библиотек.

Как их в эту папку засунуть?
Скрипты подключаю так:
Код
w32 = require("w32"); -> вот что интересно это лежит в папке C:\QUIK\LuaIndicators\QET\EnterTradeLib\ и квик его находит
http = require("socket.http"); -> а это нет... находит только когда это лежит в папке C:/Quik/Luaindicators/
Сори за множество вопросов - но здесь в луа реально не так как в PHP с его наймспейсами и прочими фишками...
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Как все таки сделать http запрос из Lua?
 
Вот даже из этого работающего примера я не пойму
- зачем нужно ставить дополнительную программу (ну это еще ладно)
- ну если мы ее поставил - зачем еще какие-то 2 папки закидывать в luaindicators?
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Как все таки сделать http запрос из Lua?
 
Цитата
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

Вот пост где автор опубликовал этого робота с описанием что он делает
https://smart-lab.ru/blog/401675.php

Очень актуален вопрос 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: https://github.com/iv-litovchenko/Quik-Enter-Trade
Quik - чтение почты
 
Как то у меня так ничего с почтой и не получилось.
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Получение из таблицы текущих торгов всех доступных на текущий момент фьючерсов по инструменту
 
Спасибо - очень помогло.
Но у меня заработало получение актуальных фьючерсов только после изменения изменения шаблона поиска для функции gmatch()
for test_sec_code in string.gmatch(sec_list, "("..pref.."[^%s,]+)") do -- Перебираем список
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Получение из таблицы текущих торгов всех доступных на текущий момент фьючерсов по инструменту
 
Цитата
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: https://github.com/iv-litovchenko/Quik-Enter-Trade
Quik - определить актуальный код фьючерса
 
Спасибо за развернутый ответ.
А то по дате погашения собирался искать.
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Использование "якоря" для скрипта Lua
 
Сори не в ту тему написал.
Тоже жду якорь!
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Использование "якоря" для скрипта Lua
 
Единственное что в моем решении интересует - насколько это правдоподобное решение?
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Использование "якоря" для скрипта Lua
 
Цитата
Roffild написал:
Я уже застолбил это пожелание. Ожидаю реализацию в ближайшие 10 лет...
Ну судя по всему если ближайшие 10 лет - то могу свое решение предложить.
Вы всегда знаете первые две буквы кода - например GZ

Получается нужно вычеслить месяц (3 символ) + год (4 символ).
Просканировать таблицу текущие торги - фильтруем инструменты по первым двум символам - далее смотрим столбец до даты погашения и ищем самый минимальный срок жизни - это и есть актуальный фьюч.

Если конечно других вариантов нет.

На примере газпрома:
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Quik - пустая таблица обезличенных сделок
 
Цитата
boolean.rat написал:
в терминале в настройках не поставлена галочка по интересующему инструмент(у/ам)
Что за галочка?
Цитата
s_mike@rambler.ru написал:
Цитата
Иван написал:
С чем это может быть связано?
Брокер вам не включил тиковые данные. Звоните ему
+
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Прибавить к текущей дате 30 дней (или произвольное кол-во дней)
 
Как на языке луа сделать прибавление текущей даты + 30 дней (или произвольное кол-во)?
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Quik - пустая таблица обезличенных сделок
 
С чем это может быть связано?
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Quik - определить актуальный код фьючерса
 
Можно ли как-то автоматически определить актуальный торгуемый фьючерс?
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Использование "якоря" для скрипта Lua
 
На каждом окне в Квике в верхнем правом углу есть иконки свернуть окно, уменьшить размер, закрыть окно.
А также есть иконка якоря позволяет позволяет переключить инструмент.

Можно ли как-то этот якорь аналогичным образом использовать для lua скриптов?
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Quik - чтение почты
 
Сокет смог запустить прочитав этот пост https://smart-lab.ru/blog/401675.php
1) установил программу
2) закинул две папки mime & socket в LuaIndicators
3) подключил в скрипте

require("socket");
http = require("socket.http");

Выполнил запрос

-- QUIK Выполнить http - запрос
function _QuikGetHttp()
  content, status, header = socket.http.request(HTTP_URL);
  return content;
end;

Но все равно не пойму как дальше быть с почтой?
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Quik - чтение почты
 
Цитата
Nikolay написал:
Цитата
Иван написал:
Спасибо за развернутый ответ.
Можно пример с вашей консольной программы.
Она написана на C#. Я её ещё не выкладывал в открытый доступ.

Но, все можно найти в примерах MailKit:  https://github.com/jstedfast/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: https://github.com/iv-litovchenko/Quik-Enter-Trade
Quik - чтение почты
 
Цитата
Nikolay написал:
Речь не про консольную команду, а про консольную программу - читай сервис постоянно работающий и читающий почту.

В примере, что был приведен, видны зависимости:
Код
   local  imap4      =  require  'imap4'  

 local  ssl        =   require ( "ssl" )   

т.е. необходимо иметь библиотеку imap4, ссылка на которую была приведена.
Также, если используется ssl, то необходима ssl.

Если посмотреть на код библиотеки imap, то видно, что для ее работы необходима socket

Код
   local  socket  =  require  'socket'   

Поэтому необходимый минимум - это библиотеки imap и socket, что и было написано выше.
Спасибо за развернутый ответ.
Можно пример с вашей консольной программы.
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Quik - чтение почты
 
Цитата
Nikolay написал:
Если не использовать SSL, то достаточно
socket - найдете здесь  https://forum.quik.ru/forum10/topic6902/
imap -  https://github.com/vrld/imap4.lua

Если же использовать SSL, то необходимо иметь luasec. Я стабильно работающую с 5.4 и 5.3 не нашел.

Поэтому, чтобы не зависеть от библиотек lua, уже давно написал себе консольную программку, читающую почту и записывающую в файлы, которые уже скрипт читает и обрабатывает.
1) Очень интересная идея с консольной командой. Можно пример исходник (так понимаю это можно написать через блокнот). Вы ее потом как запускаете - через Quik?
2) Не совсем пойму по вашим ссылкам нужно использовать socket + imap или как?
3) Чем лучше SSL и можно ли без него?
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Quik - чтение почты
 
Цитата
Nikolay написал:
даже на этом форуме есть поиск.

socket - это библиотека для lua. Она включает в себя как lua файлы, так и dll. Она должна быть собрана под нужную версию lua.

imap4 - это тоже библиотека. Поиск любой системе выведет на репозитарий проекта.
Если есть знатоки и у кого-то есть возможность (готов за вознаграждение) - помогите пожалуйста реализовать чтение почты на lua в Quik 8-версии.
Нужны исходники Lua-скрипта, который читает почтовый ящик mail.ru и файлы библиотек, которые нужно закинуть в папку quik.
У меня не получило найти библиотки и запустить чтение почты.
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Quik - чтение почты
 
Жалко - что никто не может подсказать...
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Quik - чтение почты
 
Цитата
Nikolay написал:
Да. socket найти под x64 lua 5.3 можно. А вот ssl - уже сложнее. Хотя, кажется, на форуме выкладывали собранные, рабочие варианты.
Не совсем понимаю - здесь требуется подключить следующие библиотеки?
local imap4   = require "imap4"
local Message = require "pop3.message"

Зачем сокет?
Где найти эти imap4, pop3?
Искать нужно dll файлы?
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Quik - чтение почты
 
Понимаю что нужны библиотеки.
Но где их скачать?
Это должны быть dll-файлы?
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Quik - чтение почты
 
Нашел более понятный пример, но не пойму где взять библиотеки для подключения?
Код
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()
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Quik - чтение почты
 
Цитата
Nikolay написал:
Есть типовой пример.
Код
   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()  
Не пойму какие библиотеки нужно подключить?
Нашел еще на https://github.com/dmj/misc/blob/master/lua/imap.lua/imap.lua
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Quik - чтение почты
 
Можно ли через QUIK с помощью LUA прочитать список email писем (mail.ru)?
Есть ли образец скрипта как это можно сделать?
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
№ номер заявки 1.952337642788e+018 VS 2 952 137 242 587 989 181
 
Цитата
Sergey Gorokhov написал:
TRANS_ID
Правильно ли понимаю если у меня по какой-то причине будет в течении дня сгенерировано два одинаковых TRANS_ID с одинаковыми номерами - максимум чем мне это грозит при снятии стоп-лоса, это то, что будет снят только 1, а второй останется болтаться?
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
№ номер заявки 1.952337642788e+018 VS 2 952 137 242 587 989 181
 
Цитата
Sergey Gorokhov написал:
Цитата
Иван написал:
А UNIX TIME как получить?
UNIX TIME - это просто количество секунд начиная с какой-то даты (1 января 1970г).
можно получить через тот же os.date
Судя по всему, Вам не это нужно.
Просто сами определите для себя какое число Вам требуется и сгенерируйте. тех поддержка в этом месте не причем.
Вопрос только и только на Вашей стороне.
Хотите, считайте тот же UNIX TIME но с 2000 года
или "сожмите" дату до нужного размера (например сложив чила)
Или другие варианты которые Вам понравятся.
Мне нужно как-то сгенерировать TRANS_ID - уникальное число со смыслом. А не просто уникальное число.
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
№ номер заявки 1.952337642788e+018 VS 2 952 137 242 587 989 181
 
Цитата
Sergey Gorokhov написал:
Иван,
Дополним,
судя по всему вопрос не технический, а логический. Нам не важно что вы напишите в TRANS_ID, главное чтобы размер был не больше «2 147 483 647»

Вы сами решите для себя нужна ли Вам вообще os.date("%d%H%M%S"), может ее не надо там указывать и все?
если нужна, сами для себя решите зачем, может там достаточно краткого формата ДДММГГ

Если вопрос в том, как в os.date указать выходной формат, то ответ есть в  документации на Lua
Таким образом я пытаюсь сгенерировать уникальное число для ID-транзакции.
А UNIX TIME как получить?
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
№ номер заявки 1.952337642788e+018 VS 2 952 137 242 587 989 181
 
Цитата
Roman Azarov написал:
TRANS_ID
У меня не принимает TRANS_ID что угодно.
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
№ номер заявки 1.952337642788e+018 VS 2 952 137 242 587 989 181
 
Очень не хочется заводить файл и туда писать ++№ транзакции.
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
№ номер заявки 1.952337642788e+018 VS 2 952 137 242 587 989 181
 
Цитата
Roman Azarov написал:
Иван,

Для корректной работы с 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: https://github.com/iv-litovchenko/Quik-Enter-Trade
№ номер заявки 1.952337642788e+018 VS 2 952 137 242 587 989 181
 
Цитата
Roman Azarov написал:
Иван, добрый день!

Уточните, пожалуйста, какая версия рабочего места используется?
7.27.2.1
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
№ номер заявки 1.952337642788e+018 VS 2 952 137 242 587 989 181
 
Попробовал сделать еще проще:

local bbb = 1952337642787989182;
message("Hi = " .. bbb);

Выводит Hi = 1.952337642788e+018

А нужно обычное целое число.
Как быть?
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
№ номер заявки 1.952337642788e+018 VS 2 952 137 242 587 989 181
 
Добрый день.

Подскажите пожалуйста столкнулся с проблемой - номера заявок очень длинные и когда в функцию

function OnTrade(trade)
local trade_num = trade.trade_num;
local trans_id = trade.trans_id;

приходит trade_num вместо обычного числа из 18 символов приходит что то типа: 1.952337642788e+018. В результате пишет не возможно создать заявку (стоп-ордер).

Как преобразовать такое число с "e+018" в обычное число сколько бы там не было символов?
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Enter Trade 0.1 - Торговый привод для терминала Quik с открытым исходным кодом
 
Цитата
Nikolay написал:
Ну а форма подачи Вашего произведения говорит больше о рекламе, а не о разработке.
Поэтому была озвучена рекомендация о GitHub. Я бы хотел бысто взглянуть на код не продираясь сквозь посторонюю информацию.
Тем более, что код открытый, как никак.
Скачивать с неизвестного сайта архивы... Это было опасно уже в 1994 году.
В этом плане вы правы - да лучше на GitHub выложить и удобнее будет смотреть исходный код. Исходники опубликовал на GitHub-е: https://github.com/iv-litovchenko/Quik-Enter-Trade
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Enter Trade 0.1 - Торговый привод для терминала Quik с открытым исходным кодом
 
Цитата
Nikolay написал:
Такого добра полно на просторах. Такого добра полно на просторах. Кто не писал логгинг и журналы сделок, скринеры, роботы и т.д...
Возможно и полно, возможно есть и платные за небольшую сумму и бесплатные. Возможно есть и очень дорогие. Но мне ни один из них не подошел в рамках того, то что мне повседневно нужно в одном флаконе для рынка Forts (открытие сделок с расчетом позиции, закрытие по частям, автостопы к таким открытым позициям, автозакрытие по параметрам, риск-менеджер с настраиваемыми параметрами, и алерты, которые можно было бы поставить за 1-2 секунды. А самое главное журнал сделок - тот же простой журнал есть в Metatrader. Кроме того я не практикую алготрейдинг (во всяком случае пока и точно для него использовал бы другие готовые инструменты). И мне не было бы необходимым проделывать такую масштабную работу по разработке такого привода и погружении в Lua-скрипт.

Цитата
Nikolay написал:
Только не стоит сюда выносить. На СмартЛабе или любой социальной ... будет самое то...
Здесь же хотелось бы обсуждать технические вопросы, не более.
Я бы очень хотел видеть такой штатный функционал в рамках самого Quik. Как он мог бы выглядеть оформил в виде такого привода. Metatrader я например не использую по психологическим и иным причинам. Пока для меня Quik 7 является основой.

На данный момент, главное  концептуальное неудобство привода пока есть только в том, что он не удобен для тех кто торгует больше 1 инструмента - переключатель не удобный. И чем это не технический вопрос? - вопрос то к поддержке, а не к Вам. Форум насколько полагаю полностью посвящен терминалу.

Цитата
Nikolay написал:

(PS. Заведите аккаунт на GitHub, поменьше используейте dofile, глобальные переменные и функции, ну и callback не место для сложных действий и точно не для совершения транзакций)
Пока не вижу необходимости в аккаунте GitHub. По поводу того, что вы советуете использовать и не использовать - не вижу в ваших словах конструктивных замечаний. Вы бы предложили какую-то часть кода и сказали бы что вот здесь лучше так, а здесь лучше так и было бы что обсудить и улучшить с технической точки зрения.
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Enter Trade 0.1 - Торговый привод для терминала Quik с открытым исходным кодом
 
Для поддержки - будет желание зарегистрируйте пожелание на совместный проект по разработке вот такого привода для QUIK с журналом сделок, что бы его включить в коробку терминала по умолчанию. Мне очень не хватало подобного функционала на начальном этапе знакомства с терминалом и после когда уже разобрался в нем. Полагаю для многих частных трейдоров это сделает торговлю более удобной, по крайней мере мне это экономит достаточно большое кол-во времени по выставлению заявок, расчету депозита, и текущих сделанных сделках.

Периодически люди пишут комментарии с идеями на доработку - полагаю у этого есть потенциал. А также просьбы адаптировать привод для Quik 8. Мне пока вполне хватило того, что реализовано уже сейчас и для Quik 7. Единственное что еще бы очень хотел реализовать в приоритетном порядке - это автозакрытие и БУ.

Контактные данные для связи есть на моем сайте.
Иван.
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Страницы: 1 2 3 След.
Наверх