С чего начать самостоятельное обучение?

Автор записи: Дмитрий (Admin)
1 звезда2 звезды3 звезды4 звезды5 звезд (Голосов 6, среднее: 5,00 из 5)
Загрузка...

LogoNew
Во первых, Вам потребуются удобные среды разработки (программы, где Вы сможете писать свой код), о том, где их взять и как установить прочтите здесь. Для написания скриптов QLua Вам понадобится только Notepad++.

Во вторых, получите терминал QUIK с демо-счетом, можете получить его либо в компании Arqa (разработчик терминала) по данной ссылке, либо у практически любого брокера.

И в третьих, начинайте изучать QLua.
Рекомендую начать с раздела меню "QLua(Lua) основы", в частности со статей: "База скрипта в QLua (lua)" и "Функции обратного вызова, встроенные в QLua", остальные статьи данного раздела используйте как справочники при написании скрипта, в них практически к каждой функции есть пример кода с комментариями.

Следующим шагом переходите к разделу меню "QUIK + QLua(Lua)", в нем речь идет о том, как взаимодействует скрипт с терминалом QUIK, как обменивается данными, все так же с примерами и комментариями. Особое внимание обратите на раздел "Блоки кода", в особенности на статью в нем: "Пример простого торгового движка "Simple Engine" QLua(Lua)", разобрав код которой Вам многое станет понятнее, хоть по началу такой подход может показаться несколько сложным.

Так же не забывайте про то, что в папке с терминалом есть 2 файла справки:
QLUA.chm - в нем есть все про QLua, правда практически без примеров, но для справки подойдет.
info.chm - справка по работе с терминалом, помимо этого в нем есть нужные для QLua разделы, в частности для того, чтобы знать какие поля должны быть в массиве для отправки транзакции функцией sendTransaction(), смотрите эту информацию здесь:
"Раздел 6. Совместная работа с другими приложениями" - "Импорт транзакций" - "Формат .tri-файла с параметрами транзакций" и "Примеры строк, которые могут содержаться в файле"

Когда Вы уже сможете уверенно писать скрипты, которые будут совершать торговые операции, работать с таблицами, графиками, индикаторами, тогда можете переходить к следующему разделу (если QLua Вам окажется недостаточно), это пункт меню "Qlua C/C++ C#".
Первым шагом изучите статью "Коннектор DLL QUIK - QLua(Lua) - C#", затем изучите примеры из подраздела "Обмен данными". Дальше можете изучить все остальное, что есть в разделе "Qlua C/C++ C#".

В процессе изучения Вы всегда можете обратиться за помощью в комментариях под изучаемой статьей, или в разделе "ВОПРОС-ОТВЕТ".

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

Продуктивного изучения и больших профитов Вам !!! 🙂
Если у Вас появились какие-то вопросы, задайте их в комментариях под статьей !!!

Добавить комментарий

С чего начать самостоятельное обучение?: 89 комментариев

  1. Выбираю, используя Lua, инструмент динамически. Затем нужно анализировать данные стакана по выбранному инструменту. Если стакан открыт то функцией OnQuote можно следить за его изменением. Но если стакан не открыт то OnQuote не работает. Либо сразу после выбора инструмента открывать стакан по нему вручную, но как это сделать программно? Либо получать стакан напрямую с сервера, но в этом случае не работает OnQuote. Какое решение тут лучше применить?

        1. Она описана в документации, файл QLUA.chm, раздел "Функции для заказа стакана котировок", хотя там и описывать-то нечего, функция принимает всего 2 параметра: код класса и код бумаги. Для QLua это то же самое, что открыть стакан.

  2. Дмитрий, кнопочка «ответить» в нашей с Вами ветке исчезла, наверное кончилось количество допустимых ответов:), поэтому отвечу в новой теме.
    За ссылку спасибо, буду разбираться, хотя я еще окончательно не решил, по какому из возможных вариантов действовать. Пока, все же, больше склоняюсь к варианту Lua + Delphi, как наиболее простому.
    Насчет терминала Квик, ну как его у меня может не быть, если я уже более 16 лет торгую:)?
    Относительно интерфейса, он нужен исключительно для удобства в работе. Сейчас у меня в нем отражается около 30 параметров, половину из которых приходится менять в процессе работы, и порядка 10 кнопок. И все это по каждой паре инструментов, которых около 40. А иначе сложно добиться прибыльности. Правда есть желание все полностью автоматизировать и посадить на сервер брокера, но это пока мечты.
    Что касается программиста –спасибо, буду иметь ввиду, у меня создалось ощущение, что Вы хорошо разбираетесь в данном вопросе. Правда я, как правило, предпочитаю во всем разбираться сам, чтобы при отладке, сбоях или малейшем изменении не бегать за программистом (был у меня такой печальный опыт).

    1. 16 лет это серьезный опыт! У сайта настройка максимум 10 вложенных комментариев, так что всегда начинайте просто, так же, как сейчас, новую ветку, я увижу. Я тоже предпочитаю сам во всем разбираться, по этому, поддерживаю. По поводу того, что я разбираюсь в этом вопросе хорошо могу ответить, что все относительно, я самоучка, по этому, разбираюсь в чем-то только по мере необходимости, много чего не знаю. В общем, удачи Вам, если будут сложности в чем-то, обращайтесь, подскажу что знаю.

  3. Здравствуйте Дмитрий!
    Хочу написать робот-арбитражер для парного трейдинга с акциями и фьючерсами, главные требования:
    1. Скорость работы – максимально быстрая скорость постановки, снятия и перестановки заявки при изменении цены в стакане – желательно не более 0.1сек.
    2. Отсутствие торможения – отсутствие замедления и сбоев в работе при выставлении заявок по 15-20 парам инструментов, при отслеживании до 40-60 пар (отслеживание возможно не в режиме реального времени, а периодически – 1раз в 1-5 минут).
    Не нужно: никаких графиков, индикаторов, проверки на истории, возможностей постановки заявок вручную.
    Собственно такой робот у меня есть (написан мной на Delphi), но он работает через передачу по ODBC в базу данных и затем чтения из нее, что замедляет постановку заявки более чем на 1.5 секи и при работе более чем с 8-10 парами начинаются сбои в постановке/снятии заявок.
    Вопрос: возможно ли написание подобного робота, отвечающего указанным выше требованиям на, Lua или Lua + внешняя программа (С#, Delphi)?
    Поскольку Lua не знаю совершенно, не хотелось бы оказаться в положении человека изучившего Lua, написавшего на нем робота и вдруг выяснившего, что скорость постановки заявки будет медленная и работать можно будет только с 2-3 парами инструментов :).

    1. Здравствуйте! Возможно и на чистом Lua такого робота написать и на Lua в связке с другими языками через DLL. Lua тормозить не будет, будет отправлять заявку мгновенно, задержки происходят на пути от квика к серверу брокера, с сервера брокера до биржи и обратно, а это зависит от качества интернета и удаленности от сервера брокера. Думаю, проблем со скоростью у Вас не будет, если все правильно напишите, а, если нужна будет еще более высокая скорость, то можно будет в будущем арендавать виртуальный, или реальный сервер у брокера, или на бирже, так же поставить туда квик и все моментально будет работать. Хотя я думаю и без этого скорость Вас устроит.

      1. Спасибо Дмитрий!
        А можно где-нибудь посмотреть образец текста программы на Lua с передачей данных (допустим стакана) по DLL в программу на Delphi. Все-таки по образцу гораздо легче разобраться:).
        И еще, можете ли Вы, как эксперт, хотя бы ориентировочно, оценить скорость работы обоих вариантов роботов(чисто Lua иkb Lua+Delphi) при указанных выше потоке данных? А то на некоторых форумах говорят, что 100 млсек через Квик и Lua в принципе не вытянуть. Какой из них будет работать быстрее с Вашей точки зрения?
        По поводу интернета: ping до брокера 25-27 млсек, от брокера до биржи (по утверждению брокера) меньше 10млсек. Да, думаю понятно, что одновременно 20 заявок выставляться не будет, просто идет отслеживание 15-20 пар, а одномоментно будет высталяться 1 максимум 2 заявки.

        1. Примеры есть только с C#. Посмотрите раздел сайта "Qlua + C/C++/C#". Думаю, если только QLua использовать, робот быстрее будет работать, т.к. не будет тратиться время на отправку данных в другое приложение, но, опять же, если будут производиться какие-то сложные расчеты, то, возможно, выгоднее будет по времени выполнять их на стороне. И в том и в другом случае наибольшее значение будет иметь то, на сколько оптимальный алгоритм принятия решений Вы напишите, т.к. QLua на отправку транзакции практически нисколько времени не затрачивает. Можете сделать предварительный тест, в котором в цикле выполняйте самую емкую операцию и посмотрите сколько раз за секунду, например, lua успеет ее выполнить, тогда проще будет выводы сделать. Вот здесь замерялась примерно скорость отправки данных а C#:
          https://quikluacsharp.ru/qlua-c-cpp-csharp/otpravka-dannyh-iz-tekushhej-tablitsy-parametrov-v-c-posredstvom-dll/
          где видно, что бывает и 0 мс, т.е. все от алгоритма зависит, от его оптимизации.
          Но я, все таки, рекомендую Вам Вашего робота только на QLua написать без DLL.
          Можете вообще на Metatrader 5 все делать, говорят, что он намного быстрее QLua работает. Но я Вам не могу по этому поводу ничего сказать конкретного, т.к. сам им не пользуюсь.

          1. Спасибо.
            А временную оценку (хотя бы приблизительно) не можете дать? Возможно уложиться в 100 млсек или нет? Математические расчеты не сложные (+, -, *, /, проверка выполнения условий, никаких логарифмов, степеней или статистических формул), другое дело, что за 1 цикл придется рассчитывать информацию по 15-20 парам инструментов (часто по разным алгоритмам), а раз в минуту по 40-60 парам.
            Возможно действительно на QLua будет работать быстрее, но:
            1. в программе достаточное количество переменных которые надо менять в процессе работы, особенно при настройке, а для этого нужен интерфейс. В QLua его, насколько я понимаю, написать нельзя.
            2. у меня уже есть программа написанная на Delphi, а значит нужно только настроить перевод данных в нее, что намного проще, чем целиком писать программу на QLua,
            Я прав?
            И еще вопрос. Правильно ли я понимаю, что для передачи данных из QLua на Delphi необходимо написать свою DLL на Delphi?
            Если да, то возможно вы знаете в сторонних ресурсах примеры подобных решений, а возможно есть уже и готовые?

            1. Пожалуйста! Считайте, что скорость будет такая же, как сейчас у Вас получается на Delphi плюс потери на передаче квик - брокер - биржа. А уложитесь ли Вы в 100 мс я сказать не могу, т.к. не знаю сколько времени у Вас затрачивается сейчас в дельфи. Визуальный интерфейс можно не делать, можно просто в начале скрипта написать параметры и менять их вручную, типа такого:

              1
              2
              3
              4
              5
              6
              7
              8
              9
              10
              11
              12
              13
              
              ---------------------------------------------------------------------------------------------------
              -- НАСТРАИВАЕМЫЕ ПАРАМЕТРЫ ------------------------------------------------------------------------
              ---------------------------------------------------------------------------------------------------
              ACCOUNT        = 'SPBFUT00b93'      -- Счет
              CLASSCODE      = 'SPBFUT'           -- Код класса
              SECCODE        = 'SiH7'             -- Код бумаги
               
              RANGE          = 40                 -- Расстояние между уровнями в ШАГАХ ЦЕНЫ
              TRAILING_SIZE  = 40                 -- Размер трейлинг-стопа в ШАГАХ ЦЕНЫ
              PROFIT_SIZE    = 20                 -- Размер профита в ШАГАХ ЦЕНЫ
              DEMO           = true               -- Работа на демо-счете (true(да)/false(нет))
              ---------------------------------------------------------------------------------------------------
              ---------------------------------------------------------------------------------------------------

              Открыли скрипт в Notepad++, поменяли значения параметров, сохранили, запустили в квике, дело 30 секунд.
              Вы ведь не ради красоты это делаете, а какая разница, в форме значение ввести, или в начале скрипта, по большому счету?
              А вообще, можете и интерфейс сделать на чистом QLua, например, вот такой:
              Изображение:

              Первая таблица появляется при запуске скрипта, кнопки ее кликабельны, нажимая на кнопку "Настройки", появляется таблица "Настройки", нажимая в таблице "Настройки" по ссылке "Из списка" строки "Код инструмента", появляется таблица "Код инструмента", кликнув в которой по нужному инструменту, таблица инструментов исчезает, а выбранный инструмент назначается параметру "Код инструмента" и отображается в таблице "Настройки". Так же, можно синими кнопками < , > выбирать элементы из заранее сформированного списка, не открывая таблицу инструментов. В результате получается вполне работоспособный интерфейс.
              В средней таблице "Настройки" все теги вводятся с клавиатуры, т.е. мигает курсор, как в обычном текстовом поле, но на самом деле это обычная таблица, в которой можно в реальном времени выводить в ячейки разные значения, окрашивать их цветом, также таблицы QLua поддерживают стандартные события пользовательского ввода: клики, нажатия клавиш и т.п., но, сразу скажу, это все довольно трудоемко.

              По поводу Delphi, раньше много чего в нем писал, потом полностью перешел на Visual Studio и C# и не разу не пожалел, чего и Вам желаю, Visual Studio, как бы, более взрослая среда разработки, на мой взгляд, но это только мое мнение. Т.к. давно не использовал Delphi, не могу Вам ничего по нему подсказать, просто не помню как там все устроено, соответственно, не могу подсказать где что посмотреть, т.к. сам не ищу и не знаю где это все есть.

                1. Всегда пожалуйста! Можете, кстати, просто к скрипту приделать DLL и в ней вести все расчеты, она на C++ пишется, так что скорость можно очень хорошую получить, просто перенесите в нее все то, что у Вас в Delphi.

                  1. К сожалению я ни разу не программист:(, я и на Delphi-то пишу с трудом (просто жизнь заставила), так что С++ я боюсь мне будет освоить очень затруднительно, наверное придется искать программиста, если ничего другого не придумаю:(.
                    Скажите, а текст приведенного Вами примера интерфейса на Lua большой секрет? Его как-то можно получить? Все-таки с подобным образцом разобраться будет намного проще.
                    А вообще, большое Вам спасибо за проявленное участие!

                    1. Всегда пожалуйста! Тот код не секрет, но он очень сложен, я думаю Вы в нем больше запутаетесь только, начните с более простого варианта работы с таблицами QLua: https://quikluacsharp.ru/quik-qlua/primer-skripta-qlua-lua-vypolnyayushhego-torgovye-operatsii-v-terminale-quik/
                      Поймете принцип, а дальше дело техники, можно хоть сколько будет усложнять и дополнять функционал.
                      Еще Вам в помощь раздел файла QLua.chm "Функции для работы с таблицами Рабочего места QUIK", данный файл находится в папке с терминалом квик, если у Вас еще нет терминала, то получите демо от разработчиков:
                      http://arqatech.com/ru/support/demo/
                      И, все таки, какая у Вас необходимость в интерфейсе? Чем Вас не устраивает устанавливать значения параметров просто в коде?

  4. Вот пример:

    1
    2
    3
    
    SBER=getParamEx("QJSIM","SBER", "BID").param_value
    SBERP= getParamEx("QJSIM","SBERP", "BID").param_value
    LKOH=  getParamEx("QJSIM", "LKOH", "BID").param_value

    Как правильнее отсортировать таблицу по значению "BID" в таблице qlua , чтобы и второй столбец соответственно сортировался. Изображение:

    Надо чтобы было так:

    1
    2
    3
    
    91.93  - SBERP
    132.8 -  SBER
    2598 -  LKOH
    1. Либо вручную по заголовку столбца кликнуть и выбрать сортировку, либо изначально вносить значения в таблицу в нужном порядке. Или Вы сделали вручную сортировку на первом столбце в таблице, он у Вас сортируется, а второй столбец остается неизменным?

    2. 1
      2
      3
      4
      5
      6
      7
      
      array={tonumber(SBER,SBERP,LKOH,}
      table.sort(array)
      for i=1, #array do
       SetCell(t_id, 1, 1, tostring(array[i]));   SetCell(t_id,1, 2, tostring("SBER"));  
       SetCell(t_id, 2, 1, tostring(array[i]));   SetCell(t_id,2, 2, tostring("SBERP"));
      SetCell(t_id, 3, 1, tostring(array[i]));    SetCell(t_id,3, 2, tostring("LKOH"));       
      end

      Сортирует только по цене, столбик с названиями тикера остается не измененным.
      Спасибо заранее.

      1. Если Вы во второй столбец напрямую пишите значения, никак не связанные с array, то с чего они будут сортироваться? Если Вы напрямую указываете, что в строку 1, столбец 2 нужно записать слово "SBER", то как оно должно вдруг само по себе поменяться местами со словом "SBERP" из соседней строки?

          1. Придумал вот такой немного извращенный способ, но он вроде бы работает 🙂 Ничего проще придумать как-то так с ходу не удалось.

            1
            2
            3
            4
            5
            6
            7
            8
            9
            10
            11
            12
            13
            14
            15
            16
            17
            18
            19
            20
            21
            22
            23
            24
            25
            
            function main()
               SBER  = getParamEx("QJSIM","SBER", "BID").param_value + 0
               SBERP = getParamEx("QJSIM","SBERP", "BID").param_value + 0
               LKOH  = getParamEx("QJSIM", "LKOH", "BID").param_value + 0
               array = {
                  {SBER    = SBER},
                  {SBERP   = SBERP},
                  {LKOH    = LKOH}
               }
               table.sort(array, sortfunc)
               for i=1, #array do
                  for key,value in pairs(array[i]) do
                     SetCell(t_id, i, 1, tostring(value))
                     SetCell(t_id,i, 2, key)
                  end      
               end
            end
             
            sortfunc = function(a,b)
               local val1 = 0
               for key,value in pairs(a) do val1 = value end
               local val2 = 0
               for key,value in pairs(b) do val2 = value end
               if val1 < val2 then return true else return false end
            end
        1. Выложил скрипт, так как именно на этом месте где надо сортировать названия "SBER", "SBERP", "LKOH" у меня случился ступор на весь день. Замучился немного.

  5. Добрый день, Дмитрий!
    Не нашел других топиков куда можно было задать вопрос.
    Подскажите, пожалуйста, как взять в Qlua открытый интерес.
    Мучаля с getParamEx (class_code, sec_code, param_name), но получатся неведомая чушь.
    Заранее спасибо.

    1. Здравствуйте! Проще брать из обезличенных сделок, в функции обратного вызова OnAllTrade.

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      
      SEC_CODE = 'RIZ6'
      run = true
       
      function main()
         while run do sleep(10) end
      end
       
      function OnAllTrade(trade)
         -- Если сделка по нужному инструменту
         if trade.sec_code == SEC_CODE then
            message('ОИ = '..trade.open_interest)
         end
      end
    2. Вы только скрипт, представленный Дмитрием, не запускайте, он как пример, а то заспамит Вам терминал сообщениями и вообще завесит его.

        1. Большое спасибо Дмитрий и Александр.
          Кстати, а вы может вкурсе - есть задача: кидать данные в файл через DLL (простой сбор стакана), но есть ощущение. абсолютно пока субъективное, что не все данные Quik получает с серва, и или не все отправляет в файл.
          Куда покопать ?

          1. Всегда пожалуйста! Суть в том, что квик не получает с сервера перемещение/изменение каждой заявки в стакане, а получает снимок, срез стакана несколько раз в секунду и то, что происходило между этими срезами мы не видим, если нужно видеть все процессы в стакане, то нужно уже смотреть в сторону прямого подключения к бирже, без квика.

  6. Здравствуйте, Дмитрий.
    Подскажите, пожалуйста, вы разрабатываете собственные торговые стратегии или используете существующие? Я реализовал уже несколько различных стратегий, и, к сожалению, все они не гарантируют прибыль. Иногда работают, иногда - нет. Хотелось бы найти/придумать что-то более стабильное. Не поможете советом, в какой области исследовать? Может быть ресурс или литературу подскажете?

      1. Если у меня есть определённый алгоритм, с чего стоит начать... ? Я не программист и никогда этим не занимался. Возможно есть какие-либо типовые исходные каркасыдля построения своей Торг. системы?

  7. Здравствуйте, писал давно на qpile. Опять хочу написать робота, на новом уровне. где я могу прочитать сравнительную информацию по скажем скорости работы разных схем работы с квиком? обрисовать идею аглогитма (не сложную) и спросит совета как удобнее его реализовать? Спасибо!

      1. перекладывать часть средств из одного инструмента в другой при наступлении условия, что можно конвертировать "мгновенно" (то есть в стаканах есть заявки достаточные для удовлетворения объема по заданной цене). скорость чтения стаканов хотелось бы раз 10 в секунду или чаще. Не знаю возможностей по скорости, каковы реалии? объемы и уровни не знаю где удобнее вводить, может из Экселя читать? Спасибо!

          1. По мнению людей, кот работали - глючная база. И подключать, в общем, замотаетесь (хотя, это смотря куда). А вообще да, простая, легкая.
            Я использую компактную установку MS SQL-Server (free) или по простому Access. Вот с этим никаких проблем.

        1. Проверил сейчас, ради интереса, с какой частотой стакан обновляется, получились вот такие результаты (второй столбец - миллисекунды):

          17:43:22 156
          17:43:22 63
          17:43:22 109
          17:43:22 110
          17:43:23 218
          17:43:23 250
          17:43:23 391
          17:43:23 31
          17:43:23 94
          17:43:23 16
          17:43:23 46
          17:43:23 63
          17:43:24 78
          17:43:24 125
          17:43:24 109
          17:43:24 219
          17:43:24 110
          17:43:25 531
          17:43:25 125
          17:43:25 109
          17:43:25 422
          17:43:26 453
          17:43:26 219
          17:43:26 109
          17:43:26 282
          17:43:26 62
          17:43:27 203
          17:43:27 110
          17:43:27 203
          17:43:27 234
          17:43:27 109
          17:43:27 110
          17:43:27 109
          17:43:28 125
          17:43:28 110
          17:43:28 187
          17:43:28 250
          17:43:28 94
          17:43:28 125
          17:43:28 109
          17:43:29 94
          17:43:29 219
          17:43:29 93
          17:43:29 579
          17:43:30 93
          17:43:30 110
          17:43:30 109
          17:43:30 94
          17:43:30 109
          17:43:30 125
          17:43:30 219
          17:43:31 328
          17:43:31 109
          17:43:31 313
          17:43:31 359
          17:43:32 94
          17:43:32 219
          17:43:32 109
          17:43:32 110
          17:43:32 109
          17:43:32 109
          17:43:32 110
          17:43:32 109
          17:43:32 94
          17:43:33 656
          17:43:33 219
          17:43:33 109
          17:43:34 125
          17:43:34 110
          17:43:34 109
          17:43:34 109
          17:43:34 328

          Отслеживал поступление новых данных по инструменту SBRF-9.16 в функцию обратного вызова OnQuote.
          Т.е. скорость та же, какую Вы видите, когда смотрите в стакан в квике.
          А уровни и объемы нельзя прямо в скрипте вычислять? Если нет, то можно сделать визуальную таблицу QLua и в нее вводить с клавиатуры нужные цифры.

          1. Спасибо за измерения скорости.
            "и в нее вводить с клавиатуры нужные цифры." - а выгружать в какие форматы можно? и читать какие форматы файлов?
            Могу ошибиться, но насколько помню тогда на qpile в Excel формировал макросом заявки, выгружал в текстовый файл определённого формата и портфель читал файл и заявки выставлял.

            1. Пожалуйста! В QLua нет встроенных инструментов выгрузки в какие-то определенные форматы, но QLua имеет практически те же возможности, что и язык Си, по этому, можно реализовать работу с любыми форматами, но все это нужно программировать, либо использовать какие-то готовые библиотеки. На QLua Вы так же можете читать заявки из файла. Только, в отличии от QPILE, QLua не будет делать это автоматически без Вашей команды.

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

          1. Красивая таблица))) Вопрос такой: Можно посмотреть кусочек кода от представленной таблицы на рисунке? Я так понимаю: Нажимаем кнопку "Настройки", создается таблица с параметрами. И что за поле такое "Из списка", это возвращаемые значения из функции?
            Делаю робота (начинаю с интерфейса как обычно), не нашел на сайте примеров интерфейса аналогичных этой картинке.
            Сильно не пинать, только начал разбираться, раньше программировал на MQL4. Спасибо.

            1. Это большой движок самописный построенный по принципу объектно-ориентированного программирования, так что кусочек кода вряд ли что-то прояснит, но мне не жалко 🙂

              1
              2
              3
              4
              5
              6
              7
              8
              9
              10
              11
              12
              13
              14
              15
              16
              17
              18
              19
              20
              21
              22
              23
              24
              25
              26
              27
              
              ...
              elseif Col == 4 then -- "Из списка"
                 do
                 if Table.Rows[Row].Cells[3].Type == 'ACCOUNT' then
               
                    Table.ListTables.ACCOUNT[Table.Rows[Row].Cells[1].Value]:Show()
               
                 elseif Table.Rows[Row].Cells[3].Type == 'CLASS_CODE' then
               
                    Table.ListTables.CLASS_CODE[Table.Rows[Row].Cells[1].Value]:Show()
               
                 elseif Table.Rows[Row].Cells[3].Type == 'SEC_CODE' then
               
                    Table.ListTables.SEC_CODE[Table.Rows[Row].Cells[1].Value]:Show()
               
                 elseif Table.Rows[Row].Cells[3].Type == 'NUMBER' then
               
                    Table.ListTables.NUMBER[Table.Rows[Row].Cells[1].Value]:Show()
               
                 elseif Table.Rows[Row].Cells[3].Type == 'STRING' then
               
                    Table.ListTables.STRING[Table.Rows[Row].Cells[1].Value]:Show()
               
                 end
                 end
              end
              ...

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

              1. Непонятны следующие моменты:
                1) Первая таблица ячейка "Настройки" это кнопка или покрашенная ячейка?
                2) Вторая таблица синие квадратики с белыми стрелками это что такое? Какой то другой тип ячеек ? То есть, есть видимые отличия этих ячеек, например с ячейкой "Баланс" из первой таблицы в ней полагаю ничего ввести или выбрать нельзя, только просмотр.
                В итоге видим три типа ячеек: простую ячейку, ячейку ввода параметров, ячейку с выбором.
                Интересовал код который собственно и формирует такой вид ячеек.

                1. В QLua нет кнопок, как таковых, это все раскрашенные ячейки, кнопка со стрелочкой, это просто раскрашенная ячейка, в которой знак "больше", или "меньше", весь интерфейс строится на функциях описанных в разделе "Функции для работы с таблицами Рабочего места QUIK" файла справки QLUA.chm, который находится в папке терминала. Просто обрабатываются соответствующим образом клики мышкой, нажатия клавиш на клавиатуре, никакой магии.

              2. Пока на сайте не нашел примеров как строить элементы интерфейса для взаимодействия с пользователем, а именно элементы ввода параметров от пользователя к роботу: кнопки, селекторы, ячейки ввода и т.д. Тот арсенал, чем располагает QLua в этом вопросе. Вернее нашел, но к сожалению, только картинку.