English Русский Español Deutsch Português
preview
RestAPIを統合したMQL5強化学習エージェントの開発(第2回):三目並べゲームREST APIとのHTTPインタラクションのためのMQL5関数

RestAPIを統合したMQL5強化学習エージェントの開発(第2回):三目並べゲームREST APIとのHTTPインタラクションのためのMQL5関数

MetaTrader 5 | 17 5月 2024, 12:54
71 0
Jonathan Pereira
Jonathan Pereira

はじめに

前回の記事では、APIとRestAPIについて話し、これらの重要な技術が異なるシステム間の通信とデータ交換をどのように促進するかを強調しました。ロイ・フィールディングの原則の観点からRestAPIの進化を分析し、RestAPIがSOAPのような古いプロトコルをより効率的で柔軟な代替品にどのように置き換えたかを分析しました。また、RestAPIのシンプルさ、スケーラビリティ、汎用性の重要性、および高度な相互接続システムの開発における役割も強調しました。

この新しい記事では、これらの概念を発展させ、実際の例に当てはめてみます。MQL5でHTTP呼び出しを扱うための一連の関数を開発し、外部環境との効果的な相互作用のためにRestAPI機能と統合することに重点を置きます。そのために、Pythonで三目並べゲームを作ることを実例として考えてみましょう。

まずはMQL5で関数を開発するところから始めます。これらの関数は、外部環境(この場合はPythonで開発された三目並べゲーム)との効果的なコミュニケーションを確立するために必要です。HTTP要求の送信とレスポンスの受信を可能にし、MQL5とゲームAPI間の通信ブリッジとして機能します。

並行して、パフォーマンスの高さ、開発の容易さ、非同期APIの強力なサポートといった特徴から選ばれたFastAPIを使用したAPI開発についても見ていきます。FastAPIはまた、最新のAPI開発ツールとうまく統合され、MQL5機能セットが三目並べゲームと対話するために使用できる、効率的でスケーラブルなエンドポイントを簡単に作成できます。

基本的なMQL5関数を学んだ後、Python APIと対話するように設計されたテストスクリプトを作成します。このスクリプトは、三目並べゲームのコンテクストにおいて、私たちのMQL5関数の実用性を実証する上で最も重要な要素となります。

この例は、上述した概念の実際的な応用を説明するだけでなく、革新的なソルーションルーションを生み出すためにこれらの技術をどのように併用できるかについての貴重な洞察も与えてくれるでしょう。

この記事では、MQL5の関数とFastAPIのAPIの技術開発、そして相互接続システム構築における役割の両方について見ていきます。

この記事は大きく4つの部分に分かれています。

  1. 紹介と背景説明:前回の記事で取り上げたAPIとRestAPIの概念を簡単に復習し、システムの相互接続におけるこれらの技術の進化と重要性を強調します。

  2. HTTP呼び出し用MQL5関数の開発:ここでは、MQL5で特定の関数を開発することに焦点を当てます。これらの関数は、MQL5を外部環境と統合するための基本ステップであるHTTP通信を確立し、管理するために設計されます。

  3. 三目並べ用APIの作成とFastAPIへの統合:このセクションでは、FastAPIを使用した信頼性の高いAPIの開発について見ていきます。このAPIは、私たちの実践的な例(Pythonの三目並べ)の基礎となり、MQL5で開発された関数と統合されます。

  4. 実用化とテスト:最後の部分では、三目並べAPIとのインタラクションのためのテストスクリプトをMQL5で実装します。このステップでは、説明したツールと概念の実践的な統合を実証し、以下の関数が実際のコンテキストでどのように適用できるかをしまします。

        def make_move(self, row, col):
            if self.board[row][col] == ' ':
                if self.player_turn:
                    self.board[row][col] = 'X'
                else:
                    self.board[row][col] = 'O'
                self.player_turn = not self.player_turn
            else:
                print("Invalid game. Try again.")
    
    

各部分は、RestAPIとMQL5が相互接続されたソルーションを開発するためにどのように一緒に使用できるかを十分に理解することに貢献します。



上図は、外部APIが仲介役として機能して、MQL5スクリプトと三目並べの間の一連のやり取りを示しています。まず、MQL5スクリプトからのゲーム起動要求から始めます。これを外部APIで処理します。Pythonで実装された三目並べが呼び出されます。移動はHTTP要求を使用して送受信され、外部APIが入出力ロジックを管理します。FastAPIを使用することは、このプロセスの効率性の鍵であり、非同期で高パフォーマンスなインタラクションを保証します。このフローは、異なるシステム間の統合に対する私たちのアプローチの実用性と有効性を視覚的に表しています。


1. 紹介と背景説明

連載を続けます。今日の記事は、APIとRestAPIの議論に戻り、その進化とデジタルシステムの相互接続における重要性の高まりに焦点を当てます。APIは、デジタル化の時代において基本的なものとなっており、さまざまなプログラムを統合し、コミュニケーションと調和のとれた機能を確保する上で重要な役割を果たしています。RestAPIはシンプルさとスケーラビリティを中心に構築されたアーキテクチャを備えており、その出現は大きな飛躍を意味します。SOAPのような古いプロトコルの制限は克服され、システム間の相互運用性のより効率的なオプションが提供されるからです。最初の記事は、これらのインターフェイスの理解を深めることに捧げられ、その機能性、多様性、基本的なアーキテクチャについて説明するとともに、実用的な応用例についても考察しています。今後の記事で、より複雑な議論やより具体的な応用のための舞台を用意しました。





XMLをベースとし、複雑で、基本的な操作のために大量のデータを必要とすることで知られるSOAPのようなプロトコルに比べて、シンプルなアプローチであるRestAPIは、2000年代に入ってから急速に人気を集めました。より柔軟で汎用性の高い選択肢として登場したRestAPIは、金融を含む様々な分野でその地位を確立しています。その使いやすさと、事実上すべてのプログラミング言語での実装の容易さは、効率的な通信を必要とする最新のシステムにとって特に魅力的です。

RestAPIが広く受け入れられているのは、その適応性と様々なデータ形式(JSONやXMLなど)のサポートによるところが大きいです。これにより、異なるシステムやプラットフォーム間の相互運用性が促進されます。さらに、RestAPIの重要な側面はセキュリティです。トークン認証や暗号化などの強力なメカニズムで、データ交換中に機密情報の保護が保証されています。このレベルのセキュリティと柔軟性は、特に金融取引や個人データなどの重要な情報を扱うアプリケーションでは不可欠です。


2. HTTP呼び出し用MQL5関数の開発

この記事では、HTTPを呼び出してJSONデータを操作するためにMQL5で関数を開発する方法について詳しく学び始めます。これらの関数は、MQL5プログラムと外部環境との統合において重要な役割を果たし、Webサービスと効率的にやり取りしたり、JSON形式の情報を操作したりすることができます。

さらに、HTTPの呼び出しを扱う場合、HTTPステータスコードの意味を理解することが非常に重要です。これらのコードは、要求の結果を示すためにWebサーバーから返されます。例えば、ステータスコード200 ( OK)は、要求が成功したことを示し、ステータスコード404 ( Not Found)は、要求されたリソースがサーバー上に見つからなかったことを意味します。これらのコードは、HTTP要求のステータスに関する重要な情報を提供するため、Webサービスと相互作用するアプリケーションを開発する上で、これらのコードを知ることは不可欠です。

HTTPステータスコードに関する完全で詳細な情報については、こちらで完全なドキュメントを参照できます。これらのコードをよりよく理解し、自信を持ってプロジェクトで使用することができます。


SendGetRequest関数:GET要求の実行

まず、このプロセスの中心となるSendGetRequest関数から始めます。この関数は、HTTP GET要求の実装を可能にします。多くの重要なパラメータを受け取り、アプリケーション高度な柔軟性と制御性を提供します。

int SendGetRequest(const string url, const string query_param, string &out, string headers = "", const int timeout = 5000)
  • url:GET要求の送信先URL
  • query_param:URLに追加できるオプションのクエリパラメータ
  • out:要求に対する応答を格納する出力変数
  • headers:オプションのHTTPヘッダー
  • timeout:要求タイムアウトをミリ秒単位で指定

SendGetRequest関数は、要求の構築からHTTPエラー処理まで、GET要求処理プロセスの鍵を握ります。重要なのは、エラー処理は関数内に存在しますが、現在の形では比較的基本的なものであるということです。将来的には改善されるかもしれません。

レスポンスに成功すると(レスポンスコードは200と204の間)、この関数はデータをUTF-8にデコードし、変数out に保存します。この機能は、収集したデータを正しく処理し、プロジェクトで効果的に使用するために必要です。


SendPostRequest関数: POST要求の実行

ペイロードがJSON形式であることが多い外部Webサービスにデータを渡すSendPostRequest関数に移りましょう。この関数は、API経由でリソースを作成または更新する際に使用されます。

int SendPostRequest(const string url, const string payload, string &out, string headers = "", const int timeout = 5000)
  • url:POST要求を送信するURL
  • payload:要求とともに送信されるペイロードデータ(多くの場合JSON形式)
  • out:要求に対する応答を格納する出力変数
  • headers:オプションのHTTPヘッダー
  • timeout:要求タイムアウトをミリ秒単位で指定

SendPostRequest関数は、POST要求の作成、ヘッダーの追加、HTTPエラーの処理のプロセスを簡素化します。ただし、現在のエラー処理は完全ではなく、SendGetRequest関数と同様に、将来的に改善される可能性があります。レスポンスが成功した場合(レスポンスコード200から204)、データはUTF-8にデコードされ、out変数に格納されます。


Request関数:集中アプローチ

Request関数は、GET要求とPOST要求の集中エントリポイントとして機能し、便利で柔軟なアプローチを提供します。

int Request(string method,
            string &out,
            const string url,
            const string payload = "",
            const string query_param = "",
            string headers = "",
            const int timeout = 5000)

  • method:使用するHTTPメソッドを指定(GETまたはPOST)
  • url:要求の送信先URL
  • payload:POST要求で送信されるデータ(オプション)
  • query_param:GET要求のオプションのクエリパラメータ
  • out:要求に対する応答を格納する出力変数
  • headers:オプションのHTTPヘッダー
  • timeout:要求タイムアウトをミリ秒単位で指定

Request関数は抽象化層の役割を果たし、実装の詳細を気にすることなく、GETとPOSTを簡単に選択できるようにします。これはコードを単純化するだけでなく、可読性を向上させ、HTTP呼び出しの開発をより効率的でアクセスしやすくします。


      


この説明の目的は、読者がHTTP呼び出しを効果的に扱う方法を学ぶのを支援することです。この知識があれば、自分のMQL5プロジェクトとさまざまなWebサービスを統合できるようになり、HTTP呼び出しの機能を使用してデータを送受信したり、JSON形式のデータを効率的に扱うことができるようになります。読者がMQL5のプログラミングスキルをマスターし、HTTP経由でWebサービスとやりとりするエキスパートになれるよう、ステップバイステップで指導しながら、これらのリソースを探求していきます。

MQL5のHTTP呼び出しをマスターすることに加えて、JSON (JavaScript Object Notation)形式を理解することも重要です。JSONはデータを構造化する効率的で広範な方法で、システム間の情報交換によく使用されます。JSONの扱い方を学ぶことが重要な理由をいくつか挙げてみましょう。

1. 標準的なWeb形式:JSONは、多くのWeb APIで選択されている形式であり、外部アプリケーションやサービスを統合するための基本となっています。JSONを理解することで、広く使用され理解されている構造で、Webサービスからデータを簡単に送受信することができます。

2. 読み書きのしやすさ:JSONは読みやすいことで知られています。開発者がデータを理解しやすく、デバッグしやすくするために、シンプルで人間が読める構文を使用しています。これは、API応答を処理する場合や要求をデバッグする場合に特に重要です。

3.柔軟性と巣作り:JSONはオブジェクトや配列を入れ子にすることができるので、複雑で階層化されたデータを表現するのに理想的です。これは、詳細で構造化された情報を扱う際には非常に重要です。

4.異なる言語に対応:JSONは幅広いプログラミング言語と互換性があるため、汎用性の高い選択肢となります。使用する言語に関係なく、JSONを理解することで、データの扱いが容易になります。



HTTP呼び出しにおけるJSONの関連性

JSONの重要性を理解したところで、JSONがHTTP呼び出しとどのように統合されるかを確認する必要があります。要求の受信(データの送信)とレスポンスの送信(データの受信)の両方において、JSONは基本的な役割を果たします。

Webサービスにデータを送信する場合、多くの場合、JSONとして形式し、要求に含める必要があります。これにより、サービスはこのデータを理解し、適切に処理することができます。一方、Webサービスからレスポンスを受け取る場合、データはJSON形式で返されることが多いです。したがって、JSONを解析して情報を抽出する方法を知っていることが重要になります。

MQL5でJSONを扱うのをさらに簡単にするために、JAsonライブラリを使用することにしました。これにより、外部DLLを使用する必要がなくなります。このライブラリは驚くほど簡単で、その効果は実証済みです。では、なぜJAsonライブラリがMQL5プロジェクトでJSONを扱うのに最適なのか、詳しく見ていきましょう。

  1. 使いやすさJAsonライブラリの主な利点の1つは、その使いやすさにあります。JSONの取り扱いを簡素化し、初心者プログラマーでもJSONオブジェクトの読み書きや操作ができるように設計されています。直感的な構文と考え抜かれた機能性により、JSONを扱う際の時間と労力を節約できます。

  2. 便利な抽象化JAsonではJSONの便利な抽象化が提供されるので、解析やシリアル化の詳細を手作業で処理する必要がありません。代わりに、JSONオブジェクトのプロパティへのアクセス、JSON配列への要素の追加、複雑なJSON構造の作成などの一般的なタスクを実行するために、ライブラリが提供するメソッドや関数を使用できます。

  3. コードの読みやすさを改善:MQL5のコードでJSONを直接扱うと、複雑で混乱したコードになる可能性があります。しかし、JAsonライブラリを使用することで、コードがより読みやすくなり、整理されます。JSONに関連する操作が単純化され、コードがより理解しやすく、保守しやすくなります。

  4. 開発効率:プロジェクト開発において、効率性は重要なポイントです。JAsonライブラリは、詳細なJSON処理よりもビジネスロジックに集中できるようにすることで、開発プロセスのスピードアップに役立ちます。つまり、より早く、より少ないエラーで機能を提供できるのです。


3. 三目並べ用APIの作成とFastAPIへの統合

Pythonで三目並べのコードを学ぶことから、実践的な例を始めましょう。三目並べはMQL5がインタラクションをおこなう環境として機能するため、これはMQL5とPythonのインタラクション開発における基本的なステップです。

TicTacToeクラス
import random

class TicTacToe:

ここではrandomモジュールをインポートし、TicTacToeというクラスを作成します。クラスは、関連する関数や変数を整理するソフトウェアの構造です。この場合、TicTacToeクラスは三目並べゲームを提示します。


ゲーム盤を初期化します。
    def __init__(self):
        self.board = [[' ' for _ in range(3)] for _ in range(3)]
        self.player_turn = True

この部分では、クラスのインスタンスが生成されるときに呼び出される特別なメソッドである__init__メソッドを定義します。ゲーム状態を初期化します。

  • self.boardは、ゲーム盤を表す2次元リスト(3x3)です。最初は、すべてのマスは空です(空のマスで表される)。
  • self.player_turnはブール変数で、ゲームの中で誰の番かを記録します。最初は最初のプレイヤーの順です(True)。


print_boardメソッド
    def print_board(self):
        for row in self.board:
            print("|".join(row))
            print("-" * 5)

print_boardメソッドは、ゲーム盤の現在の状態を表示します。ゲーム盤の線を通り、縦棒('|')と横線('-----')で区切られた要素を出力し、ゲーム盤を視覚的に表現します。


check_winnerメソッド

    def check_winner(self):
        for i in range(3):
            if self.board[i][0] == self.board[i][1] == self.board[i][2] != ' ':
                return self.board[i][0]
            if self.board[0][i] == self.board[1][i] == self.board[2][i] != ' ':
                return self.board[0][i]
        if self.board[0][0] == self.board[1][1] == self.board[2][2] != ' ':
            return self.board[0][0]
        if self.board[0][2] == self.board[1][1] == self.board[2][0] != ' ':
            return self.board[0][2]
        return None

check_winnerメソッドは、ゲームに勝者がいるかどうかを確認します。すべての行、列、対角線に3つの連続したプレイヤーの記号(XまたはO)があるかどうかを確認します。プレイヤーのいずれかが勝った場合、そのプレイヤーの記号(XまたはO)が返されます。勝者が見つからない場合、このメソッドはNoneを返します。


make_moveメソッド

    def make_move(self, row, col):
        if self.board[row][col] == ' ':
            if self.player_turn:
                self.board[row][col] = 'X'
            else:
                self.board[row][col] = 'O'
            self.player_turn = not self.player_turn
        else:
            print("Invalid game. Try again.")

make_moveメソッドは、対局中に手を打つ役割を果たします。このメソッドは、プレイヤーが手を打とうとする行と列の座標を受け取ります。手を打つ前に、ゲーム盤上のマスが空(' ')かどうかを確認します。そのマスが空であれば手番がおこなわれ、プレイヤーの記号(XまたはO)がそのマスに置かれます。その後、プレイヤーの手番が変わります。マスが空でない場合、Invalid moveのメッセージが表示されます。

上記のコードはMQL5とPythonの統合プロセスを表しています。Pythonで三目並べを開発することは重要なステップです。それは私たちのインタラクションがおこなわれる環境として機能するからです。

このコードのあらゆる面を検証することで、Pythonが機能的なゲームを簡単に効率よく作れることがわかるでしょう。ただし、このコードの真の可能性は、このコードをMQL5に接続し、この2つの異なるテクノロジーが相乗効果を発揮できるようになったときに明らかになるでしょう。

三目並べで基礎を固めたので、次はFastAPIを使用してPython APIを開発しましょう。このAPIはMQL5と三目並べゲームをつなぐもので、MQL5がクエリを実行し、レスポンスを受け取ることでゲームをプレイできるようにします。開発プロセスとともに、この統合の側面を見ていくことにしましょう。

さて、TicTacToeクラスとその動作方法について理解したところで、上記の FastAPI APIコードを詳しく見てみましょう。このAPIは、以前Pythonで開発した三目並べゲームとMQL5のインタラクションに使用されます。このコードの各部分を理解しましょう。

# Import of Libraries
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from tic_tac_toe import TicTacToe

# Instantiate FastAPI
app = FastAPI()

# Running game storage
games = {}

まず、必要な2つのライブラリをインポートすることから始めます。FastAPIとPydanticです。FastAPIは、PythonでWebインターフェイスを迅速に開発するためのフレームワークです。Pydanticは、APIから期待されるデータの構造を記述するデータモデルを定義するために使用されます。

# Defining data models
class GameBoard(BaseModel):
    board: list
    player_turn: str

class PlayerMove(BaseModel):
    row: int
    col: int

次に、Pydanticを使用して2つのデータモデルを定義します。GameBoardはゲーム盤の現在の状態を表し、マスを格納するboardリストとゲームの進行を示す文字列player_turnを含みます。PlayerMoveは、プレイヤーが実行したい手を表し手の行と列の座標を含みます。

# Definition of API Endpoints

# Endpoint to start a new game
@app.get("/start-game/")
def start_game():
    game_id = len(games) + 1
    game = TicTacToe()
    games[game_id] = game
    return {"game_id": game_id}

# Endpoint to make a play in the game
@app.post("/play/{game_id}/")
def play(game_id: int, move: PlayerMove):
    game = games.get(game_id)
    if not game:
        raise HTTPException(status_code=404, detail="Game not found")

    try:
        game.make_move(move.row, move.col)
    except ValueError as e:
        raise HTTPException(status_code=400, detail=str(e))

    # Use the print_board method to print the current game do
    game.print_board()

    return {
        "board": game.board,
        "player_turn": game.player_turn,
    }

APIには主に2つのエンドポイントがあります。まず、/start-game/で、三目並べの新しいゲームを始めることができます。ゲームを表すTicTacToeクラスのインスタンスを作成し、ゲーム辞書の一意のIDと関連付けます。ゲームIDがレスポンスとして返されます。

2番目のエンドポイント/play/{game_id}/は、プレイヤーが既存のゲームで手を打つことを可能にします。パラメータとして、プレイヤーのゲームIDとゲームデータを受け取ります。APIは、指定されたIDを持つゲームがgames辞書に存在するかどうかを確認します。存在しない場合は、エラー404が返されます。その後、手を打ち、ゲーム盤の状態を更新しようとします。ゲーム盤の現在の状態がレスポンスとして返されます。

# Execução da API
if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)

Uvicornを使用してAPIを実行し、コードを完成させます。これにより、他のアプリケーションがAPIにアクセスできるようになります。 

APIドキュメントの自動生成


FastAPIはPython 3.6+でAPIを作成するためのモダンで高速なフレームワークで、Pythonの型ヒントの標準に基づいています。そのシンプルさは、高速で効率的かつ信頼性の高いコーディングを提供する能力にあり、次のような能力に重点を置いています。

  1. スピードとパフォーマンス:FastAPIはPython用の最速フレームワークの1つで、ルーティングにStarlette、ASGIサーバー実行にUvicornを使用しています。そのため、高パフォーマンスを必要とする用途に最適です。

  2. ドキュメントの自動生成:FastAPIを使用すると、APIドキュメントは自動的に生成され、コードの変更に応じて更新されます。これは、Pythonの型ヒントと、Swagger UIやReDocのような統合されたドキュメントシステムを使用することで可能になります。

  3. データの検証とシリアル化:Pydanticを使用することで、FastAPIは堅牢なデータ検証システムを提供します。要求とレスポンスは自動的に検証され、シリアル化されるため、必要なコードの量が減り、多くの一般的な落とし穴を避けることができます。

  4. 使いやすさ:FastAPIは使いやすく、直感的に習得できるように設計されています。そのため、開発者は効率的なAPIの作成と保守が容易になり、他のフレームワークと比べて学習曲線が険しくなくなります。

  5. 非同期操作のサポート:非同期操作の組み込みサポートにより、FastAPIはリアルタイムサービスなどの同時要求を処理する必要があるアプリケーションに適しています。

  6. セキュリティと認証:このフレームワークはまた、JWTトークンやその他の認証方式によるOAuth2のサポートを含む、APIセキュリティを実装するためのツールも提供しています。

FastAPIを使用してAPIを作成することは、その効率性とシンプルさを明確に示しています。このフレームは、MQL5やPythonなど様々なテクノロジー間のシームレスな統合を実現し、高パフォーマンスWebアプリケーションを迅速に開発することができます。FastAPIを使用することで、開発者はAPI実装の技術的な詳細の代わりにビジネスロジックに集中できるため、開発プロセスをスピードアップし、最終製品の品質を確保することができます。


4. 実践的な実装とテスト

分析中のMQL5テストスクリプトは、このプログラミング言語とFastAPIで構築された外部APIの統合の実例であり、三目並べゲームのコンテキストで適用されています。プロセスはいくつかのフェーズに分けられ、それぞれがAPIとの特定の相互作用を担当します。

スクリプトはFastAPI APIアドレスを確立することから始まります。

input string apiUrl = "http://localhost:8000";

この行は、FastAPIサーバーへの要求送信に使用するベースAPI URLを定義します。この設定は、スクリプトがAPIと正しくやり取りできるようにするために必要です。

API応答を表示する関数

void PrintResponse(string response) {
    Print("Resposta da API: ", response);
}

この補助関数は、APIから受信した応答をMQL5のログに出力するためのものです。提出された各要求の結果に関する有益な情報を提供します。

初期化と最初の要求

void OnStart() {
    string response;
    int startGameRes = Request("GET", response, apiUrl + "/start-game/");
    // ...
}

OnStartはスクリプトのメイン関数です。APIにGET要求を送ることで、新しいゲームを開始します。startGameRes変数はこの要求の結果を格納し、成功したかどうかを示します。

応答の処理しとゲームの開始

string gameIdStr = StringSubstr(response, StringFind(response, ":") + 1);
uint gameId = StringToInteger(gameIdStr);

APIからレスポンスを受け取ったスクリプトは、そこからゲームIDを抽出します。このIDは、現在のゲームセッションを識別するため、その後のゲームにとって非常に重要です。

手の実行

string jsonMove1 = "{\"row\": 0, \"col\": 0}";
// ...
int playRes1 = Request("POST", response, apiUrl + "/play/" + IntegerToString(gameId) + "/", jsonMove1);

スクリプトは次に一連の手を実行し、各手はゲーム盤上の手の座標を含むJSONオブジェクトで表されます。これらの動きはPOST要求を使用してAPIに送られます。このプロセスは、その後の一手ごとに繰り返されます。



ゲームプレイ分析

  • スタート:ゲームが始まり、ゲームIDが発行されます。
  • :3手ずつ交互に打ちます。
  • フィードバック:各ゲームの後、スクリプトはAPIレスポンスを処理し、更新されたゲーム状態を確認します。

認識

  • 効果的な統合:このスクリプトは、MQL5と FastAPI APIの効果的な統合を示し、MQL5 を使用して外部アプリケーションと対話する方法を示します。
  • フレキシブルなモデル:この例は、他のタイプのアプリケーションのための柔軟なモデルとして機能し、外部APIと統合するMQL5の能力を示しています。
  • 実用的な適用可能性:このスクリプトは、FastAPIを使用したMQL5プログラミングとPython APIの柔軟性を組み合わせた実用的な例であり、異なるシステム間の相互作用における新たな革新への道を開くものです。

このMQL5テストスクリプトは、システム統合の理論的概念を説明するだけでなく、実践的な応用も提供し、最新のシステムをプログラミングする際の相互接続性と適応性を強調します。


結論

この記事は、プログラミングの世界の旅が常に発見に満ちていることを示しています。この段階では、HTTP呼び出しを処理するためのMQL5関数の開発について考えました。一見、技術的な観点からは少々複雑に見えるかもしれませんが、実際には広大な可能性を切り拓くものです。

MQL5について考えるとき、私たちは通常、取引を直接連想します。例えば、Pythonで作られた三目並べゲームを実行するなど、まったく違うことに使えるとは誰が想像したでしょうか。このことは、プログラミング言語が私たちの通常の理解をはるかに超えた用途を見出すことができることを示しています。

Pythonについて言えば、三目並べゲームを作るのは、プログラミングの動きを見る楽しい方法でした。これは、異なる言語や技術がどのように関連しうるかをよりよく理解するのに役立つ実践的な例です。

APIの作成にFastAPIを選択したのは戦略的なものでした。高速かつ効率的で使いやすいFastAPIは、私たちのゲームとMQL5の橋渡しをする優れたツールであることが証明されました。単なる技術的な仲介物のように見えるAPIが、実はプログラミングの異なる世界をつなぐ重要な役割を担っているというのは興味深いことです。

最後に、MQL5でテストスクリプトを作成しました。理論がどのように現実になるかを確認するために、すべてを実践でテストしました。そこで私たちは、これらの技術を統合することの可能性を確信しました。スクリプトは、ちょっとした創造性と技術的知識があれば、驚くべきものを創造できることを示しています。

さて、私たちはこのことから何を学んだのでしょうか。プログラミングは、多くの驚きとチャンスがある広大な分野です。MQL5とPythonは、私たちが自由に使えるツールのほんの一部に過ぎず、一緒に使用することで、予想外の革新的な解を生み出すことができます。そしておそらく最も重要なことは、テクノロジーの世界では常に新しいことを学び、探求することができるということです。



MetaQuotes Ltdによりポルトガル語から翻訳されました。
元の記事: https://www.mql5.com/pt/articles/13714

添付されたファイル |
Parte_02.zip (35.95 KB)
ニューラルネットワークが簡単に(第68回):オフライン選好誘導方策最適化 ニューラルネットワークが簡単に(第68回):オフライン選好誘導方策最適化
最初の記事で強化学習を扱って以来、何らかの形で、環境の探索と報酬関数の決定という2つの問題に触れてきました。最近の記事は、オフライン学習における探索の問題に費やされています。今回は、作者が報酬関数を完全に排除したアルゴリズムを紹介したいと思います。
RestAPIを統合したMQL5強化学習エージェントの開発(第1回):MQL5でRestAPIを使用する方法 RestAPIを統合したMQL5強化学習エージェントの開発(第1回):MQL5でRestAPIを使用する方法
この記事では、異なるアプリケーションやソフトウェアシステム間の相互作用におけるAPI (Application Programming Interface)の重要性についてお話しします。アプリケーション間のやり取りを簡素化し、データや機能を効率的に共有することを可能にするAPIの役割を見ていきます。
MQL5入門(第5部):MQL5における配列関数の入門ガイド MQL5入門(第5部):MQL5における配列関数の入門ガイド
全くの初心者のために作られた第5部では、MQL5配列の世界を探検してみましょう。この記事は、複雑なコーディングの概念を簡素化し、明快さと包括性に重点を置いています。質問が受け入れられ、知識が共有される、学習者のコミュニティに仲間入りしてください。
リプレイシステムの開発(第37回):道を切り開く(I) リプレイシステムの開発(第37回):道を切り開く(I)
今回は、もっと前にやりたかったことをようやく始めます。確固たる地盤がないため、この部分を公に発表する自信がありませんでした。今、私にはその根拠があります。この記事の内容を理解することにできるだけ集中することをお勧めします。単に読むだけではなくて、という意味です。ここで強調しておきたいのは、この記事を理解できなければ、それに続く記事の内容を理解することはできないということです。