
MQL5入門(第7回):MQL5でEAを構築し、AI生成コードを活用するための初心者ガイド
はじめに
MQL5の旅へお帰りなさい。連載「MQL5プログラミング」の第7回を始めるにあたり、リアルな事例の魅力的な世界を探求する準備をしましょう。この章では、理論から実践へと進み、以前の記事で学んだアイデアを実践するための練習をおこないます。
擬似コードの意義を理解することは、私たちの調査にとって不可欠な要素です。擬似コードは、具体的なコード実装と抽象的なアルゴリズム概念の間のリンクとして機能します。コードを書き始める前に、人間が読める形式で素早く簡単にアイデアをスケッチすることができます。次のセクションでは、擬似コードの威力と、アルゴリズム戦略を実行可能なコードに変えるのに役立つ方法を見ていきます。
今日の技術状況における人工知能の急速な進歩は、コーディングの未来に関する議論を巻き起こしています。AIが生成するコードは、従来のコーディング知識の必要性に取って代わる可能性があるという意見もありますが、これほど現実離れしたことはありません。この記事では、この神話を払拭し、コードの書き方を知ることの重要性を強調します。AIが生成したコードをプログラミングプロジェクトにシームレスに組み込む方法を明らかにし、AIが私たちのスキルを置き換えるのではなく、補完するようにします。さっそくMQL5プログラミングをフル活用してみましょう。理論を実戦に応用する準備をし、魔法をかけましょう。
この記事では、以下のトピックを取り上げます。
- MQL5をマスターする
- 疑似コード
- AIでMQL5コードを生成する
前回の記事で、配列関数についてのビデオを掲載すると述べました。このビデオは、私たちがどこで中断したかを思い出すのにも役立つでしょう。
1.MQL5をマスターする
MQL5のすべてを一度に学ぶことは大変かもしれません。その代わり、プロジェクトに集中することで、学習プロセスをより管理しやすく、楽しいものにすることができます。変数、ループ、条件、関数など、以前の記事で説明した基本的な概念をマスターすることから始めましょう。これらの基本をしっかり理解したら、EA(エキスパートアドバイザー)やカスタム指標の構築など、興味のあるプロジェクトに着手しましょう。 プロジェクトに取り組むたびに、新たな困難が立ちはだかり、かけがえのない教訓を得ることになります。プロジェクトベースの学習を通じて、理論的な知識を実際のシナリオで活用することができ、MQL5の複雑さをより深く理解することができます。様々なプロジェクトに取り組みながら、MQL5プログラミングの複雑さに対応するために必要な知識と能力を徐々に習得していきます。
この学習方法を受け入れることで、プログラマーとして着実に、そして自信を持って前進していくことができます。MQL5の広大さに臆することなく、プロジェクトごとに取り組み、徐々に習熟度を高めていきましょう。したがって、プロジェクトベースの学習の旅を受け入れてください。これは、MQL5をマスターする最も確実な方法なのです。 私はこの連載を通して、プロジェクトベースの学習を使用することにしました。効果的だからです。MQL5の複雑さに真っ向から取り組むのではなく、実践的なプロジェクトに焦点を当て、経験を通じて学んでいきます。実際のプロジェクトに取り組むことで、トピックをより深く理解し、取引戦略を向上させる有用なスキルを身につけることができます。
初心者に優しい基本的なプロジェクトから始め、より複雑なプロジェクトへとステップアップしていきます。この方法論に従うことで、より複雑なトピックに進む前に、MQL5プログラミングを確実に理解することができます。プロジェクトごとに新しいスキルやアイデアを得て、徐々に上達していきます。この記事で取り上げるプロジェクトは、MQL5でEAを生成するシーケンシャルな手順の実践的な例となります。また、AIが生成したコードの利点をMQL5の文脈で最適化することも検討します。
ここで取り組む初心者向けのプロジェクトは、MQL5を使用した取引目覚まし時計です。このプロジェクトの特徴は、MQL5が提供する標準音声の代わりに、事前に録音した音声メッセージを使用していることです。音声メッセージを使用してアラートを設定できるアラームシステムの作成方法を学び、取引体験にパーソナライズされたタッチを加えます。
MQL5でEAを作成する最初のステップは、EAに必要なコンポーネントをすべてリストアップすることです。EAが正確な目標と計画に基づいて作成されることを保証するために、この計画段階は不可欠です。EAが市場データを分析し、取引判断を下すためには、まずEAが使用する取引戦略を決める必要があります。これには、エントリとエグジットのルール、リスク管理手順、その他特別な要件の指定が含まれます。
EAを作成する際には、作業するEAのタイプを知ることが重要です。EAの中には、あらかじめ決められたストラテジーを使用して取引をおこなうことを主目的とするものもあれば、リスク管理、データ監視、あるいは実際に取引をおこなわずに取引アラートを送信するなど、多様な機能を持つものもあります。どのようなEAを構築しようとしているのかを理解することで、効果的かつ効率的にEAを設計することができます。 この記事を読み終わる頃には、読者は音声アラートを送信できる機能的なEAを手に入れるだけでなく、EA開発のプロセスやAIを活用した取引戦略の可能性について貴重な洞察を得ることができるでしょう。
2.疑似コード
2.1. 疑似コードとは何か
疑似コードとは、コーディングを始める前にやりたいことを定義する方法です。擬似コードを使用することで、コーディングを始める前に目標を特定することができます。これは、プログラミング言語の構文を気にすることなく、平易で理解しやすい言葉でプログラムの目標を概説する手段です。プログラムがたどるステップやロジックを整理することで、後で実際のコードを書くのが容易になります。
たとえ
コンピュータプログラムを使用して2つの数字を足し合わせたいとしましょう。実際のコードを書く前に、腰を据えて必要なステップをすべて洗い出します。計画の立て方は疑似コードに似ています。これは、コードを書き始める前に、プログラムの機能を概説するのに役立ちます。
擬似コードはどのようなものになるか
最初のステップ:数字入力
- ユーザーに最初の数字と2番目の数字を入力してもらいます。
2番目のステップ:数字の足し算と結果の印刷
- 最初の数字と2番目の数字を足し、結果を印刷します。
この擬似コードの各ステップは、2つの数値を足し合わせるために実行しなければならない特定の動作を示しています。それは、レシピに従って料理をするときのように、プロセスをより小さく、より実行可能なタスクに分解する役に立ちます。このように段階を追って計画的にプログラムを書くと、数学の問題を指示に従って解くときのように簡単になります。
疑似コードが重要な理由
疑似コードはプログラミングの重要な要素であるにもかかわらず、経験豊富なプログラマーでさえもそれを見落とすことがよくあります。コードを書くことのスリルに没頭し、自分のプログラムに命が吹き込まれるのを見るのは簡単ですが、疑似コードでアイデアを計画し、アウトライン化することで、開発を大幅にスピードアップすることができます。多くの開発者がそうであるように、私もまた、大した計画もなくコーディングに飛び込んでいました。とはいえ、この方法は誤解を招き、効果がなく、時間のロスにもなりかねないです。
私の経験では、コーディングに入る前にまず擬似コードを書くことで、何時間もの苛立ちとデバッグから逃れることができました。結果を出そうと躍起になると、整理したり計画したりすることの重要性を過小評価しがちになります。とはいえ、疑似コードを使用することがプログラミングの助けになることは否定できません。明確さ、方向性、そして自信が与えられるからです。
さらに、擬似コードはEAの作成に重要な役割を果たし、MQL5でAIが生成したコードを理解しやすくします。複雑なアルゴリズムやAIを搭載したツールを扱う場合、擬似コードは抽象的な概念と実用的な実装の橋渡しの役割を果たします。擬似コードは、開発者がハイレベルなアイデアを実行可能なステップに変換し、AIが生成したコードをMQL5プログラムに統合するプロセスをより簡単でアクセスしやすくします。擬似コードを使用してEAのロジックを計画し、アウトライン化することで、コードが適切に構造化され、効率的で、保守しやすくなります。
擬似コードを理解するもうひとつの利点は、MQL5コミュニティ内でのフリーランスの機会に役立つことです。擬似コードを通じてプログラミングの計画や戦略をクライアントに効果的に伝えることで、自分の専門性をアピールし、クライアント固有のニーズに合わせたEAを構築するプロジェクトを獲得する可能性を高めることができます。
2.2. 疑似コードの書き方
擬似コードを書く最初のステップは、プログラムの目標をより小さく、実行可能なタスクに分割することです。次に、各プロセスのステップをシンプルでわかりやすい言葉で説明します。特定のプログラミング言語の構文にとらわれず、プログラムの一般的なロジックとフローに集中します。
これから取り組むEAを見てみましょう。例として、特定の時間にリマインダーを設定できる取引アラームに取り組む予定です。このプロジェクトで特別なのは、リマインダーを設定する際に好きな音声を選べることです。この擬似コードは次のように書くことができます。
最初のステップはEAの初期化です。
- 以下のような必要な変数や設定を定義し、構成します。
2番目のステップは、リマインダーを設定することです。
- ユーザーが希望するアラーム時刻を入力し、各リマインダーの音声を選択できるようにします。
- アラーム時刻と選択した音声をそれぞれの変数に保存します。
3番目のステップは、取引時間帯を監視することです。
- 現在時刻と指定されたアラーム時刻を比較し続けます。
- アラーム時刻に達すると、オーディオアラートをトリガーします。
4番目のステップは、オーディオ警告を鳴らすことです。
- 設定したリマインダー時刻をトレーダーに通知します。
- 選択した音声ファイルを再生し、トレーダーに注意を促します。
この擬似コードの各ステップは、EAが実行する特定のタスクやアクションを表しています。実際のコーディング作業を始める前に、プログラムの目的を小さなステップに分解し、簡単な言葉で説明することで、EAのロジックと構造を効率的に計画することができます。
3. AIでMQL5コードを生成する
コーディングの過程は人工知能(AI)によって大きく進歩しました。新しいアプローチは、開発者がEAを作成する方法を完全に変えます。コード生成の自動化は、AIを搭載したツールによるMQL5プログラミングの大きな利点となっています。これらのツールは、高度なアルゴリズムを使用して、入力データを分析することにより、高レベルの命令と擬似コードを実行可能なMQL5コードに変換します。人工知能によって反復的なタスクを自動化して手作業を減らすことで、開発期間を短縮し、コード生成の生産性を向上させます。
ただし、このような発展があったとしても、AI技術はまだ初期段階にあり、コーディングエラーが起こりやすいです。AIが生み出すコードは完璧ではない場合があり、修正が必要な場合があるということを認識することが重要です。したがって、AIが生成したコードを効果的に使用するためには、開発者にはMQL5の基礎または中級の理解が必要です。AIがシステムによるミスを認識し修正できるようにすることで、AIが生成するコードの正しさと信頼性を保証するためにです。AIがコード作成過程を加速させるとはいえ、開発者は完成品の品質を保証するために、情報を入手し、注意深く見守る必要があります。
3.1. 正確なAIコードを生成する方法
ステップごとの過程は次の通りです。
3.1.1 EA擬似コード
AIを使用してMQL5コードを生成する前に、詳細な擬似コードを作成します。EAの目標をより小さく、実行可能なステップに分割し、各ステップの条件と行動の概要を説明します。
MQL5コードを生成するAIを搭載したツールを選択した後のステップは、EAのロジックと機能の概要を示す詳細な擬似コードを提供することです。この段階では、擬似コードの各ステップごとに、EA動作の詳細について質問し、より深く掘り下げるよう促されます。擬似コードを実行可能なステップに分解し、各ステップで発生する質問に対処することで、EAを包括的に設計し、取引戦略を効果的に実行することができます。
最初のステップはEAの初期化です。
- 以下のような必要な変数や設定を定義し、構成します。
このステップでは、次のような質問が投げかけられます。
- EAが機能するために必要な変数は?
- 変数に使用するデータ型は?
- 変数のデフォルト値は?外部の依存関係やリソースを読み込む必要性は?
これらの質問により、EAを初期化する最初のステップが効果的に実行され、必要な変数と設定が構成され、録音された音声メッセージが適切に読み込まれ、指定された取引セッション中に再生できるように準備されていることを確認できます。
2番目のステップは、リマインダーを設定することです。
- ユーザーが希望するアラーム時刻を入力し、各リマインダーの音声を選択できるようにします。
- アラーム時刻と選択した音声をそれぞれの変数に保存します。
このステップでは、次のような質問が投げかけられます。
- アラームの時刻の形式は?
- ユーザーがリマインダーの音声を選択する方法は?
- 選択されたアラーム時刻とアラーム音声の保存場所は?
- ユーザーは既存のリマインダーを修正/削除できるのか?
3番目のステップは、取引時間帯を監視することです。
- 現在時刻と指定されたアラーム時刻を比較し続けます。
- アラーム時刻に達すると、オーディオアラートをトリガーします。
このステップでは、次のような質問が投げかけられます。
- EAが現在時刻と指定されたアラーム時刻を継続的に比較する方法は?
- アラーム時刻に達した場合に取られるアクションは?
- EAがアラーム時刻を確認する頻度は?
2番目のステップは、リマインダーを設定することです。
- 4番目のステップは、オーディオ警告を鳴らすことです。
- 設定したリマインダー時刻をトレーダーに通知します。
- 選択した音声ファイルを再生し、トレーダーに注意を促します。
このステップでは、次のような質問が投げかけられます。
- 録音した音声メッセージをMQL5プロジェクトに追加する方法は?
- トレーダーに警告するために選択した音声ファイルを再生する方法は?
この種の質問は、AIコードを作成するプロセスに不可欠です。それらに丁寧に対応することで、AIによるコード生成の正確なロードマップを作成します。この手順により、最終的なコードが私たちのプロジェクトの複雑さを正確にとらえ、EAの作成にAI技術をスムーズに取り入れるための扉が開かれます。
3.1.2. コード生成
与えられたアクションと条件に基づいて、擬似コードから導き出されたいくつかの質問をガイドとして、ステップごとにでMQL5コードを生成します。選択したAIを搭載したツールを使用して、答えのない擬似コードセグメントを解読し、MQL5の実行可能コードに変換します。各ステップに順番に対処することに集中して、生成されたコードが、意図されたロジックと機能を適切に反映していることを確認します。
AIが生成するコードは、私たちが採用する最終バージョンではないことを理解することが重要です。AIが生成するコードは、むしろ、EAの作成プロセスで特定の目的を達成する方法を初心者に示す、指導モデルとして機能します。
初心者のうちは、これらの質問に対する答えのいくつかを特定することから始め、そうすることで、プロジェクトで取るべき次のステップをよりよく理解することができます。これは、単にAIに質問して答えを期待するのではなく、プロジェクトの詳細をAIに紹介することでもあることを理解することが重要です。AIと対話し、関連する質問をすることで、プロジェクトに対するAIの理解度を積極的に向上させることができます。この交換は、最終的にあなたが使用するために生成されるコードの精度を向上させるのに役立ちます。AIとコミュニケーションをとり、プロジェクトに関する背景情報を与えれば与えるほど、AIはコーディング作業をうまく手助けしてくれるようになります。
注:プロジェクトに関する質問をAIに投げかける前に、まずプロジェクトの詳細な説明をすることが不可欠です。この紹介は、AIがプロジェクトの背景と目的を理解するための土台となります。
AIからコードを生成する方法を示すために、質問の1つを使用して最初のステップから始めてみましょう。
EAが機能するために必要な変数は?
AIの回答
取引アラームプロジェクトでは、EAが効果的に機能するためにいくつかの変数が必要です。これには以下が含まれます。
- アラーム時刻変数:ユーザー定義のアラーム時刻を格納する変数。これらは、リマインダーがトリガーされるべき取引日中の特定の時間を表すdatetime変数である可能性があります。
- 音声選択変数:各アラームに対してユーザーが選択した音声を保存するための変数。選択された音声ファイルのファイルパスまたはファイル名を含む文字列変数かもしれません。
- 現在時刻の変数:現在時刻を保持する変数で、リマインダーをトリガーするためにアラーム時刻と連続的に比較されます。
- 音声ファイルパスの変数:ユーザーが選択可能な音声ファイルのファイルパスを格納する変数。
- 通知メッセージ変数:アラームに付随する通知メッセージを格納する変数。
- その他の構成変数:EAの動作を制御するための変数や、ユーザーの環境設定を保存するための変数など、プロジェクトの特定の要件に応じて、追加の変数が必要になる場合があります。
さて、このような理論的な答えを手にしたところで、AIの回答が常に完璧とは限らないことは明らかです。ただし、事前にプロジェクトを詳しく説明することで、AIはより包括的な回答を提供できるようになっています。この詳細な概要によって、AIは質問の文脈を理解し、より洞察力のある回答を提供できるようになります。このアプローチは、AIによる回答の質を高め、プロジェクトの要求とAIの能力の相互作用をより実りあるものにします。
さらにわかりやすい説明のために、AIにコード例を含めるよう求めることができます。この追加によって、理論的な概念が実際のコード実装にどのように反映されるかがさらに説明され、プロジェクトの機能の実用的なデモンストレーションが提供されます。
AIの回答
// Define variables for alarm times datetime Alarm1; datetime Alarm2; datetime Alarm3; // Define variables for sound selection string Sound1 = "alert1.wav"; string Sound2 = "alert2.wav"; string Sound3 = "alert3.wav"; // Define variables for current time and notification message datetime CurrentTime; string NotificationMessage; // Define other configuration variables int NumberOfAlarms = 3;
この例では
- Alarm1、Alarm2、Alarm3は、ユーザーが定義したアラーム時刻を格納するための日時変数です。
- Sound1、Sound2、Sound3は、各アラームで選択された音声ファイルのファイルパスまたはファイル名を含む文字列変数です。
- NotificationMessageは、通知メッセージを格納する文字列変数です。
- NumberOfAlarmsは、ユーザーが設定できるアラームの総数を示す整数変数です。
提供された説明に基づいて、AIはいくつかの答えを提示しますが、完璧ではありませんが、この回答からいくつかの質問を抽出し、それを自分の仕様に合わせて絞り込むようAIに依頼することができます。
AIが提供するコードは、プロジェクトに必要な変数を特定するのに役立ちます。ただし、今回のプロジェクトでは、音声とアラームのパラメータをユーザーが入力できるようにしたいので、擬似コードのステップ2に関するいくつかの質問が生じます。
- ユーザーがリマインダーの音声と時刻を選択する方法は?
- 選択されたアラーム時刻とアラーム音声の保存場所は?
これらの質問は、EAにユーザー入力機能を実装する必要性を強調しています。ユーザーは、各リマインダーに好みの音声を選択し、対応するアラーム時刻を指定できるべきです。選択したアラーム時刻とアラーム音声は、必要なときにアクセスして利用できるように、EA内の変数に保存する必要があります。これにより、EAはユーザーの好みに合わせて作動し、指定された時刻に指定された音声で効果的にアラームを作動させることができます。
AIの回答
各リマインダーにユーザーが好みの音声を選択できるように、inputキーワードを使い、文字列型を指定して変数を定義することができます。この変数には、ユーザーが選択した音声ファイルのファイル名が格納されます。コードを修正する方法は以下の通りです。
input string Alarm1 = "00:00:00"; input string Alarm2 = "00:00:00"; input string Alarm3 = "00:00:00"; input string Sound = ""; // User-selected sound filename
この設定で、ユーザーはリマインダーに使用したい音声のファイル名を入力できます。このSound変数を使用して、リマインダーがトリガーされた時に選択した音声を再生することができます。
これは、疑似コードをステップごとに追っていくことがいかに重要かを示しています。まず、EAが意図したとおりに機能するために不可欠な変数を決定します。プロジェクトの基盤は、これらの変数によって形成されます。次に、ユーザーとのインタラクションの要素が2番目のステップで扱われ、好みの音声ファイルと希望するアラーム時刻を入力するオプションがユーザーに与えられます。この方法論に従えば、プロジェクトのあらゆる側面が理路整然と処理され、より綿密な理解が保証されます。この段階で提供されるコードは最終バージョンではないかもしれませんが、AIとの対話は、プロジェクトの要件を洗練させ、明確にするのに役立ち、より堅牢な実装につながります。
次に3番目のステップに進みます。このステップでは、擬似コードの進行に従って、取引時間帯を監視します。ここでは、次のような質問が生じます。
- EAが設定したアラーム時刻と現在時刻との差を記録する方法は?
- アラーム時刻に起こることは?
これらの質問に答えることで、開発プロセスが導かれ、EAは指定されたアラーム時刻を監視し、必要に応じて適切な措置を取ることができます。
AIの回答
現在時刻と指定されたアラーム時刻を継続的に比較するには、取引プラットフォームの各ティックで実行されるループを使用することができます。このループの中で、現在時刻がユーザーによって設定されたアラーム時刻のどれかと一致するかどうかを確認します。
// Inside the OnTick() function // Get the current time datetime currentTime = TimeLocal(); // Check if the current time matches any of the alarm times if(currentTime == StringToTime(Alarm1) || currentTime == StringToTime(Alarm2) || currentTime == StringToTime(Alarm3)) { // Trigger the audio alert PlaySound(Sound); }
このコードスニペットでは
- TimeLocal()を使用して現在時刻を取得します。
- StringToTime()を使用して、現在時刻とユーザーが指定した各アラーム時刻を比較します。
- 現在時刻がアラーム時刻のいずれかに一致する場合、PlaySound(Sound)を使用して選択した音声を再生することで、オーディオアラートをトリガーします。
擬似コードで説明した段階を経るにつれて、AIからの返答はより正確になっていきます。このことは、プロジェクトを実行可能な段階に計画的に分割することの意義を浮き彫りにしています。 AIの説明は、ステップを追うごとに、私たちのプロジェクトの目的に近づいていきます。それは、プロジェクトのより困難な局面へのアプローチ方法や、開発プロセスそのものへのアプローチ方法をよりよく理解する助けとなります。
AIと反復的に関わることは、非常に有益なプロセスであることが証明されています。プロジェクトに協力するだけでなく、その複雑さをどのように扱うかについての理解を広げてくれています。AIと対話しながら、プロジェクトの多面的な側面を効果的に処理する方法について、より多くの洞察が得られます。
擬似コードの4番目のステップに進むにつれて、検討を要する新たな疑問が浮かび上がってきます。
- 録音した音声メッセージをMQL5プロジェクトに追加する方法は?
- トレーダーに警告するために選択した音声ファイルを再生する方法は?
これらの疑問に対処するためには、オーディオファイルをMQL5プロジェクトに統合し、指定されたアラーム時刻に選択した音声ファイルの再生をトリガーするロジックを実装する必要があります。アラーム取引クロックが意図したとおりに機能するよう、これらの点をさらに掘り下げてみましょう。
AIの回答
MQL5プロジェクトにボイスメッセージを追加するには、以下の手順に従ってください。
- 互換性のある形式(WAVなど)で録音した音声メッセージを用意します。
- MetaTrader 5のインストールディレクトリにSoundsというフォルダがあります。このフォルダを開きます。
- 音声ファイル(WAV形式)をSoundsフォルダにコピーします。音声ファイルの形式が異なる場合(MP3など)、Soundsフォルダにコピーする前にWAV形式に変換する必要があります。
- 音声ファイルをSoundsフォルダにコピーすると、MetaTrader 5で使用できるようになります。MQL5のコードでPlaySound()などの関数を使用する際に、音声ファイルをファイル名で参照できます。
- PlaySound()関数を使用して、音声メッセージの再生をトリガーします。
- 例えば、alert.wavという名前の音声ファイルをSoundsフォルダにコピーした場合、MQL5のコード内でこの音声ファイルを次のように再生することができます。
PlaySound("alert.wav");
alert.wavを音声ファイルのファイル名に置き換えます。MQL5コードで音声ファイルを参照する際のエラーを避けるため、ファイル名が(大文字小文字を含め)正確に一致していることを確認してください。
それだけです。これで音声ファイルがMetaTrader 5に正常に追加され、EAやスクリプトで使用できるようになります。
AIが出した回答はすべて、プロジェクトが提起した問題に対処する方法を示しています。AIにすべての仕事を期待するのではなく、この方法論的なアプローチこそが、プロジェクトでAIと協力する最善の方法なのです。人工知能(AI)は人間に取って代わるためにあるのではなく、むしろ人間の専門知識や創造性を高め、仕事をしやすくするための助けとなり、洞察を与えてくれるものだということを理解することが重要です。このようにAIを活用することで、その生産性や問題解決能力を向上させたり、彼らのプロジェクトに対する理解を深めたりすることができます。
3.1.3. 反復テスト
AIのおかげでプロジェクトの進め方をよりよく理解できるようになったので、次のステップは段階的なテストとデバッグを実施することです。スクリプトを使用してコードのパフォーマンスを分析し、エラーや問題を見つけることが、デバッグの最も効果的な方法です。コードを小さな部分に分割してそれぞれを個別にテストすることで、問題をよりうまく切り分け、プログラム全体が意図したとおりに動くことを確認できます。反復的にコードをテストしてデバッグすることは、その品質を向上させ、実用的な状況での信頼性と機能性を保証するために極めて重要です。
さて、例えば、ユーザーから要求されるすべての入力がどのように機能するかをテストしてみましょう。
// Define input variables input string Alarm1 = "00:00:00"; // Default value for first alarm input string Alarm2 = "00:00:00"; // Default value for second alarm input string Alarm3 = "00:00:00"; // Default value for third alarm input string Sound = "alert.wav"; // Default sound file //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { // Initialization function, executed once when the EA is launched return 0; // Return 0 to indicate successful initialization } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { // Deinitialization function, executed before the EA is removed // Perform any cleanup or necessary actions here } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { // Convert alarm strings to datetime objects datetime first_Alarm = StringToTime(Alarm1); datetime second_Alarm = StringToTime(Alarm2); datetime third_Alarm = StringToTime(Alarm3); // Get current local time datetime Time = TimeLocal(); // Check if current time matches any of the alarm times if(first_Alarm == Time || second_Alarm == Time || third_Alarm == Time) { // Play sound if any alarm time is reached PlaySound(Sound); } }
説明
このコードスニペットは、ユーザー入力がプログラム内でどのように機能するかを理解するためのテストグラウンドとして機能します。入力変数Alarm1、Alarm2、Alarm3、Soundを定義し、ユーザーがアラーム時刻を指定し、音声を選択できるようにします。初期化中、これらの変数の値はコンソールに出力され、ユーザー入力を視覚的に確認することができます。プレースホルダー関数のOnInit()とOnDeinit()は、それぞれEAの初期化と非初期化を処理し、OnTick()はティック処理のプレースホルダーとして機能します。
出力
コードが正しく機能することを確認したら、プログラムの他の部分のテストに進むことができます。例えば、スクリプトを使用してテストしたいとしましょう。テストしてみたいことのひとつに、現地時刻の出力があります。このテストは、指定された時刻にアラームを作動させるために重要な現在時刻を、プログラムが正確に取得し、表示することを確認するのに役立ちます。
例
void OnStart() { // Get the current local time datetime localTime = TimeLocal(); // Print the local time to the console Print("Current Local Time: ", localTime); }
説明
このコードスニペットはOnStart()関数を定義しており、MQL5でスクリプトが実行を開始したときにトリガーされます。TimeLocal()関数を使用して現在のローカル時刻を取得し、Print()関数を使用してこの時刻と説明メッセージをコンソールに表示します。これによって開発者は、テストやデバッグの際に、時刻の検索や出力機能の正確性を素早く検証することができます。
このコードで、コンピュータから現地時間を正確に取得する能力をテストできました。これにより、私たちのプログラムは、プロジェクトにおける様々な時間ベースの機能にとって不可欠なローカル時刻データにアクセスし、効果的に利用することができます。同様に、このテストとデバッグの方法を残りのコードにも適用し、各コンポーネントが意図したとおりに機能することを確認してから、より大きなプロジェクトに統合すべきです。
コンピュータから現地時刻を正確に取得する能力は、このコードでテストできています。私たちのプロジェクトにおける時間ベースの機能の多くは、プログラムがローカル時刻データにアクセスし、それを使用する能力に依存しているため、これによってそれが可能であることが保証されます。プロジェクト全体に組み込む前に、すべての部分が意図したとおりに動くことを確認することで、コードの残りの部分にもこのテストとデバッグのアプローチを使用するべきです。
コードのすべてのステップがテストされたので、テストされたコードセグメントを意味のあるプログラムに統合するようAIに求めることができます。ただし、期待に満たない場合は、状況によっては自分で調整することもできます。その絶え間ないガイダンスとサポートにより、AIはあなたの仕事を簡素化し、時間を大幅に節約しています。AIの回答
// Define input variables input string Alarm1 = "00:00:00"; // Default value for first alarm input string Alarm2 = "00:00:00"; // Default value for second alarm input string Alarm3 = "00:00:00"; // Default value for third alarm input string Sound = "alert.wav"; // Default sound file //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { // Initialization function, executed once when the EA is launched return 0; // Return 0 to indicate successful initialization } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { // Deinitialization function, executed before the EA is removed // Perform any cleanup or necessary actions here } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { // Convert alarm strings to datetime objects datetime first_Alarm = StringToTime(Alarm1); datetime second_Alarm = StringToTime(Alarm2); datetime third_Alarm = StringToTime(Alarm3); // Get current local time datetime Time = TimeLocal(); // Check if current time matches any of the alarm times if(first_Alarm == Time || second_Alarm == Time || third_Alarm == Time) { // Play sound if any alarm time is reached PlaySound(Sound); } }
このブロックはOnTick()関数を定義しており、チャートの各ティックで実行されます。EAの機能の中心です。これがその動作です。
- StringToTime()関数を使用して、アラーム時刻文字列(Alarm1、Alarm2、Alarm3)をdatetimeオブジェクトに変換します。
- TimeLocal()関数を使用して現在のローカル時刻を取得し、Time変数に格納します。
- 現在時刻がアラーム時刻のいずれかと一致するかどうかを確認します。一致する場合、PlaySound()関数を使用して指定された音声を再生します。
注:入力を編集するにはF7ボタンを押します。
結論
まとめると、この記事ではMQL5習得のためのプロジェクトベースの学習について徹底的に概観しました。複雑な概念を管理しやすいプロジェクトに分解することで、学習者はMQL5プログラミングの理解と習熟を深めることができます。AIツール、反復テスト、ステップごとの擬似コードを使用することで、開発者は効率的にEAを作成し、取引戦略を改善することができます。MQL5の習得は短距離走ではなくマラソンであり、プロジェクトベースの学習を取り入れることは熟達への道のりに不可欠な第一歩であることを思い出してください。プロジェクトに参加し、コードを試し、開発者として学び、成長し続けるのです。
MetaQuotes Ltdにより英語から翻訳されました。
元の記事: https://www.mql5.com/en/articles/14651





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