Quik Lua

Сайт продукта: https://forum.quik.ru/forum10/
Lua — язык программирования, который используется в программировании торговых роботов под популярный в России терминал Quik.
  1. Все ли знают, что в Quik'е у каждого скрипта main() свой отдельный Windows-поток (thread)?
    Пишу потому, что к большому моему удивлению открыл, что весьма активные писатели Смарт-лаба этого не знают. В главном потоке программы Quik работают только функции обратного вызова типа OnTransReply, OnTrade и индикаторы. Кстати, OnTrade срабатывает не только по заявкам из скрипта, но и поданным интерактивно.

    Дело обработчиков событий не обрабатывать, но регистрировать их.
    Неверные представления о потоках в Quik'е вынуждают этих писателей городить абсурдный обмен данными между Quik'ом и внешними приложениями. Тогда как вся информация по событиям может быть обработана средствами QLua во вторичных скриптовых потоках без помех для главного потока Quik'а.

    Хотя QLua обладает весьма эффективными средствами взаимодействия с любым приложением Windows, не так просто придумать повод для обращения QLua за посторонней помощью. Например, сохранять на диске текущие данные QLua может массой способов от простейшего io.read/write до SQLite.
    Количество библиотек для QLua просто изумляет.

    NB. Известная проблема скриптовых языков, что ошибки-описки в именах функций и переменных влекут трудно диагностируемые сбои работы, решается двумя простейшими средствами.

    Авто-репост. Читать в блоге >>>
  2. просто не пойму quik полное значение передает в переменой или через цикл по 1 надо прогонять
    чтоб значение вывести
  3. Здравствуйте, извиняюсь за ранее т.к. звучать будет глупо, но я все таки немного не понял, надеюсь что кто нибуть подскажет или даст ссылку на пост, я знаю что такое яп и принцип работы, LUA не знаю, но учу по немногу, основной вопрос я не пойму взаимодействия quik c qlua, что именно возращают функции, в какую переменную и как вывести это число
  4. Quik->Lua->C++DLL. Опыт разработки и немного кода.

    Начал вчера работы по реализации "Брошенной стратегии". Хорошо когда есть наработки: взял готовые куски кода, немного доработал под новые нужды, соединил их вместе и уже все готово — почти все необходимые данные передаются в DLL, расставляются по местам и готовы к использованию. С этим почти закончено, остальное будет делаться по ходу пьесы, и по мере необходимости.

    С передачей данных закончено, а стратегия даже не начиналась. Система новая и архитектора системы пока не ясна, есть несколько вариантов, выбрать из которых не так просто.
    Пока суд, да дело, решил написать о передаче данных из Quik в С++DLL.
    О том как сделать простую С++DLL для работы с Quik-Lua написано на сайте https://quikluacsharp.ru  здесь и о передаче данных из Lua — здесь и в других материалах сайта. Наверняка многие из вас все это видели и знают, а некоторые это даже применяют. Я это все не использую, не очень разбирался, но, тем не менее, сам сайт



    Авто-репост. Читать в блоге >>>
  5. На самом деле для построения роботов все эти действия абсолютно не нужны. Поэтому, собственно, таких возможностей и не предусмотрено.

    Практически со 100% вероятности то что вам необходимо, делается другими способами, которые являются документированными и стандартными.

    s_mike@rambler.ru, Ну, что ж, Вам, «практически со 100% вероятности», лучше видно… Правда, я решил за время, прошедшее с момента задания вопроса, половину этих проблем. Нахожусь в процессе решения второй половины. Роботы — они такие разные! Кому-то хватает автоматизации простого «скользящего среднего» и отправки заявок, мой же робот, однажды запущенный, полностью контролирует свою жизнь. Одним ЛУА тут не обойтись, конечно. Но на то и мозги имеются, чтоб «шуршать»…
  6. На самом деле для построения роботов все эти действия абсолютно не нужны. Поэтому, собственно, таких возможностей и не предусмотрено.

    Практически со 100% вероятности то что вам необходимо, делается другими способами, которые являются документированными и стандартными.
  7. Здравствуйте, коллеги!

    ВОПРОС:
    можно ли средствами только QLUA (не открывая окон редактирования настроек графика) менять настройки и параметры графика цен?
    Нужно управлять:
    1. идентификатором инструмента (например, заменить SRZ9 на SRH0 в определенный момент времени),
    2. назначением имён линий графика (линия цен, линия индикатора) на подобие тех, что устанавливаются в окне «Редактирование настроек графика».

    Eugene Bright,

    1. Нет

    2. Нет

    И такой же ответ на остальные вопросы из этой серии.

    s_mike@rambler.ru, Понятно, безнадёга, «краткость — сестра таланта», — раньше так говорили.
  8. Здравствуйте, коллеги!

    ВОПРОС:
    можно ли средствами только QLUA (не открывая окон редактирования настроек графика) менять настройки и параметры графика цен?
    Нужно управлять:
    1. идентификатором инструмента (например, заменить SRZ9 на SRH0 в определенный момент времени),
    2. назначением имён линий графика (линия цен, линия индикатора) на подобие тех, что устанавливаются в окне «Редактирование настроек графика».

    Eugene Bright,

    1. Нет

    2. Нет

    И такой же ответ на остальные вопросы из этой серии.
  9. Здравствуйте. Подскажите где взять подробный учебник (для начинающего) или какой нибудь видео курс по обучению QLUA?

    930095,

    Не существует.

    Только документация по луа, qlua и эксперименты.
  10. Куда QUIK сохраняет (буферизует) запущенный на нем скрипт Lua?
    И главное — может ли брокер (тех. служба) «иметь доступ» к этому скрипту (отдельному потоку)?
    Просто хочется узнать народное мнение.

    Авто-репост. Читать в блоге >>>



    1. Не может.

    2. Скрипты считываются с диска и запускаются в памяти.
  11. Всем привет!

    Вопрос вот возник. Как (и можно ли вообще) из экранной таблицы открыть еще одно окно поверх этой таблицы, например по двойному клику на какую-нибудь ее ячейку?



    Да, конечно. Смотрите в хелпе в разделе работа с экранными таблицами. Функция называется settablenotification или как то похоже.

    Каждой таблице можно назначить колбеки на разные действия пользователя, в том числе и на двойной клик.
  12. Всем привет!

    Вопрос вот возник. Как (и можно ли вообще) из экранной таблицы открыть еще одно окно поверх этой таблицы, например по двойному клику на какую-нибудь ее ячейку?
  13. Куда QUIK сохраняет (буферизует) запущенный на нем скрипт Lua? И главное - может ли брокер (тех. служба) "иметь доступ" к этому скрипту (отдельному потоку)? Просто хочется узнать народное мнение.

    Авто-репост. Читать в блоге >>>
  14. Здравствуйте. Подскажите где взять подробный учебник (для начинающего) или какой нибудь видео курс по обучению QLUA?
  15. Здравствуйте, коллеги!

    ВОПРОС:
    можно ли средствами только QLUA (не открывая окон редактирования настроек графика) менять настройки и параметры графика цен?
    Нужно управлять:
    1. идентификатором инструмента (например, заменить SRZ9 на SRH0 в определенный момент времени),
    2. назначением имён линий графика (линия цен, линия индикатора) на подобие тех, что устанавливаются в окне «Редактирование настроек графика».
  16. Минимальная конфигурации VDS для стабильной работы старших версий QUIK и пары QLUA ботов ??? собственно говоря мне хватает вот так: Конфигурация 4x3.5ГГц, 6Гб RAM, 40Гб SSD, 1IP а минималка ??

    Авто-репост. Читать в блоге >>>
  17. Коммуникации Quik Lua с внешним миром.

    Мне нравится Lua. Lua хороший компактный язык на котором можно сделать индикаторы, различные вспомогательные программы, помогающие трейдеру и даже несложные торговые системы (ТС, роботы). Пожалуй единственная книга по Lua — Роберту Иерузалимски: Программирование на языке Lua. Ее можно найти в интернете.

    Lua имеет также несложный C-API позволяющий связать программы Quik Lua с внешним миром через DLL и получить доступ практически ко всему, в том числе к любым математическим библиотекам обработки данных, что необходимо для сколь-нибудь сложным ТС. Однако, для этого уже необходимо знание не только Lua, но и Lua C-API, языка С/С++, а также умения писать DLL. При этом надо будет решить еще ряд проблем, которые возникнут по ходу пьесы в процессе этой деятельности. Далеко не каждый пользователь Quik и Lua может все это реализовать в обозримое время.
    У Quik Lua (QLua) есть еще недостатки — все события терминала в Lua работают в потоке терминала, и получив из них данные надо как можно быстрей завершать функции обработки этих данных и освобождать поток терминала, иначе терминал просто повиснет. Единственная функция QLua работающая в собственном потоке — это main() и вся сколь-нибудь сложная обработка может находиться только в ней.
    Кроме того, для Lua крайне мало библиотек, а существующие работают оч не быстро. В принципе, это и не нужно, если можно организовать связь с внешним миром через C-API. Но нам от этого легче не становится.) Короче, для написания хорошей сложной ТС нам надо выйти за пределы QLua и установить связь с внешним миром, и сделать это доступными средствами.
    Сейчас наиболее продвинутым языком, включающим в себя массу библиотек обработки данных является Python. По применимости для обработки данных он, пожалуй, занимает первое место в мире, а по распространенности входит в первую пятерку. В числе библиотек — математические, статистические, машинного обучения и пр., и пр. Таких библиотек более тысячи только в Anaconda, большинство из которых устанавливается при ее инсталяции. Вы можете не использовать Anaconda и скачать Python с сайта



    Авто-репост. Читать в блоге >>>
  18. В помощь QLUA-водам. Функция чтения CSV файла.
    В былую давность пытался решить вопрос с интерфейсом для QLUA.
    Испробовал IUP, VCL и еще какая-то библиотека была. Но ни одна библиотека стабильно не работала, через какой-то промежуток времени Квик вставал колом.


    Т.к. нам красоты не надо, а удобство хочется, то решил пусть интерфейсом будет Excel(файл.CSV).

    В помощь QLUA-водам. Функция чтения CSV файла.


    Вот вам функция для чтения CSV файлов:

    — можно задать до 20 столбиков параметров, количество строк не ограничено.
    — запятую заменяет на точку в вещественном числе
    — удаляет заголовок столбца, т.е. на выходе получаем массив начинающийся со второй строки

    -----------------------------
    function File_Read(filename)


    local col = 1
    local pat = "(.*)"
    local A={};local B={};local C={};local D={};local E={};
    local F={};local G={};local H={};local I={};local J={};
    local K={};local L={};local M={};local N={};local O={};
    local P={};local Q={};local R={};local S={};local T={};
    local file, err = io.open(filename,«r»)
    if err ~= nil then PrintDbgStr(«err read file: »..err); return; end
    str = file:read()
    for var in string.gmatch (str, ";") do col=col+1 end
    for i = 2, col do pat = pat..";(.*)" end
    for line in io.lines(filename) do
    --PrintDbgStr(line)
    local _,_,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,s15,s16,s17,s18,s19,s20 = string.find(line,pat)
    --PrintDbgStr(tostring(s1))
    table.insert(A,s1);table.insert(B,s2);table.insert(C,s3);table.insert(D,s4);table.insert(E,s5);
    table.insert(F,s6);table.insert(G,s7);table.insert(H,s8);table.insert(I,s9);table.insert(J,s10);
    table.insert(K,s11);table.insert(L,s12);table.insert(M,s13);table.insert(N,s14);table.insert(O,s15);
    table.insert(P,s16);table.insert(Q,s17);table.insert(R,s18);table.insert(S,s19);table.insert(T,s20);
    end
    file:close()
    table.remove(A,1);table.remove(B,1);table.remove(C,1);table.remove(D,1);table.remove(E,1);
    table.remove(F,1);table.remove(G,1);table.remove(H,1);table.remove(I,1);table.remove(J,1);
    table.remove(K,1);table.remove(L,1);table.remove(M,1);table.remove(N,1);table.remove(O,1);
    table.remove(P,1);table.remove(Q,1);table.remove(R,1);table.remove(S,1);table.remove(T,1);
    --Print_Table® Print_Table(S) Print_Table(T)
    return A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T
    end

     



    -------------------------------


    Во время работы робота смело изменяем CSV файл и сохраняем, и новые параметры у вас в роботе.
    CSV файл можно держать открытым.





    Авто-репост. Читать в блоге >>>
  19. COM интерфейс МаtLab в LUA
    Так уж вышло, что пару дней назад я познакомился с терминалом QUICK и языком его скриптов — LUA

       Естественно, сразу возникла необходимость передать полный контроль над этим двумя сложнейшими приложениями чему-то более простому и понятному, например Матлабу, чтобы нажимая разноцветные кнопочки «Обыграть рынок» и «Что там опять у волатильности?» оставить конечному пользователю, то есть мне, только наслаждение от наблюдения за происходящим.


         Теоретически, для этого надо нанять менеджера COM из LUACOM.dll и дать ему в управление пару простых исполнителей — объектов LUA, чтобы высшее руководство МатЛаба могло эффективно распоряжаться ресурсами в иерархии 

     Руководство МатЛаб -> менеджер интерфейса  COM -> исполнитель  объект LUA 


           Но в силу каких-то неведомых причин (от сборки dll, до сборки MS Windows и даже предустановленного железа) сделать по теории управления с ходу не получилось, поэтому была использована альтернативная схема:

    Авто-репост. Читать в блоге >>>
  20. 500 рублей за устранение ошибки в LUA. помогите устранить ошибку. Только прошу отписать того кто разбирается, и поможет.

    Авто-репост. Читать в блоге >>>
  21. Ищу исполнителя! Надо написать в LUA советника: проверяет одно условие, на 4H и D, и посылает на почту или смс, если сигнал сработал. Кто сделает и в какую цену. В личку пишите.
    Ищу исполнителя! Надо написать в LUA советника: проверяет одно условие, на 4H и D, и посылает на почту или смс, если сигнал сработал. Кто сделает и в какую цену. В личку пишите.

    Авто-репост. Читать в блоге >>>
  22. Вопрос к программистам...
    При выключении скрипта lua, при его работе почти целый день, квик зависает напрочь. Что может быть такого в коде или проблема с кивком? Зависание наблюдается на крике 7 и 8 версии у двух разных брокеров.

    Авто-репост. Читать в блоге >>>
  23. Упрощенный алгоритм индикатора zigzag
    в дальнейшем в него встрою сигналы и наклонные уровни

    Упрощенный алгоритм индикатора zigzag


    Settings={
    Name="ZIGZAGPROF",
        line=                                     
                    {  
    					{  
                            Name = "cur1",
                            Type =TYPE_LINE,
                            Width = 2,
                            Color = RGB(0,0, 0)
                        }				
                    }
    }
    
    function Init()
    
      de = 1
      y1 = nil
      y2 = nil
      x1 = 1
      x2 = 1
        
      return 1
      
    end
    
    function OnCalculate(index)
    
      vl = C(index)
      if index == 1 then 
    	y1 = vl
        y2 = vl
      else   
    	  if C(index) > y1*(1+de/100) and y1 < y2 then 
    	    x2 = x1
    	    y2 = y1	
    	    x1 = index 
    	    y1 = C(index)	        
    	  end 	
    	  if C(index) > y1 and C(index) > y2 then 
    	    x1 = index 
    	    y1 = C(index)	  			  
    	  end 
    	  	  		
    	  if C(index) < y1*(1-de/100) and y1 > y2 then 
    	    x2 = x1
    	    y2 = y1
    	    x1 = index 
    	    y1 = C(index)	  		
    	  end 	
    	  if C(index) < y1 and C(index) < y2 then 
    	    x1 = index 
    	    y1 = C(index)	  			  
    	  end 	  	  		
    	end 	
      
      if x1 ~= index then 
        curfrom = x1
    	curto = index
      else 
        curfrom = x2
    	curto = x1
      end 
     
      if curto ~= curfrom then 
        k = (C(curto)- C(curfrom))/(curto- curfrom)  
        for i = curfrom, index  do
          curv = i*k + C(curto) - curto*k  		          
    	  SetValue(i, 1, curv)
        end   	
      end 
      
      return vl
     
      
    end


    Авто-репост. Читать в блоге >>>
  24. Куплю робота на LUA без блока индикаторов
    Нужен робот на LUA, без блока индикаторов, «болванка». Было бы хорошо, если бы там была реализована схема динамического переноса стоп-лоссов

    Авто-репост. Читать в блоге >>>
  25. как на lua в quik передать данные из одного индикатора в другой, getCandlesByIndex не предлагать она при смене графика не работает
    как на lua в quik передать данные из одного индикатора в другой, getCandlesByIndex не предлагать она при смене графика не работает

    Авто-репост. Читать в блоге >>>
Чтобы купить акции, выберите надежного брокера: