MQL4 从EA添加指标到图表

 

大家好。

我正试图解决当前的问题。在mql4中,没有命令可以像mql5的ChartIndicatorAdd() 那样向图表中添加指标。这真的很悲哀。

我希望我的EA能够启动一个指标。在论坛上,我看到了这样的解决方案,但它不能正常工作。请帮助我

这段代码试图启动指标,但它没有正确读取文件名。它只试图打开(指标名称的第一个字母).ex4或I.ex4。

明显的解决方案是chararray,但编译器返回错误 "parametr转换不允许"。那么,我们怎样才能解决这个问题呢?

#import "user32.dll"
   int RegisterWindowMessageW(string MessageName);
   int PostMessageW(int hwnd, int msg, int wparam, string Name);
#import

void StartCustomIndicator(int hWnd, string IndicatorName, bool AutomaticallyAcceptDefaults = false)
{
 string name = "Indicator_name";
 char name2[];
 StringToCharArray(name,name2,0,StringLen(name));
 
 int MessageNumber = RegisterWindowMessageW("MetaTrader4_Internal_Message");
 int r = PostMessageW(hWnd, MessageNumber, 15, name);
}
int OnInit()
  {
//---

// In my code where I launch the indicator
int hWnd = WindowHandle(Symbol(), 0);
StartCustomIndicator(hWnd, "Indicator_name");

return(INIT_SUCCEEDED);
}
 
#import "user32.dll"
int RegisterWindowMessageW(string MessageName);
int PostMessageW(int hwnd,int msg,int wparam,uchar &Name[]);
#import

#define  INDICATOR_NAME "Indicator_name"
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void StartCustomIndicator(int hWnd,string IndicatorName,bool AutomaticallyAcceptDefaults=false)
  {
   uchar name2[];
   StringToCharArray(IndicatorName,name2,0,StringLen(IndicatorName));

   int MessageNumber=RegisterWindowMessageW("MetaTrader4_Internal_Message");
   int r=PostMessageW(hWnd,MessageNumber,15,name2);
   Sleep(10);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
// In my code where I launch the indicator
   int hWnd=WindowHandle(Symbol(),0);
   StartCustomIndicator(hWnd,INDICATOR_NAME);

   return(INIT_SUCCEEDED);
  }
 
Alain Verleyen:
谢谢,现在已经成功了,但它只在第二次尝试时有效。如果我启动EA,指标调用 返回错误,无法打开/.ex4[123]。如果EA已经连接到一个图表上,我试图重新连接它,那么它就会工作。如何解决这个问题?
 
Georgiy Liashchenko:

...在mql4中,没有命令可以像mql5中的ChartIndicatorAdd() 那样给图表添加一个指标。这实在是令人难过....

你确定吗?
 
Vasyl Nosal:
你确定吗?
好吧,如果你知道一些,请分享...:)
 
Georgiy Liashchenko:
好吧,如果你知道一些,请分享... :)

:))))))))))))))))))))))))))))))))))))))))))))))))))

ChartIndicatorAdd()

哦,对不起。几分钟后。

嗯。我想这是在mql4中。

也许这能帮助你

ChartApplyTemplate()

 
Vasyl Nosal:

:))))))))))))))))))))))))))))))))))))))))))))))))))

ChartIndicatorAdd()

哦,对不起。几分钟后。

嗯。我想这是在mql4中。

也许这能帮助你

ChartApplyTemplate()

是的,但这不是一个案例,比如我卖EA,一个客户想使用它,他没有相同的模板。即使我给他文件,他也可能喜欢不同的前景。因此,我想从EA中初始化指标。
 
Georgiy Liashchenko:
是的,但这不是一个例子,比如我卖了EA,客户想使用它,他没有相同的模板。即使我给他文件,他也可能喜欢不同的外观。因此,我想从EA中初始化指标。

嗯。也许比使用 "资源 "在EA中添加指标。

#resource "\\Indicators\\SampleIndicator.ex4"


int OnInit()
  {

   double value=iCustom(_Symbol,_Period,"::Indicators\\SampleIndicator.ex4",0,0);
 
Vasyl Nosal:

嗯。也许比使用 "资源 "在EA中添加指标。

不起作用,EA得到处理,但没有指标。
 
Georgiy Liashchenko:
不起作用,EA得到处理,但没有指标。

它不是在图表上添加指标。它在EA ex.4文件中编译了指标。

 
也许可以写信给服务台,要求他们像mql5那样添加ChartIndicatorAdd()
原因: