
MQL5で取引管理者パネルを作成する(第11回):最新機能通信インターフェース(I)
内容
はじめに
MetaTrader 5端末は、より効率的でコンパクトな取引作業環境へと急速に進化しています。最近のチャット機能の統合により、トレーダーは端末内でMQL5フレンドと個別にメッセージを送受信したり、グループに参加したり、チャンネルを購読したりできるようになりました。これは、MQL5 APIを通じてコミュニティを安全に繋ぐための大きな一歩です。
これらの機能を使用するには、ユーザーは端末内でMQL5アカウントにログインしており、フレンドがオンラインで、アクティブなチャンネルやグループに参加している必要があります。これらのコミュニティは、取引の洞察を得るための貴重な情報源であり、専門家がアイデア、スクリーンショット、ライブディスカッションを頻繁に共有します。しかも、すべてチャート表示を妨げずにシームレスに統合されています。
しかし、現在の制限として、コミュニケーションはMQL5エコシステム内に限定されています。外部のソーシャルプラットフォームとMetaTrader 5を橋渡しする機能はまだありません。幸いにも、端末のAPIとWebRequest機能を組み合わせることで、TelegramやWhatsAppなどの外部コミュニケーションサーバーと接続することが可能です。
取引管理者パネルは、この機能を拡張し、現代のメッセージングアプリに触発されたユーザーフレンドリーなコミュニケーションパネルを導入することを目的としています。従来の電卓のようなプロトタイプから、より直感的で洗練されたデザインへと移行しています。元の基盤は初期テストには適していましたが、今後のバージョンでは双方向通信の完全サポートが実現されます
もはや管理者が一方的にメッセージを送るだけではなく、受信者も返信できるようになります。この変更には、外部通信対象を管理するための適切な連絡先システムの実装と、ユニークなチャットIDの利用が必要です。
下の画像は、MetaTrader 5取引端末からMQL5コミュニティとチャットにアクセスする方法を示しています。ユーザーアカウントのアイコンは通常、端末画面の右上付近にあり、画像でハイライトされています。
MetaTrader 5端末からMQL5コミュニティとチャットにアクセスする
MQL5アカウントをすでに追加している場合は、通常、端末の起動操作ログに、MQL5コミュニティアカウントとチャットがアクティブ化されていることを示す概要が表示されます。以下は2025年4月16日の端末起動ログです。
2025.04.16 08:44:10.343 Network '40538052': previous successful authorization performed from 197.221.254.8 on 2025.04.16 03:48:48 2025.04.16 08:44:10.461 Experts expert New_Admin_Panel- (Volatility 75 (1s) Index.0,M5) loaded successfully 2025.04.16 08:44:12.323 Experts expert New_Admin_Panel- (Volatility 10 (1s) Index.0,M1) loaded successfully 2025.04.16 08:44:12.324 Network '40538052': terminal synchronized with Deriv.com Limited: 0 positions, 0 orders, 150 symbols, 0 spreads 2025.04.16 08:44:12.324 Network '40538052': trading has been enabled - hedging mode 2025.04.16 08:44:14.354 Trades use MetaTrader VPS Hosting Service to speed up the execution: 2.26 ms via 'MQL5 Frankfurt FRA8 01' instead of 212.79 ms 2025.04.16 08:44:14.776 MQL5.community activated for 'Billionaire2024', balance: 0.00 2025.04.16 08:44:15.826 MQL5.chats activated for 'Billionaire2024'
以下では、実際のデザインに踏み込み、コミュニケーションパネルの次の進化をどのように実現するかを概説します。
概要
今回のコード整理による改善のおかげで、プログラムの拡張性がより明確になってきました。これにより、大規模プロジェクトの他のコンポーネントに気を取られることなく、コミュニケーションパネルに専念できるようになっています。このモジュラー方式により、創造性と生産性を最大限に発揮できる環境が整いました。
本日は、コミュニケーションパネルのさらなる進化に向けて重要な一歩を踏み出します。これは、以前管理者ホームインターフェースの改善と簡素化をおこなったときと同じ方向性の進展です。現在のコミュニケーションパネルは、視覚的な魅力に欠け、ユーザーフレンドリーとは言い難いため、改善と強化の作業が必要です。
今回のバージョンでもMQL5標準ライブラリを活用しますが、同時に私たちの要件に合わせた新しいカスタムクラスも導入します。進め方としては、まずインターフェースの概念設計をおこない、コアコンポーネントを特定し、それぞれの役割を明確にします。その後、実際のコーディングと実装フェーズに移行します。
人気のメッセージングアプリに基づくインターフェースの特徴
自分たちのインターフェース設計に入る前に、まず今日の人気メッセージングアプリで使われている一般的なインターフェースの特徴を確認してみましょう。これらの共通デザインパターンを分析することで、インスピレーションを得て、自分たちの目標に沿った機能の追加、削除、調整に役立てることができます。
以下に、私がまとめた10の主要な特徴を挙げます。これらを確認した後、実際のアプリでこれらの要素がどのように組み合わさっているかを示す参考画像を見ていきます。
1. クリーンでミニマリストなデザイン
- フラットUIとモダンなカラースキーム(ライト/ダークモード)
- 一貫した余白と整列
- 丸みを帯びたメッセージバブル、スムーズなトランジション
- シンプルなアイコン(クリップ、絵文字、マイクなど)と直感的な配置
2. メッセージスレッドエリア(メインチャットウィンドウ)
- メッセージ履歴をスクロール表示
- メッセージのタイムスタンプ
- 送信者ごとのメッセージグループ化
- 配信済み、既読、編集済み、ピン留めなどの視覚フィードバック
- 画像、動画、音声、ファイルなどのマルチメディア対応
3. サイドバー:連絡先またはチャンネル
- ユーザー、グループ、チャンネルのリスト
- オンラインステータス表示(緑点、最終アクセス時間)
- 最近のメッセージのプレビュー
- 検索・フィルター機能
4. 上部ナビゲーションバー
- チャットタイトルや連絡先名
- ユーザーアバターやグループアイコン
- 設定/オプションのドロップダウン(ミュート、アーカイブ、削除など)
- ユーザーやグループのプロフィール確認ボタン
5. メッセージ入力エリア(下部パネル)
- プレースホルダー付きテキスト入力ボックス(「メッセージを入力…」)
- ボタン:
- 送信(紙飛行機アイコン)
- ファイル添付(クリップアイコン)
- 絵文字選択(ニコニコマーク)
- 音声入力(マイクアイコン)
- キーボードショートカット(Enterで送信、Shift+Enterで改行)
6. メディア・添付ファイルプレビュー
- 画像、動画、ファイルのインラインプレビュー
- 表示の展開/折りたたみ
- ドラッグ&ドロップによるアップロード対応
7. 通知とアラート
- アプリ内通知およびシステム通知
- サウンド/バイブレーションの切り替え
- メンション時のハイライト(@ユーザー名)
- 未読メッセージのポップアップやバッジ表示(未読数)
8. デバイス間の同期
- Web、モバイル、デスクトップアプリ間でリアルタイム同期
- セッションをまたいだチャット履歴の保持
- オフラインモード対応(オンライン復帰時に自動同期)
9. セキュリティとプライバシー
- エンドツーエンド暗号化(例:WhatsApp)
- メッセージタイマー/自動削除(Telegram)
- 2FAや安全なログインセッション
10. 拡張性とボット
- ボットや自動化のサポート
- 他ツール(カレンダー、タスク管理、取引端末)との統合
- 豊富なAPIとWebSocketのサポート
- メッセージ入力エリアは赤枠で囲まれている
- チャット履歴セクションは青枠で囲まれている
- 上部部分は緑枠で囲まれ、連絡先名、検索ボタン、三点メニューを含む
Telegramチャットからの参考画像
もうひとつの参考例として、MQL5メッセージングインターフェースがあります。これは、以前私が作成したMQL5チャンネルからキャプチャしたものです。下のレイアウトをご覧ください。先ほどのTelegramの画像と比較すると、デザインにいくつかの共通点や微妙な差異が見られます。この一般的なメッセージングインターフェースのレイアウトからも、有益なインサイトを得ることができます。
MQL5メッセージングリファレンス
参考として利用できる例は、ほぼ無限に存在します。メールの返信ボタンや追加機能を備えたメッセージングシステム、チャットボットのインターフェースなど、多くの例は似たようなレイアウトを採用しています。これらはすべて、通信インターフェースに必要な要素を理解する上で貴重な参考になります。これらのリファレンスを踏まえ、次に進む段階では、取引向けコミュニケーションパネルに最も適したデザインを検討します。その際には、パネルの制約条件や、扱う通信の種類も考慮に入れる必要があります。
設計とコード実装
ここから、新しいパネルへの移行が始まります。しかしその前に、取引管理者が他のトレーダーとやり取りする際の主要なコミュニケーションニーズを整理する必要があります。主なニーズは以下の通りです。
1. トレーダーへの特別指示
メッセージ作成から送信までの時間を短縮するため、クイックメッセージボタンのアイデアは既に実装済みです。これにより、重要な情報をトレーダーが迅速に受け取れるようになっています。 しかし、管理者はカスタムメッセージを送信する必要もあるため、メッセージ入力エリアはその用途に対応する設計になっています。今回、クイックメッセージのアクセス方法も改善予定です。
2. 一方向通信と双方向通信の比較
従来は、管理者のみがメッセージを送信できる一方向通信が基本でした。しかし、取引コミュニティからの返信が有用なケースもあります。新しいパネル設計では、このような双方向通信に対応できる仕組みを検討する必要があります。
3. スクリーンショットの共有と視覚的分析
画像の共有、特に注釈付きチャートやスクリーンショットの活用はますます重要になっています。MQL5端末には、スクリーンショットを直接MQL5コミュニティのチャートにアップロードするツールが既に用意されています。私たちは、スクリーンショットを撮影し、メッセージに添付して迅速に共有できるボタンを組み込みたいと考えています。これにより、管理者は取引の洞察をより効果的に視覚的に伝えることができます。
4. 連絡先管理
Telegramのように、1対1チャット、チャンネル、グループなど複数の通信モードがある場合、ユニークなチャットIDを使用して連絡先を割り当て、個別およびグループのカテゴリに整理できます。これに伴い、アプリ内で連絡先の保存と取得方法を適切に管理する仕組みも必要です。
以下は、概念設計の例です。ここからコード実装に進むことができます。
新デザイン:コミュニケーションパネル
現在の優先事項は、インターフェースデザインの洗練です。この記事の次のセクションでは、この基盤をもとに新機能の追加やユーザー体験のさらなる向上を進めていきます。
MQL5標準ライブラリには、インターフェース設計に活用できる複数の#includeディレクティブが用意されています。以下の表では、関連するヘッダファイルと、プロジェクト内での想定用途を示します。
ヘッダファイル | 用途 |
---|---|
Dialog.mqh | ダイアログウィンドウの基本クラスを提供し、UIコンポーネントの管理、イベント処理、描画をおこないます。 |
Panel.mqh | コントロールを視覚的にグループ化・配置するために使用されます。メインエリアや作成パネルなどのレイアウトセクションを作成可能です。 |
Label.mqh | 入力フィールドのラベルや「Username」「Chat ID」などのセクションヘッダーなど、編集不可のテキストを表示します。 |
Edit.mqh | メッセージ作成やTelegram認証情報入力など、ユーザー入力用の編集可能なテキストボックスを提供します。 |
Button.mqh | 送信、ファイル添付、スクリーンショット、テーマ切替など、ユーザー操作用のクリック可能なボタンを作成します。 |
VirtualKeys.mqh | メッセージ入力フィールドでEnterキーの押下を検出するなど、キーボード入力イベントを処理する定数を定義します。 |
Telegram.mqh | Telegram Bot APIを通じたメッセージ送信のロジックを管理。URLリクエストやHTTP通信を扱います。 |
CommunicationsDialogクラスヘッダ(CommunicationsDialog.mqh)
このセクションでは、コードの動作を分解して説明し、集中度の高い再利用可能な部品へと整理する利点を強調します。各パネルのロジックを個別のヘッダファイルに切り出し(マクロ定義、列挙体、クラス宣言、メソッド実装を含む)ことで、メインプログラムはシンプルかつ保守しやすくなり、複数のEA間で共有しやすくなります。これらのヘッダをインクルードすれば、GUIの内部的な詳細を気にする必要はなく、公開されたインターフェースを呼び出すだけで十分です。それでは、コミュニケーションパネルの改善点をステップごとに見ていきましょう。
クラスヘッダ構造
ファイルの一番上では、複数のインクルードを防ぎ、必要な依存関係をすべて取り込みます。
- インクルード:MQL5標準のUIコントロール(Dialog、Panel、Edit、Button、Label)に加え、キーコード用のVirtualKeys、そしてカスタムのTelegram.mqhを含みます。
- 定数と列挙型:パネルのジオメトリ用マクロ、UIパディング、さらにメッセージ種別(OUTGOING、INCOMING、SYSTEM)とステータス(SENT、FAILED)の2つの列挙体を定義します。
- クラス定義:CCommunicationDialogはCAppDialogを継承し、以下を宣言します。
- privateメンバー:パネル、ボタン、ラベル、エディット、ダークモードフラグ
- publicメソッド:コンストラクタ、InitCredentials、CreatePanel、イベント処理(OnEvent)、アクションハンドラ(OnSendMessageなど)
- privateヘルパー:各UI領域の構築、テーマ適用、履歴の入出力、メッセージ整形
#ifndef COMMUNICATIONS_MQH #define COMMUNICATIONS_MQH #include <Controls\Dialog.mqh> #include <Controls\Panel.mqh> #include <Controls\Edit.mqh> #include <Controls\Button.mqh> #include <Controls\Label.mqh> #include <VirtualKeys.mqh> #include "Telegram.mqh" #define COMM_PANEL_LEFT 80 … enum ENUM_UI_CONSTANTS { UI_INDENT=10, UI_GAP=5, … }; enum ENUM_MESSAGE_TYPE { MSG_OUTGOING, MSG_INCOMING, MSG_SYSTEM }; enum ENUM_MESSAGE_STATUS { STATUS_SENT, STATUS_FAILED }; class CCommunicationDialog : public CAppDialog { private: CPanel m_mainPanel, m_composePanel; CButton m_toggleSidebar, m_sendButton, m_attachButton, m_screenshotButton; CLabel m_usernameLabel, m_chatIdLabel, m_tokenLabel, m_mainUserLabel; CEdit m_usernameInput, m_chatIdInput, m_tokenInput, m_messageThread, m_messageInput; bool m_isDarkMode; public: CCommunicationDialog():m_isDarkMode(false){} bool CreatePanel(...); virtual bool OnEvent(...); void OnSendMessage(); … private: bool CreateSidebar(); bool CreateMainContent(); bool CreateComposeArea(); void ApplyTheme(); void LoadChatHistory(string); void SaveMessageToHistory(...); string FormatMessage(...); void AddMessageToHistory(...); }; #endif // COMMUNICATIONS_MQH
1. CreatePanel:ダイアログの組み立て
このメソッドはダイアログ全体のセットアップを統括します。最初に基本的なダイアログ作成を呼び出し、その後、サイドバー、メインメッセージ表示領域、作成エリアを順番に構築します。各ステップで成功を確認し、いずれかが失敗した場合は直ちにダイアログを破棄します。すべての領域が正しく配置されたら、現在のテーマを適用し、保存された履歴を読み込み、チャートを再描画して完全なインターフェースを提示します。
bool CCommunicationDialog::CreatePanel(const long chart,const string name,const int subwin, const int x1,const int y1,const int x2,const int y2) { if(!CAppDialog::Create(chart,name,subwin,x1,y1,x2,y2)) return(false); if(!CreateSidebar()) { Destroy(); return(false); } if(!CreateMainContent()) { Destroy(); return(false); } Add(m_mainPanel); Add(m_messageThread); Add(m_mainUserLabel); if(!CreateComposeArea()){ Destroy(); return(false); } Add(m_composePanel); Add(m_messageInput); Add(m_screenshotButton); Add(m_attachButton); Add(m_sendButton); ApplyTheme(); LoadChatHistory(m_chatIdInput.Text()); ChartRedraw(); return(true); }
2. CreateSidebar:認証情報とテーマの切り替え
サイドバーには、最上部にテーマ切り替えボタンを配置し、その下に3つのラベル付き入力フィールド(ユーザー名、チャットID、ボットトークン)を設置します。これらの入力欄により、Telegramの認証情報を手動で入力できます。現時点では手動入力ですが、このパネルは将来的にコンタクト管理システムへと発展させる基盤となり、ユーザーがチャットIDを毎回入力するのではなく、保存済みのIDから選択できるようにすることを目指しています。
bool CCommunicationDialog::CreateSidebar() { int x=UI_INDENT, y=UI_INDENT, w=UI_SIDEBAR_WIDTH-2*UI_INDENT, h=16; m_toggleSidebar.Create(m_chart_id,m_name+"_Toggle",m_subwin,x,y,x+h,y+h); m_toggleSidebar.Text("🌙"); Add(m_toggleSidebar); y+=h+UI_GAP; m_usernameLabel.Create(...); m_usernameLabel.Text("Username:"); m_usernameInput.Create(...); Add(m_usernameLabel); Add(m_usernameInput); y+=h+UI_GAP; m_chatIdLabel.Create(...); m_chatIdLabel.Text("Chat ID:"); m_chatIdInput.Create(...); Add(m_chatIdLabel); Add(m_chatIdInput); y+=h+UI_GAP; m_tokenLabel.Create(...); m_tokenLabel.Text("Bot Token:"); m_tokenInput.Create(...); Add(m_tokenLabel); Add(m_tokenInput); return(true); }
3. CreateMainContent:メッセージ履歴表示
このセクションでは、中央パネルとその読み取り専用の編集コントロールを初期化します。ここには会話スレッドが表示されます。上部には現在のユーザー名を示すラベルが配置されます。ユーザーは過去のメッセージを直接編集することはできず、新しいメッセージはプログラム的に追記されます。そのため、チャット履歴が1行ごとに整理されたクリーンなビューが提供されます。
bool CCommunicationDialog::CreateMainContent() { int x1=UI_SIDEBAR_WIDTH, y1=0; int x2=ClientAreaWidth(), y2=ClientAreaHeight()-UI_COMPOSE_HEIGHT; m_mainPanel.Create(...); m_messageThread.Create(...); m_messageThread.ReadOnly(true); m_messageThread.FontSize(9); m_messageThread.TextAlign(ALIGN_LEFT); m_mainUserLabel.Create(...); m_mainUserLabel.Text(m_usernameInput.Text()); return(true); }
4. CreateComposeArea:入力とアクションボタン
ここでは、ユーザーが新しいメッセージを入力するための下部作成エリアを構築します。プレースホルダー付きのテキスト入力フィールドと、スクリーンショット、ファイル添付、送信の3つのアクションボタンが含まれます。入力フィールドにはヒントテキストと控えめな色が初期設定されており、ユーザーがアクションボタンを実行する前にメッセージを入力するよう促します。
bool CCommunicationDialog::CreateComposeArea() { int caW=ClientAreaWidth(), caH=ClientAreaHeight(); int y1=caH-UI_COMPOSE_HEIGHT, y2=caH; int x1=UI_SIDEBAR_WIDTH, x2=caW; m_composePanel.Create(...); m_screenshotButton.Create(...); m_screenshotButton.Text(StringFormat("%c",58)); m_attachButton. Create(...); m_attachButton. Text(StringFormat("%c",49)); m_sendButton. Create(...); m_sendButton. Text(StringFormat("%c",216)); m_messageInput.Create(...); m_messageInput.Text("Type here..."); m_messageInput.Color(clrGray); return(true); }
5. OnCaptureScreenshot:GIFスナップショット
スクリーンショットボタンがクリックされると、このメソッドは現在のチャートをタイムスタンプ付きのGIFファイルとしてキャプチャし、MQL5のFilesフォルダに保存します。その後、成功または失敗を示すシステム風メッセージをログに出力します。これにより、トレーダーはチャートのスナップショットを迅速に取得し、Telegramを通じて直接共有できるようになります。
void CCommunicationDialog::OnCaptureScreenshot() { datetime ts=TimeCurrent(); string tstr=TimeToString(ts, TIME_DATE|TIME_MINUTES|TIME_SECONDS); StringReplace(tstr,":",""); string path=TerminalInfoString(TERMINAL_DATA_PATH)+"\\MQL5\\Files\\"; string fn=path+"shot_"+tstr+".gif"; bool ok=ChartScreenShot(m_chart_id,fn,0,0); m_messageThread.Text( FormatMessage(ok ? "Screenshot saved: "+fn : "Screenshot failed", MSG_SYSTEM, ok ? STATUS_SENT : STATUS_FAILED, ts)); ChartRedraw(); }
6. OnSendMessage:送信と履歴
このハンドラは、メッセージ入力が空でないこと、および認証情報が提供されていることを検証します。その後、Telegram送信関数を呼び出し、結果を履歴ファイルに記録し、新しいメッセージをチェックマークまたはバツ印のアイコン付きでスレッド表示に追加します。最後に、入力フィールドをプレースホルダー状態にリセットし、再描画をトリガーします。
void CCommunicationDialog::OnSendMessage() { string txt=m_messageInput.Text(); if(txt==""||txt=="Type here...") { /* show error */ return; } string chatId=m_chatIdInput.Text(), token=m_tokenInput.Text(); if(chatId==""||token=="") { /* show error */ return; } datetime ts=TimeCurrent(); bool sent = SendMessageToTelegram(txt, chatId, token); SaveMessageToHistory(chatId, ts, MSG_OUTGOING, sent ? STATUS_SENT : STATUS_FAILED, txt); m_messageThread.Text(FormatMessage(txt, MSG_OUTGOING, sent ? STATUS_SENT : STATUS_FAILED, ts)); m_messageInput.Text("Type here..."); m_messageInput.Color(clrGray); ChartRedraw(); }
7. テーマと書式設定ヘルパー
補助メソッドは、動的なテーマ変更やメッセージの整形を処理します。ApplyThemeはダークモード/ライトモードに応じて背景色とテキスト色を切り替えます。FormatMessageはユーザーまたはシステムのプレフィックスと送信/失敗アイコンを付与し、タイムスタンプ付きの行を生成します。履歴の入出力メソッドは、チャットごとのデータファイルに会話を保存および読み込みし、セッションをまたいだ永続性を確保します。
void CCommunicationDialog::ApplyTheme() { color bg = m_isDarkMode ? (color)0x2E2E35 : clrWhite; color txt= m_isDarkMode ? clrWhite : clrBlack; m_mainPanel.ColorBackground(bg); m_composePanel.ColorBackground(bg); m_messageThread.Color(txt); m_messageInput.Color(txt); … } string CCommunicationDialog::FormatMessage(const string message, ENUM_MESSAGE_TYPE type, ENUM_MESSAGE_STATUS status, datetime ts) { string user = (type==MSG_OUTGOING ? m_mainUserLabel.Text() : type==MSG_INCOMING ? "Them" : "System"); string ico = (status==STATUS_SENT ? ShortToString(0x2713) : ShortToString(0x2717)); return StringFormat("[%s] %s: %s %s", TimeToString(ts,TIME_MINUTES), user, message, (type==MSG_SYSTEM ? "" : ico)); }
CommunicationsDialogクラスのEAへの統合
メインEA (New_Admin_Pane.mq5)では、Communications.mqhヘッダがHandleCommunicationsルーチン内で機能します。ユーザーが[Communications]ボタンをクリックすると、コードは既存のCCommunicationDialogインスタンスの表示/非表示を切り替えるか、初回の場合はダイアログを生成し、保存済みのチャットIDとボットトークンで初期化したうえで、CreatePanelを呼び出してUIを構築します。最後にshow()を実行して、チャート上にパネルを描画します。このパターン(初回クリック時のみ生成し、その後は表示/非表示を切り替える方式)により、リソース使用を最小限に抑えつつCommunicationsDialogインターフェースをEA本体からきれいに分離できます。
// handle showing/hiding communications panel void HandleCommunications() { if(g_commPanel) { // toggle visibility if already created if(g_commPanel.IsVisible()) g_commPanel.Hide(); else g_commPanel.Show(); ChartRedraw(); return; } // first‐time creation g_commPanel = new CCommunicationDialog(); // build the UI if(!g_commPanel.CreatePanel(g_chart_id, "CommunicationsPanel", g_subwin, 80, 100, 430, 500)) { delete g_commPanel; g_commPanel = NULL; Print("CommPanel creation failed: ", GetLastError()); return; } // pre‐fill credentials and display g_commPanel.InitCredentials(TwoFactorChatID, TwoFactorBotToken); g_commPanel.Show(); ChartRedraw(); }
テストと結果
まず、EAをMetaTrader 5でコンパイルし、エラーや警告が出ないことを確認しました。起動すると、メインインターフェースが想定どおりに表示され、トグル、Trade、Communications、Analytics、Show All/Hide All の各ボタンが揃っていました。
1. コミュニケーションパネルの起動
[Communications]ボタンをクリックすると、CCommunicationDialogが生成されました。ダイアログは割り当てられたチャート領域に表示され、CreatePanelルーチンとそのサイドバー、メインスレッド、作成エリアが正しく構築されたことを確認できました。
2. 認証情報の入力
認証情報の入力方法を2通りテストしました。EAの入力パラメータ(TwoFactorChatIDおよびTwoFactorBotToken)に値を設定する方法と、サイドバーの[Chat ID]および[Bot Token]フィールドから直接編集する方法です。いずれの場合も、InitCredentialsがフィールドを正しく反映し、[You]ラベルが更新されました。
3. メッセージ送信
有効な認証情報を入力した状態で、作成ボックスにサンプルメッセージを入力し、Enterキーまたは[Send]ボタンを押しました。メッセージは✓アイコン付きでスレッドに表示され、Telegramチャットにも同じメッセージが届きました。これにより、WebRequestロジックとJSONエスケープ処理が意図どおりに機能していることが実証されました。
4. テーマ切り替え
月/太陽ボタンをクリックすると、ライトモードとダークモードが即座に切り替わりました。パネルの背景色と文字色が更新され、スレッドに「Dark mode enabled」または「Light mode enabled」というシステムメッセージが追記されました。
5. スクリーンショットと添付ボタン
スクリーンショットボタンを押すと、GIFファイルがMQL5\Filesに保存され、確認メッセージが出力されること、また失敗時には報告されることを確認しました。添付ボタンは現時点でプレースホルダのシステムメッセージ(「Attachment TBD」)をログに記録する仕様であり、ファイルアップロード機能は未実装であることを示しています。
コミュニケーションパネル更新のテスト
結論
MetaTrader 5のエキスパートアドバイザー(EA)内に、最新機能を備えたメッセージングパネルを統合することは十分に可能です。ただし、現行の標準ライブラリコントロールには制約があり、特に組み込みのCEditは単一行入力と文字数制限にしか対応していない点が課題です。今回の第一段階では、認証情報入力、メッセージ作成、テーマ切り替え、Telegram連携といった基盤となるレイアウトを実装できました。また調査の結果、こうした制限を克服するコミュニティ開発の拡張コンポーネントも確認済みであり、次回のアップデートで参考資料を共有する予定です。
次回の記事に向けた主な目標は以下のとおりです。
1. 複数行のチャット履歴
- 受信メッセージは左揃え、送信メッセージは右揃え
- 自動改行と、内容がビュー領域を超えた際のスクロールバー対応
2. 連絡先管理システム
- ユーザー名やチャットIDで永続的に保存、呼び出し可能な簡易アドレス帳
3. 信頼性の高いスクリーンショットと添付ファイルのサポート
- ファイル生成とアップロードを保証するワークフロー
- リアルタイムのチャート共有を可能にし、チームコラボレーションや取引レビューを強化
4. キーボードショートカットの拡張
- よく使うメッセージやコマンドを素早く送信できるショートカット
これらはロードマップの一部にすぎません。ご意見やご提案は常に歓迎しています。これは学習、協力、改善を続ける過程であり、近い将来にはMetaTrader 5内で完成度の高い外部APIメッセージング体験を実現できるでしょう。この記事が、皆さんのプログラミング思考に新たな発想を少しでも加えられたなら幸いです。
良い取引を、そして次回の記事をお楽しみに。
ファイル | 説明 |
---|---|
New_Admin_Panel.mq5 | MetaTrader 5での高度な取引管理のためのマルチパネル総合EAシステム。 |
CommunicationsDialog.mqh | コミュニケーションパネルモジュール MetaTrader 5 EA用の最新のメッセージインターフェースパネル(Telegramベース)を定義。ターミナルのincludeフォルダに配置してください。 |
All Modules.zip | 必要なすべてのヘッダが含まれています。MQL5/Includeフォルダに追加してください。 |
MetaQuotes Ltdにより英語から翻訳されました。
元の記事: https://www.mql5.com/en/articles/17869
警告: これらの資料についてのすべての権利はMetaQuotes Ltd.が保有しています。これらの資料の全部または一部の複製や再プリントは禁じられています。
この記事はサイトのユーザーによって執筆されたものであり、著者の個人的な見解を反映しています。MetaQuotes Ltdは、提示された情報の正確性や、記載されているソリューション、戦略、または推奨事項の使用によって生じたいかなる結果についても責任を負いません。





- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索