Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
Skype Control Library - библиотека для MetaTrader 5
- Просмотров:
- 5093
- Рейтинг:
- Опубликован:
- 2013.02.18 07:49
- Обновлен:
- 2016.11.22 07:33
- Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
В автоматической торговле Skype можно использовать для отправки текстовых сообщений с необходимой информацией. В данном случае работа со Skype реализована через библиотеку Skype4COM - ActiveX компонент предоставляющий доступ к управлению программой. На данный момент компонент Skype4COM.dll распространяется вместе с основной программой Skype и по умолчанию находится в папке:
Для операционной системы x86:
c:\Program Files\Common Files\Skype\Skype4COM.dll
Для операционной системы x64:
c:\Program Files (x86)\Common Files\Skype\Skype4COM.dll
Для работы с COM объектами из MQL в качестве прослойки написана библиотеки SkypeMQL.dll которую необходимо установить в папку: [папка терминала]\MQL5\Libraries
Проект работоспособен только на 32 битных терминалах MetaTrader 4/5.
1. Отправка мгновенных сообщений
int SkypeSendIM(string skype_name,string message,int status);
Перед отправкой мгновенного сообщения в функции выполняется ряд проверок:
- Имя пользователя не может быть пустой строкой или начинаться с цифры.
- Пользователь с указанным именем должен быть в списке контактов.
- Сообщение не может быть пустой строкой.
- Сетевой статус получателя должен совпадать с указанным значением.
Список констант сетевых статусов:
имя константы |
значение |
описание |
---|---|---|
STATUS_OFFLINE | 1 |
Не в сети |
STATUS_ONLINE | 2 |
В сети |
STATUS_AWAY | 4 |
Нет на месте |
STATUS_DONT_DISTURB |
16 |
Не беспокоить |
STATUS_INVISIBLE | 32 | Невидимый |
Таблица 1. Различные статусы пользователя
Для задания нескольких разрешенных статусов одновременно используется побитовое сложение констант, например: STATUS_ONLINE | STATUS_AWAY.
Максимальная длина мгновенного сообщения: ~8000 символов ANSI, ~4000 символов Unicode.
Пример кода:
string InpSkypeName="echo123";//Skype name string InpTextMessage="Hello :)";//Text message //--- send IM int err=SkypeSendIM(InpSkypeName,InpTextMessage,STATUS_ONLINE|STATUS_AWAY); if(err==ERROR_NO_ERRORS) printf("Sent IM to %s, message: '%s'.",InpSkypeName,InpTextMessage); else printf("Error sending IM to %s, error: '%s'.",InpSkypeName,SkypeErrorDescription(err));
2. Отправка SMS сообщений
На данный момент услуга отправки SMS является платной!
int SkypeSendSMS(string phone_number, string message);
Перед отправкой SMS сообщения производится несколько проверок:
- Номер телефона должен быть указан в международном формате: + [код страны] [код города или сети] [номер телефона]
- Длина строки с телефонным номером должна быть не менее 7 символов и начинаться со знака '+'
- Текст сообщения не может быть пустой строкой
Отправка SMS на несуществующий номер не приводит к ошибке. Плата за такую операцию взимается, но через короткое время возвращается, так как сообщение по факту не было доставлено.
Длина SMS сообщения ограничена: 116 символов ANSI, 58 символов Unicode.
Пример кода:
string InpPhoneNumber="+380123456789";//Phone number string InpTextMessage="Hello :)";//Text message //--- send SMS err=SkypeSendSMS(InpPhoneNumber,InpTextMessage); if(err==ERROR_NO_ERRORS) printf("Sent SMS to %s, text: '%s'.",InpPhoneNumber,InpTextMessage); else printf("Error sending SMS to %s, error: '%s'.",InpPhoneNumber,SkypeErrorDescription(err));
3. Текущий статус пользователя
Функции для чтения и установки текущего статуса пользователя. Возможные значения параметра status перечислены в таблице 1.
int SkypeSetStatus(int status); int SkypeGetStatus(int &status);
4. Описание возвращаемых значений
Все функции возвращают целочисленное значение, которое можно проанализировать при необходимости.
имя константы |
значение |
описание |
---|---|---|
ERROR_UNKNOWN |
-1 |
Неизвестная ошибка |
ERROR_NO_ERRORS |
0 | Успешное выполнение |
ERROR_ATTACH |
1 |
Не удалось присоединиться к процессу Skype |
ERROR_AUTHORIZED |
2 |
Указанного пользователя нет в списке контактов |
ERROR_STATUS |
3 |
Неверный статус пользователя |
ERROR_TIMEOUTS |
4 |
Превышен интервал ожидания |
ERROR_RUNNING | 5 | Программа Skype не загружена в память |
ERROR_SENDING | 6 |
Ошибка отправки |
ERROR_VALUE | 7 | Ошибка передаваемых параметров |
ERROR_ACCESS | 8 | Отказано в доступе к процессу Skype |
ERROR_SKYPE4COM | 9 | для x86: Skype4COM.dll не зарегистрирована для x64: Ошибка создания COM-объекта |
Таблица 2. Перечень возвращаемых значений
Для получения строки описания ошибки можно использовать функцию:
string SkypeErrorDescription(int error);
4. Первый запуск
При первом обращении MetaTrader 5 к Skype появляется всплывающее окно с возможностью открыть доступ для управление программой.
После подтверждения доступа к Skype, запрашиваемый процесс попадает в список, хранящийся в настройках программы: Tools -> Options -> Advanced -> Manage other programs' access to Skype.
5. Ошибки выполнения
В случае, если функция возвращает код ERROR_SKYPE4COM, возможно отсутствует регистрация ActiveX компонента. Можно повторно зарегистрировать Skype4COM.dll используя утилиту regsvr32.
Работа с библиотекой скомпилированной для MetaTrader 5 x64 заканчивается ошибкой "Stack overflow". Если это связано с Skype4COM, то остается лишь ждать новых обновлений, где эта ошибка будет устранена.
В приложении находится архив с исходным кодом библиотеки (проект для Microsoft Visual C++ 2013) и тестовый скрипт для проверки её работоспособности.
Эргодический CCI.
Auto Fibonacci Indicator (Auto Fibos)Существует уже достаточно много индикаторов Фибоначчи, но я решил сделать свой собственный индикатор для вас.
Скрипт OpenBuyPosition_X предназначен для совершения покупок с фиксированными значениями стоп-лосса и тейк-профита в пунктах от текущей цены. Объём позиции определяется исходя из уровня убытков.
OpenSellPosition_XСкрипт OpenSellPosition_X предназначен для совершения продаж с фиксированными значениями стоплосса и тейкпрофита в пунктах от текущей цены. Объём позиции определяется исходя из уровня убытков.