Избранное трейдера Константин Платонов
Сегодня начинаем уже писать полноценные скрипты для терминала, а не отдельные блоки кода на lua.
Пройдем:
Структура скрипта
В торговом терминале можно запускать небольшие примеры на lua, как мы это делали ранее, но если говорить о постоянно работающем алгоритме, а не о компактной программе, которая должна выполнить только несколько коротких действий, то минимальная структура скрипта для квика будет содержать следующие функции:
function OnInit – инициализирует глобальные переменные и константы (например, торгуемые бумаги, размеры тейка и стопа, торговый счет и пр.), имена таблиц, необходимых файлов.
function OnStop – функция остановки скрипта, активируется при нажатии клавиши «Остановить» в панели скриптов терминала.
function main – основная функция, создает отдельный поток для выполнения скрипта. Обычно внутри main создается цикл для непрерывной работы, т.к. без него функция выполнит один раз весь код, который в ней прописан и скрипт остановится.
Продолжаю тему инвестиций в золото. В прошлый раз писал о вложении в золотые слитки, теперь посмотрим какие у нас есть нюансы при вложении в золотые монеты. И нюансов этих сильно больше.
Во-первых следует отделить монеты с коллекционной ценностью от монет инвестиционных, то есть тех монет, которые выпускаются массово и их стоимость наиболее приближена к цене металла в них. Далее в статье будет идти речь именно об инвестиционных монетах на примере «Георгий Победоносец» в различных весовых категориях.
Во-вторых необходимо понимать, что цена на монеты зависит от огромного количества факторов помимо их веса и определяется каждой реализующей / выкупающей организацией индивидуально на основе: состояния монеты, монетного двора чеканки, года выпуска, региона продажи, собственного представления о лучшей цене и так далее и тому подобное.
Если делать анализ с учетом всех этих факторов, мне пришлось бы публиковать монструозный справочник цен, поэтому я постарался максимально упростить таблицу, жертвуя некоторой точностью: в подборке цены на монеты в идеальном состоянии 2019-2023 годов выпуска, без разделения на СПМД и ММД (монетный двора в Санкт-Петербурге / Москве).
Продолжаем погружаться в основы языка. Сегодня рассмотрим:
Циклы for … do… end
while do … end
repeat … until
sleep
Как пройти весь массив циклом
Как пройти таблицу по ключам и значением
break
goto
Локальные и глобальные переменные
Функции
Получение даты и времени
Получение данных через getInfoParam
Цикл for … end
for index = start, end, step do -- start – начало отсчета, -- end – конец отсчета, step - шаг -- тело цикла end
Пример:
for i = 1, 10 do -- пройтись от 1 до 10 c шагом 1 (по умолчанию)<br /> message("i="..i) -- вывод i<br /> end
Можно задать шаг:
for i = 1, 10, 2 do -- пройтись с 1 до 10 с шагом 2 message("i="..i) end
Цикл while do...end
while (условие) do -- тело цикла end
Выполняет тело цикла, пока соблюдается условие. Если условие на старте не соблюдается, то цикл не запустится.
Пример:
a = 1 while a < 9 do a = a + 1 message(tostring(a)) end
Цикл repeat … until
Я очень надеюсь, что в этом году этот список пополнится новыми героями. Многие из этих компаний я незаслуженно оставил за пределами своего портфеля. Но что же, все еще впереди:)
Кстати, этот список компаний точно не полный, пишите в комментарии, какие вы знаете еще компании, которые платят дивиденды не менее 10 лет, включая 2023 год.
Хотите читать действительно полезные статьи по финансовой тематике? Ставьте лайк и подписывайтесь!
Я так же стараюсь писать статьи для как можно большего количества людей, потому создал свой канал на дзен.
Все написанное в статье не является инвестиционной / индивидуальной инвестиционной рекомендацией или призывом покупать / продавать какие-либо ценные бумаги. Покупка ценных бумаг связана с риском частичной и полной утраты вложенных средств. Все инвестиционные решения вы принимаете самостоятельно.
Весь материал, который здесь и далее будет рассматриваться по qlua, работает на 10й версии квика. Вполне допускаю, что со временем какие-то функции разработчики перепишут и в новых версиях что-то нужно будет сверять c мануалами, уточнять хелпом и на форумах, но предполагаю, что а) эти изменения будут вводиться очень не быстро и б) синтаксис и основа при этом останутся без существенных изменений.
Сегодня рассмотрим:
message
Выводит сообщение в торговом терминале в формате окна (в прошлой статье говорил, что удобнее отключить, чтобы не отвлекаться постоянно) и в таблице системных сообщений.
Особенности message: функция после вывода делает перенос строки, поэтому если необходимо вывести несколько значений в одной строке нужно делать их слияние (об этом ниже).
Для корректного отображения русских букв необходимо выбирать котировку файла Windows-1251 (об этом также в прошлый раз мы уже говорили). Иногда по этой причине некоторые разработчики пишут только на английском весь вывод текста в терминал, чтобы не заморачиваться с кодировкой, в т.ч. при размещении на github и совместной работе с кодом.
Для людей уже торгующих через Quik можно перейти сразу к настройкам редактора кода, а тем, кто хорошо знаком с Notepad++, то сразу к запуску скрипта.
В прошлой статье я привел статистику ЦБ, что клиентов, работающих через мобильные приложения брокеров сейчас в разы больше тех, кто работает через торговые терминалы. По этой причине я решил кратко затронуть и установку квика, и поделиться полезными настройками на старте (хотя, полагаю, что среди аудитории смартлаба, доминирующая часть именно тех, кто с терминалом «на ты», продвинутые пользователи сами могут в комментариях указать свои лайфхаки по настройкам и работе).
Подробную инструкцию по работе в квике и всем возможным настройкам я не планирую делать – желающие могут найти всё это в виде различных статей, полезных обзоров, в т.ч. соответствующего мануала по терминалу от разработчиков. Здесь я лишь хочу коснуться основных моментов, которые сделают работу в квике более комфортной для глаз, удобной и быстрой в части работы со скриптами.
Программирование для меня это хобби и любимое дело. А так я сертифицированный системный архитектор. Поэтому прошу не особо ругать за код :-)
В настоящее время я увлекаюсь написанием торговых роботов. Постепенно изучаю нейросети для их применения к анализу цен/объемов акций/фьючерсов.
Обычно я писал торговых роботов для работы с Брокерами и делал авто-торговлю Акциями или Фьючерсами, но вдруг возникла мысль.
- А что, если уже готовый код можно применять и на других активах??? Например на крипто активах для Биткоина или Эфира или других?
Уже изучив много библиотек и примеров за долгое время написания своих торговых роботов, решил сделать небольшую библиотеку backtrader_binance для интеграции API Binance и библиотеки тестирования торговых стратегий Backtrader.
Вот с помощью backtrader_binance, сейчас и создадим алго-робота для торговли BTC и ETH.
Подготовка окруженияУстанавливаем последнюю версию Python 3.11
Устанавливаем среду разработки PyCharm Community 2023.1