豊嶋久道先生のコラム
| FX・自動売買・システムトレードのすべてがわかるMT4やEAの投資情報サイト【GogoJungle】

閲覧履歴

EA実践プログラミング-トレードのトラブル(2)

前回に引き続き、トレードのトラブルについてお話しします。


その前に、ひとつ訂正があります。これまでMQL4のEAのサンプルとして掲載してきたプログラムに間違いがありました。

「売りポジションがあれば決済」「買いポジションがあれば決済」の部分です。

// 売りポジションがあれば決済
if(type < 0) OrderClose(PositionTicket(), 0.1, Bid, 20);

// 買いポジションがあれば決済
if(type > 0) OrderClose(PositionTicket(), 0.1, Ask, 20);

となっていましたが、売りポジションの決済は買い、買いポジションの決済は売りなので、BidとAskが逆でした。

正しくは、

// 売りポジションがあれば決済
if(type < 0) OrderClose(PositionTicket(), 0.1, Ask, 20);

// 買いポジションがあれば決済
if(type > 0) OrderClose(PositionTicket(), 0.1, Bid, 20);

となります。

前回、思い込みで判断してはいけないと書いておきながら、自分が思い込みで間違ったプログラムを紹介してしまいました。
ここにおわび申し上げるとともに、改めてプログラムに思い込みのミスがいかに多いかということを肝に銘じておきたいと思います。



さて、前回、EAを動かしてもトレードしない場合、その原因をつきとめるために、プログラム中の変数や条件分岐を表示させて確認する方法を紹介しました。
この方法はMQL5の場合でも同様です。

今回は、それとは別に、MQL5の場合のみ利用できる方法を紹介します。

それは、MT5からメタエディターに組み込まれた機能である「デバッガー」を使った方法です。

デバッガーとは、その名の通りデバッグするためのツールのことです。

デバッガーには様々な機能がありますが、ここでは、デバッガーの基本的な使用方法として、EAを実行させながら、プログラムの実行箇所や各変数の値を確認する方法を紹介します。

この場合、EAのプログラムに変更を加える必要はありません。まず、デバッグしたいEAをメタエディター上で開きます。

「エキスパートアドバイザー(EA)の作り方(7)」で作成したEAを例に、操作方法を説明していきましょう。






デバッガーを実行するには、メタエディターのメニューの[デバッグ]-[スタート]を選択します。あるいは、ツールバー上の同じアイコンをクリックしてもOKです。

但し、そのままだと、EAを実行するチャートを選べません。EAを特定のチャート上で実行させるためには、
メタエディターのメニューの[ツール]-[オプション]を選びます。
そして、下のように「デバッグ中」タブの画面でEAを実行させたい通貨ペアとタイムフレームを指定します。





この例では、EURUSDの1時間足チャートでEAを実行するように指定しました。

デバッガーを実行する前に、プログラム中に「ブレイクポイント」を設定します。
ブレイクポイントとは、プログラムを一時的に止める場所のことで、プログラム中の変数などチェックしたい場所に設定します。

設定の仕方は、プログラム中でブレイクポイントを設定したい行をクリックし、メニューの[デバッグ]-[ブレイクポイントのオンオフ]を選択します。
単にその行の行番号のところでダブルクリックするだけでもOKです。

ここでは、シグナルをチェックするために、下の図のように買いシグナルの条件文のところにブレイクポイントを設定してみます。






以上の準備のあと、デバッガを実行すると、次のようにEAのプロパティ画面が表示されます。このEAはパラメータがないので「共有」タブのみです。






デバッグといっても、実際にEAを動作させるので、EAで売買シグナルが出れば、実際にトレードも行います。
トレードさせたくない場合は、「自動売買を許可する」のチェックを外しておいてください。

ここで「OK」ボタンを押すと、EAがチャート上で実行され、先ほど設定したブレイクポイントのところで一旦停止します。

すると、メタエディターのツールボックスウィンドウに「デバッグ」タブの画面が現れます。
この画面の左半分には現在実行中のプログラムの関数名や行番号が表示されます。そして、右半分が確認したい変数を設定する画面になります。

ただ、最初は何も表示されていないと思います。そこで、チェックしたい変数を「説明」の列に追加していきます。

「Bid」や「Ask」のような変数であれば、追加したい変数のところで右クリックして「ウォッチの追加」を選べば簡単に追加されます。
ただし、「Close[1]」や「BufMA[1]」のような配列の要素の場合、直接記述して追加しなくてはなりません。

現在実行中の行までで変数の宣言がされていれば、下のように変数の値が表示されます。






これを見て、正しく変数の値が代入されているかどうかを確認します。

また、条件分岐が正しく行われているかどうかは、プログラムをワンステップずつ進めていって確認します。
そのためには、メニューの[デバッグ]-[ステップイン]を選ぶか、ツールバーの同じアイコンをクリックします。
すると、現在実行中の行番号のところに「→」の記号が表示されるので、想定通りに条件分岐が行われているかどうかを確認することができます。

最後に、メニューの[デバッグ]-[ストップ]を選ぶか、ツールバーの同じアイコンをクリックするとデバッガーが終了します。

公開日:2013年08月15日
Profile
豊嶋教授フォト
豊嶋久道
慶應義塾大学在学中よりC言語プログラミングに親しみ、実用系のフリーソフトウェア、シェアウェアを公開。

1993年博士(工学)の学位を取得
専門はデジタル信号処理。

2003年よりFX取引を始め、システムトレードの道へ。
MetaTrader4、MetaTrader5を利用した売買システムの研究を行っている。

主な著書に
著書