Відправка SMS із торгового радника через Skype - Статті по MQL4
Кому та навіщо це треба?
Яку інформацію було б корисно отримувати?
- поточна, яка ні на що не впливає та практично дублюють логфайл;
- корисна, яка буде реально корисною для трейдера саме в момент надходження.
Розглянемо приклади поточної інформації:
- Стан ордерів. Коли відкрився, за якою ціною, в якому напрямку значення стопів. Коли закрився, чому, у збиток чи з прибутком;
- Різні статки на ринку. Наприклад, перетину індикаторів, зміна напрямку тренду.
Як це працює у Skype?
- SMS повідомлення. Функція, звісно, платна. Все виглядає як завжди: набираєте номер абонента, повідомлення та натискаєте кнопку відправити.
- Звичайні повідомлення. Цілком безкоштовні. Просто вибираєте користувача, пишіть повідомлення та натискаєте кнопку відправити.
Як це зробити із експерта?
Я знайшов два способи і обидва використовують DLL:
Попередньо готуємо макрофайл, тобто файл, під час запуску якого буде перехоплено керування клавіатурою та мишею комп'ютера. Таким чином, за допомогою послідовності дій нам потрібно активувати Skype, знайти в меню пункт відправки SMS, потім у вікні, що з'явилося, набрати номер абонента і вставити з буфера обміну текстове повідомлення, яке заздалегідь було туди вставлене з експерта. Потренуватися та відточити дії можна заздалегідь. Таким чином, ми підготували файл, який є асоційованим документом і може бути запущений як звичайний додаток. До речі, додатків, які роблять запис і відтворення макрофайлів, існує безліч, тому в статті конкретні екземпляри розглядатися не будуть.
Далі нам потрібно розробити DLL, робота якої полягатиме у двох невеликих діях. Перше – це помістити переданий з експерта текст у буфер обміну і, друге, – запустити заздалегідь заданий макрофайл. Якщо все заздалегідь добре налаштовано і всі вікна і кнопки з'являтимуся на своїх місцях, то проблем бути не повинно, повідомлення відправиться.
Однак, це моторошний спосіб. Інтуїція мені підказувала, що якщо мізки починають вигадувати щось подібне, то треба шукати більш елегантне рішення або відмовитися від цієї ідеї взагалі. І тут прослизнула думка – а можливо Skype має API? І точно, на сайті є і голий API та ActiveX інтерфейс. Супер! Розглянемо другий спосіб роботи зі Skype з експерта.
Сенс той самий. З експерта в DLL передається номер абонента і текст, який має бути надіслано, а DLL вже виконує відправку за допомогою COM об'єкта Skype.
Реалізація другого методу.
Почнемо з DLL. Основну частину роботи займатиме підготовка DLL для взаємодії з експертом. По-перше, напишемо бібліотеку, яка працюватиме при зверненні до неї з кількох експертів. На жаль, недостатньо просто написати функцію і викликати її. Ми використовуємо ActiveX, тому бажано створити окремий потік і проводити всю роботу в ньому. Стандартний засіб розпаралелювання роботи функцій Mutex не допоможе. Спостерігатимуться креші, причому не відстежувані. Реалізуємо послідовність звернень через систему повідомлень користувача.
Початковий текст бібліотеки DLL
Торговий радник для тестування
Експерт простий, його головна мета – відправити SMS повідомлення та звичайне повідомлення через написану нами бібліотеку. Він робить всі дії у функції ініціалізації, тому тестувати можна і ввихідні.
Установка Skype
Завантажити можна на http://www.skype.com/. Бажано встановити останню версію програми, тому що в попередніх версіях COM інтерфейс не підтримується, є лише API. Але, на жаль, API не підтримує відправку SMS повідомлень.
Отже, Skype встановлено. Тепер нам потрібно викачати бібліотеку COM. Знаходиться вона на сайті для розробників https://developer.skype.com/ у розділі Downloads. Перевіряємо наявність фінансів на рахунку, які будуть використовуватись для надсилання SMS. Якщо таких немає, то рахунок можна поповнити через Інтернет із програми. За відсутності грошей на рахунку відправляти SMS не вийде, проте звичайні повідомлення без проблем.

Щоб термінал мав доступ до Skype API, потрібно його зареєструвати. Перевірити наявність дозволу для роботи з API можна через меню Tools-Options-Privacy-Manage other programs access to Skype. Повинно виглядати приблизно так:

Реєструється термінал за першої спроби скористатися бібліотекою. Вручну цього зробити не можна. Тому при першому встановленні бібліотеки слід дочекатися надсилання повідомлення, щоб підтвердити дозвіл на користування Skype API. Skype видасть наступний діалог:

Після підтвердження, система починає працювати в автоматичному режимі.
Установка бібліотеки SkypeLib
Щоб встановити бібліотеку SkypeLib.dll, потрібно скопіювати її в папку experts/libraries у каталозі терміналу. Також потрібно скопіювати туди бібліотеку Skype4COM.dll. Тепер потрібно налаштувати термінал для роботи з DLL. Для цього при встановленні експерта в розділі Safety відзначаємо галочкою пункт Allow DLL imports, як показано нижче:

Тепер можна скористатися бібліотекою.
Деякі важливі моменти
Після невеликого досвіду тестування та впровадження було помічено невеликі тонкощі. Потрібно враховувати, що якщо у вас на рахунку достатньо грошей і ви надіслали SMS повідомлення на неіснуючий номер, то помилки не буде, функція відпрацює успішно, а статус повідомлення буде встановлений стан “sending. ”. Тому необхідно чітко налаштовувати вхідні параметри функцій. Слідкувати потрібно і за тим, щоб версія Skype була не нижче 3.0.
Дуже рідко буває, що COM об'єкт не ініціалізований, і повідомлення не надсилатимуться. Допомагає лише переустановка Skype. Інтерфейс зовнішньої взаємодії відносно новий, не без помилок, тому трапляється такий неприємний момент. На моїй пам'яті було лише два такі випадки. Сподіватимемося, що в пізніші версії працюватимуть стабільніше.
Також слід зазначити, що для роботи SkypeLib.dll можуть знадобитися додаткові бібліотеки. Особливо гостро питання стоїть після виходу першого service pack Visual Studio 2005. Кращим виходом буде створення setup файлу. Туди автоматично буде включено всі необхідні бібліотеки. Також можна включити і файл Skype4COM.dll.
Прикріплені до статті файли
- SkypeLib.dll – бібліотека відкомпільована на Visual C++ 6.0. Не потрібні додаткові файли, крім Skype4COM.dll.
- SkypeLib.zip – вихідний код бібліотеки.
- SkypeExample.mq4 – торговий радник для тестування можливостей бібліотеки.
Гідності й недоліки.
Недоліки використання Skype SMS
- SMS коштують грошей
- Не можна надіслати повідомлення самому собі, потрібно мати інший Skype account для отримання повідомлень.
- Телефон має підтримувати мобільну версію Skype. При використанні комп'ютера для отримання повідомлень цейНестача відпадає.
Переваги даного методу:
- Оповіщення у реальному часі
- На даний момент функція, що нічим не замінюється. Це не зовсім гідність, скоріше факт.
Ми навчилися надсилати SMS повідомлення та звичайні повідомлення через Skype. Таким чином, ми отримали, можливо, не найзручніший, але незамінний інтерфейс для оповіщення про поточні події в терміналі. Що далі? Адже в Skype можна не тільки надсилати повідомлення, а й отримувати.