初学者的问题 MQL5 MT5 MetaTrader 5 - 页 576

 

你好。

请告诉我,是否可以将EA中的文本复制到剪贴板上,例如, 通过条件,复制Allert的文本。

如果是这样,如何做呢?

 
mila.com:

你好。

请告诉我,是否可以将EA中的文本复制到剪贴板上,例如, 通过条件,复制Allert的文本。

如果是这样,如何做呢?

不,用剪贴板工作是一个系统功能(Windows API)。在MQL5中,没有对WinAPI的直接访问。还有,为什么要用剪贴板工作?毕竟,你是自己生成的信息--这意味着你拥有信息的源文本。
 
Karputov Vladimir:
不,用剪贴板工作是一个系统功能(Windows API)。在MQL5中,没有对WinAPI的直接访问。而你为什么要与剪贴板合作?毕竟,你是自己生成的信息--所以你有信息的源文本。

是的,源代码就在那里,但我需要它,通过某种条件,在剪贴板上。

对不起,我没有说明,我需要在MQL4 中实现。

是否可以用#import "user32.dll "以某种方式打开剪贴板?

 
mila.com:

是的,源代码就在那里,但我需要它,通过某种条件,在剪贴板上。

对不起,我没有说明,我需要在MQL4 中实现。

也许你可以用#import "user32.dll "以某种方式打开剪贴板?

现在是用MQL5写作的时候了。使用dll是鲁莽的顶端。

按照我的理解,你想从一个第三方程序中读取信息。然后使用写入文件,在所有客户终端的共同目录 下\Terminal\Common\Files。你已经可以从这个目录中用第三方程序读取该文件。

 
Karputov Vladimir:

现在是用MQL5写作的时候了。使用Dll是愚蠢之极。

按照我的理解,你想从一个第三方程序中读取信息。然后使用写入文件,在所有客户终端的共同目录 下\Terminal\Common\Files。从该目录中,你可以用第三方程序读取该文件。

谢谢你的建议,但现在我需要从MQL4 程序中复制文本到剪贴板。

 
Karputov Vladimir:

让我们按顺序来看看。这里是模板。

把它附在图表上,并附上工作室中图表的截图,以及 "日志 "和 "顾问 "标签中的条目(如果它们出现在那里)。

你好!!

我重新启动了MT5平台,作为开始。编译你的模板。编译的结果如下所示。因为量大,我不得不扔掉这些截图

导航仪中出现了一个EA。

把EA扔在图表上,允许 在3个地方交易

图表上有EA图标而不是笑脸

以下是日志的摘录 2016.05.11 12:44:47.139 专家 专家测试(GBPUSD,H1)成功加载

以下是关于加载EA的信息内容。

CO 0 10:35:45.020 Terminal Alpari Limited MT5 x64 build 1325 started
HD 0 10:35:45.020 Terminal Windows 8.1 (x64 based PC), IE 11.00, UAC, Intel Core i5-2320 @ 3.00GHz, RAM: 2209 / 4078 Mb, HDD: 45023 / 149999 Mb, GMT+03:00
ND 0 10:35:45.020 终端 C:\Users\Boris\AppData\Roaming\MetaQuotes\Terminal\73D45AFCBD5653CAF29C407A081F030C
LI 0 10:35:47.200 网络'50016841':通过mt5.nl.3在Alpari-Ltd-MT5上授权(ping:57.34 ms)。
NG 0 10:35:47.200 Network '50016841': previous successful authorization performed from 79.172.69.175 on 2016.05.10 23:47:58
FK 0 10:35:47.617 网络'50016841':终端与Alpari Limited同步
RM 0 10:35:47.617 网络'50016841':交易已被启用--网状模式
OH 0 10:35:48.253 网络'50016841': 扫描网络中的接入点
CL 0 10:35:51.446 网络'50016841':扫描网络完毕
ND 1 12:00:49.011 网络'50016841':与Alpari-Ltd-MT5的连接丢失
MR 0 12:01:08.842 网络'50016841':通过mt5.nl.3在Alpari-Ltd-MT5上授权(ping:56.41 ms)。
HR 0 12:01:08.842 网络'50016841':之前从79.172.69.175在2016.05.11 10:35:52进行的成功授权
PQ 0 12:01:08.907 网络'50016841':终端与Alpari有限公司同步。
PH 0 12:01:08.907 网络'50016841':交易已被启用--网状模式
KL 0 12:41:45.169 专家顾问测试(GBPUSD,H1)成功加载。

请看一下。也许你会找到原因。我被难住了,也许是建造时的问题?

谢谢你!!!!。



谢谢你的帮助!!。

 
Boris.45:

你好!!

我重新启动了MT5平台,作为开始。编译你的模板。编译的结果如下所示。因为量大,我不得不扔掉这些截图

导航仪中出现了一个EA。

把EA扔在图表上,允许 在3个地方交易

图表上有EA图标而不是笑脸

以下是日志的摘录 2016.05.11 12:44:47.139 专家 专家测试(GBPUSD,H1)成功加载

以下是关于加载EA的信息内容。

CO 0 10:35:45.020 Terminal Alpari Limited MT5 x64 build 1325 started
HD 0 10:35:45.020 Terminal Windows 8.1 (x64 based PC), IE 11.00, UAC, Intel Core i5-2320 @ 3.00GHz, RAM: 2209 / 4078 Mb, HDD: 45023 / 149999 Mb, GMT+03:00
ND 0 10:35:45.020 终端 C:\Users\Boris\AppData\Roaming\MetaQuotes\Terminal\73D45AFCBD5653CAF29C407A081F030C
LI 0 10:35:47.200 网络'50016841':通过mt5.nl.3在Alpari-Ltd-MT5上授权(ping:57.34 ms)。
NG 0 10:35:47.200 Network '50016841': previous successful authorization performed from 79.172.69.175 on 2016.05.10 23:47:58
FK 0 10:35:47.617 网络'50016841':终端与Alpari Limited同步
RM 0 10:35:47.617 网络'50016841':交易已被启用--网状模式
OH 0 10:35:48.253 网络'50016841': 扫描网络中的接入点
CL 0 10:35:51.446 网络'50016841':扫描网络完毕
ND 1 12:00:49.011 网络'50016841':与Alpari-Ltd-MT5的连接丢失
MR 0 12:01:08.842 网络'50016841':通过mt5.nl.3在Alpari-Ltd-MT5上授权(ping: 56.41 ms)。
HR 0 12:01:08.842 网络'50016841':之前从79.172.69.175在2016.05.11 10:35:52进行的成功授权
PQ 0 12:01:08.907 网络'50016841':终端与Alpari有限公司同步。
PH 0 12:01:08.907 网络'50016841':交易已被启用--网状模式
KL 0 12:41:45.169 专家顾问测试(GBPUSD,H1)成功加载。

请看一下。也许你会找到原因。我被难住了,也许是建造时的问题?

谢谢你!!!!。



谢谢你的帮助!!。

在这个有问题的端子上面安装这个端子。它可能被治好。
 
Karputov Vladimir:

现在是我们用MQL5写作的时候了。使用Dll是愚蠢之极。

按照我的理解,你想从一个第三方程序中读取信息。然后使用写入文件,在所有客户终端的共同目录 下\Terminal\Common\Files。你已经可以从这个目录中用第三方程序读取该文件。

如果它是 "愚蠢之极",它就会被禁止。

WinAPI极大地扩展了MQL的能力。而且即使没有Dll,你也可以做一些愚蠢的事情。

而这里是一个将字符串传到剪贴板的例子。

#define  CF_UNICODETEXT 13
#define  GHND 0x0042

#import "User32.dll"
   int OpenClipboard( uint );
   int EmptyClipboard();
   int CloseClipboard();
   uint SetClipboardData( uint uFormat, uint hMem );
#import "Kernel32.dll"
   uint GlobalAlloc( uint uFlags, uint dwBytes );
   uint GlobalLock( uint hMem );
   int GlobalUnlock( uint hMem );
#import "msvcrt.dll"
   uint memcpy( uint dest, string src, uint count );
#import

string str = "АБВГД";

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   uint hwnd = (uint)ChartGetInteger( 0, CHART_WINDOW_HANDLE );
   
   int strSize = StringLen( str ) * 2 + 2;  // Получаем размер строки в байтах
   
   if( OpenClipboard( hwnd ) )    // Открываем буфер
   {
      EmptyClipboard();           // Очищаем буфер
      
      uint hMem = GlobalAlloc( GHND, strSize ); // Выделяем память
      uint pMem = GlobalLock( hMem );    // Получаем адрес выделенной памяти
      memcpy( pMem, str, strSize );     // Копируем строку в память
      GlobalUnlock( hMem );
   
      SetClipboardData( CF_UNICODETEXT, hMem );  // Передаём память со строкой в буфер
      
      CloseClipboard();  // Закрываем буфер
   }
}
 
Artyom Trishkin:


Artem,告诉我,如果我把所有这些从On Start函数下插入On Tick函数中,脚本将以同样的方式执行,只是在每个tick上,对吗?

还是有什么需要改变的?

由于以前的蜡烛图,除了当前的蜡烛图,在每一个刻度上都没有变化,所以,我想,我们应该添加一个条件来检查一次,比如说在当前蜡烛图收盘前1-2秒?还是说没有意义,我们可以让每一个勾都打上勾?

 
Andrey Koldorkin:

Artem,告诉我,如果我把所有这些从On Start函数下插入On Tick函数中,脚本将以同样的方式执行,只是在每个tick上,对吗?

还是有什么需要改变的?

由于以前的蜡烛图,除了当前的蜡烛图,在每一个刻度上都没有变化,所以,我想,我们应该添加一个条件来检查一次,比如说在当前蜡烛图收盘前1-2秒?还是说没有意义,我们可以让每一个勾都打上勾?

好吧,我会把所有的东西组成一个函数,并在我需要的时候调用它--在每一个tick(如果它是合理和必要的),或在一个新的蜡烛 开盘时--例如,如果我们用H1工作,每小时一次。