English Русский 中文 Español Deutsch Português
ビデオ:シンプルな自動取引 – MQL5でシンプルなエキスパートアドバイザーを作成する方法

ビデオ:シンプルな自動取引 – MQL5でシンプルなエキスパートアドバイザーを作成する方法

MetaTrader 5エキスパートアドバイザー | 16 8月 2022, 10:24
342 0
Raimund Bauer
Raimund Bauer

第1部 – シンプルなエキスパートアドバイザーの作成方法


エキスパートアドバイザー(EA)とは、私たちが今見ているものです。EAは、MetaTrader内で動作し、独自にポジションを開閉できる自動化されたアプリケーションです。

このビデオでは、EAを最も基本的な形式で作成する方法を学びます。ここの小さなボタンをクリックするか、MetaTraderでF4を押してMetaEditorウィンドウを開きます。その後、[ファイル]/[新規作成]/[エキスパートアドバイザ(テンプレート)]をクリックして、[次へ]をクリックします。このバージョンを「SimpleExpertAdvisor」と呼びます。 その後、[次へ]/[次へ]/[完了]をクリックして終了です。

このバージョンは人間が読むことができ、コンパイルすると、MetaTrader用の読み取り可能なバー+ジョンが作成されます。  既にここにあるので、新しいチャートウィンドウを開き、新しいファイルをチャートにドラッグします。しかし、現時点ではロジックが不足しているので、これに続くビデオで追加します。


第2部 – 関数とは


MQL5は関数を使用して物事を自動化します。EAテンプレートには既にいくつかの関数があります。OnInit関数はEA初期化関数で、EAをチャートにドロップすると一度だけ実行されます。この関数には戻り値があるため、成功したかどうかを確認できます。

ここでこれらの値のいずれかを返します。これにより、initプロセスが機能したかどうかがわかります。EAが閉じられる前にクリーンアップするOnDeinitと呼ばれる関数もあります。これはvoidで何も返しません。voidは何かが値を返さない場合に使用されます。

この場合、理由は非常に単純です。OnDeinitはプログラムで実行される最後のものであり、その後プログラムが閉じられるため、戻ることはできません。OnTick関数もあります。この関数は、チャート上で価格が変化するたびに実行されます。ほとんどのコーディングロジックはOnTick関数によってトリガーされ、いずれかのチャートで価格が変化するたびに、これら2つの括弧の間のすべてが実行されます。テンプレートの残りの部分を取り除くことができます。

この単純な例では、OnTick関数のみが必要です。これは、別の関数を呼び出して現地時間を表示するために使用されます。チャートで何かを見たいときは、Comment関数を使用します。これは、チャートの左上隅にユーザー値を表示します。これは丸括弧で囲まれたいわゆるパラメータを取ります。「Hello」のようなテキストにすることができます。これはすでに完全なEAです。

これでコンパイルできます。ここのボタンをクリックしてMetaTraderに戻り、「SimpleExpertAdvisor」をチャートにドラッグします。[OK]ボタンをクリックして確定すると、ここで設定したテキスト「Hello」が表示されます。ただし、Comment関数はさらに多くのことができます。

現地時間を表示したかったので、「The local time is」としましょう。 コンマを使用して、別のパラメーターを渡すことができます。この場合はTimeLocalです。 コードを再コンパイルしてみましょう。EAで「The local time is」と表示され、現地時間がすぐにチャートに表示されます。

このビデオでは、価格が変わるたびに呼び出されるOnTick関数などの組み込み関数について学びました。また、Comment関数を使用して、テキストの後に計算値を出力する方法も学びました。たとえば、数行のMQL5コードを使用して、MetaTrader 5に「The local time is」を出力させ、その後に計算された時間をチャート上に表示させます。


第3部 – ストラテジーテスターの使用方法

このビデオでストラテジーテスターの使い方を学びたいと思います。これは「バックテスト」とも呼ばれるストラテジーテストで、 履歴データに基づいてEAで取引し、有益かどうかを確認するために使用します。その方法を見てみましょう。前回、テキスト「Hello MQL5」を印刷する簡単なテンプレートを作成しました。ここで、この簡単な例でストラテジーテストまたはバック テストをおこないたいと思います。

これをおこなうには、[表示]/[ストラテジーテスター]をクリックするか、CTRLとRを押します。[ストラテジーテスター]パネルがここに表示されます。ファイルを選択して、前回作成した単純なEA (SimpleExpertAdvisor)から始めます。

通貨ペアのオーストラリアドルとカナダドルを1分で使用して、カスタム期間(この場合は2017年)を選択します。MetaTrader 5の利点の1つは、履歴データをダウンロードする必要がないことです。履歴データがない期間を選択すると、これは自動的におこなわれます。

これらはすべてバックグラウンドで実行されます。この設定は品質に関するものです。それは、「open, high, low, and close」を表すOHLCと呼ばれます。 ローソク足の上にマウスを移動すると、始値、高値、安値、終値が表示されます。

以下がその様子です。多くの人は、複数の価格変化があるローソク足のすべてのティックがシミュレートされることを知りません。ここで[すべてのティック]を選択したとしても、ここの大きなローソク足が24時間/日のローソク足だった場合、始値、高値、安値、終値を除くこの24時間のすべての価格変化はランダムに計算されます。ここの大きなローソク足が24時間/日ローソク足であってもです。

それがどのように機能するかについてもっと知りたい場合は、「ヘルプ」ファイルを開いて指示を読むことができます。誰も未来を予測できるとは思わないので、私は決して早送りを使用しません。低速のネットワークをシミュレートできる実行設定がありますが、それも使用しません。

テスト口座には金額があります。米ドル、ユーロ、その他好きな通貨で任意の金額に設定できます。レバレッジがあります。レバレッジが高ければ、少額の口座でより多くの資金を取引できます。

最適化については、後のビデオで説明します。今のところ、[開始]をクリックするだけで、チャートに「Hello MQL5」というテキストが表示されます。これはあまりエキサイティングではないので、変更してTimeLocal関数を使用してみます。

コードを再コンパイルし、テストを再開すると、価格が変更されるたびに計算された現地時間の出力が表示されます。このビデオでは、ストラテジーテスターの使用方法と現地時間を出力する方法を学習しました。そして、ほんの数行のMQL5コードでそれをおこないました。

 

第4部 - データ型について


このビデオでは、データ型とその内容について説明します。このストラテジーテストでは、現地時間には特定の形式があることがわかります。何かを計算するときは、適切な型のデータを使用することが重要です。その方法を見てみましょう。

小さなアイコンをクリックするか、F4を押して開始します。その後、[ファイル]/[新規作成]/[エキスパートアドバイザ(テンプレート)]をクリックして、[次へ]をクリックすると、MetaEditorが表示されます。このファイルを「SimpleDataTypes」と呼びます。[次へ]/[次へ]/[完了]をクリックします。これで、OnTick関数とここにある2行のコメント行の上のすべてを削除できます。

最も明白なタイプのデータであるテキストから始めましょう。stringデータ型を使用して、このテキストをテキストという文字列変数に割り当てますが、文字列変数を使用して計算をおこなうことはできません。何かを理解するには、正しい種類の値を使用する必要があります。

たとえば、口座の残高を取得するには、浮動小数点型であるdouble型をAccountInfoDouble関数とこの式(すべて大文字)と共に使用します。これで正しい値が得られるはずなので、Comment関数を使用してテキストの後に計算値を表示してみましょう。ここで[コンパイル]ボタンをクリックするか、F7キーを押してみましょう。

問題なく動作するはずです。動作したら、ここの小さなアイコンをクリックするか、F4を押してMetaTraderに戻ってください。前回のビデオでは、このストラテジーテスターの使用方法を学習しました。[ファイル]/[ストラテジーテスター]をクリックし、新しいファイル「SimpleDataTypes」を選択して、新しいテストを開始します。値が100,000.0になっていることがわかります。

ここでそれを変更して、新しいテストを開始します。今度は、ドットの後ろに数字が表示されます。これが、浮動型の値を扱うときにdoubleを使用する理由です。TimeLocal関数については、前回の動画ですでにご存じでしょう。datetime型の変数を返します。

このテストの出力を作成し、コードを再コンパイルして、前のテストを停止し、新しいテストを開始しましょう。これで、出力が特別な形式になっていることがわかります。そのため、時刻と日付が必要な場合はいつでもdatetimeを使用したいと考えています。整数にはinteger型を使用できます。

この場合、AccountInfoIntegerを使用して口座番号を取得します。 この定数は、アカウントログイン(ACCOUNT LOGIN)に使用します。これがどのようになるか見てみましょう。

文をtrueまたはfalseだけにしたい場合は、bool型を使用します。この出力がどのようになるか見てみましょう。「The value is: true」 これらは、いくつかの一般的なデータ型です。「ヘルプ」をクリックするか、F1を押すと、データ型に関するMQL5リファレンスの記事が見つかるはずです。使用できる型は他にもいくつかあり、複雑なデータ型を使用することもできます。

このような小さなテストプログラムを作成することをお勧めします。この短いビデオでは、自分で書いた数行のMQL5コードを使用して、さまざまな型のデータをチャートに直接配置する方法を見ました。


第5部 - 計算方法


このビデオでは、簡単な数学について説明します。このようなEAを使用して自動的に取引する場合、いくつかの計算をおこなう必要があります。

たとえば、私の場合、許容される最大ポジション数を計算しましたが、通貨ペアの利益も計算されていることがわかります。基本的な計算方法を学びましょう。これをおこなうには、ここの小さなアイコンをクリックするか、F4を押してMetaEditorウィンドウを開きます。

次に、テンプレートから[ファイル]/[新規作成]/[エキスパートアドバイザ(テンプレート)]をクリックして、[次へ]をクリックし、ファイルに「SimpleCalculations」という名前を付けて、[次へ]/[次へ]/[完了]をクリックします。ここで、OnTick関数より上のすべてを削除できます。また、2行のコメント行も削除しましょう。まず、2つのint変数が必要です。「a」の値は5、「b」の値は3です。

Commentを使用して、「a」と「b」が与えるものを示します。ここで[コンパイル]ボタンをクリックしてみましょう。間違いはないので、ここをクリックするか、F4を押してMetaTraderに戻ることができます。

MetaTraderの[表示]/[ストラテジーテスター]に移動して、新しい「SimpleCalculations.ex5」ファイルを選択し、可視化モードをオンにしてテストを開始します。出力は次のとおりです。5+3=8であるため、結果は8です。次の「"a" - "b"」を試してみましょう。再コンパイルして、新しいテストを開始します。今回は、5-3=2なので、結果は2です。

2つの数値を掛け合わせてみましょう。5x3=15なので、再コンパイルしましょう。「a」を「b」で割ったら、どうなるでしょうか。答えは1です。整数変数を使用したため、5/3=1であり、これが答えが1である理由です。

そのため、ここには浮動小数点型の値はありません。結果が期待したものと一致しないため、ほとんどの人が混乱します。データ型としてdoubleを使用して再コンパイルすると、結果は1.6666666667になります。これのほうが良いです。

「a」に「a」を足して「b」をかけるとどうなると思いますか。「a」は5に等しいので、「a」+「a」は10に等しくなります。「b」は3に等しく、10の3倍は30に等しくなります。

全部足して答えは20です。これは、乗算または除算が常に最初におこなわれるためです。これを変更したい場合は、括弧を使用する必要があります。これは、括弧内が乗算または除算の前に計算されるためです。今回の結果は30です。

F1を押してMQL5リファレンスを開くと、他の多くの数学関数が見つかります。このような小さなプログラムを作成して、それらがどのように機能するかを理解することをお勧めします。将来、より複雑な計算をおこなうことになり、何が機能しているのか、なぜ機能しているのかを理解することがさらに難しくなるためです。

この短いビデオでは、非常に基本的な数学計算をおこなう方法を学習し、数行のMQL5コードを使用して自分で実行しました。

 

第6部 - ifで条件を確認する方法


このビデオでは、特定の条件が真かどうかを調べます。このEAのような自動化されたプログラムを使用する場合、ストキャスティクスが点線より上か下か、価格が移動平均より上か下かなど、何かが真か偽かをチェックする必要があります。

それでは、その方法を学びましょう。この小さなアイコンをクリックするか、F4を押してMetaEditorを開きます。ここで、テンプレートから[ファイル]/[新規作成]/[エキスパートアドバイザ(テンプレート)]をクリックして、[次へ]/[次へ]/[次へ]/[完了]をクリックします。

これで、OnTick関数より上のすべてを削除できます。また、2行のコメント行も削除しましょう。2つの整数変数を使用することから始めます。「a」は5で「b」は3です。「a」が5より大きい場合、「a is greater than 5」というテキストが表示されるようにします。そうでない場合は、else文を使用できます。そのため、どの条件もtrueでない場合は常に、「Conditions not true」というテキストを表示したいと考えています。 [コンパイル]をクリックするか、F7を押してください。ここに間違いはありません...

Comment文を忘れたので警告が出ましたが、これで問題ないので、このボタンをクリックするか、F4を押してMetaTraderに戻りましょう。MetaTraderで、[表示]/[ストラテジーテスター]をクリックします。 CTRLとRを押すこともできます。ここでは、ファイル「SimpleIfCondition.ex5」を選択します。

可視化モードをオンにして、テストを開始します。「a」が5より大きくないために「Conditions not true」というメッセージが表示されるので、別のif文を追加して、「a」が5に等しいかどうかを確認します。それでは、コードを再コンパイルし、テストを停止して、新しいテストを開始しましょう。

今度は「a equals 5」が結果として表示されます。ここで、「b」が3に等しいかどうかを確認するために、別のif文を追加するとどうなるでしょうか。コードを再コンパイルして、別のテストを実行しましょう。

画面には「b equals 3」しか表示されません。この場合の文は無視されるため、代わりに2つのif文を使用できます。最初の例では「aが5」かどうかを確認し、2番目の例では「bが3」であるかどうかを確認します。

結果は「a is 5 and b is 3.」になります。 コードを再コンパイルしてみましょう。次回のテストでは、画面に「a = 5 and b = 3」と表示されます。

ここまでは問題ありませんが、ここに「c = a + b」などを追加して[コンパイル]をクリックすると、2つのエラーが発生します。これは、if文の後ろに複数の行がある場合は常に、2つの中括弧を使用する必要があるためです。コードを再コンパイルしてみましょう。これで動作します。最後のテストでは、「c = 8」というメッセージが表示されます。

これは非常に単純な例でした。条件が真かどうかを確認する方法は他にもたくさんありますが、この短いビデオでは、if文と数行のMQL5コードを使用して条件が真かどうかを確認する方法を学びました。


第7部 - switchとcaseの使用方法


このビデオでは、switch文とcase文を使用してEAの動作を変更する方法を学びます。これは自動化されたEAです。今のところは多くを成し遂げず、「customer wants RSI」というだけです。

switchコマンドとcaseコマンドを使用してこの値を変更する方法を理解する必要があります。ここの小さなアイコンをクリックするか、F4キーを押してください。MetaEditorウィンドウが表示されます。

このウィンドウで、テンプレートから[ファイル]/[新規作成]/[エキスパートアドバイザ(テンプレート)]をクリックして、[次へ]をクリックします。このファイルを「SimpleSwitchCase」と呼びます。[次へ]/[次へ]/[完了]をクリックします。これで、OnTick関数とここにある2つのコメントの上のすべてを取り除くことができます。choiceという整数変数を使用することから始めます。この変数の値は5である必要があります。

OnTick関数内で「entry」という文字列変数も使用します。ここで選択した内容に基づいてエントリを定義したいので、値を指定しません。これは、switch文でおこなわれます。

さまざまなオプションを選択したいと考えています。顧客がオプション5を選択した場合、「the customer wants RSI」と言うことができます。 ここではプラス記号と等号を使用していますが、その理由については後で説明します。今のところ、ただbreakします。

このコードが実行されるとすぐに、このbreak文により、switch-caseループが終了します。もう1つ追加しましょう。選択肢が4の場合、エントリには「the customer wants Bollinger Bands.」と表示されます。

ここでも、break文を使用して、switch-case構造をここに残します。もう1つ追加しましょう。choice変数の値が3の場合、entry文に「customer wants MACD」と表示する必要があります。

ここで数値の代わりに1+1のような式を使用することもできますが、case文は変数では機能しないため、使用するとエラーが発生します。defaultオプションも追加しましょう。defaultは、他のオプションがどれも真でない場合に実行されます。その場合、entry文で「the customer doesn't know.」と表示する必要があります。

ここに2つの中括弧を追加しましょう。次に、Comment関数を使用して、entryの出力を作成します。 完了したら、ここで[コンパイル]ボタンをクリックします。

これはエラーや警告なしで機能するはずです。機能したら、ここで小さなボタンをクリックするか、F4を押してMetaTraderに戻ることができます。MetaTraderで[表示]/[ストラテジーテスター]をクリックするか、CTRLとRを押します。ここでは、新しいファイル「SimpleSwitchCase.ex5」を選択します。

可視化のオプションをオンにして、テストを開始します。あるのはこれです。「The customer wants RSI」で、choiceを3に変更し、コードを再コンパイルして、別のテストを実行します。今度は、「The customer wants MACD」と表示されます。「選択」3は「MACD」と同じなので、11に変更して、コードを再コンパイルして、何が起こるか見てみましょう。

今回は、オプションのリストに11が含まれていないため、「the customer doesn't know」と表示されます。これがデフォルトです。さて、これらのswitch文およびcase文は一意であり、break文を削除できる可能性があります。最初の2つのcase文でこれをおこない、choiceを5に戻し、コードを再コンパイルして、別のテストを実行します。

今回は、「the customer wants RSI」、「the customer wants Bollinger Bands」、「the customer wants MACD」というメッセージが表示されます。 これは、switch-case構造の最初の3つの部分が処理されたためです。  そのため、ここでbreak演算子を省略した場合、小さなEAプログラムはループを離れず、次の条件をチェックし続けます。

この短いビデオでは、switch文とcase文の使用方法を学習しました。これをほんの数行のMQL5コードでおこないました。

 

第8部 - whileループの使用方法


このビデオでは、while文を使用して、今のように何かが起こるまで待機する方法を学びます。遅延カウンタが500,000に達するまで待ったので、MQL5でwhileループを使用する方法を学びましょう。これをおこなうには、ここの小さなボタンをクリックするか、MetaTraderでF4を押します。

MetaEditorウィンドウが表示されます。このウィンドウで、テンプレートから[ファイル]/[新規作成]/[エキスパートアドバイザ(テンプレート)]をクリックして、[次へ]をクリックし、ファイルに「SimpleWhileLoop」という名前を付けます。最後に[次へ]/[次へ]/[完了]をクリックします。OnTick関数と2行のコメント行の上にあるものはすべて削除できます。それでは、遅延カウンタ(DelayCounter)を作成することから始めましょう。

整数のみが必要なため、整数変数を使用します。値に1を指定し、OnTick関数で値を増やします。最小値が500,000で、遅延カウンタがそれよりも高い場合にのみ何かを実行したいとします。

これで、OnTick関数内でwhile文を使用して、遅延カウンタがまだ最小値を下回っているかどうかを確認できます。もしそうなら、2つのことをします。まず、テキスト「DelayCounter:」の後に現在の遅延カウンタの計算値を表示する出力を作成します。

次に、DelayCounterをDelayCounterに1を加えた値に等しいと書くことで、遅延カウンタを1増やします。[表示]/[ストラテジーテスター]をクリックするか、CTRLとRを押して、ストラテジーテスターを開きましょう。ここでは、新しいファイル「SimpleWhileLoop.ex5」を選択します。

可視化モードをオンにして、テストを開始します。これで、カウンタが機能していることがわかります。500,000に達すると、これが移動するので、すべて問題ありません。ただし、キャッチがあります。whileループの外側で遅延カウンタを増やしたい場合、エラーなしでコードをコンパイルできますが、次のテストを開始しても何も起こりません。

ストラテジーテスター全体が機能しなくなったのはなぜでしょうか。while文を強調表示してF1を押すと、「ヘルプ」ファイルが表示されるはずですが、すべてがまだフリーズしているため何も起こりません。これは、ここで無限ループを作成したためです。

最初のティックが発生し、この式が真になると、while文は無限ループを開始します。ここで遅延カウンタを増やしたかったのですが、whileループの外でおこなったので、これは決して起こらず、この式は常に真になります。これが、私がwhileを頻繁に使用したくない理由の1つです。ほとんどの条件はifで確認できます。

コードを再コンパイルしてテストを再開すると、if文はティックが発生するたびに1回だけ実行されるため、遅延カウンタが機能していることがわかります。while文を使用したい場合は、何かがwhileループの実行を停止するか、whileループが永久に実行されるようにする必要があります。では、テストをもう一度試してみましょう。今度は正しくカウントされます。

この短いビデオでは、while文の使用方法と、決して終わらないループを回避する方法を学びました。また、数行のMQL5コードを使用して自分で実行しました。


第9部 - forループの使用方法


このビデオでは、forループを使用してcounterの値を変更する方法を学びます。 今回は10,000に達するまでカウントしているので、その方法を見てみましょう.開始するには、ここの小さなアイコンをクリックするか、MetaTraderでF4を押します。

MetaEditorウィンドウが表示されます。ここで、テンプレートからテンプレートから[ファイル]/[新規作成]/[エキスパートアドバイザ(テンプレート)]をクリックして、[次へ]をクリックします。このファイルを「SimpleForLoop」と呼び、[次へ]/[次へ]/[完了]をクリックします。

これで、OnTick関数より上のすべてを削除できます。2行のコメント行も削除しましょう。counter変数を作成することから始めます。

これはcounterと呼ばれる整数(int)変数で、初期値は1です。また、終了値(endvalue)も設定します。この場合は10,000です。OnTick関数内で、forループを使用します。

forループを見たことがない場合、これは奇妙に見えるかもしれませんが、そうではありません。ここで、最初の式は開始値で、この場合はcounter値1です。2番目の式は条件をチェックします。

この場合、counterの値がendvalueより小さいかどうかを確認します。 3番目の式では、counterに対して何かをおこないます。 ここでは、それに1を加えます。これが「counter++」の意味です。

counterはcounterに1を加えたものに等しいとも言えます。この条件が真である限り、これらの中括弧内にあるものは何でも実行されます。ここでの場合、「the counter So far, so good」テキストを出力するだけです。

ここで[コンパイル]ボタンをクリックします。ここにエラーが表示されない場合は、ここの小さな記号をクリックするか、F4を押してMetaTraderに戻ります。MetaTraderで、[表示]/[ストラテジーテスター]をクリックするか、CTRLとRを押して、新しいファイル「SimpleForLoop.ex5」を選択し、ここで可視化をオンにして、テストを開始します。そして、[操作ログ]タブでは、カウンタが機能していることを確認できるはずです。

数値は9,999に達するまで増加しますが、これは今のところ良好です。カウントダウンもできるので、値を入れ替えてみましょう。これで、カウンタは10,000から始まり、endvalueは1になるはずです。

counter値から始めて、counterがendvalueよりも大きい限り、そこから1を引いてカウントダウンします。 これをまとめてみましょう。もう一度テストを開始して、今度はカウントダウンを追加しましょう。これは「Counter = 2」で終わります。これは、2番目の式で counterがendvalueより大きいかどうかを確認したためです。

「bigger or equa」とも言えるので、再コンパイルしましょう。今回は最後の値が1になるはずです。forループを使用して、counterを他の数値で増減させることもできます。

10を選びましょう。最後のコンパイルです。今度はカウントダウンが機能していることがわかります。ステップサイズは10です。

この短いビデオでは、forループを使用してcounter値をカウントおよび増減する方法を学習し、数行のMQL5コードで自分でコーディングしました。


第10部 - 簡単な関数のコーディング方法


このビデオでは、MQL5を使用して、価格が変化するたびにカウンタ値を2倍にするカスタム関数を作成します。これをおこなうには、MetaTraderの小さなボタンをクリックするか、キーボードのF4を押します。MetaEditorウィンドウが表示されます。テンプレートから[ファイル]/[新規作成]/[エキスパートアドバイザ(テンプレート)]をクリックして、[次へ]をクリックします。このファイルを「SimpleFunction」と呼びます。[次へ]/[次へ]/[完了]をクリックします。

OnTick関数と2行のコメント行より上のすべてを削除できるようになります。まず、counterの静的変数を作成します。Staticは、これまで目にしたことのない言葉です。この場合、Staticを使用して、関数にのみ存在するローカル変数を作成します。

DoubleTheValue(Double The Value)と呼ばれる別の関数に変数を渡したいのですが、まだ存在しないため、作成する必要があります。丸括弧内で、counterの現在値を渡します。そして、Comment関数を使用してcounter値を出力したいと考えています。

DoubleTheValue関数はまだ作成する必要があります。カスタム関数を作成するには、関数が何を返すかを定義することから始めます。この場合、関数は整数(int)値を返します。

これは、私がDoubleTheValueと呼んでいるカスタム関数の名前で、関数がパラメーターとして受け取るものです。整数(int)であるcounterを渡します。カスタム関数ではCounterValueと呼んでいますが、同じ名前を使用する必要はありません。

この関数には2つの中かっこが必要です。今回コンパイルしようとすると、関数が何も返さないため、別のエラーが発生します。まず、「CounterValue」と呼ばれる渡された値を2倍にします。これをおこなうには、CounterValueを取り、2倍します。

結果はDoubleValueという新しい変数に格納され、return演算子を使用して呼び出しプログラムに値を返すことができます。これは、「return DoubleValue;」と入力しておこないます。もう一度コードをコンパイルして、エラーがないことを確認します。

MetaTraderで、[表示]/[ストラテジーテスター]をクリックするか、CTRLとRを押して、新しいファイル「SimpleFunction.ex5」を選択し、[可視化]ボックスをチェックして、テストを実行します。新しいティックが入るたびにカウンタの値が2倍になるので、価格が変化するたびにカスタム関数が呼び出されることがわかります。これは非常に単純な例で、値を1つだけ渡して1つの操作を実行しただけです。

ただし、同じ種類のロジックを使用して、より複雑なことをおこなうこともできます。たとえば、すべてのポジションを調べて、通貨ペアの利益を計算し、return演算子を使用して値をメイン関数に返すことができます。

この短いビデオでは、MQL5でカスタム関数を作成し、数行のコードで自分でコーディングする方法を学びました。


結論

MQL5は複雑である必要はありません。この初めの部分が、MQL5を始めるのに役立ち、自動化された取引がいかに簡単であるかをよく理解するのに役立つことを願っています。もちろん、より多くのコンテンツが利用可能であり、独自のシステムにさらに高度な部分を追加する必要がありますが、MQL5プログラミングが自分に適しているかどうかがわかったはずです。


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

DoEasy - コントロール(第6部):パネルコントロール、内部コンテンツに合わせたコンテナサイズの自動変更 DoEasy - コントロール(第6部):パネルコントロール、内部コンテンツに合わせたコンテナサイズの自動変更
本稿では、Panel WinFormsオブジェクトの作業を続け、パネル内にあるDockオブジェクトの一般的なサイズに合わせた自動サイズ変更を実装します。さらに、銘柄ライブラリオブジェクトに新しいプロパティを追加します。
ニューラルネットワークが簡単に(第14部):データクラスタリング ニューラルネットワークが簡単に(第14部):データクラスタリング
前回の記事を公開してから1年以上が経過しました。アイデアを修正して新しいアプローチを開発するには、これはかなりの時間です。この新しい記事では、以前に使用された教師あり学習法から逸れようと思います。今回は、教師なし学習アルゴリズムについて説明します。特に、クラスタリングアルゴリズムの1つであるk-meansについて検討していきます。
OBVによる取引システムの設計方法を学ぶ OBVによる取引システムの設計方法を学ぶ
今回は、初心者向けのシリーズとして、人気のあるいくつかの指標をもとに取引システムを設計する方法について、新しい記事をお届けします。今回は、新しい指標であるOBV (On Balance Volume)を学び、その使い方とそれに基づいた取引システムの設計を学びます。
一からの取引エキスパートアドバイザーの開発(第15部):Web上のデータにアクセスする(I) 一からの取引エキスパートアドバイザーの開発(第15部):Web上のデータにアクセスする(I)
MetaTrader5ではどのようにオンラインデータにアクセスするのでしょうか。Web上にはたくさんのサイトや場所があり、膨大な量の情報が掲載されています。知るべきことは、どこを調べて、この情報をどのように使用するのが最善かということです。