English Deutsch
preview
MQL5コミュニティOAuthを利用した外部アプリケーション連携

MQL5コミュニティOAuthを利用した外部アプリケーション連携

MetaTrader 5 |
11 0
Clemence Benjamin
Clemence Benjamin

内容

  1. はじめに
  2. MQL5コミュニティOAuthの理解
  3. 実装
  4. テスト
  5. 結論
  6. 添付ファイル


はじめに

MQL5コミュニティに登録しているユーザーには、多くの利点があります。このプラットフォームは、初心者からエキスパートまでのアルゴリズムトレーダーが集まる場であり、世界中の数百万人のトレーダーが利用しています。最近、登録ユーザーなら誰でも利用できる非常に優れた機能を発見しました。MQL5のAppsセクションでは、外部アプリケーション向けにOAuth (Open Authorization)を設定できます。これらのコンポーネントを統合する際にさまざまな困難を経験したため、その実装を簡潔にまとめたガイドとして本記事を執筆することにしました。技術的な実装だけでなく、見落としているかもしれない機能や、AndroidアプリとMQL5の統合に関する有益な知見も紹介します。

MQL5コミュニティOAUTH

図1:外部アプリ所有者とMQL5ユーザーの関係

MQL5認可を推奨する理由

理想的なターゲットユーザーへのアクセス

MQL5開発者にとって、主なターゲットユーザーはMQL5コミュニティそのものです。MQL5 OAuthを利用することで、トレーダー、開発者、金融アナリストのために設計されたプラットフォームを活用できます。このように対象を絞ったアプローチにより、一般的なSNSに見られる不要なユーザー層を排除できます。

一般的なソーシャルプラットフォームとの違い

GoogleやFacebookの認証が提供するのは一般的なユーザーデータですが、MQL5 OAuthではユーザーのトレーディングスキルに関する専門的な情報を取得できます。取得可能な情報には次のようなものがあります。

  • MQL5ランク(初心者、上級者、プロフェッショナル、エキスパートアドバイザー開発者)
  • コミュニティへの貢献によって獲得したレピュテーションポイント
  • MQL5マーケットで公開している商品
  • トレード経験および専門分野
  • フォーラムでの活動状況やコミュニティ内での信頼度

このような専門的な情報を利用することで、一般的なプラットフォームでは実現できない高度にパーソナライズされた体験を提供できます。

ユーザーの信頼性を即座に評価できる

ユーザーがMQL5アカウントで認証すると、そのユーザーがコミュニティ内でどの程度の信頼性を持っているかを即座に把握できます。高いレピュテーションポイントを持ち、複数の商品を公開しているユーザーは、真剣にコミュニティへ参加しているメンバーであることを示しています。これは、信頼性や専門性が重要となるアプリケーションにとって価値のある情報です。

適切な顧客基盤の構築

MQL5 OAuthを実装することで、トレーディングや金融テクノロジーに関心を持つユーザーを自然に集めることができます。その結果、次のようなメリットが期待できます。

  • より質の高いユーザー同士の交流
  • アプリケーションに対するより有益なフィードバック
  • 収益化の可能性の向上
  • ユーザーがすでに技術的な概念に慣れているため、サポートコストの削減

このような専門的な情報を利用することで、一般的なプラットフォームでは実現できない高度にパーソナライズされた体験を提供できます。

ユーザーの信頼性を即座に評価できる

ユーザーがMQL5アカウントで認証すると、そのユーザーがコミュニティ内でどの程度の信頼性を持っているかを即座に把握できます。高いレピュテーションポイントを持ち、複数の商品を公開しているユーザーは、真剣にコミュニティへ参加しているメンバーであることを示しています。これは、信頼性や専門性が重要となるアプリケーションにとって価値のある情報です。

適切な顧客基盤の構築

MQL5 OAuthを実装することで、トレーディングや金融テクノロジーに関心を持つユーザーを自然に集めることができます。その結果、次のようなメリットが期待できます。
  • より質の高いユーザー同士の交流
  • アプリケーションに対するより有益なフィードバック
  • 収益化の可能性の向上
  • ユーザーがすでに技術的な概念に慣れているため、サポートコストの削減

制約と限界

強力な仕組みである一方、MQL5 OAuthにはいくつかの制約があります。

  • ニッチなユーザー層:認証できるのはMQL5アカウントを持つユーザーのみです。
  • 利用可能なスコープの制限:主要なプラットフォームと比較すると、利用できるデータスコープは限定されています。
  • コミュニティ中心:トレードおよびフィンテック分野向けのアプリケーションに最適です。
  • モバイル実装上の考慮事項:Android/iOSアプリでは慎重な実装が必要です。
  • ドキュメントの不足:一部の実装詳細については、試行錯誤が必要になる場合があります。


MQL5コミュニティOAuthの理解

動作の仕組み:技術的な流れ

MQL5はOAuth 2.0認可フレームワークを実装しており、主に次のエンドポイントを使用します。
  1. 認可エンドポイント:https://www.mql5.com/ja/oauth/login
  2. トークンエンドポイント:https://www.mql5.com/api/oauth/access_token
  3. ユーザーエンドポイント:https://www.mql5.com/api/oauth/user_info

標準的なOAuth 2.0認可コードフローに従います。

  1. ユーザーがアプリケーション内の[Sign in with MQL5]をクリックします。
  2. MQL5認可ページにリダイレクトします。
  3. ユーザーが認証をおこない、アクセス許可を承認します。
  4. 認可コードとともにアプリケーションへリダイレクトされます。
  5. 認可コードをアクセストークンと交換します。
  6. アクセストークンを使用してユーザープロファイルデータを取得します。

開発者向けの主要コンポーネント

  • クライアントID:アプリケーションの一意の識別子
  • クライアントシークレット:トークン交換用の機密キー(保護必須)
  • リダイレクトURI:認可完了後にユーザーが戻る先のURI
  • スコープ:アプリケーションがアクセスできるユーザーデータの範囲を定義する

セキュリティに関する考慮事項

  • すべてのエンドポイントで常にHTTPSを使用すること
  • クライアントシークレットは安全に保管すること(クライアントサイドのコードには絶対に含めないこと)
  • stateパラメータを使用してCSRF対策を実装すること
  • すべてのリダイレクトURIを検証すること
  • 適切なトークン保存および更新メカニズムを実装すること


実装

ステップ1:アプリケーションを登録する

1. MQL5アカウントの[プロファイル] →[アプリ]へ移動します

MQL5プロファイルでアプリを選択

図2:MQL5.communityプロファイルでアプリにアクセスする


2. [アプリを追加]をクリックします
3. 以下の情報を入力します

  • 名前:アプリの説明的な名前
  • メインページURL:アプリケーションのウェブサイト
  • リダイレクトURI:OAuthコールバックエンドポイント

4. 保存すると、クライアントIDとクライアントシークレットが届きます。

コードの説明に入る前に、Androidプロジェクトのどの部分がMQL5コミュニティOAuthの統合に重要なのかを理解しておくことが重要です。

読者の中には添付プロジェクトをAndroid Studioで直接開く方もいるでしょう。一方で、KotlinやAndroidに慣れている方は、新しいEmpty Activityプロジェクトを作成し、実装を比較しながら組み込む方が効率的かもしれません。どちらの方法でも問題ありません。

本記事の目的はAndroid開発そのものを解説することではなく、AndroidアプリケーションがどのようにMQL5コミュニティの認証フローに参加し、OAuthログインを開始できるかを明確に示すことです。

Android開発に不慣れな方も心配する必要はありません。Android Studioには優れたドキュメントが用意されており、オンラインにも豊富な無料リソースがあります。本当に重要なのは認証パターンを理解することです。つまり、MQL5 OAuthがどのように動作し、一般的なソーシャルログインと何が異なるのかを理解することです。ここで学ぶ概念はあらゆるOAuth統合に応用できますが、MQL5ではトレーダー向けの専門的な情報へアクセスできるという独自の利点があります。

以下のコード実装の説明を理解しやすくするために、まずプロジェクトの中核となるファイルを紹介します。プロジェクトを起動する際や、以降の説明を読み進める際には、これらのファイルに注目してください。

ソースファイル プロジェクト内の位置 説明
MainActivity.kt app/src/main/java/ アプリのメインエントリポイント。アプリを起動し、テーマを適用します。
OAuthConfig.kt app/src/main/java/util/ MQL5コミュニティへのログインに必要なMQL5 OAuthエンドポイント、リダイレクトURL、およびクライアントIDを保持します。
LoginActivity.kt app/src/main/java/ui/login/ ログイン処理を処理します。MQL5のログインページを開き、リダイレクトを処理し、認可コードを取得します。
activity_login.xml app/src/main/res/layout/ OAuthフローを開始するための[Sign in with MQL5]ボタンを備えたログイン画面のレイアウトを定義します。
AndroidManifest.xml app/src/main/ 重要な設定ファイル。インターネットのアクセス許可とOAuthリダイレクトスキーム(mql5profile://oauth)を宣言します。
Theme.kt app/src/main/java/ /ui/theme/ アプリ全体のテーマ設定を定義し、一貫したビジュアルスタイルを実現します。
styles.xml app/src/main/res/values/ 画面間で一貫した表示を保証するためのテーマとスタイルの定義が含まれています。
これらのファイルを組み合わせることで、AndroidアプリがMQL5コミュニティOAuthシステムを使用してユーザー認証をおこなうための完全なパイプラインが構成されます。

1. OAuth設定の一元管理(OAuthConfig.kt)

この設定ファイルは、アプリがMQL5のOAuthシステムとどのように通信するかを定義するルールブックのようなものです。必要なエンドポイントや識別子を、一箇所で整理して管理します。

この構成が重要なのは、GoogleやGitHubなどの主要なOAuthプロバイダーも同様のパターンを採用しているためです。このように設定を整理することで、MQL5コミュニティOAuthを本格的な認証システムとして扱うことができます。トレードアプリケーションにおいて、実際にその価値を十分に備えているからです。

一般的なソーシャルログインが汎用的なユーザーデータを提供するのに対し、これらのエンドポイントはMQL5エコシステム向けに設計されています。特にUSER_URLから取得できるのは単なるプロファイル情報ではありません。トレーディングにおけるレピュテーション、ランク、コミュニティ内での専門的な評価など、フィンテックアプリケーションにとって非常に価値の高いデータが含まれます。

Kotlinコード:

package com.clemencebenjamin.mql5profileviewer.util

object OAuthConfig {
    const val CLIENT_ID = "YOUR_MQL5_CLIENT_ID"
    const val REDIRECT_URI = "https://your-domain.com/callback.php"

    const val AUTH_URL = "https://www.mql5.com/ja/oauth/login"
    const val TOKEN_URL = "https://www.mql5.com/api/oauth/access_token"
    const val USER_URL  = "https://www.mql5.com/api/oauth/user_info"
}

 2. ログイン画面レイアウト(activity_login.xml)

OAuthは、ユーザーが自然かつスムーズに認証を開始できる導線がある場合に最も効果的に機能します。このシンプルなデザインは、MQL5ユーザーに対して「あなたのプロフェッショナルとしてのアイデンティティを歓迎します」というメッセージを伝えます。

トレーダーが一般的なソーシャルログインボタンではなく[Sign in with MQL5]を目にしたとき、このアプリが自分たちの世界を理解していることを認識します。これは、パイロットに自動車のダッシュボードではなくコックピットを見せるようなものです。瞬時に理解され、信頼につながります。

ローカルアカウントの作成を不要にすることで、MQL5ユーザーにとっての摩擦をなくせます。ユーザーはすでにMQL5上で自身のアイデンティティを確立しているため、改めて別のアカウントを作成させる必要はありません。

XMLコード:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical"
    android:padding="24dp">

    <ImageView
        android:layout_width="120dp"
        android:layout_height="120dp"
        android:src="@mipmap/ic_launcher"/>

    <Button
        android:id="@+id/btnLogin"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Sign in with MQL5"
        android:layout_marginTop="24dp"/>

</LinearLayout>

3. Android Manifest (MainActivity.kt)

ManifestはAndroidアプリの設定を定義する設計図です。ここでは、Androidに対して2つの重要なことを伝えています。1つは「このアプリにはインターネットアクセスが必要である」ということ、もう1つは「OAuthコールバックをどのように処理するか」ということです。

XMLコード:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">

    <uses-permission android:name="android.permission.INTERNET"/>

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/Theme.MQL5ProfileViewer">

        <activity
            android:name=".ui.login.LoginActivity"
            android:exported="true"
            android:launchMode="singleTop">

            <!-- App Launcher -->
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>

            <!-- OAuth Redirect -->
            <intent-filter>
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="android.intent.category.BROWSABLE"/>
                <data
                    android:scheme="mql5profile"
                    android:host="oauth"/>
            </intent-filter>

        </activity>

    </application>

</manifest>

このintent-filterで定義されているmql5profile://oauthは、アプリとMQL5 OAuthシステムを結び付ける専用の受け渡しポイントです。ユーザーがMQL5.comで認証を完了すると、この特定のアドレスへリダイレクトされます。Androidはそれを検知してアプリを起動し、認可コードを受け渡します。

この仕組みは、多くのプロフェッショナルなフィンテックアプリが認証処理に採用しているパターンと同じです。安全性が高く、制御しやすく、ユーザーフレンドリーな認証フローを実現できます。

4. OAuthフローコントローラ(LoginActivity.kt)

このActivityは、OAuth処理の中核となる部分です。ここで、アプリとMQL5サーバーの間で行われるOAuth認証フロー全体を制御します。

Kotlinコード:

package com.clemencebenjamin.mql5profileviewer.ui.login

import android.content.Intent
import android.os.Bundle
import android.widget.Button
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.browser.customtabs.CustomTabsIntent
import androidx.core.net.toUri
import com.clemencebenjamin.mql5profileviewer.R
import com.clemencebenjamin.mql5profileviewer.util.OAuthConfig

class LoginActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_login)

        findViewById<Button>(R.id.btnLogin).setOnClickListener {
            startOAuth()
        }
    }

    private fun startOAuth() {
        val uri = OAuthConfig.AUTH_URL.toUri().buildUpon()
            .appendQueryParameter("client_id", OAuthConfig.CLIENT_ID)
            .appendQueryParameter("redirect_uri", OAuthConfig.REDIRECT_URI)
            .appendQueryParameter("response_type", "code")
            .build()

        CustomTabsIntent.Builder()
            .build()
            .launchUrl(this, uri)
    }

    override fun onNewIntent(intent: Intent?) {
        super.onNewIntent(intent)

        val code = intent?.data?.getQueryParameter("code")
        if (code != null) {
            Toast.makeText(this, "MQL5 authentication successful", Toast.LENGTH_SHORT).show()
            // Next step: exchange code for access token on backend
        }
    }
}

流れを理解する

  1. ユーザーがクリックする → アプリがCLIENT_IDを使用してMQL5認可URLを構築します。
  2. カスタムタブが開く → ユーザーには見慣れたMQL5ログインページが表示されます(信頼性)。
  3. ユーザーが認証する → MQL5が、このアプリにプロファイルへのアクセスを許可するかどうかを確認します。
  4. アプリへリダイレクトされる → MQL5が認可コードをREDIRECT_URIへ送信します。
  5. アプリがコードを受け取る → onNewIntentメソッドが認可コードを取得します。

現時点で、アプリは次の処理を正常に実行できています。

  • MQL5ログインページを開く
  • 実際のMQL5認証情報を受け付ける
  • ユーザーの同意を処理する
  • 有効なOAuth認可コードを受け取る

これは単なる技術実装ではなく、ユーザーとの信頼関係を築く仕組みでもあります。MQL5がすでに築いている信頼を活用することで、ユーザーを即座にオンボーディングできるようになります。

5. テーマ互換性

認証フローはUI上の問題に影響を受けやすい部分です。安定したテーマ設定によって、Androidが複数のActivityやIntentを管理する状況でも、OAuth認証の体験をシームレスに維持できます。

XMLコード:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="Theme.MQL5ProfileViewer"
        parent="Theme.AppCompat.DayNight.NoActionBar"/>
</resources>

ユーザーが認証する際は、認証情報の入力やアクセス許可の承認といった重要な操作を行っています。このような場面では、画面のちらつきやクラッシュ、表示の乱れがユーザーの信頼を損なう原因になります。このテーマ設定は、プロフェッショナルな認証フローに求められる視覚的な安定性を提供します。

もしこれをGoogleやFacebookのOAuthに置き換えた場合、取得できるのは一般的なユーザーデータです。一方、MQL5では、名前、レピュテーション、プロファイル画像といったトレーダーとしてのアイデンティティに関する情報を取得できます。これにより、アプリは単なる「別のログイン機能」ではなく、「トレーダー向けの本格的なツール」へと変わります。

サーバーサイドコンポーネント:MQL5 OAuthフローの完了

Androidアプリケーションは認証の開始とユーザーの同意取得には成功していますが、OAuthの処理はクライアントサイドだけでは完結しません。安全に認証を完了するためには、サーバーサイドのコンポーネントが必要です。

このセクションでは、なぜサーバーが必要なのか、システム内でどのような役割を果たすのか、そしてシンプルなPHPコールバックスクリプトによってMQL5コミュニティOAuthフロー全体をどのように実現するのかを説明します。

サーバーが必要な理由

OAuth認証は意図的に2つの段階に分けられています。

1. 認可(クライアントサイド)

AndroidアプリがユーザーをMQL5へリダイレクトし、ユーザーはログインして必要な権限を許可します。

2. トークン交換(サーバーサイド)

MQL5から返された認可コードは、以下を使用してアクセストークンへ交換する必要があります。

  • クライアントシークレット
  • 安全なPOSTリクエスト

Androidで直接実行できない理由:

  • クライアントシークレットをモバイルアプリ内に埋め込んではならない
  • Androidアプリは容易にデコンパイルできる
  • OAuthプロバイダー(MQL5を含む)は、サーバー間通信を信頼する前提で設計されている

そのため、サーバーは以下の間を仲介する信頼できる中継役として機能します。

  • Androidアプリケーション
  • MQL5 OAuthインフラストラクチャ

システムアーキテクチャにおけるサーバーの役割

完全な認証フローは次のようになります。

  1. AndroidアプリがユーザーをMQL5ログインページへリダイレクトします。
  2. ユーザーがサインインし、アクセス権限を許可します。
  3. MQL5がPHPコールバックURLへリダイレクトします。
  4. PHPサーバーが認可コードをアクセストークンへ交換します。
  5. PHPサーバーがディープリンクを使用してAndroidアプリへリダイレクトします。
  6. Androidアプリが認証済みの状態で処理を再開します。

この設計は、本番環境で利用されるプロフェッショナルなOAuth統合と同じパターンです。

OAuthプロトタイプ向けの無料PHPホスティング

概念を実証するために、学習やプロトタイピングに適した無料PHPホスティングサービスを利用しました。

一般的な無料オプション

  • InfinityFree
  • ByetHost
  • AwardSpace
  • Atwebpages(デモで使用)
  • ローカルホスト + Ngrok(テストで使用)

重要な注意事項:

無料ホスティングサービスの中には、外部へのPOSTリクエストを制限しているものがあります。その場合、トークン交換処理がブロックされる可能性があります。これは実装に問題があることを意味するものではなく、ホスティング環境の制限を示しているにすぎません。

それでも無料ホスティングは、以下の用途で有用です。

  • OAuth実装の実現可能性を検証する
  • リダイレクトおよび同意フローを検証する
  • MQL5コミュニティ統合の可能性を実証する

PHP OAuthコールバックスクリプト(サーバーロジック)

以下のPHPスクリプトは、サーバーサイドのOAuthハンドラを実装したものです。

このスクリプトは意図的にシンプルな構成となっており、OAuthハンドシェイクを完了するという単一の責務に集中しています。

認証情報の取り扱いについて

実際の運用では、引用符付きのプレースホルダーをMQL5コミュニティのアプリケーションダッシュボードで取得した値に置き換えてください。また、認証情報を公開リポジトリへコミットしてはいけません。

1. 設定セクション

このセクションでは、MQL5との通信に必要なOAuth認証情報およびエンドポイントを定義します。

PHPコード:

<?php
// ===============================
// CONFIGURATION
// ===============================
$CLIENT_ID     = "YOUR_MQL5_CLIENT_ID";
$CLIENT_SECRET = "YOUR_MQL5_CLIENT_SECRET";
$REDIRECT_URI  = "https://your-domain.com/callback.php";

$TOKEN_URL = "https://www.mql5.com/api/oauth/access_token";

目的:

  • アプリケーションをMQL5に対して識別する
  • 安全なトークン交換を可能にする
  • OAuth関連のパラメータを一元管理する

2. 認可コードの受信

ユーザーがログインし、アクセスを許可すると、MQL5は一時的な認可コードを付与してこのスクリプトへリダイレクトします。

PHPコード:

// ===============================
// STEP 1: GET AUTH CODE
// ===============================
if (!isset($_GET['code'])) {
    die("Authorization code not found.");
}

$code = $_GET['code'];

このステップで確認できること

  • ユーザーが正常に認証されたこと
  • アクセス権限が付与されたこと
  • OAuthフローがサーバーまで安全に到達したこと

3. 認可コードをアクセストークンへ交換する

OAuthにおいて最も重要なステップです。

サーバーはMQL5へPOSTリクエストを送信し、以下の情報を含めます。

  • クライアントID
  • クライアントシークレット
  • 認可コード
  • リダイレクトURI

// ===============================
// STEP 2: EXCHANGE CODE FOR TOKEN
// ===============================
$postData = [
    'grant_type'    => 'authorization_code',
    'client_id'     => $CLIENT_ID,
    'client_secret' => $CLIENT_SECRET,
    'code'          => $code,
    'redirect_uri'  => $REDIRECT_URI
];

$ch = curl_init($TOKEN_URL);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postData));

$response = curl_exec($ch);
curl_close($ch);

$data = json_decode($response, true);

if (!isset($data['access_token'])) {
    die("Token exchange failed: " . htmlspecialchars($response));
}

$accessToken = $data['access_token'];

これがサーバー上で実行されなければならない理由:

  • 機密性の高い認証情報を使用する
  • 信頼されたサーバー間通信である必要がある
  • OAuthのセキュリティ設計に準拠している

4. Androidへのリダイレクト

アクセストークンが取得されると、サーバーはディープリンクを使用してAndroidアプリへリダイレクトします。

PHPコード:

// ===============================
// STEP 3: REDIRECT BACK TO ANDROID
// ===============================
$androidRedirect = "mql5profile://oauth?token=" . urlencode($accessToken);

header("Location: $androidRedirect");
exit;

結果:

  • Androidアプリが処理を再開する
  • アプリはアプリは認証済みの状態で処理を再開できる
  • 以降のステップでプロファイルデータを取得できる

観察とホスティングの制約

  • 実装の過程で、いくつかの無料ホスティングサービスにおいて以下の挙動が確認されました。
  • リダイレクトおよび認可処理は正常に動作する
  • MQL5からのリクエストは正常に受信できる
  • しかし、外部へのPOSTリクエストがブロックされる場合があり、トークン交換が失敗する

ただし、これは実装の問題ではありません。むしろアーキテクチャの堅牢性を示しています。

互換性のあるホスティング環境に移行すれば、同じコードでOAuthフローは変更なしに完結します。

重要なポイント

サーバーサイドコンポーネントはOAuthにおいて任意ではなく、セキュリティ上必須の要素です。

無料ホスティングの制約がある状況でも、以下の点は検証できました。

  • MQL5 OAuthログイン
  • 権限の付与
  • 認可コードの受け渡し
  • エンドツーエンドのシステム設計

これにより、外部アプリケーションがMQL5コミュニティのアイデンティティを用いてユーザー認証を確実に実行できることが確認され、トレーディング分野のプラットフォームにおける大きな可能性が示されました。


テスト

アプリケーションのデプロイは、プロジェクトをビルドし、仮想デバイス上で起動することで行いました。ビルドは正常に完了し、アプリは想定通り動作しました。その結果は以下のスクリーンショットに示されています。

MQL5Profileviewer

図3:MQL5コミュニティ経由のログインテスト

以下の3つの画像は、アプリの動作フローを静止画として示したものです。最初の画像はアプリのメイン画面を示しています。2つ目の画像は[Sign in with MQL5]を選択した後の画面で、MQL5の認証ページが表示されています。最後に、有効なユーザー名とパスワードを入力すると、登録ユーザーの実名(この例では私自身の名前)が表示されます。

[Continue]を選択すると、通常であればサーバー側のPHPコールバックを介したトークン交換処理が実行されます。しかし今回のデモでは、提案されたサーバー環境がMQL5のHTTPS要件を完全には満たしていなかったため、これ以上の処理は進めていません。その結果、認証プロセスの最終段階で以下の応答が返されました。

MQL5ProfileViewerホーム

図4:アプリ起動時の画面

図5:[Sign in with MQL5]を選択した後のログインページ

図6:正しいMQL5認証情報入力後、認可ページへ遷移し[Continue]を選択する画面

[Continue]を選択した際に得られた結果は以下のとおりです。

Token exchange failed:
405 Method Not Allowed

このエラーはログイン自体は成功しているものの、バックエンドでPHPサーバーがMQL5のトークンエンドポイントへ認可コードを送信し、アクセストークンへ交換しようとした段階で発生しました。

エラーの意味

405エラーは、リクエスト自体はサーバーに到達しているものの、そのHTTPメソッドが許可されていないために拒否されたことを示します。このケースでは、トークンエンドポイントがリクエストを受け付ける前に拒否しています。

これは通常、以下の1つまたは複数の理由で発生します。

1. リクエストメソッドの誤り

  • MQL5のトークンエンドポイントはPOSTリクエストのみを厳密に要求します。
  • もしホスティング環境がPOSTリクエストをブロックまたは書き換えている場合、交換処理は失敗します。

2. ホスティングの制限

  • 一部の無料ホスティングサービスでは、外部へのHTTPS POSTリクエストやcURLの使用が制限されています。
  • また、セキュリティ上の理由で外部APIへのリクエスト自体が制限される場合もあります。

3. HTTPS準拠の問題

  • MQL5 OAuthでは、有効なHTTPSコールバックが必要です。
  • 証明書が存在しない、信頼されていない、または不完全な場合、リクエストが上流で拒否される可能性があります。


結論

本プロジェクトでは、MQL5コミュニティOAuthを外部アプリケーションに統合する方法を実証しました。これらのアプリケーションはWebベースまたはモバイルベースのいずれでも構いませんが、本ケースではAndroidをデモ用途として使用しています。クリーンで動作可能なソースプロジェクトも添付しており、自由に確認・拡張・デプロイすることができます。

プロジェクトを実行するには、PCにAndroid Studioがインストールされていることと、MQL5コミュニティアカウントが必要です。MQL5プロファイルダッシュボードから左側パネルの[アプリ]へ移動し、新しいアプリケーションを作成します。その際、以下の情報を入力する必要があります。

  • アプリケーション名
  • メインページURL(PHPコールバックスクリプトをホストしている場所を指定する必要があります)

なお、本記事ではAndroid固有の開発詳細には深く踏み込みません。これは意図的です。本記事の主目的は、外部アプリケーションがMQL5コミュニティOAuthを確実に利用できるという概念を理解し、自信を持ってもらうことにあります。より詳細なAndroid開発については、オンラインに豊富なドキュメントや学習リソースがあります。

添付プロジェクトはエラーなく動作する構成になっていますが、そのままではなく各自で設定を変更する必要があります。具体的には以下の点です。

  • クライアントIDを自身のMQL5アプリケーションで生成されたものに置き換える
  • OAuthコールバックPHPスクリプトをホストしているサーバーURLを設定する
  • セキュリティ上の理由から、AndroidアプリではクライアントIDのみを使用し、クライアントシークレットは使用しないことを徹底する

設定が完了したら、アプリをビルドして実行し、OAuthフロー全体をテストします。

バックエンドサーバーについては、機能制限がなくHTTPS、外部へのPOSTリクエスト、OAuthフローを完全にサポートするホスティング環境を選択する必要があります。本番環境では、安全で信頼性の高いバックエンドへの投資が強く推奨されます。

この基礎が、MQL5コミュニティとシームレスに統合されるトレーダー向けアプリケーションを構築するための出発点になれば幸いです。このような統合は、アルゴリズム取引用ツールを中心としたエコシステムの拡張と開発者ネットワークの強化につながります。

添付ファイルの一覧表が以下に示されています。各ファイルを確認し、自分のペースで探索してください。

質問や提案があれば、記事下のコメント欄でディスカッションを開始してください。開発者コミュニティがいつでもサポートします。

それでは次回の公開まで、安全に、そして開発を続けてください。


添付ファイル

添付ファイルには、PHPコールバックのソースコードとMQL5ProfileViewerのZIPアーカイブが含まれています。ZIPファイルを解凍することでAndroidプロジェクト全体にアクセスでき、内部のファイルを確認しながら、以下のテーブルで各コンポーネントの概要を確認できます。
ファイル名 説明
callback.php MQL5コミュニティから送信される認可コードを受信し、それを安全にアクセストークンへ交換し、認証済み結果をAndroidアプリへリダイレクトするサーバーサイドOAuthコールバックスクリプトです。このファイルはHTTPS対応のサーバー上でホストする必要があります。
MQL5ProfileViewer.zip MQL5コミュニティOAuth統合を示す完全なAndroid Studioプロジェクトのソースコードです。ログインフロー、ディープリンク処理、ユーザー認証ロジックが含まれています。ビルドおよび実行前にクライアントIDとバックエンドのコールバックURLを必ず個別に設定する必要があります。
目次に戻る

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

添付されたファイル |
MQL5ProfileViewer.zip (461.36 KB)
EAのサンプル EAのサンプル
一般的なMACDを使ったEAを例として、MQL4開発の原則を紹介します。
外国為替市場向けCAPMモデルインジケータ 外国為替市場向けCAPMモデルインジケータ
MQL5における外国為替市場向け古典的CAPMモデルの適用を扱います。本インジケータは、ヒストリカルボラティリティに基づいて期待リターンとリスクプレミアムを算出します。インジケータ値は相場の天井圏や底値圏で上昇し、資産価格決定の基本原理を反映します。リスクリワード比の変化をリアルタイムで考慮しながら、逆張り戦略および順張り戦略に活用できます。本記事では、その数学的背景と技術的な実装方法について詳しく解説します。
エラー 146 (「トレードコンテキスト ビジー」) と、その対処方法 エラー 146 (「トレードコンテキスト ビジー」) と、その対処方法
この記事では、MT4において複数のEAの衝突をさける方法を扱います。ターミナルの操作、MQL4の基本的な使い方がわかる人にとって、役に立つでしょう。
オプションを使わないオプション取引(第1回):基礎理論と原資産によるエミュレーション オプションを使わないオプション取引(第1回):基礎理論と原資産によるエミュレーション
MQL5プログラミング言語を用いて、原資産をベースにしたオプションのエミュレーション手法のバリエーションを解説します。選択したアプローチの長所と短所を、MOEX(モスクワ取引所)のFORTS先物市場およびBybit暗号資産取引所を例に、実際の取引所オプションと比較します。