エラー、バグ、質問 - ページ 2616

 
Igor Makanu:

なるほど、つまり端末間のデータ交換という長年の課題を解決するわけですね。

Expert Advisorが動作しているTesterからデータを受信する必要があります。9割のケースはやり方がわかっています。

 
fxsaber:

Agent上で動作するEAが、Agent上で動作するように送信されたターミナルハンドルを取得できるようにする必要があります。

Agentsについては、確認していないので何とも言えませんが、さすがにPIDでTerminalのハンドルは取得できるようです。

#define    READ_CONTROL   0x00020000
#define    bInheritHandle true

#include <WinAPI\processthreadsapi.mqh>
int OnInit()
  {
   uint process_id = GetCurrentProcessId();
   Print("process_id = ",process_id);
   HANDLE handle = OpenProcess(READ_CONTROL,bInheritHandle,process_id);	// https://docs.microsoft.com/ru-ru/windows/win32/api/processthreadsapi/nf-processthreadsapi-openprocess?redirectedfrom=MSDN
   Print("handle = ",handle);
   return(INIT_SUCCEEDED);
  }

2019.12.09 21:05:36.259 tst_Wapi (EURUSD,H1) process_id = 9280

2019.12.09 21:05:36.259 tst_Wapi (EURUSD,H1) handle = 2276

タスクマネージャーでPIDを確認しても同じです


 
Igor Makanu:

エージェントについては、何とも言えません。 確認していませんが、端末のハンドルは、やはりPIDで取得できるようです。

2019.12.09 21:05:36.259 tst_Wapi (EURUSD,H1) process_id = 9280

2019.12.09 21:05:36.259 tst_Wapi (EURUSD,H1) handle = 2276

タスクマネージャーでPIDを確認したところ一致

このコードは、Serviceには有効ですが、Expert Advisor on Agentには有効ではありません。

 
Igor Makanu:

エージェントについては、何とも言えません。 確認していませんが、端末のハンドルは、やはりPIDで取得できるようです。

2019.12.09 21:05:36.259 tst_Wapi (EURUSD,H1) process_id = 9280

2019.12.09 21:05:36.259 tst_Wapi (EURUSD,H1) handle = 2276

タスクマネージャーでPIDを確認しても同じです

問題が解決 しました、ありがとうございます。

 
metatrader5で、MQL5/logsフォルダに過去7日分のログが保存されているのですが、教えてください。これは、設定のどこかで変更されているのか、それとも端末のバグなのでしょうか?
 

ここでは2つの提案をしています。

1- 最適化を停止し、前方最適化に切り替えるためのオプション(ボタン)を作成します。

つまり、手軽な電卓のつもりだったのだ。でも、数えるほどしかないんです。そして、フォワードも気になります、待たされますね。

少し長く数えることもあれば、短くすることも必要です。

最適化の延長と最適化の停止の2つのボタンと、前進のスイッチが必要です。

2- ツールバーがまた2段にスライドしてしまいました。娘が小さい頃、「滑る滑る~!」と言ってたことがありました...)

ここでも、2列目からパネルがどんどんスライドしていきます。すでに後ろ(同じ列)に移動することにうんざりしている。もう直せ!どれだけのスペースが無駄になっているか!

 

以下の不具合は、お客様ご自身でご確認ください。このアプリケーションには、"capslock "キーの状態を読み取ることだけを目的とした、特別なミニマムインジケータが搭載されています。ログとコメントで表示されます。

一連の動作は次のとおりです。

  1. インジケータをコンパイルし、チャート上に配置し、0("capslock "が有効になっていない)が表示されることを確認します。
  2. MEに切り替え、CapsLockを有効にして再コンパイルしてください。端末に戻る。古いインジケーターがアンロードされ、新しいインジケーターがロードされていることをログで確認します。しかし、"CapsLock "のステータスは依然として0として返されます。
  3. チャートからインジケータを削除して再度アップロードすると、キャップスロックは正常に認識され、1が表示されます。

奇跡ってなんだろう?コンパイルで再起動すると、一部の環境変数がクリーンアップされないとか?

ファイル:
CapsLock.mq5  1 kb
 
Stanislav Korotky:

以下の不具合は、お客様ご自身でご確認ください。このアプリケーションには、"capslock "キーの状態を読み取ることだけを目的とした、特別なミニマムインジケータが搭載されています。ログとコメントで表示されます。

一連の動作は次のとおりです。

  1. インジケータをコンパイルし、チャート上に配置し、0("capslock "が有効になっていない)が表示されることを確認します。
  2. MEに切り替え、CapsLockを有効にして再コンパイルしてください。端末に戻る。古いインジケーターがアンロードされ、新しいインジケーターがロードされていることをログで確認します。しかし、"CapsLock "のステータスは依然として0として返されます。
  3. チャートからインジケータを削除して再度アップロードすると、キャップスロックは正常に認識され、1が表示されます。

奇跡ってなんだろう?コンパイルで再起動すると、一部の環境変数がクリーンアップされないとか?

もしそうなら?

void OnDeinit(const int reason)
{
  if (ind != INVALID_HANDLE)
  {
    IndicatorRelease(ind);
  }
}
 
Vitaly Muzichenko:

これはどうでしょう?

これと何の関係があるのですか?MQLのコードからインジケータを作 らない。手動でチャートにひっかけています。開発の過程で、プログラムの再コンパイルが頻繁に発生する場合、保存されたコンテキスト/システム環境でのエラーによって機能が失われないようにするために必要なんです。今現在、再コンパイルした後、キーボードの現在の状態をピックアップさせるために、インダクタをアンインストールして再インストールする必要があるんです。

 
Stanislav Korotky:

コンパイル時に再起動した場合、一部の環境変数がクリアされていないとか?

はい、これはバグです。インジケーターでもEAでも、違いはありません。