- 显示:
- 2356
- 等级:
- 已发布:
- 2014.02.10 07:47
- 已更新:
- 2016.11.22 07:33
-
需要基于此代码的EA交易或指标吗?请在自由职业者服务中订购 进入自由职业者服务
在自动交易中 Skype 可以用来发送必要信息的文字消息。这种情况下与 Skype 的集成要通过库 Skype4COM 实现, 即, 一个 ActiveX 控件来存取 程序 管理。您可以从官方开发者网站 下载 Skype4COM : http://dev.skype.com/accessories/skype4com
Skype4COM.dll 文件必须安装和注册。
At present time Skype4COM.dll is distributed with skype, by default it is located in the following folder:
对于 x86 操作系统:
- c:\Program Files\Common Files\Skype\Skype4COM.dll
对于 x64 操作系统:
- c:\Program Files (x86)\Common Files\Skype\Skype4COM.dll
这个 SkypeMQL.dll 库文件必须安装在文件夹: [terminal directory]\MQL5\Libraries
The project supports only 32-bit version of MetaTrader 4/5.
1. 发送即时消息
int SkypeSendInstantMessageW(string skype_name,string message,int status); int SkypeSendInstantMessageA(string skype_name,string message,int status);// 对于 MetaTrader 4
在发送即时消息之前, 此处有一些功能测试:
- 用户名不能为空或以数字开头。
- 用户的指定名必须在联系人名单里。
- 消息不能为空。
- 接收者的网络状态必须与指定值一致。
网络状态的常量列表:
常量名 |
值 |
描述 |
---|---|---|
STATUS_OFFLINE | 1 |
![]() ![]() |
STATUS_ONLINE | 2 |
![]() |
STATUS_AWAY | 4 |
![]() |
STATUS_DONT_DISTURB |
16 |
![]() |
同时设置多个可能的状态使用常数逐位附加法, 例如: STATUS_ONLINE | STATUS_AWAY。
最大即时消息尺寸是 ~8000 单字节字符, ~4000 双字节字符。
代码例子:
string InpSkypeName = "echo123"; // Skype 用户名 string InpTextMessage = "Hello :)"; // 文本消息 string msg; ENUM_SKYPE_ERROR err=(ENUM_SKYPE_ERROR)SkypeSendInstantMessageW(InpSkypeName,InpTextMessage,STATUS_ONLINE|STATUS_AWAY); if(err==ERROR_NO_ERRORS) msg=StringFormat("发送即时消息到 %s, %s",InpSkypeName,InpTextMessage); else msg=StringFormat("错误发送即时消息到 %s, 错误: %s",InpSkypeName,EnumToString(err)); Print(msg);
2. 发送短信消息
发送短信服务当前是免费的!
int SkypeSendSmsMessageW(string phone_number, string message); int SkypeSendSmsMessageA(string phone_number, string message);// 对于 MetaTrader 4
在发送短信之前, 此处有一些功能测试:
- 电话号码必须制定, 且按照国际号码格式: + [国家码] [城市或网络码] [电话号码]
- 包含电话号码的字符串长度必须至少 7 位字符, 并且起始为 '+' 号
- 文本消息不能为空字符串。
发送短信到不存在的号码不是错误。这个操作会被扣款, 但之后很快会返还, 因为真实消息未能投递。
短信限制为 116 单字节字符, 58 双字节字符。
代码例子:
input string InpPhoneNumber = "+380123456789"; // 电话号码 input string InpTextMessage = "Hello :)"; // 文本消息 string msg; ENUM_SKYPE_ERROR err==(ENUM_SKYPE_ERROR) SkypeSendSmsMessageW(InpPhoneNumber,InpTextMessage); if(err==ERROR_NO_ERRORS) msg=StringFormat("发送短信至 %s, %s",InpPhoneNumber,InpTextMessage); else msg=StringFormat("错误发送短信至 %s, 错误: %s",InpPhoneNumber,EnumToString(err)); Print(msg);
3. 返回值描述
两个函数返回整数值, 如果必要, 可供分析。
常量名 |
值 |
描述 |
---|---|---|
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-对象 创建错误 |
4. 首次启动
在首次连接 MetaTrader 5 到 Skype 一个弹出窗口出现, 授权程序管理存取。
当确认存取 Skype 之后, 请求处理进入程序设置的清单: 工具 -> 选项 -> 高级 -> 管理其它程序到 Skype 的存取。
5. 返回错误
因未知原因, 连同库编译 MetaTrader 5 x64, 结尾会有 "堆栈溢出" 错误。如果它通过 Skype4COM 连接, 则您要等待这个错误被改正的新消息。
附件是库源代码的存档 (一个 Microsoft Visual C++ 2010 的项目) 以及测试脚本来检查它的性能。
由MetaQuotes Ltd译自俄语
原代码: https://www.mql5.com/ru/code/1537