MQL4 EAからチャートにインジケータを追加する。

 

皆さん、こんにちは。

私は、現在の問題を解決しようとしています。mql4には、mql5のChartIndicatorAdd() のようにチャートにインジケータを追加するコマンドはありません。これは本当に悲しいことです。

私は自分のEAにインジケータを起動させたいのです。フォーラムをスクロールしていると、そのような解決策に出会いましたが、正しく動作していません。助けてください!

このコードは、インジケータを起動しようとしますが、ファイル名を正しく読みません。これは、(インジケータ名の最初の文字).ex4またはI.ex4のみを開こうとするものです。

明らかな解決策はchararrayでしたが、コンパイラは "parametr conversion not allowed "というエラーを返しました。どうすればいいのでしょうか?

#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:
ありがとうございます、現在動作していますが、2回目からしか動作しません。eaを起動すると、indicator callが fail to open / .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にresourseを使ったインジケータを追加するのがいいかも。

EAはハンドルを取得しますが、インジケータは表示されません。
 
Georgiy Liashchenko:
ハンドルを取得してもインジケータが表示されません。

チャートにインジケータを 追加するものではありません。ea ex.4ファイルにindをコンパイルしています。

 
mql5のようにChartIndicatorAdd()を追加するよう、サービスデスクに問い合わせてみてはいかがでしょうか?