English Deutsch
preview
MQL5で取引管理者パネルを作成する(第10回):外部リソースベースのインターフェイス

MQL5で取引管理者パネルを作成する(第10回):外部リソースベースのインターフェイス

MetaTrader 5 |
84 0
Clemence Benjamin
Clemence Benjamin

内容


はじめに

最初の一歩を踏み出すのはいつでも難しいものです。しかし、ひとたび草案ができれば、その上に積み重ねて新たな可能性を発見するのがぐっと楽になります。多くの成功したデザイナーや開発者たちは、シンプルなスケッチから始めて、徐々に目を引く作品へと進化させていきます。たとえ「これが完成形だ」と思える瞬間が訪れたとしても、改善の余地は常にあります。進化とは絶え間ないプロセスであり、新しいバージョンには常に前作と違う独自性が求められます。

この開発に関する連載では、複数のインターフェイスを備えたモノリシックな管理パネルプログラムからスタートしました。しかし、コードが長大で保守しづらくなってきたため、MQL5の標準ライブラリ、クラスの継承、カスタムヘッダーファイルなどを活用して、コードの構造を整理しました。このアプローチによって、プログラムの個々の側面に集中しながら他の部分に影響を与えることなく開発を進めることが可能となり、エラーの可能性も大幅に減少しました。拡張の制限は開発者の想像力のみに委ねられています。そして本日から、新たなサイクルとしてホームパネルから再構築を始めます。 

私の考えでは、記号は視覚的コミュニケーションの中でも特に効果的な手段のひとつです。限られたスペースで、即座に詳細な情報を伝えることができます。人類の歴史においても、記号は非常に重要な役割を担ってきました。文字が発明される以前から、人々はピクトグラムや象形文字を用いて感情や考え、指示を伝えていました。古代エジプトのヒエログリフから現代の絵文字に至るまで、記号は言語の壁を越えて意味を伝える視覚的なショートカットとして使われ続けています。

この伝統はデジタルの世界でも生き続けています。例えば、Wingdingsフォントは、文章の中に埋め込まれた記号によって、言葉を使わずに意味を伝えることができます。MQL5の開発においても、これらの記号は非常に便利で、ドキュメントも豊富にあり、実装も容易です。こうした記号を使えば、チャート上の視覚オブジェクトの数を減らしながら、必要な情報を明確かつ洗練された形で伝えることができます。たとえば、「買い」シグナルはテキストラベルの代わりに上向き矢印ひとつで表現でき、画面スペースや処理負荷の節約にもつながります。

このセクションで私が重視しているのは、インターフェイス領域の設計と管理です。記号を取り入れることで、見た目の煩雑さを減らし、操作性を高めることができます。Wingdingsはそのためのひとつのツールですが、加えてカスタムビットマップ画像の活用も強調したいポイントです。これらは大型ボタンの代替として機能しつつ、洗練された見た目と効率のよさを兼ね備え、インターフェイス全体をクリーンかつ魅力的に保つことができます。

New_Admin_Panelのホームインターフェイスは、機能面ではすでに十分に満足のいくものとなっていますが、視覚的な魅力という点では、まだ改善の余地があります。基礎構造が整った今こそ、インターフェイスデザインを洗練し、さらに進化させる時です。次のセクションでは、本日の開発目標と、この進化をどのように進めていくかを概観していきます。


議論の概要

本日の目標は、メインインターフェイスの再設計と整理に焦点を当て、よりコンパクトで視覚的に効率の良いパネルを作成することです。まずは新しいホームインターフェイスとその構成要素についてコンセプチュアルデザインをまとめ、その後MQL5を使って実装を進めていきます。新しいリソースを組み込み、改良された管理パネルのバージョンをコンパイルする予定です。設計の方向性をイメージしやすくするために、参考画像も以下に掲載しています。

先ほど触れたように、Wingdingsは視覚的な記号を用いたコミュニケーションの好例であり、素早くシンプルに意味を伝える手段として優れています。ミニマルなアイコンの参考として理想的ではありますが、今回の実装でそれらを直接使用する予定はありません。その代わりに、新しいインターフェイスの美的・機能的な目標により適した、カスタムデザインのビットマップ画像を採用することを検討しています。こうした画像は、オープンソースの画像編集ソフト「GIMP」などを使って作成するのが適しています。

カスタム画像が用意できたら、それらの機能をコードで実装し、既存のプログラムの機能と統合していきます。これらのビジュアルアセットを活用することで、大きく場所を取るボタンを軽量なアイコンに置き換えることができ、視覚的な煩雑さを減らしつつ、機能性はそのまま維持できます。

今回の開発サイクルの一環として、テストを効率よく進めるため、ユーザー認証機能は一時的に無効化します。現時点ではパネルに厳密なセキュリティは求められていませんが、機密性の高い操作に使用する場合は、将来的に不正アクセス防止の対策が重要になります。以前の実装では、暗号化キーにハードコードされた値を使用していましたが、必要に応じてより安全なアクセス管理への取り組みが推奨されます。

このセッションでは、MQL5におけるカスタムビジュアルリソースの扱い方を、構想段階から実装まで段階的に解説します。最終的には、機能性に優れ、洗練され、スケーラブルでモダンなインターフェイスを構築することを目指します。

ホームインターフェイスのスケッチ

新しい最小化されたホームインターフェイスのスケッチ(56x400ピクセル)


コンセプチュアルデザイン

このコンセプトをもとに、既存のリソースの中に満足のいく記号が見つからなかったため、オープンソースのツールを活用して、自分でカスタムデザインを作成することにしました。デザインのレイアウトにはInkscapeを使用しました。Inkscapeは最も強力かつ効率的なベクターグラフィックエディタのひとつであり、柔軟なカスタマイズが可能です。ただし、特定のファイル形式のエクスポートには制限があるという欠点もあります。

その制限を補うために、GIMPを使って画像をさらに調整し、MQL5に統合可能なビットマップ形式でエクスポートしました。 以下に、インターフェイスのコンセプトレイアウトを掲載しています。デザインを確認した後、それぞれのボタンの機能について詳しく解説し、その後でコードによる実装フェーズに進みます。

ホームパネルのコンセプチュアルデザイン

管理者ホームインターフェイスの概念的なレイアウト

ホームボタンとその機能の説明

展開・折りたたみボタン

このボタンには2つの状態があります。展開状態では、すべてのインターフェイスボタンが表示されます。折りたたみ状態では、すべてのボタンが非表示になり、インターフェイスをすっきりさせます。

展開

折りたたみ折りたたみ

取引管理パネルボタン

売買の概念を視覚的に表現するために、2つの矢印アイコンを使用しました。これにより、ユーザーはボタンの目的を直感的に理解しやすくなります。

取引管理パネルボタン

(押下時)取引管理パネルボタン(押下時)取引管理パネルボタン

コミュニケーションパネルボタン

このボタンには、「コミュニケーション」の概念を表すために封筒の記号をデザインしました。なじみのあるアイコンであるため、ユーザーは目的をすぐに把握し、機能を直感的に理解することができます。

コミュニケーションパネルボタン

(押下時)コミュニケーションパネルボタン (押下時)コミュニケーションパネルボタン

分析パネルボタン

このボタンにはグラフの記号を採用しており、「分析」という概念を効果的に伝えます。チャートは市場分析に欠かせないツールであるため、このアイコンはユーザーに対して即座にその目的を示すことができます。

分析パネルボタン

(押下時)分析パネルボタン (押下時)分析パネルボタン

すべてのパネルを表示および非表示にするボタン

このボタンは、すべてのパネルを即座に展開または折りたたむための便利なショートカットとして機能します。デザインには外向きに広がる矢印を使用しており、「広がり」や「全体表示」といったイメージを視覚的に伝えることで、ユーザーにその機能を直感的に理解させます。

すべて表示/非表示ボタン

(押下時)すべて表示/非表示ボタン (押下時)すべて表示/非表示ボタン

ヒント

MetaTrader 5で画像を正しく表示させるためには、GIMPを使って24ビット設定でBMP形式にエクスポートする必要がありました。それ以外の形式では、端末上で正しく表示されませんでした。なお、上記に掲載している画像は説明用としてPNG形式を使用しています。実際に使用するBMPファイルは、この記事の最後に添付しているフォルダに含まれています。



コードの実装

それでは、上で説明したコンセプトを実現するために、いよいよMQL5のコード作業に入ります。これは、従来の構造からより洗練された創造的なデザインへとインターフェイスを進化させる大きな転換点となります。引き続き、管理パネルの機能強化と進化を図っていきます。最終的には、以下の画像で示されているような新しいホームインターフェイスを完成させる予定です。

新しいホームインターフェイス

古いホームインターフェイスから新しい外部リソースベースのインターフェイスへの移行

前述のとおり、テスト中に認証プロンプトによる中断を避けるため、認証機能は一時的に無効化しています。重要なのは、認証ロジックを完全に削除しているわけではなく、関連するコードをコメントアウトしているだけという点です。コメントはコードとして実行されず、開発者が処理内容を言語で説明するためのメモとして機能します。

このステップでは、準備しておいたカスタム画像をリソースとして使用し、メインインターフェイス上にフローティングボタンとして表示する方法も紹介します。これは、これまで使用していたDialogクラスに依存したホームパネルの設計から、よりシンプルでミニマルな新しい設計への転換を意味します。

それでは、メインプログラムの構造を詳しく見ていきましょう。

1. 概要

このセクションでは、従来のシンプルな管理パネルを、BMP画像ボタンを使用したモダンなフローティングインターフェイスへと変換することを目的としています。画像として表示されるボタンは、例えば「展開」と「折りたたみ」のように状態を切り替えることができ、視覚的に魅力的でインタラクティブな設計を実現します。これらのボタンは、ローソク足など他のチャート要素の上にフロート表示され、ユーザーとのスムーズな操作性を保ちます。

また、認証機能(コミュニケーション、Telegram、ダイアログ制御、取引管理、分析などを含む)に関する外部モジュールは読み込んでいますが、認証処理そのものは現在コメントアウトにより無効化されています。この決定は一時的なものであり、認証機能はまだ開発途中です。これにより、パスワードの入力を求められるプロンプトに煩わされることなく、フローティングボタンインターフェイスの開発とテストに集中することが可能になります。後から認証コードを最小限の調整で再有効化できるようにしており、完全なセキュリティを備えたシステムへのスムーズな移行が可能です。

//+------------------------------------------------------------------+
//|                                               New_Admin_Panel.mq5|
//|                                Copyright 2024, Clemence Benjamin |
//|             https://www.mql5.com/ja/users/billionaire2024/seller |
//+------------------------------------------------------------------+
#property copyright "Copyright 2024, Clemence Benjamin"
#property link      "https://www.mql5.com/ja/users/billionaire2024/seller"
#property version   "1.00"

// Authentication inputs (unused; authentication disabled).
input string AuthPassword = "2024";
input string TwoFactorChatID = "YOUR_CHAT_ID";
input string TwoFactorBotToken = "YOUR_BOT_TOKEN";

#include <Authentication.mqh>
#include <CommunicationsDialog.mqh>
#include <Telegram.mqh>
#include <Controls\Dialog.mqh>
#include <TradeManagementPanel.mqh>
#include <AnalyticsPanel.mqh>

2. MQL5のファイルリソース

MQL5では、画像や音声などの外部ファイルを#resourceディレクティブを使ってプログラムに直接埋め込むことができます。このプロジェクトでは、カスタムボタンを作成するためにBMP画像ファイルをリソースとして使用しています。resource文によって画像ファイルを埋め込むことで、それらの画像は実行ファイルにパッケージされ、プログラム実行時に常に利用可能な状態になります。この手法は、信頼性が高くポータブルなインターフェイスを構築する上で非常に重要です。なぜなら、外部ファイルシステムの状態に左右されることなく、必要なビジュアルアセットへの一貫したアクセスを保証できるからです。

#resource "\\Images\\expand.bmp"
#resource "\\Images\\collapse.bmp"
#resource "\\Images\\TradeManagementPanelButton.bmp"
#resource "\\Images\\TradeManagementPanelButtonPressed.bmp"
#resource "\\Images\\CommunicationPanelButton.bmp"
#resource "\\Images\\CommunicationPanelButtonPressed.bmp"
#resource "\\Images\\AnalyticsPanelButton.bmp"
#resource "\\Images\\AnalyticsPanelButtonPressed.bmp"
#resource "\\Images\\ShowAllHideAllButton.bmp"
#resource "\\Images\\ShowAllHideAllButtonPressed.bmp"

3. インターフェイスの作成とボタンのデザイン

インターフェイスは、BMP画像を表示する「ビットマップラベル」オブジェクトを使って構築されています。インターフェイス内の各ボタンはこれらの画像オブジェクトで表現されており、チャート上での位置はあらかじめ決められた座標によって指定されています。これらのオブジェクトには高いZオーダー値が割り当てられており、チャートの他の要素の上に描画されるため、ユーザーのクリックに対して高い応答性を持ちます。この設定により、フローティングボタンは見た目の美しさだけでなく、機能面でも堅牢で使いやすいものとなっています。

// Button names
string toggleButtonName    = "ToggleButton";
string tradeButtonName     = "TradeButton";
string commButtonName      = "CommButton";
string analyticsButtonName = "AnalyticsButton";
string showAllButtonName   = "ShowAllButton";

// Button original positions
const int BUTTON_TOGGLE_X    = 10;
const int BUTTON_TOGGLE_Y    = 30;
const int BUTTON_TRADE_X     = 10;
const int BUTTON_TRADE_Y     = 100;
const int BUTTON_COMM_X      = 10;
const int BUTTON_COMM_Y      = 170;
const int BUTTON_ANALYTICS_X = 10;
const int BUTTON_ANALYTICS_Y = 240;
const int BUTTON_SHOWALL_X   = 10;
const int BUTTON_SHOWALL_Y   = 310;

4. ボタンの表示・非表示管理

ヘルパー関数を使って、ボタンを特定の画面外の座標に移動させることで、折りたたみ(非表示)効果をシミュレートしています。インターフェイスが展開されると、別のヘルパー関数群がボタンを元の画面上の位置に戻します。この手法は、ユーザーインターフェイス要素の表示・非表示管理において、効率的かつ応答性の高い方法となっています。

// Off-screen coordinate for hiding buttons
const int HIDDEN_X = -50;

// Hide a button by moving it off-screen.
void HideButton(string buttonName)
{
   ObjectSetInteger(0, buttonName, OBJPROP_XDISTANCE, HIDDEN_X);
}

// Restore a button to its original position.
void ShowButton(string buttonName, int X, int Y)
{
   ObjectSetInteger(0, buttonName, OBJPROP_XDISTANCE, X);
   ObjectSetInteger(0, buttonName, OBJPROP_YDISTANCE, Y);
}

5. サブパネル操作の処理

インターフェイス上の各ボタンは、取引管理、コミュニケーション、分析などのサブパネルに紐づいています。ボタンがクリックされると、対応するサブパネルがまだ存在しなければ新たに作成され、既に存在している場合は表示・非表示が切り替わります。このオンデマンドでの作成により、リソースの無駄遣いを抑え、インターフェイスの煩雑さを軽減しています。各サブパネルは独立して管理されているため、ユーザーは一度に1つのセクションに集中しつつ、必要に応じて他のセクションにもアクセスできます。

// Handle the Communications Panel button.
void HandleCommunications()
{
   if(g_commPanel != NULL && g_commPanel.IsVisible())
   {
      g_commPanel.Hide();
      ChartRedraw();
      return;
   }
   if(g_commPanel == NULL)
   {
      g_commPanel = new CCommunicationDialog(TwoFactorChatID, TwoFactorBotToken);
      if(!g_commPanel.Create(g_chart_id, "CommPanel", g_subwin, 80, 100, 380, 300))
      {
         delete g_commPanel;
         g_commPanel = NULL;
         return;
      }
      ObjectSetInteger(0, "CommPanel", OBJPROP_ZORDER, 10);
   }
   g_commPanel.Toggle();
   ChartRedraw();
}

// Handle the Trade Management Panel button.
void HandleTradeManagement()
{
   if(g_tradePanel != NULL && g_tradePanel.IsVisible())
   {
      g_tradePanel.Hide();
      ChartRedraw();
      return;
   }
   if(g_tradePanel == NULL)
   {
      g_tradePanel = new CTradeManagementPanel();
      if(!g_tradePanel.Create(g_chart_id, "TradeManagementPanel", g_subwin, 390, 20, 900, 530))
      {
         delete g_tradePanel;
         g_tradePanel = NULL;
         return;
      }
      ObjectSetInteger(0, "TradeManagementPanel", OBJPROP_ZORDER, 10);
   }
   g_tradePanel.Toggle();
   ChartRedraw();
}

// Handle the Analytics Panel button.
void HandleAnalytics()
{
   if(g_analyticsPanel != NULL && g_analyticsPanel.IsVisible())
   {
      g_analyticsPanel.Hide();
      ChartRedraw();
      return;
   }
   if(g_analyticsPanel == NULL)
   {
      g_analyticsPanel = new CAnalyticsPanel();
      if(!g_analyticsPanel.CreatePanel(g_chart_id, "AnalyticsPanel", g_subwin, 980, 20, 1480, 480))
      {
         delete g_analyticsPanel;
         g_analyticsPanel = NULL;
         return;
      }
      ObjectSetInteger(0, "AnalyticsPanel", OBJPROP_ZORDER, 10);
   }
   g_analyticsPanel.Toggle();
   ChartRedraw();
}

6. 折りたたみ・展開ロジックのカプセル化

ユーザーインターフェイスの管理を効率化するために、折りたたみおよび展開のロジックはひとつの関数にカプセル化されています。この関数は、メインのトグルボタンの現在の状態を読み取り、その状態を反転させたうえで、他のボタンの位置を非表示にするか元に戻すかを制御します。このようにロジックを関数にまとめることで、イベント処理コードの重複を避け、設計全体がよりシンプルで保守しやすくなります。

// Toggle collapse/expand of interface buttons.
void ToggleInterface()
{
   // Toggle the state of the toggle button.
   bool currentState = ObjectGetInteger(0, toggleButtonName, OBJPROP_STATE);
   bool newState = !currentState;
   ObjectSetInteger(0, toggleButtonName, OBJPROP_STATE, newState);
   
   if(newState)
      UpdateButtonVisibility(false);  // Collapse: hide buttons and minimize sub-panels.
   else
      UpdateButtonVisibility(true);   // Expand: restore button positions.
   
   ChartRedraw();
}

7. プログラムの初期化

インターフェイスが期待通りに動作することを保証するために、徹底的なテストが不可欠です。初期化関数でボタンを準備し、開始時からボタンが表示されることを保証します。テスト時には、ボタンが常に反応すること、サブパネルが正しく切り替わること、そしてボタンが高いZオーダー値のおかげで常にチャート要素の上に表示されていることを確認するべきです。また、認証機能は現在無効化されていますが、関連コードはコメントとして含まれているため、必要に応じてアクセス制限を容易に再有効化できます。今後の改良として、サウンドやアニメーションの統合を検討し、ユーザー体験のさらなる向上を目指すことも可能です。

// Expert initialization function
int OnInit()
{
   g_chart_id = ChartID();
   g_subwin   = 0;

   // For potential future use, authentication can be re-enabled by uncommenting these:
   // if(!g_authManager.Initialize())
   //    return INIT_FAILED;

   // Create main toggle and sub-panel buttons using their original positions.
   CreateObjectBITMAP_LABEL(toggleButtonName, BUTTON_TOGGLE_X, BUTTON_TOGGLE_Y, "::Images\\expand.bmp", "::Images\\collapse.bmp");
   CreateObjectBITMAP_LABEL(tradeButtonName, BUTTON_TRADE_X, BUTTON_TRADE_Y, "::Images\\TradeManagementPanelButtonPressed.bmp", "::Images\\TradeManagementPanelButton.bmp");
   CreateObjectBITMAP_LABEL(commButtonName, BUTTON_COMM_X, BUTTON_COMM_Y, "::Images\\CommunicationPanelButtonPressed.bmp", "::Images\\CommunicationPanelButton.bmp");
   CreateObjectBITMAP_LABEL(analyticsButtonName, BUTTON_ANALYTICS_X, BUTTON_ANALYTICS_Y, "::Images\\AnalyticsPanelButtonPressed.bmp", "::Images\\AnalyticsPanelButton.bmp");
   CreateObjectBITMAP_LABEL(showAllButtonName, BUTTON_SHOWALL_X, BUTTON_SHOWALL_Y, "::Images\\ShowAllHideAllButtonPressed.bmp", "::Images\\ShowAllHideAllButton.bmp");

   // Always show the interface initially.
   UpdateButtonVisibility(true);
   ChartRedraw();
   return INIT_SUCCEEDED;
}

// Expert deinitialization function
void OnDeinit(const int reason)
{
   ObjectDelete(0, toggleButtonName);
   ObjectDelete(0, tradeButtonName);
   ObjectDelete(0, commButtonName);
   ObjectDelete(0, analyticsButtonName);
   ObjectDelete(0, showAllButtonName);

   if(g_commPanel != NULL)
   {
      g_commPanel.Destroy(reason);
      delete g_commPanel;
      g_commPanel = NULL;
   }
   if(g_tradePanel != NULL)
   {
      g_tradePanel.Destroy(reason);
      delete g_tradePanel;
      g_tradePanel = NULL;
   }
   if(g_analyticsPanel != NULL)
   {
      g_analyticsPanel.Destroy(reason);
      delete g_analyticsPanel;
      g_analyticsPanel = NULL;
   }
}


テスト

MetaTrader 5ではいつものように、エキスパートアドバイザー一覧からプログラムをチャートへドラッグ&ドロップするだけで起動できます。スムーズなコンパイルと実行を確実にするために、すべての外部モジュールはそれぞれ正しいフォルダに配置されていること、そして画像などの必要なリソースが正しく整理されていることが重要です。

以下には、再設計したインターフェイスの完成イメージを掲載しています。これらのビジュアルから、今後の方向性を明確に把握するとともに、改善の余地がある箇所も明確になります。

フローティングホームインターフェイス

New_Admin_Homeインターフェイスのテスト

ヒント

プログラムをチャートに追加してから新しいボタンを初めて使用する際、最初のクリックで対応するパネルが初期化されますが、その時点ではパネルはすぐに表示されません。パネルが表示されるのは、2回目のクリックの後になります。


結論

本日は、外部リソースを効果的に活用して、MQL5で強力かつカスタマイズ可能なユーザーインターフェイスを構築する方法を探りました。このプロジェクトでは、基本的なホームインターフェイスから、より動的で視覚的に魅力的なフローティングパネルシステムへと進化させました。コア機能を維持しつつ、使いやすさとアクセシビリティを向上させる新機能を導入しています。

今回の開発から得られる重要なポイントのひとつは、BMP画像のようなグラフィカルリソースに関するMQL5の能力への理解が深まったことです。フローティングボタンのデザインにより、管理パネルの機能へのアクセスを集中化しつつ、チャート上の表示領域(ピクセル)を広く保ち、取引に必要な情報をより多く表示できます。

ただし、完璧な解決策は存在しません。それでも、ひとつひとつの反復、ひとつひとつの前進が、より良く効率的なバージョンへと近づけてくれます。初期のバージョンも依然として重要であり、革新や改善のための基準点として機能しています。

読者の皆さんが問題なく取り組めるように、本日のソースコードをこれまでのモジュールとまとめてひとつのZIPファイルにパッケージすることを検討しました。これにより、特に前段階のセットアップを見逃した方やスキップした方にも必要なファイルがすべて揃い、ファイル不足によるコンパイルエラーを防ぐことができます。ファイルが見つからないとコンパイル時エラーが発生することが多いため、これによりユーザーがスムーズに作業を開始できるようになります。

最後に、MQL5におけるリソースの活用について参考になる記事を提供してくださったMetaQuotesに特別な感謝を表します。それらの知見を実際のプロジェクトに落とし込み実装できたことは、大変有意義で貴重な経験となりました。


ファイル名 仕様
New_Admin_Panel.mq5 新しい外観の新しいメインプログラム
New_Admin_Panel_BMP images.zip 
使用されるすべてのビットマップ画像が含まれるフォルダ。これらの画像が適切に読み込まれ、インターフェイスによって表示されるようにするには、MQL5\Imagesディレクトリに追加してください。
All Modules.zip 第10回で使用されるすべてのヘッダーファイルを含むフォルダ。適切なコンパイルと機能性を保証するために、これらのファイルをMQL5\Includeディレクトリに抽出してください。

MetaQuotes Ltdにより英語から翻訳されました。
元の記事: https://www.mql5.com/en/articles/17780

添付されたファイル |
All_Modules.zip (15.92 KB)
MQL5でのカスタム市場レジーム検出システムの構築(第1回):インジケーター MQL5でのカスタム市場レジーム検出システムの構築(第1回):インジケーター
この記事では、自己相関やボラティリティなどの統計手法を用いたMQL5市場レジーム検出システム(Market Regime Detection System)の作成方法を詳述しています。トレンド相場、レンジ相場、ボラティリティの高い相場を分類するためのクラスや、カスタムインジケーターのコードも提供しています。
古典的な戦略を再構築する(第14回):高確率セットアップ 古典的な戦略を再構築する(第14回):高確率セットアップ
高確率セットアップ(high probability setups)は、私たちの取引コミュニティではよく知られていますが、残念ながら明確には定義されていません。この記事では、「高確率セットアップ」とは具体的に何かを、経験的かつアルゴリズム的な方法で定義し、それを特定して活用することを目指します。勾配ブースティング木を用いることで、任意の取引戦略のパフォーマンスを向上させる方法、そしてコンピュータに対して「何をすべきか」をより明確かつ意味のある形で伝える手段を、読者に示します。
MQL5でのカスタム市場レジーム検出システムの構築(第2回):エキスパートアドバイザー MQL5でのカスタム市場レジーム検出システムの構築(第2回):エキスパートアドバイザー
この記事では、第1回で紹介したレジーム検出器を用いて、適応型のエキスパートアドバイザー(EA)、MarketRegimeEAを構築する方法を詳しく解説しています。このEAは、トレンド相場、レンジ相場、またはボラティリティの高い相場に応じて、取引戦略やリスクパラメータを自動的に切り替えます。実用的な最適化、移行時の処理、多時間枠インジケーターも含まれています。
MQL5経済指標カレンダーを使った取引(第7回):リソースベースのニュースイベント分析による戦略テストの準備 MQL5経済指標カレンダーを使った取引(第7回):リソースベースのニュースイベント分析による戦略テストの準備
この記事では、MQL5の取引システムをストラテジーテスターでの検証に対応するため、経済指標カレンダーのデータをリソースとして埋め込み、ライブ環境ではないテスト分析に活用する方法を解説します。イベントの読み込みと、時間・通貨・影響度に基づくフィルタリングを実装し、最終的にストラテジーテスター内でその動作を検証します。これにより、ニュースに基づいた戦略の効果的なバックテストが可能になります。