
OnStart関数は、自動売買EAを作成するために使われる関数ではありません。
スクリプトというプログラムで使われるイベント関数で、よほど詳しくないと使う機会はないでしょう。
OnStart関数とは
「自動売買を作るほどじゃないけど、少しだけプログラムを実行したい!」
という方は、スクリプトを作成してみましょう!
例えば、勝敗を集計してファイルに出力するだけのプログラムなどです。
ちょっとしたプログラムを動かすときは、自動売買プログラムよりもスクリプトが適切です。
スクリプトを新規作成すると、以下のようなプログラムが自動作成されます。
//+------------------------------------------------------------------+
//| onStartTest.mq4 |
//| Copyright 2022, Asahina Risa |
//| https://mql-programing.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, Asahina Risa"
#property link "https://mql-programing.com/"
#property version "1.00"
#property strict
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---
}
//+------------------------------------------------------------------+このように、すでにOnStart関数が記述されています。
OnStart関数とは、スクリプトだけに使用される関数なので、馴染みのない方が多いと思います。
スクリプトで使われる唯一のイベント関数です。
OnStart関数はイベント関数なので、イベントが起こったときに実行されます。
そのイベントとは、「ロウソク足が動いたとき」です。
感覚的には、OnTick関数と似たような感じです。
そのため、OnTick関数とOnStart関数を、一緒のものだと勘違いする方が多いです。
実際、OnTick関数をOnStart関数に書き換えても、問題なく動きます。
しかしMT4では、OnTick関数が記述されているのが自動売買EAで、OnStart関数が記述されているのがスクリプトと判断するので、どこかで不具合が発生する可能性があります。
そのような不具合を作らないためにも、今回はOnStart関数を理解していきましょう!
OnStart関数の書き方
OnStart関数の使い方は、基本的な関数と同じです。
関数をマスターしていない方はこちらの記事が参考になります。
基本的な書き方
OnStart関数はとてもシンプルな関数です。
引数なしで実行できます。
OnStart関数の基本的な書き方は以下の通りです。
void OnStart()
{
}
返り値は void型なので、特にreturnを書く必要はありません。
戻り値
void型
引数
なし
プログラム例
以下は、OnStart関数を使ったスクリプトの簡単なプログラム例です。チャートにスクリプトを適用すると、現在の通貨ペア名と現在価格をアラートで表示します。
//+------------------------------------------------------------------+
//| onStartSample.mq4 |
//| Copyright 2022, Asahina Risa |
//| https://mql-programing.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, Asahina Risa"
#property link "https://mql-programing.com/"
#property version "1.00"
#property strict
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
// 現在の通貨ペア名を取得
string symbol = Symbol();
// 現在の売値(Bid)を取得
double price = Bid;
// アラートで通貨ペア名と現在価格を表示
Alert(symbol + " の現在価格は " + DoubleToStr(price, Digits) + " です。");
}
//+------------------------------------------------------------------+このスクリプトをチャートにドラッグ&ドロップすると、OnStart関数が1度だけ実行され、アラートが表示されます。
スクリプトはEAと異なり、一度実行されると処理が完了した時点で自動的に終了します。繰り返し実行されることはありません。
まとめ
OnStart関数は、スクリプトで実行される唯一のイベント関数です。
スクリプトをチャートに適用すると、OnStart関数内の処理が1度だけ実行されます。
OnTick関数と混同してしまうことがありますので、注意しましょう。
余計な不具合を出さないためにも、正しくOnStart関数を使ってください。





