<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[QUIK -> DDE &mdash; Работающие скрипты на Lua]]></title>
	<link rel="self" href="https://quik2dde.ru/extern.php?action=feed&amp;tid=98&amp;type=atom" />
	<updated>2014-07-20T04:10:28Z</updated>
	<generator>PunBB</generator>
	<id>https://quik2dde.ru/viewtopic.php?id=98</id>
		<entry>
			<title type="html"><![CDATA[Re: Работающие скрипты на Lua]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=600#p600" />
			<content type="html"><![CDATA[<p>Немного модифицированный пример из из официального руководства по Qlua - раздел &quot;Сервисные функции&quot; - getInfoParam.<br />Введен дополнительный несуществующий параметр информационного окна &quot;TEST&quot; и проверка возвращаемых значений на nil или пустое значение.<br />Важно: каталог для вывода результатов работы скрипта в файл должен существовать, иначе скрипт отработает с ошибкой.<br />По результатам работы скрипта видно, что некоторые из значений, возвращаемых GetInfoParam пустые, значения nil - отсутствуют.<br /></p><div class="codebox"><pre><code>--[[
Описание: пример из официального руководства по Qlua - раздел &quot;Сервисные функции&quot; - getInfoParam
Версия: 0.0.1
-
Тестирование:
Версия Quik: 6.13.1.11
Дата проверки работы: 07.07.2014
-
Внешние модули/библиотеки:
нет
]]

-- !!! Важно !!! До начала работы скрипта каталог для протокола должен существовать
-- Полный путь к файлу протокола

ProtFilePath = &quot;C:\\Temp\\Lua\\prot\\getinfo.txt&quot;

function main(  )
    params = {&quot;VERSION&quot;, &quot;TRADEDATE&quot;, &quot;SERVERTIME&quot;,
                &quot;LASTRECORDTIME&quot;, &quot;NUMRECORDS&quot;, &quot;LASTRECORD&quot;,&quot;LATERECORD&quot;,
                &quot;CONNECTION&quot;, &quot;IPADDRESS&quot;, &quot;IPPORT&quot;, &quot;IPCOMMENT&quot;,
                &quot;SERVER&quot;, &quot;SESSIONID&quot;, &quot;USER&quot;, &quot;USERID&quot;, &quot;ORG&quot;, &quot;MEMORY&quot;,
                &quot;LOCALTIME&quot;, &quot;CONNECTIONTIME&quot;, &quot;MESSAGESSENT&quot;, &quot;ALLSENT&quot;,
                &quot;BYTESSENT&quot;, &quot;BYTESPERSECSENT&quot;, &quot;MESSAGESRECV&quot;, &quot;BYTESRECV&quot;,
                &quot;ALLRECV&quot;, &quot;BYTESPERSECRECV&quot;, &quot;AVGSENT&quot;, &quot;AVGRECV&quot;,
                &quot;LASTPINGTIME&quot;, &quot;LASTPINGDURATION&quot;, &quot;AVGPINGDURATION&quot;,
                &quot;MAXPINGTIME&quot;, &quot;MAXPINGDURATION&quot;, &quot;TEST&quot;}
    file = io.open(ProtFilePath, &quot;w+t&quot;)
    for key,v in ipairs(params) do
        file:write(v .. &quot; = &quot; .. GetInfoParam(v) .. &quot;\n&quot;)
    end
-- Проверка параметров на значение nil или пустое    
        file:write(&quot;-------&quot; .. &quot;\n&quot;)
        file:write(&quot;nil or empty&quot; .. &quot;\n&quot;)
        file:write(&quot;-------&quot; .. &quot;\n&quot;)
    for key,v in ipairs(params) do
        local tmp = GetInfoParam(v)
        if tmp == nil then
        file:write(v .. &quot; = &quot; .. &quot;nil&quot; .. &quot;\n&quot;) -- Если значение nil
        end
        if tmp == &quot;&quot; then
        file:write(v .. &quot; = &quot; .. &quot;empty string&quot; .. &quot;\n&quot;) -- Если значение пустая строка текста
        end
    end
    file:close()
end</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Archie]]></name>
				<uri>https://quik2dde.ru/profile.php?id=196</uri>
			</author>
			<updated>2014-07-20T04:10:28Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=600#p600</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Работающие скрипты на Lua]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=589#p589" />
			<content type="html"><![CDATA[<p>Версия без отправки заявок, при нажатии на кнопки возникает сообщение Quik об эмуляции отправки заявки с указанием торговой операции и цены.<br /></p><div class="codebox"><pre><code>--[[
Описание: простой привод &quot;продать-купить&quot; 1 фьючерс Сбербанка
Версия: 0.0.1em
-
Тестирование:
Версия Quik: 6.13.1.11
Дата проверки работы: 04.07.2014
-
Внешние модули/библиотеки:
vcl.dll
-
!!! Реальные заявки на биржу не отправляются (эмуляция)
]]

-- Пути для установленного языка Lua
package.cpath=&quot;.\\?.dll;.\\?51.dll;C:\\Program Files (x86)\\Lua\\5.1\\?.dll;C:\\Program Files (x86)\\Lua\\5.1\\?51.dll;C:\\Program Files (x86)\\Lua\\5.1\\clibs\\?.dll;C:\\Program Files (x86)\\Lua\\5.1\\clibs\\?51.dll;C:\\Program Files (x86)\\Lua\\5.1\\loadall.dll;C:\\Program Files (x86)\\Lua\\5.1\\clibs\\loadall.dll;C:\\Program Files\\Lua\\5.1\\?.dll;C:\\Program Files\\Lua\\5.1\\?51.dll;C:\\Program Files\\Lua\\5.1\\clibs\\?.dll;C:\\Program Files\\Lua\\5.1\\clibs\\?51.dll;C:\\Program Files\\Lua\\5.1\\loadall.dll;C:\\Program Files\\Lua\\5.1\\clibs\\loadall.dll&quot;..package.cpath
package.path=package.path..&quot;;.\\?.lua;C:\\Program Files (x86)\\Lua\\5.1\\lua\\?.lua;C:\\Program Files (x86)\\Lua\\5.1\\lua\\?\\init.lua;C:\\Program Files (x86)\\Lua\\5.1\\?.lua;C:\\Program Files (x86)\\Lua\\5.1\\?\\init.lua;C:\\Program Files (x86)\\Lua\\5.1\\lua\\?.luac;C:\\Program Files\\Lua\\5.1\\lua\\?.lua;C:\\Program Files\\Lua\\5.1\\lua\\?\\init.lua;C:\\Program Files\\Lua\\5.1\\?.lua;C:\\Program Files\\Lua\\5.1\\?\\init.lua;C:\\Program Files\\Lua\\5.1\\lua\\?.luac;&quot;

require &quot;vcl&quot;

-- Раздел настроек (начало)
ClassCode=&quot;SPBFUT&quot;    -- класс инструмента - Фьючерсы
SecCode=&quot;SRU4&quot;        -- Код инструмента - фьючерс Сбербанка 09.14
Account=&quot;SPBFUTXXXXX&quot; -- Счет клиента на FORTS !!! Вписать свой !!!
ClientCode=&quot;&quot;
FirmId=&quot;&quot;
Trans_ID = 0          -- внутренний счетчик номера заявок
Lots = 1              -- Количество лотов
-- Раздел настроек (конец)

-- Интерфейс (начало)
mainForm = VCL.Form(&quot;mainForm&quot;)

mainForm.Caption = &quot;Privod ver-0-0-1em&quot;
mainForm._= { position=&quot;podesktopcenter&quot;, height=120, width=150,OnClose = &quot;OnFormClose&quot;}

BuyButton = VCL.Button(mainForm,&quot;Buy&quot;)
BuyButton._ = {width=40, height=40, caption=&quot;BUY&quot;, Top=80, Left=30, onclick = &quot;onBuyClick&quot;}

SellButton = VCL.Button(mainForm,&quot;Sell&quot;)
SellButton._ = {width=40, height=40, caption=&quot;SELL&quot;, Top=80, Left=90, onclick = &quot;onSellClick&quot;}

BidLabel = VCL.Label(mainForm,&quot;Bid&quot;)
BidLabel._ = {Top = 40, Left = 15}

OfferLabel = VCL.Label(mainForm,&quot;Offer&quot;)
OfferLabel._ = {Top = 10, Left = 16}
-- Интерфейс (конец)

-- Раздел внутренних (не callback) функций (начало)
-- Функция отправки заявок
function SendLimitOrder (ClassCode,SecCode,Operation,OrderPrice,Lots)

Trans_ID = Trans_ID + 1

  local trans = {
          [&quot;ACTION&quot;] = &quot;NEW_ORDER&quot;,
          [&quot;CLASSCODE&quot;] = ClassCode,
          [&quot;SECCODE&quot;] = SecCode,
          [&quot;ACCOUNT&quot;] = Account,
          [&quot;OPERATION&quot;] = Operation,
          [&quot;PRICE&quot;] = tostring(OrderPrice),
          [&quot;QUANTITY&quot;] = tostring(Lots),
          [&quot;TRANS_ID&quot;] = tostring(Trans_ID)
                }
  local res = sendTransaction(trans)
  CurrentOrderPrice = OrderPrice
end

--Обработчик кнопки BUY
function onBuyClick(sender)
    if ((qt.bid_count+0 == 0) or (qt.offer_count+0 == 0)) then
      return
    end        
      local bid = qt.bid[qt.bid_count+0].price      
      local bid1 = math.floor (bid)
      local mess = &quot;Эмуляция покупки по цене: &quot; .. bid1
      message(mess,1)
end

--Обработчик кнопки SELL
function onSellClick(sender)
    if ((qt.bid_count+0 == 0) or (qt.offer_count+0 == 0)) then
      return
    end        
      local offer = qt.offer[1].price      
      local offer1 = math.floor (offer)
      local mess = &quot;Эмуляция продажи по цене: &quot; .. offer1
      message(mess,1)      
end

-- Обработчик закрытия формы
function OnFormClose(Sender, CloseAction)
    is_run = false
    mainForm:Release()
end

function UpdateBidOffer()
-- Функция обновления значений Bid и Offer из стакана
    if is_run == false then
        return
    end    
    qt = getQuoteLevel2(ClassCode,SecCode)
    if qt == nil then               
        return            
    end    
    if ((qt.bid_count+0 == 0) or (qt.offer_count+0 == 0)) then               
        return
    end     
    local bid = qt.bid[qt.bid_count+0].price
    local offer = qt.offer[1].price  
    BidLabel.Caption = &quot;Buy: &quot;..bid.. &quot; (&quot; .. math.floor(qt.bid[qt.bid_count+0].quantity) .. &quot;) &quot; 
    OfferLabel.Caption = &quot;Sell: &quot;..offer.. &quot; (&quot; .. math.floor(qt.offer[1].quantity) .. &quot;) &quot; 
    
end
-- Раздел внутренних (не callback) функций Quik-Lua (конец)

function OnInit()
    mainForm:Show()    
    is_run = true      
       
end

function OnStop()
    is_run = false
    mainForm:Release()
end

function main()
    while is_run do
        UpdateBidOffer()       
        sleep(50)        
    end    
end</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Archie]]></name>
				<uri>https://quik2dde.ru/profile.php?id=196</uri>
			</author>
			<updated>2014-07-04T13:54:03Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=589#p589</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Работающие скрипты на Lua]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=588#p588" />
			<content type="html"><![CDATA[<p>Идея взята отсюда - [url]http://quik2dde.ru/viewtopic.php?id=39[/url], автору за него огромное спасибо, но у меня также не пошел ввод/вывод с xml (ошибка &quot;&quot;Error loading module &#039;LuaXML_lib&#039; from file&nbsp; &#039;.\LuaXML_lib.dll: не найден указанный модуль&quot;), т. к. он в сторонней библиотеке и подключить ее никак не удавалось, хотя файл библиотеки сам присутствовал.<br />Поэтому захотелось побыстрее получить какой-нибудь более-менее рабочий вариант без ошибок.<br />Требует для работы vcl.dll - подробнее quik2dde.ru/viewtopic.php?id=26<br />Внимание !!! Эта версия отправляет реальные заявки на биржу 1 лотом фьючерса Сбербанка по ценам bid и offer. Для работы требуется только вписать свой номер счета на FORTS в этой строке - Account=&quot;SPBFUTXXXXX&quot;. Скрипт лучше останавливать кнопкой &quot;Остановить&quot; из Quik, а не закрывая его окно - так в его работе ошибок не возникало при многократном перезапуске.<br />Важно! Вероятнее всего, что это скрипт не работает на акциях, т. к. в данном скрипте производится обновление цены до целых чисел, как на фьючерсах. Для округления цена акций до заданной точности необходимо использовать вместо math.floor в строках, подобных этой - bid1 = math.floor (bid) свою функцию округления.</p><div class="codebox"><pre><code>--[[
Описание: простой привод &quot;продать-купить&quot; 1 фьючерс Сбербанка
Версия: 0.0.1
-
Тестирование:
Версия Quik: 6.13.1.11
Дата проверки работы: 04.07.2014
-
Внешние модули/библиотеки:
vcl.dll
-
!!! Внимание !!! Отправляет реальные заявки на биржу
]]

-- Пути для установленного языка Lua
package.cpath=&quot;.\\?.dll;.\\?51.dll;C:\\Program Files (x86)\\Lua\\5.1\\?.dll;C:\\Program Files (x86)\\Lua\\5.1\\?51.dll;C:\\Program Files (x86)\\Lua\\5.1\\clibs\\?.dll;C:\\Program Files (x86)\\Lua\\5.1\\clibs\\?51.dll;C:\\Program Files (x86)\\Lua\\5.1\\loadall.dll;C:\\Program Files (x86)\\Lua\\5.1\\clibs\\loadall.dll;C:\\Program Files\\Lua\\5.1\\?.dll;C:\\Program Files\\Lua\\5.1\\?51.dll;C:\\Program Files\\Lua\\5.1\\clibs\\?.dll;C:\\Program Files\\Lua\\5.1\\clibs\\?51.dll;C:\\Program Files\\Lua\\5.1\\loadall.dll;C:\\Program Files\\Lua\\5.1\\clibs\\loadall.dll&quot;..package.cpath
package.path=package.path..&quot;;.\\?.lua;C:\\Program Files (x86)\\Lua\\5.1\\lua\\?.lua;C:\\Program Files (x86)\\Lua\\5.1\\lua\\?\\init.lua;C:\\Program Files (x86)\\Lua\\5.1\\?.lua;C:\\Program Files (x86)\\Lua\\5.1\\?\\init.lua;C:\\Program Files (x86)\\Lua\\5.1\\lua\\?.luac;C:\\Program Files\\Lua\\5.1\\lua\\?.lua;C:\\Program Files\\Lua\\5.1\\lua\\?\\init.lua;C:\\Program Files\\Lua\\5.1\\?.lua;C:\\Program Files\\Lua\\5.1\\?\\init.lua;C:\\Program Files\\Lua\\5.1\\lua\\?.luac;&quot;

require &quot;vcl&quot;

-- Раздел настроек (начало)
ClassCode=&quot;SPBFUT&quot;    -- класс инструмента - Фьючерсы
SecCode=&quot;SRU4&quot;        -- Код инструмента - фьючерс Сбербанка 09.14
Account=&quot;SPBFUTXXXXX&quot; -- Счет клиента на FORTS !!! Вписать свой !!!
ClientCode=&quot;&quot;
FirmId=&quot;&quot;
Trans_ID = 0          -- внутренний счетчик номера заявок
Lots = 1              -- Количество лотов
-- Раздел настроек (конец)

-- Интерфейс (начало)
mainForm = VCL.Form(&quot;mainForm&quot;)

mainForm.Caption = &quot;Privod ver-0-0-1&quot;
mainForm._= { position=&quot;podesktopcenter&quot;, height=120, width=150,OnClose = &quot;OnFormClose&quot;}

BuyButton = VCL.Button(mainForm,&quot;Buy&quot;)
BuyButton._ = {width=40, height=40, caption=&quot;BUY&quot;, Top=80, Left=30, onclick = &quot;onBuyClick&quot;}

SellButton = VCL.Button(mainForm,&quot;Sell&quot;)
SellButton._ = {width=40, height=40, caption=&quot;SELL&quot;, Top=80, Left=90, onclick = &quot;onSellClick&quot;}

BidLabel = VCL.Label(mainForm,&quot;Bid&quot;)
BidLabel._ = {Top = 40, Left = 15}

OfferLabel = VCL.Label(mainForm,&quot;Offer&quot;)
OfferLabel._ = {Top = 10, Left = 16}
-- Интерфейс (конец)

-- Раздел внутренних (не callback) функций (начало)
-- Функция отправки заявок
function SendLimitOrder (ClassCode,SecCode,Operation,OrderPrice,Lots)

Trans_ID = Trans_ID + 1

  local trans = {
          [&quot;ACTION&quot;] = &quot;NEW_ORDER&quot;,
          [&quot;CLASSCODE&quot;] = ClassCode,
          [&quot;SECCODE&quot;] = SecCode,
          [&quot;ACCOUNT&quot;] = Account,
          [&quot;OPERATION&quot;] = Operation,
          [&quot;PRICE&quot;] = tostring(OrderPrice),
          [&quot;QUANTITY&quot;] = tostring(Lots),
          [&quot;TRANS_ID&quot;] = tostring(Trans_ID)
                }
  local res = sendTransaction(trans)
  CurrentOrderPrice = OrderPrice
end

--Обработчик кнопки BUY
function onBuyClick(sender)
    if ((qt.bid_count+0 == 0) or (qt.offer_count+0 == 0)) then
      return
    end        
      local bid = qt.bid[qt.bid_count+0].price      
      local bid1 = math.floor (bid)
      SendLimitOrder (ClassCode,SecCode,&quot;B&quot;,bid1,Lots)
end

--Обработчик кнопки SELL
function onSellClick(sender)
    if ((qt.bid_count+0 == 0) or (qt.offer_count+0 == 0)) then
      return
    end        
      local offer = qt.offer[1].price      
      local offer1 = math.floor (offer)
      SendLimitOrder (ClassCode,SecCode,&quot;S&quot;,offer1,Lots)
end

-- Обработчик закрытия формы
function OnFormClose(Sender, CloseAction)
    is_run = false
    mainForm:Release()
end

function UpdateBidOffer()
-- Функция обновления значений Bid и Offer из стакана
    if is_run == false then
        return
    end    
    qt = getQuoteLevel2(ClassCode,SecCode)
    if qt == nil then               
        return            
    end    
    if ((qt.bid_count+0 == 0) or (qt.offer_count+0 == 0)) then               
        return
    end     
    local bid = qt.bid[qt.bid_count+0].price
    local offer = qt.offer[1].price  
    BidLabel.Caption = &quot;Buy: &quot;..bid.. &quot; (&quot; .. math.floor(qt.bid[qt.bid_count+0].quantity) .. &quot;) &quot; 
    OfferLabel.Caption = &quot;Sell: &quot;..offer.. &quot; (&quot; .. math.floor(qt.offer[1].quantity) .. &quot;) &quot; 
    
end
-- Раздел внутренних (не callback) функций Quik-Lua (конец)

function OnInit()
    mainForm:Show()    
    is_run = true      
       
end

function OnStop()
    is_run = false
    mainForm:Release()
end

function main()   
    while is_run do
        UpdateBidOffer()       
        sleep(50)        
    end    
end</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Archie]]></name>
				<uri>https://quik2dde.ru/profile.php?id=196</uri>
			</author>
			<updated>2014-07-04T13:47:44Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=588#p588</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Работающие скрипты на Lua]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=587#p587" />
			<content type="html"><![CDATA[<p>Предлагаю здесь размещать целиком законченные и рабочие скрипты на Lua.</p><p>Основная идея такая:<br />часто в Интернете на каких-либо ресурсах попадаются скрипты на Lua для Quik, но при попытке их загрузки сходу в Quik с малыми изменениями (например просто изменить номер счета и торговый инструмент) возникают ошибки вроде таких: для работы требуются определенные библиотеки/функции, а библиотеки/функции самописные и обратно не совместимые. В итоге в скриптах эти функции не работают или работают не так как от них ожидалось.<br />Здесь предлагается размещать проверенные в работе скрипты (желательно, чтобы большинство используемых функций находились внутри скрипта, в идеале все функции внутри) или ссылки на таковые, если их работа была проверена, желательно с указанием даты проверки, версии Quik и торгового инструмента.</p>]]></content>
			<author>
				<name><![CDATA[Archie]]></name>
				<uri>https://quik2dde.ru/profile.php?id=196</uri>
			</author>
			<updated>2014-07-04T01:47:28Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=587#p587</id>
		</entry>
</feed>
