本ブログは、MetaTrader を利用して、EA プログラムを自作紹介するサイトです。
決して儲かるシステムを紹介するものではありませんのであしからず・・・
もし、記事中に嘘偽りを発見された方、ご連絡頂けると幸いです。
なお、過去に作成した EA プログラムの作り方はこちらになります。

Loop_Entry : 同じ指値エントリーを繰り返し実行するプログラムです。
estTurn : 高値(安値)で反対売買を実行するプログラムです。

2008年11月24日月曜日

受け取った値を表示してみる

では、ウィザードにより表示されたプログラムをみてみます。

ウィザードの「Parameters」部分に指定した内容が次のように(画面赤枠部分)記述されています。

//---- input parameters
extern double SASHINE=0.0;

これは、「外部から、小数点ありの値を、"SASHINE"という識別子で受け取る」という意味を持ちます。

なお、"SASHINE"の横に"=0.0"とありますが、これは画面に表示する初期の値を指定する書き方で
す。

実際どのように画面に表示されるのか早速試してみます。

まずは、ウィザードにより作成された"Loop_Entry"プログラムを実行形式にコンパイルします。

#コンパイルの手順はこちらを参照ください。

次に、MetaTrader 画面にてコンパイルされた"Loop_Entry"プログラムをチャート上に表示します。

#プログラムをチャートに表示させる手順はこちらを参照ください。

すると、下記ウィンドウが表示されると思います。

このウィンドウの「パラメーターの入力」タグが、プログラムに受け渡すための値を入力する画面になります。

この画面を見てみると、一覧エリアの「Variable」の欄に"SASHINE"が、「Value」の欄に"0.0"が表示されています。

つまり、プログラムの"extern"行で指定した、"SASHINE=0.0"が画面上に表示され、「Value」欄をダブルクリックすることで任意の値を入力でき、OK ボタンをクリックすることでプログラムに入力した任意の値を渡すことができます。

では、本当に任意の値がプログラムに渡せるのか試してみます。

MetaEditor で"Loop_entry"プログラムを表示し、次のプログラムコードを追記します。

Print("指値の値は=",SASHINE);

上記コードは、"SASHINE"の識別子に入っている値を画面に表示するプログラムコードです。

これを、int init()エリアに追記します。

#init()エリアは、プログラムが起動するときに1回だけ実行される部分です。詳しくはこちら

上記図のように記述できたら、再度プログラムをコンパイルします。

コンパイルが終了したら、MetaTrader にて"Loop_entry"プログラムをチャートに表示し、パラメーターの入力画面にて、"SASHINE"の Value 値として"123.45"を入力し OK ボタンをクリックしてください。

#すでにチャートにプログラムを表示済みの場合は、次の手順でも OK です。

1.チャート上のプログラム名が表示されているところにカーソルを合わせます。
2.右クリックをして<Expert Advisors>-<Properties>を選択します。

すると、ターミナルウィンドウの「Experts」タグに、入力された指値の値が表示されると思います。

これで、任意の値(今回は指値)をプログラムに受け渡すプログラムができました。

次は、受け渡した指値の値を注文で扱うようにしたいと思います。

2008年11月23日日曜日

プログラムを起動する時にパラメーターを渡す

では、「プログラムを起動する時にパラメーターを渡す」機能を利用したプログラムを作りたいと思います。

今まで作成した"Test1"プログラムを使って実現することも可能ですが、折角プログラムの目的も決まりましたので、プログラム名を変えて初めから作りたいと思います。

以前、「MetaEditor を起動してみよう」でプログラムの新規作成手順を説明しました。

1.MetaEditor を起動
2.MetaEditor 画面のメニューバーより、<File>-<New>を選択
3.Welcome 画面で"Expert Advisor" を選択

すると、次の画面が表示されます。

前回は上記画面でプログラム名( Name:)に"Test1"とだけ入力して完了ボタンを押しましたが、今回はこの画面の下にある「Parameters」の部分を使います。

まず、プログラム名ですが、繰り返しエントリーするプログラムを作りたいので、"Loop_Entry"と名付けたいと思います。

次に「Parameters」の部分ですが、ここは、今から作成するプログラムに対して値を受け渡す仕組みを定義するためのものです。

今回は「注文する際の指値」を入力できるようにしたいため、次の手順で定義します。

1.Parameters エリアの右にある<Add>ボタンをクリック
2.Parameters の一覧エリアに表示された行の「Name」欄に"SASHINE"と入力
3.同じ行の「Type」欄をダブルクリックして、"double"を選択
4.同じ行の「Initial Value」欄をダブルクリックして、"0"を入力

ちなみに「Name」「Type」「Initial Value」の意味は、

Name:プログラムの中で入力された値(今回は指値)を扱うための識別名
Type:Name で指定された識別名で扱うデータの種類
Initial Value:プログラムに受け渡す値を入力する画面を最初に開いた際に表示する値

となります。

なお、「Type」欄で指定できる種類の意味は、

int:整数のみ入力可能
bool:真か偽の判定値のみ入力可能
datetime:日付のみ入力可能
color:色の定義のみ入力可能
double:小数点ありの数値のみ入力可能
string:文字(数値含む)を入力可能

となります。

今回は指値を入力したいので、小数点ありの数値が入力できる"double"を選択します。

さて、入力した結果の画面は、

となります。

最後に完了ボタンをクリックしプログラムを表示します。

次はウィザードにて作成されたプログラムを修正していきます。

2008年11月22日土曜日

指値を入力する画面を作る

さて、同じエントリーポイントを繰り返すプログラムにおいて、プログラムを変更することなくその時の状況に応じて注文する際の指値を変更する画面を設けたいと思います。

イメージとしては、

1.作った画面を表示する
2.表示された画面上で指値を入力する
3.表示された画面上で OK ボタンをクリックする

といったアクションを起こすと、プログラムで注文する際の指値が置き換わる感じになればいいなぁと思っています。

上記アクションを起こすための「画面」をどうやって作るかを調べてみます。


・・
・・・

解りません・・・

ヘルプやネットで画面を作る手順などの情報を探したのですが、見つけられません・・・

その代わり、「プログラムを起動する時にパラメーターを渡す機能」があることが解りました。

独自の画面を作らなくても、やりたいことは全く同じ事ができますので、この機能を利用することにします。

「プログラムを起動する時にパラメーターを渡す機能」とはどこにあるのでしょうか?

これは、作成したプログラムをチャート上に表示する際に出てくる画面上にあります。

以前、”Test1”プログラムをチャート上で実行する際の手順として次のような操作を行いました。

1.ナビゲータウィンドウの<Expert Advisors>で”Test1”を右クリックする
2.<チャートに表示>を選択する

すると次のウィンドウが表示され、OK ボタンをクリックすることで、チャート上にプログラムを表示することができました。

実は、この画面上に「プログラムを起動する時にパラメーターを渡す機能」が出てくるのですが、残念ながら”Test1”プログラムでは出てきません。

「プログラムを起動する時にパラメーターを渡す機能」に対応したプログラムを作成すると、上記画面上で次のような「パラメータの入力」タグが表示されます。

次は、このタグが表示されるようなプログラムを作ってみましょう。

2008年11月10日月曜日

プログラム修正の手間を省く

テストのやり方に関する設定や結果の確認項目については、まだまだ色々あるみたいですが、追々調べることにし、プログラム作成に戻りたいと思います。

さて、同じエントリーポイントを繰り返すプログラムは一応実現できましたが、指値ポイントを変更したい場合、いちいちプログラムを修正しなければなりません。

面倒です・・・

色んなデータを駆使し自動で決められるプログラムを作ればよいのでしょうが、100年に1度の荒れ相場において全てを自動にする知識も度胸もありません。

そこで、入力した指値に従いプログラムが動くようにしたいと思います。

そのためには、次のような手順をプログラムに追加しなければなりません。

1.指値を入力する画面を表示する
2.画面に入力された指値をプログラムに渡す
3.渡された指値で注文をする

これらのやり方を調べていきたいと思います。

2008年11月9日日曜日

Mismatched charts errors

レポート機能の見方でもう一つわからない項目に「Mismatched charts errors」がありました。

こちらについてネットで調べてみると、「周期ごとの時間足データに不整合がある数」とのこと。

おそらく同じ時間帯における1分足と5分足の高値や安値の値が一致しないってことだと思われますが、何のために周期ごとの情報を比較しエラーとしているのかは不明です・・・

もしかしたら、不足している時間足データを擬似的に作成する際のエラー情報なのではないかと思われます。

#この項目に関する日本語の情報があまり無かったのでちょっと自信ないです・・・

いずれにしろ、テストで使われた時間足データに不備があることを意味するみたいなので、このエラーが発生する場合には、時間足データを入れ替え(作り変え)た方がよさそうです。

ちなみに、時間足データはどこにあるるのでしょう?

MetaTrader のメニューバーより<ツール>-<History Center>を選択すると、各通貨ペアごとの時間足データが表示されます。


このヒストリーセンター画面にて、時間足データの修正ができます。

ただし大量なデータですので、一つずつ追加や修正することは、ほぼ無いでしょう。

そのため、時間足データを一旦全て削除し、新しくダウンロードし直すかインポート機能を使って取り込むことになるでしょう。

参考になりました? よろしければご協力ください。

にほんブログ村 為替ブログへ 人気ブログランキング【ブログの殿堂】