Найти тему
Код торгового робота

Использование команды message при написании скриптов на QLUA (часть 1)

Всем привет!

В этом выпуске я хотел бы подробнее поговорить о команде message(). Хотя казалось бы – с ней все понятно. Мы ранее, когда писали первый скрипт, ее рассмотрели, и она выводит сообщение в отдельное окошко.

Как-то так:

Информационное окно торговой системы QUIK
Информационное окно торговой системы QUIK

А что если в процессе выполнения скрипта нужно выводить не одно сообщение, а несколько? Конечно, можно в данном окошке пролистывать эти сообщения и анализировать. Но, это если таких сообщений будет 5-10. А, если будет работать несколько скриптов, и каждый будет генерировать сотни сообщений. Что тогда делать?

Все сообщения, выдаваемые в данном окне можно просмотреть списком.

Для этого делаем следующее:

Нажимаем на иконку «Создать новое окно».

-3

В открывшемся окне выбираем внизу позицию «Таблица сообщений».

-4

Откроется окно в котором будут выводиться все сообщения, которые Ваши скрипты выдавали через команду message().

-5

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

Скрипт № 1 (message1.lua)

function main()
for i=1,50 do -- Цикл повторяет действия 50 раз.
perem1 = summ(i,8); -- запускает функцию сложения чисел. Каждый раз переменная i будет увеличиваться на 1.
message(" Cумма чисел равна: "..perem1);
sleep(1000); --делаем задержку на 1 секунду.
end
end
function summ(znachenie1, znachenie2)
peremennaya = znachenie1 + znachenie2;
return peremennaya
end

Скачать данный код

Первый скрипт выводит с задержкой в одну секунду сумму пятерки и переменной i, которая меняется от 1 до 50.

В результате выполнения получим такое:

-6

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

Скрипт № 2 (message2.lua)

function main()
for i=1,50 do -- Цикл повторяет действия 50 раз.
perem1 = multiplication(i,8); -- запускает функцию умножения чисел. Каждый раз переменная i будет увеличиваться на 1.
message(" Произведение чисел равно: "..perem1);
sleep(1000); --делаем задержку на 1 секунду.
end
end
function multiplication(znachenie1, znachenie2)
peremennaya = znachenie1 * znachenie2;
return peremennaya
end

Скачать данный код

А в третьем скрипте пусть выдается разность.

Скрипт № 3 (message3.lua)

function main()
for i=1,50 do -- Цикл повторяет действия 50 раз.
perem1 = division(i,8); -- запускает функцию вычитания чисел. Каждый раз переменная i будет увеличиваться на 1.
message(" Разность чисел равна: "..perem1);
sleep(1000); --делаем задержку на 1 секунду.
end
end
function division(znachenie1, znachenie2)
peremennaya = znachenie1 - znachenie2;
return peremennaya
end

Скачать данный код

А теперь давайте загрузим все три скрипта в QUIK и последовательно быстро запустим их.

Запуск скриптов LUA в системе QUIK
Запуск скриптов LUA в системе QUIK

В результате в окне сообщений можно увидеть такую кашу:

-8

Очень сложно воспринимать эту информацию. А если скрипты выдают Вам информацию в духе: «Спред по SBER составляет 0,004»

«Средняя цена сделок по VTBR по последним 14 свечам составляет 0,015544»

И т.д.

То тут голова кругом пойдет. Как же отделять сообщения друг от друга и потом анализировать информацию.

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

К примеру в первом скрипте я буду писать в начале каждого сообщения «Summ». Во втором скрипте – «Multi», в третьем – «Division»

Что бы не путаться и не писать в одном скрипте эти текстовые добавки с ошибками, я помещу этот текст в переменную и буду добавлять переменную в каждый вывод message.

Тогда текст скрипта № 1 будет таким:

function main()
dobavka = "Summ: "; -- текстовая добавка для сообщений.
for i=1,50 do -- Цикл повторяет действия 50 раз.
perem1 = summ(i,8); -- запускает функцию сложения чисел. Каждый раз переменная i будет увеличиваться на 1.
message(dobavka.." Cумма чисел равна: "..perem1); -- вывод с текстовой добавкой
sleep(1000); --делаем задержку на 1 секунду.
end
end
function summ(znachenie1, znachenie2)
peremennaya = znachenie1 + znachenie2;
return peremennaya
end

Скрипт № 2 станет таким:

function main()
dobavka = "Multi: "; -- текстовая добавка для сообщений.
for i=1,50 do -- Цикл повторяет действия 50 раз.
perem1 = multiplication(i,8); -- запускает функцию умножения чисел. Каждый раз переменная i будет увеличиваться на 1.
message(dobavka.." Произведение чисел равно: "..perem1); -- вывод с текстовой добавкой
sleep(1000); --делаем задержку на 1 секунду.
end
end
function multiplication(znachenie1, znachenie2)
peremennaya = znachenie1 * znachenie2;
return peremennaya
end

Скрипт № 3 станет таким:

function main()
dobavka = "Division: "; -- текстовая добавка для сообщений.
for i=1,50 do -- Цикл повторяет действия 50 раз.
perem1 = division(i,8); -- запускает функцию вычитания чисел. Каждый раз переменная i будет увеличиваться на 1.
message(dobavka.." Разность чисел равна: "..perem1); -- вывод с текстовой добавкой
sleep(1000); --делаем задержку на 1 секунду.
end
end
function division(znachenie1, znachenie2)
peremennaya = znachenie1 - znachenie2;
return peremennaya
end

Теперь, если мы запустим одновременно все три скрипта, то получим в окне сообщений примерно такое:

Выдача сообщений в торговой системе QUIK
Выдача сообщений в торговой системе QUIK

Немного порядка прибавилось. Но для полноценной работы нужно эти данные перенести в Эксель.

Для этого в окне сообщений нажимаем правую кнопку мыши и выбираем «Копировать всё». А в Экселе вставляем. У меня получилось так:

-10

Теперь выделяем колонки A-E, и во вкладке «данные» нажимаем «фильтр».

На фильтре на колонке с сообщениями нажимаем кнопку фильтра.

-11

Жмем «Текстовые фильтры», далее «Начинается с…»

-12

И пишем текстовую добавку того скрипта, по которому хотим увидеть все сообщения. Например, от первого скрипта – «Summ».

После этого Вы увидите только те сообщений, которые генерировал первый скрипт.

Таким образом можно выделять сообщения от каждого скрипта. Но, это еще не все.

В следующей выпуске я изложу еще один свой подход к порядку получения данных, выдаваемых скриптами.

⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇

📃 Краткое содержание данного канала.

➖➖➖➖➖➖➖➖➖➖➖➖➖

Landingcentr.ru - разработка сайтов для малого и среднего бизнеса.

⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆

Если Вы хотели бы получить программную реализацию своей торговой идеи, но понимаете, что сами не готовы облачить идею в код, то можете обратиться ко мне. Мой адрес в телеграм: https://t.me/Nikolai_Antonov

Моя электронная почта: nantonov@mail.ru