Блог им. BITE4SAVE

Алготрейдинг на QLUA под QUIK - снова под мобильным контролем через Email.

Всех приветствую !
Не складывалось как-то последнее время надежно получать сообщения от помощника на QLUA под Quik.
То telegram работает нестабильно, то LUA Socket отвалился (не знаю, может это связано с обновлением Quik и появлении целочисленного типа данных).
MAX так вообще позволяет юзать чат-боты только юрлицам и ИП.
И задумал я, немного погуглив, поиспользовать Email-оповещения на мобильное приложение Яндекс.Почта, используя связку PHP + PHPmailer.
Оказалось, за пару дней получился вполне приличный результат.
Если устраивает средняя задержка оповещения от 3 до 45 секунд (бывает меньше, бывает намного больше — от почты зависит), можно посмотреть на этот вариант.
Мне он зашел тем, что не надо под новую версию Quik пересобирать никакие библиотеки, не нужен никакой почтовый сервер с необходимостью его настраивать.
Код на QLUA занял ровно 1 страницу.
А теперь — как это приготовить.
Во-первых, идем на сайт php.net, скачиваем ZIP-архив PHP, соответствующий ОС.
www.php.net/downloads.php?os=windows&osvariant=windows-downloads&version=default&multiversion=Y
В моем случае — VS17 x64 Thread Safe.
Распаковываем, например, в папку C:\PHP\.
Редактируем путь переменных среды.
Запускаем cmd из меню Пуск Выполнить, идем в папку PHP: cd \ <Enter>, затем cd php <Enter>, затем control sysdm.cpl <Enter>.
В Свойствах системы переходим во вкладку Дополнительно, нажимаем кнопку Переменные среды...
В окне Системные переменные выбираем строку Path.
Нажимаем кнопку Изменить.
В окне Изменить переменные среды нажимаем кнопку Создать. Вводим текст C:\PHP\
Нажимаем 3 раза ОК для закрытия всех дополнительных окон.
Проверяем версию PHP в окне консоли — php --version
Идем в папку C:\PHP\. Находим файл php.ini-development.ini, копируем файл в эту же папку под именем php.ini.
Редактируем файл — открываем, находим строчку ;extension_dir = «ext», убираем точку с запятой (раскомментирование), находим строчку ;extension=openssl, убираем точку с запятой, сохраняем файл.
Проверяем работу в командной консоли
c:\PHP\php -r «echo 'hello world';»
c:\PHP\php -h
Если получаем сообщение об ошибке — отсутствует VCRUNTIME140.dll, устанавливаем подходящий пакет Microsoft Visual C++ Redistributable (Visual Studio), скачав и установив нужный файл.
learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170
Например, у меня ОС Windows Server 2019, скачал файл VC_redist.x64.exe.
Устанавливаем пакет.
Скачиваем PHPMailer.
github.com/PHPMailer/PHPMailer
download PHPMailer as a zip file
Распаковываем архив (файлы и подпапки) в папку c:\php\PHPMailer
Заходим в Яндекс.Почта, Настройки (шестерёнка), Все настройки, Почтовые программы, разрешаем доступ к почтовому ящику с помощью почтовых клиентов.
Нажимаем ссылку Пароли приложений, далее действуем по инструкции Яндекса, создаем пароль для почты, копируем и запоминаем его.
В итоге — редактируем скрипт QLUA.
В строках правим address@yandex.ru на реальный адрес, Имя Фамилия правим на данные аккаунта Яндекса, указываем созданный раньше password.
Выбираем букву виртуального диска или просто диска, создаем на нем папку temp, например, z:\temp\, помещаем в нее файл-вложение, например, signal.txt, правим в скрипте имя файла на нужное, запускаем скрипт — должно прийти сообщение с почты на почту с вложением.
При ненадобности можно удалить строку с приложением к письму.
Чтобы работать с другими почтами — ссылка.
snipp.ru/php/smtp-phpmailer
Но для работы, например, с Google (GMail), возможно, помимо номера порта надо править строку
'PHPMailer::ENCRYPTION_SMTPS;' на 'PHPMailer::ENCRYPTION_STARTTLS; (для шифрования TLS) или задать шифрование ssl или tls,
например, так: '$mail->SMTPSecure = «ssl»;' или так: '$mail->SMTPSecure = «tls»;'
Возможно, придется подправить и файл php.ini .
Не пробовал.
В заключение в почте надо создать папку для сообщений и правило, чтобы сообщения от Quik попадали в эту папку, чтобы через некоторое время их можно было удалить нажатием одной кнопки, и включить уведомления.
Показалось, что уведомления приходят быстрее, если приложение электронной почты открыто.
Всё !

SIGNALMESSAGE = 'MXU6 SHORT' -- текст Email-сообщения (может быть расширен до HTML-страницы в таблице)
	RAMDISK = 'z:' -- буква виртуального диска для работы
	ATTACHFILENAME = 'signal.txt' -- имя файла-приложения к письму, должен быть в папке RAMDISK..'\temp\'	
	PHPFILENAME = RAMDISK..'\\temp\\yamessage.php' -- временный перезаписываемый PHP-файл для отправки письма
	
function OnInit()	
	is_run = true
end

function OnStop()
	is_run = false
end

function main()
		if is_run then
		SendEmailMessage(SIGNALMESSAGE, ATTACHFILENAME)
		end
end		

-- Функция отправки сообщения на Email : Внимание ! Здесь кодировка - UTF-8.
function SendEmailMessage(SIGNALMESSAGE, ATTACHFILENAME)
	local phpbegin = {
	'<?php',
	'use PHPMailer\\PHPMailer\\PHPMailer;',
	'use PHPMailer\\PHPMailer\\Exception;',
	'require_once \'c:/PHP/PHPMailer/src/Exception.php\';',
	'require_once \'c:/PHP/PHPMailer/src/PHPMailer.php\';',
	'require_once \'c:/PHP/PHPMailer/src/SMTP.php\';',
	'$mail = new PHPMailer(true);',
	'try {',
	'$mail->isSMTP();',
	'$mail->SMTPAuth = true;',
	'$mail->SMTPDebug = 0;',
	'$mail->Host = \'ssl://smtp.yandex.ru\';',
	'$mail->Port = 465;',
	'$mail->Username = \'address@yandex.ru\';',
	'$mail->Password = \'password\';',
	'PHPMailer::ENCRYPTION_SMTPS;',
	'$mail->setFrom(\'address@yandex.ru\', \'Имя Фамилия\');',
	'$mail->addAddress(\'address@yandex.ru\', \'Имя Фамилия\');',
	'$mail->isHTML(true);',
	'$mail->Subject = \'QUIK MESSAGE\';'
	}
	local phpend = {	
	'$mail->msgHTML($body);',
	'$mail->addAttachment(\''..RAMDISK..'/temp/'..ATTACHFILENAME..'\');',
	'$mail->send();',
	'echo \'Письмо успешно отправлено!\';',
	'} catch (Exception $e) {',
	'echo \'Ошибка при отправке письма: {$mail->ErrorInfo}\';',
	'}',
	'?>'
	}
	-- Получаем системные дату и время
	local sysdate = os.sysdate()
	local SYSDATETIME = ("%02u-%02u-%04u %02u:%02u:%02u"):format(sysdate.day, sysdate.month, sysdate.year, sysdate.hour, sysdate.min, sysdate.sec)
	local SYSDATE = string.sub(SYSDATETIME, 1, 10)
	local SYSTIME = string.sub(SYSDATETIME, 12, 19)
	-- Открываем файл в режиме записи
	local PHPFileWrite = io.open(PHPFILENAME, "w")
	-- Если файл существует
		if PHPFileWrite ~= nil then
			for i = 1, #phpbegin do
			PHPFileWrite: write(phpbegin[i]..'\n')
			end
		PHPFileWrite: flush() -- Cохраняем изменения в файле	
		SIGNALMESSAGE = '$body = "<p><strong>'..SYSDATE..' '..SYSTIME..' '..SIGNALMESSAGE..'</strong></p>";\n'		
		PHPFileWrite: write(SIGNALMESSAGE)
		PHPFileWrite: flush()
			for i = 1, #phpend do
			PHPFileWrite: write(phpend[i]..'\n')
			end		
		PHPFileWrite: flush()
		PHPFileWrite: close() -- Закрываем файл			
		end
	os.execute('start /min c:\\php\\php.exe '..PHPFILENAME)
end
Данная публикация является личным мнением автора. Мнение владельца сайта может не совпадать с мнением автора.
  • обсудить на форуме:
  • Quik Lua
508 | ★1

Читайте на SMART-LAB:
Фото
В каких облигациях и акциях Иволга Капитал маркет-мейкер?
Спустя 3 месяца обновляем таблицу маркетируемых ценных бумаг. Она неполная для акций, 2 эмитента не дали согласия на их упоминание...
Фото
Инвестиции, которые могут стать квартирой
Инвестиции, которые могут стать квартирой АПРИ запускает сразу две программы для владельцев облигаций компании, которые позволяют...
Фото
Транснефть: РСБУ за 2-й квартал и покупка доли государства в каком-то акционерном капитале за 40 млрд рублей. Есть ли подвох?
Транснефть в пятницу отчитался по РСБУ за 2-й квартал Отчет РСБУ для Транснефти неинформативен,  надо МСФО смотреть всегда...

теги блога BITE4SAVE

....все тэги



UPDONW
Новый дизайн