MQL4 从EA添加指标到图表 - 页 3

 
Georgiy Liashchenko:
睡眠已经成功,谢谢

我正在使用Alain的代码,它的工作原理是:出现经典的指标表格,要求我填写参数,然后点击OK来激活指标,这与手动附加指标类似。是否有可能将整个操作完全自动化,甚至包括所需参数的设置?谢谢

 
alessandrovb:

我正在使用Alain的代码,它的工作原理是:出现经典的指标表格,要求我填写参数,然后点击OK来激活指标,这与手动附加指标类似。是否有可能将整个操作完全自动化,甚至包括所需参数的设置?谢谢

你只需要添加代码 来模拟按键,就像你手动操作一样。
 
Alain Verleyen:

我没有这个问题(用我发布的代码)。

检查hWnd是否与0不同。

你也可以尝试将睡眠值增加到50或100。

你好。

这个评论有很多帮助,我需要其他问题。

我可以绕过输入弹出窗口,使用指标的默认值吗?如何进行编码?

我可以从图表中删除指标吗?

 
Alain Verleyen:

谢谢你,这正是我想要的,我可以添加我的自定义指标,只是还有一个问题,如何卸载它?

 
Alain Verleyen:

祝贺你,它运行良好。

 
Alain Verleyen:

我没有这个问题(用我发布的代码)。

检查hWnd是否与0不同。

你也可以尝试将睡眠值增加到50或100。


我正在使用你的代码,但我对它的名字有疑问。

2018.01.11 12:06:15.864 无法打开文件'C:\............\MQL4\indicators\MACDèõšp.ex4' [123]

2018.01.11 12:04:00.518 不能打开文件'C:\.............\MQL4\indicators\MACD. ex4' [123]

第一行是在以下情况下提出的

   uchar name2[4];

   name2[0]='M'; name2[1]='A'; name2[2]='C'; name2[3]='D';

   // StringToCharArray(IndicatorName,name2,0,StringLen(IndicatorName));

第二行是在以下情况下出现的

   uchar name2[];

   StringToCharArray(IndicatorName,name2,0,StringLen(IndicatorName));


我修改了第一行代码,现在可以工作了!

   uchar name2[5];

   name2[0]='M'; name2[1]='A'; name2[2]='C'; name2[3]='D'; name2[4]=0;

   // StringToCharArray(IndicatorName,name2,0,StringLen(IndicatorName));

我想我的问题是关于数组末端检测的问题!
 

大家好。

我想感谢Georgiy Liashchenko,我想分享他的代码的升级版,即把指标直接添加到图表中并自动接受默认值 (当它是 "true "时)

#import "user32.dll"
   int  RegisterWindowMessageW(string MessageName);
   int  PostMessageW(int hwnd,int msg,int wparam,uchar &Name[]);
   int  FindWindowW(string lpszClass,string lpszWindow);
#import

#define VK_RETURN 13 //ENTER key

void StartCustomIndicator(int hWnd,string IndicatorName,bool AutomaticallyAcceptDefaults=false)
{
   Sleep(100);
   uchar name2[];
   StringToCharArray(IndicatorName,name2,0,StringLen(IndicatorName));
   int MessageNumber=RegisterWindowMessageW("MetaTrader4_Internal_Message");
   int r=PostMessageW(hWnd,MessageNumber,15,name2);
   Sleep(100);
   if(AutomaticallyAcceptDefaults) {
      int ind_settings = FindWindowW(NULL, "Custom Indicator - "+IndicatorName);
      PostMessageW(ind_settings,0x100,VK_RETURN,name2);
   }
}

int OnInit()
{
   int hWnd = WindowHandle(Symbol(), 0);
   StartCustomIndicator(hWnd, "Indicator_name");
   return(INIT_SUCCEEDED);
}

我希望它能帮助一些需要从专家那里插入指标的人。

注意:我适用于自定义指标,否则请更改窗口名称。

注2:不要使用超过15个字符的指标(在".ex4 "之前)。

 
Kray:

大家好。

我想感谢Georgiy Liashchenko,我想分享他的代码的升级版,即把指标直接添加到图表中并自动接受默认值 (当它是 "true "时)

我希望它能帮助一些需要从专家那里插入指标的人。

注意:我适用于自定义指标,否则请更改窗口名称。

注2:不要使用超过15个字符的指标(在".ex4 "之前)。

非常好。


我发现,使用:

int r=PostMessageW(hWnd,MessageNumber,13,name2);

而不是使用:

int r=PostMessageW(hWnd,MessageNumber,15,name2);

将让你也使用标准指标,通过使用标准指标的名称。

 

我得到一个

'name2' - parameter conversion not allowed
当我试图编译它时,我得到一个错误信息?

 

Kray:

大家好。

我想感谢Georgiy Liashchenko,我想分享我对他的代码的升级版本,即把指标直接添加到图表中,并自动接受默认值 (当它是 "true "时)

......

if(AutomaticallyAcceptDefaults) {
      int ind_settings = FindWindowW(NULL, "Custom Indicator - "+IndicatorName);
      PostMessageW(ind_settings,0x100,VK_RETURN,name2);


我正在运行MT4.00 Build 1090(2017年5月19日)。

当我在脚本中使用PostMessageW来放置指标时,该函数会导致我的MT4终端崩溃。

我使用了SendMessageW作为放置指标的替代方法,但不幸的是,这意味着没有办法通过模拟键盘事件和按下回车键来关闭配置对话框。我想这可能是因为SendMessageW函数在窗口程序处理完信息后才会返回,这意味着在对话框消失前无法处理键盘事件。这又意味着在对话框显示时,FindWindowW不会工作,因为SendMessageW在对话框消失前不会返回。

这整个事情对我来说是一个巨大的挫折。PostMessageW在MT4的最新版本上还能使用吗?有人知道如何以编程方式关闭指标的配置对话框吗?我参考了其他两个主题,尝试了他们的建议,但都不成功。

https://www.mql5.com/en/forum/155334

https://www.mql5.com/en/forum/115967

谁能给我点启发?有没有办法让PostMessageW工作,或以其他方式关闭配置对话框?