• Главная
  • Карта сайта
Не найдено

Відправлення SMS з торгового радника через Skype

  1. Вступ Skype - телекомунікаційна програма, яка, крім звичайних чатів, дозволяє вести телефонні розмови...
  2. Яку інформацію було б корисно отримувати?
  3. Як це працює в Skype?
  4. Реалізація другого способу.
  5. Оригінальний текст бібліотеки DLL
  6. DEF файл
  7. Торговий радник для тестування
  8. установка Skype
  9. Установка бібліотеки SkypeLib
  10. Деякі важливі моменти
  11. Прикріплені до статті файли
  12. висновки

Вступ

Skype - телекомунікаційна програма, яка, крім звичайних чатів, дозволяє вести телефонні розмови по Інтернет. Одним з найбільш значущих переваг Skype перед іншими програмами подібного плану є шлюз на реальних операторів мобільного зв'язку. Відповідно можна дзвонити з комп'ютера на реальний мобільний телефон, надсилати SMS і так далі. Так само існує версія Skype для мобільних телефонів, можна економити на SMS, тому що відправка звичайних повідомлень всередині програми абсолютно безкоштовна. Правда, мобільний телефон повинен працювати під управлінням операційної системи. Загалом, при бажанні, можна бути повністю мобільним, ніж останнім часом і користується все більша кількість людей.

Кому і навіщо це треба?

Трейдер не завжди може і повинен сидіти за торговим терміналом, спостерігати за тим, як йде торгівля. Однак, було б непогано мати можливість іноді отримувати сигнали про дії експерта або про стан ринку в певні моменти часу. Чому б не отримувати дану інформацію на мобільний телефон?

Яку інформацію було б корисно отримувати?

Інформацію, яку можна отримувати за допомогою повідомлень на телефон можна розділити на два класи:

  1. поточна, яка ні на що не впливає і практично дублюють логфайлів;
  2. корисна, яка буде реально корисна для трейдера саме в момент надходження.

Розглянемо приклади поточної інформації:

  • Стан ордерів. Коли відкрився, за якою ціною, в якому напрямку, значення стопів. Коли закрився, з якої причини, в збиток або з прибутком;
  • Різні стану на ринку. Наприклад, перетину індикаторів, зміна напрямку тренда.

Корисна інформація:

  • Звіт про помилки. Всі програмісти люди і іноді виникають неприємні ситуації при неправильній роботі експерта. Було б непогано знати, за яких умов виникають помилки і призвело це до фатальної зупинки. Це, звичайно ж, спрацює, якщо логіка експерта дозволяє відстежувати помилки;
  • Стан роботи експерта. Наприклад, експерт налаштований так, щоб відсилати повідомлення про стан працездатності кожну годину, а ви в цей час перебуваєте в робочій поїздці. І ось повідомлення не прийшло в призначену годину. Могло статися все, що завгодно, від розриву з'єднання з Інтернет до повного виключення електроенергії. Було б доцільно попросити колегу або дружину, якщо термінал працює вдома, з'ясувати причину і налаштувати все як було, а не чекати тиждень в невіданні. Звичайно ж, такий поділ носить умовний характер, так і список можливих подій в даній статті не вичерпується. Кожен трейдер сам зможе вирішити, який зміст має мати сполучення. Головне усвідомити корисність даної функції.

Як це працює в Skype?

  • SMS повідомлення. Функція, природно, платна. Все виглядає як зазвичай: набираєте номер абонента, повідомлення і натискаєте кнопку відправити.
  • Звичайні повідомлення. Абсолютно безкоштовні. Просто вибираєте користувача, пишіть повідомлення і натискаєте кнопку відправити.

Як це зробити з експерта?

Я знайшов два способи і обидва використовують DLL:

  1. Попередньо готуємо макрофайл, тобто файл, при запуску якого буде перехоплено керування клавіатурою і мишкою комп'ютера. Таким чином, за допомогою послідовності дій нам потрібно активувати Skype, знайти в меню пункт відправки SMS, потім у вікні набрати номер абонента і вставити з буфера обміну текстове повідомлення, яке заздалегідь було туди вставлено з експерта. Потренуватися і відточити дії можна заздалегідь. Таким чином, ми підготували файл, який є асоційованим документом і може бути запущений як звичайна програма. До речі, додатків роблять запис і відтворення макрофайлов існує велика кількість, тому в статті конкретні екземпляри розглядатися не будуть.

    Далі нам потрібно розробити DLL, робота якої буде полягати в двох невеликих діях. Перше, - це помістити переданий з експерта текст в буфер обміну і, друге, - запустити заздалегідь заданий макрофайл. Якщо все заздалегідь добре налаштоване і всі вікна і кнопки буду з'являтися на своїх місцях, то проблем бути не повинно, повідомлення відправиться.

    Однак, це моторошний спосіб. Інтуїція мені підказувала, що якщо мізки починають вигадувати щось подібне, значить треба шукати більш елегантне рішення або відмовитися від цієї ідеї взагалі. І тут прослизнула думка - а може бути Skype має API? І точно, на сайті є і голий API і ActiveX інтерфейс. Супер! Розглянемо другий спосіб роботи зі Skype з експерта.

  2. Сенс той же. З експерта в DLL передається номер абонента і текст, який повинен бути відправлений, а DLL вже виконує відправку за допомогою COM об'єкта Skype.

Реалізація другого способу.

Почнемо з DLL. Основну частину роботи буде займати підготовка DLL для взаємодії з експертом. По-перше, напишемо бібліотеку, яка буде працювати при зверненні до неї з кількох експертів. На жаль, буде недостатньо просто написати функцію і викликати її. Ми використовуємо ActiveX, тому бажано створити для нього окремий потік і проводити всю роботу в ньому. Стандартний засіб розпаралелювання роботи функцій Mutex не допоможе. Будуть спостерігатися креши, причому не відслідковують. Реалізуємо послідовність звернень через систему користувальницьких повідомлень.

Оригінальний текст бібліотеки DLL

#include "stdafx.h" #pragma once #ifndef WINVER #define WINVER 0x0501 #endif #define WIN32_LEAN_AND_MEAN #import "Skype4COM.dll" rename ( "CreateEvent", "CreatePluginEvent"), rename ( "SendMessage", "SendChatMessage") #define MT4_EXPFUNC __declspec (dllexport) #define WM_PROC_SENDSKYPESMS WM_USER + 01 #define WM_PROC_SENDSKYPEMESSAGE WM_USER + 02 HANDLE hUserThread; DWORD ThreadId; struct fcpSendSkypeSMS {int ExitCode; char * UserNum; char * Message; }; struct fcpSendSkypeMessage {int ExitCode; char * UserName; char * Message; }; DWORD WINAPI ThreadProc (LPVOID lpParameter) {MSG msg; HANDLE hEvent; while (true) {if (PostThreadMessage (GetCurrentThreadId (), WM_USER, 0, 0)) break; }; CoInitialize (NULL); while (GetMessage (& msg, 0, 0, 0)) {if (msg.message == WM_QUIT) {break; } Else if (msg.message == WM_PROC_SENDSKYPESMS) {fcpSendSkypeSMS * fcp = (fcpSendSkypeSMS *) msg.wParam; hEvent = (HANDLE) msg.lParam; try {SKYPE4COMLib :: ISkypePtr pSkype (__ uuidof (SKYPE4COMLib :: Skype)); HRESULT hr = pSkype-> Attach (6, VARIANT_TRUE); if (! FAILED (hr)) {try {fcp-> ExitCode = 1; pSkype-> SendSms (fcp-> UserNum, fcp-> Message, ""); } Catch (...) {fcp-> ExitCode = - 1; }} PSkype = NULL; } Catch (...) {} SetEvent (hEvent); } Else if (msg.message == WM_PROC_SENDSKYPEMESSAGE) {fcpSendSkypeMessage * fcp = (fcpSendSkypeMessage *) msg.wParam; hEvent = (HANDLE) msg.lParam; try {SKYPE4COMLib :: ISkypePtr pSkype (__ uuidof (SKYPE4COMLib :: Skype)); HRESULT hr = pSkype-> Attach (6, VARIANT_TRUE); if (! FAILED (hr)) {try {fcp-> ExitCode = 1; pSkype-> SendChatMessage (fcp-> UserName, fcp-> Message); } Catch (...) {fcp-> ExitCode = - 1; MessageBeep (0); }} PSkype = NULL; } Catch (...) {} SetEvent (hEvent); }}; CoUninitialize (); return 0; } BOOL APIENTRY DllMain (HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {if (ul_reason_for_call == DLL_PROCESS_ATTACH) {hUserThread = CreateThread (NULL, NULL, ThreadProc, NULL, 0, & ThreadId); if (! hUserThread) {}; } Else if (ul_reason_for_call == DLL_PROCESS_DETACH) {CloseHandle (hUserThread); } Return (TRUE); } MT4_EXPFUNC bool __stdcall SendSkypeSMS (int & ExCode, char * sUserNum, char * sMessage) {fcpSendSkypeSMS * fcp; HANDLE hEvent; bool Result = false; fcp = new fcpSendSkypeSMS (); memset (fcp, 0, sizeof (fcpSendSkypeSMS)); fcp-> ExitCode = - 1; fcp-> UserNum = sUserNum; fcp-> Message = sMessage; hEvent = CreateEvent (NULL, FALSE, FALSE, NULL); PostThreadMessage (ThreadId, WM_PROC_SENDSKYPESMS, (WPARAM) fcp, (LPARAM) hEvent); if (WAIT_OBJECT_0 == WaitForSingleObject (hEvent, INFINITE)) {Result = true; } Else {return (Result); }; ExCode = fcp-> ExitCode; if (ExCode == - 1) Result = false; delete fcp; CloseHandle (hEvent); return (Result); } MT4_EXPFUNC bool __stdcall SendSkypeMessage (int & ExCode, char * sUserName, char * sMessage) {fcpSendSkypeMessage * fcp; HANDLE hEvent; bool Result = false; fcp = new fcpSendSkypeMessage (); memset (fcp, 0, sizeof (fcpSendSkypeMessage)); fcp-> ExitCode = - 1; fcp-> UserName = sUserName; fcp-> Message = sMessage; hEvent = CreateEvent (NULL, FALSE, FALSE, NULL); PostThreadMessage (ThreadId, WM_PROC_SENDSKYPEMESSAGE, (WPARAM) fcp, (LPARAM) hEvent); if (WAIT_OBJECT_0 == WaitForSingleObject (hEvent, INFINITE)) {Result = true; } Else {return (Result); }; ExCode = fcp-> ExitCode; if (ExCode == - 1) Result = false; delete fcp; CloseHandle (hEvent); return (Result); }

DEF файл

LIBRARY SkypeLib EXPORTS SendSkypeSMS SendSkypeMessage

Торговий радник для тестування

#import "SkypeLib.dll" bool SendSkypeSMS (int & ExCode [], string Num, string Message); bool SendSkypeMessage (int & ExCode [], string User, string Message); #import int init () {int ExCode [1]; Alert ( "Відправляємо повідомлення ..."); Alert (SendSkypeMessage (ExCode, "skype.account.name", "Skype message test")); if (ExCode [0] == - 1) Alert ( "Помилка відправки повідомлення"); else Alert ( "Повідомлення надіслано"); Alert ( "Відправляємо SMS повідомлення ..."); Alert (SendSkypeSMS (ExCode, "+1234567890", "Skype sms test")); if (ExCode [0] == - 1) Alert ( "Помилка відправки SMS повідомлення"); else Alert ( "SMS повідомлення надіслано"); return (0); } Int start () {return (0); }

Експерт простий, його головна мета - відправити SMS повідомлення і звичайне повідомлення через написану нами бібліотеку. Він проробляє всі дії в функції ініціалізації, тому тестувати можна і у вихідні.

установка Skype

Завантажити можна на http://www.skype.com/ . Бажано встановити останню версію програми, тому що в попередніх версіях COM інтерфейс не підтримується, є тільки API. Але, на жаль API не підтримує відправку SMS повідомлень.

Отже, Skype встановлений. Тепер нам потрібно викачати COM бібліотеку. Знаходиться вона на сайті для розробників https://developer.skype.com/ в розділі Downloads. Перевіряємо наявність фінансів на рахунку, які будуть використовуватися для відправки SMS. Якщо таких немає, то рахунок можна поповнити через Інтернет з програми. При відсутності грошей на рахунку відправляти SMS не вийде, проте, звичайні повідомлення без проблем.

При відсутності грошей на рахунку відправляти SMS не вийде, проте, звичайні повідомлення без проблем

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

Має виглядати приблизно так:

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

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 можна не тільки відправляти повідомлення, а й отримувати ...

Переклад з англійської проведений MetaQuotes Software Corp.
Оригінальна стаття: https://www.mql5.com/en/articles/1454

Яку інформацію було б корисно отримувати?
Як це працює в Skype?
Кому і навіщо це треба?
Чому б не отримувати дану інформацію на мобільний телефон?
Яку інформацію було б корисно отримувати?
Як це працює в Skype?
Як це зробити з експерта?
І тут прослизнула думка - а може бути Skype має API?
Що далі?
Провайдеры:
  • 08.09.2015

    Batyevka.NET предоставляет услуги доступа к сети Интернет на территории Соломенского района г. Киева.Наша миссия —... 
    Читать полностью

  • 08.09.2015
    IPNET

    Компания IPNET — это крупнейший оператор и технологический лидер на рынке телекоммуникаций Киева. Мы предоставляем... 
    Читать полностью

  • 08.09.2015
    Boryspil.Net

    Интернет-провайдер «Boryspil.net» начал свою работу в 2008 году и на данный момент является одним из крупнейших поставщиков... 
    Читать полностью

  • 08.09.2015
    4OKNET

    Наша компания работает в сфере телекоммуникационных услуг, а именно — предоставлении доступа в сеть интернет.Уже... 
    Читать полностью

  • 08.09.2015
    Телегруп

    ДП «Телегруп-Украина» – IT-компания с 15-летним опытом работы на рынке телекоммуникационных услуг, а также официальный... 
    Читать полностью

  • 08.09.2015
    Софтлинк

    Высокая скоростьМы являемся участником Украинского центра обмена трафиком (UA — IX) с включением 10 Гбит / сек... 
    Читать полностью