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

 
Georgiy Liashchenko:
スリープが効きました、ありがとうございます

Alainのコードを使っているのですが、クラシックなインジケーターのフォームが表示されてパラメータを 記入し、Okをクリックするとインジケーターが有効になるという意味では、手動でインジケーターを付けるのと同じような感覚で動作します。必要なパラメーターの設定まで完全に自動化することは可能でしょうか?ありがとうございます

 
alessandrovb:

Alainのコードを使っているのですが、クラシックなインジケーターのフォームが表示されてパラメータを記入し、Okをクリックするとインジケーターが有効になるという意味では、手動でインジケーターを付けるのと同じような感覚で動作します。必要なパラメーターの設定まで完全に自動化することは可能でしょうか?よろしくお願いします。

手動で行っているように、キーストロークをシミュレートするコードを追加 するだけです。
 
Alain Verleyen:

私はこの問題はありません(私が投稿したコードで)。

hWndが0と異なることを確認してください。

また、スリープの値を50または100に増やしてみてください。

こんにちは。

このコメントは多くのヘルプに、私は他の質問が必要です。

入力ポップアップをバイパスして、インジケータのデフォルトを使用することはできますか?どのようにコーディングすればいいのでしょうか?

チャートからインジケータを削除することはできますか?

 
Alain Verleyen:

ありがとうございます、これは私が探していたものです、私は私のカスタムインジケータを 追加することができます。

 
Alain Verleyen:

Congratulations, it works fine.

 
Alain Verleyen:

私はこの問題はありません(私が投稿したコードで)。

hWndが0と異なることを確認してください。

また、スリープの値を50や100に増やしてみてください。


あなたのコードを使用していますが、名前が問題です。

2018.01.11 12:06:15.864 cannot open file 'C:\..........\MQL4indicators' [123].

2018.01.11 12:04:00.518 cannot open file 'C:\...............\MQL4INDICATORS PACD. ex4' [123] (ファイル名:PACD. EX4)を開けません。

1行目が発生したとき

   uchar name2[4];

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

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

Second line is raised when

   uchar name2[];

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


First line is raised when. I changed First code it's working now!

   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氏に感謝し、AutomaticallyAcceptDefaults ("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);
}

エキスパートからインジケータを挿入する必要がある方々のお役に立てれば幸いです。

注1:カスタム・インジケータの場合、Windowsの名前を変更する必要があります。

注2:15文字以上のインジケータは使用しないでください(".ex4 "の前)。

 
Kray:

皆さん、こんにちは。

Georgiy Liashchenkoに感謝し、AutomaticallyAcceptDefaults ("true "の場合)を使ってインジケータを直接チャートに追加する彼のコードのアップグレード版を共有したいと思います

エキスパートからインジケータを挿入する必要がある方々のお役に立てれば幸いです。

注1:カスタム・インジケータの場合、Windowsの名前を変更する必要があります。

注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に感謝するとともに、AutomaticallyAcceptDefaults ("true "の場合)を使ってインジケータを直接チャートに追加する、彼のコードのアップグレード版を共有したいと思います

......

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


私はMT4 v4.00 Build 1090 (19 May 2017)を使用しています。

関数PostMessageWをスクリプト内から使用してインジケータを配置すると、MT4端末がクラッシュしてしまいます。

私はインジケータを配置するための代替手段としてSendMessageWを使用しましたが、残念ながら、これはキーボードイベントをシミュレートしてEnterキーを押すことによって設定ダイアログボックスを閉じる方法がないことを意味します。これは、SendMessageW関数が、ウィンドウプロシージャがメッセージを処理するまで戻ってこないため、ダイアログボックスが消えるまでキーボードイベントを処理できないためではないかと思います。つまり、ダイアログボックスが消えるまでSendMessageWは戻らないので、ダイアログボックスが表示されている間はFindWindowWが動作しないということになります。

この全体は、私にとってフラストレーションの一つの大きな練習になっています。PostMessageWはMT4の最新ビルドでまだ動作しますか?どなたか、インジケータの設定ダイアログボックスをプログラムで閉じる方法をご存じないでしょうか?他の2つのスレッドを参照し、その推奨事項を試しましたが、うまくいきませんでした。

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

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

どなたか教えてください。PostMessageWを動作させるか、他の方法でconfigダイアログボックスを閉じる方法はないでしょうか?