Ads by Google
新しい記事を書く事で広告が消せます。
MetaTrader についてのあれこれ Part5 (include)
開発のためのTipsです。
MetaTraderでは、デバック情報等を出力する出力先に
Printとか、Alertを使用している人が多いかと思います。
私も、当初はそのようなやり方をしていたのですが、
正直、開発しにくくてたまりませんでした。
で、ファイルにメッセージを吐き出す簡単な関数を作ったのですが、
これらは共通的なものであるので、複数のindicatorで共通的に使いたいわけです。
これを実現するには方法が二つあり
・include
・libraries
のどちらかを使用することになります。
本来は、librariesとして扱うのが正しいと思うのですが、
どうも、エラーがでまくって落ちてしまうので、今回はinclude
で実装しました。
C:Program Files\MetaTrader 4\experts\include
に、ファイルを作り、共通的に使いたい関数の記述を行います。
まだ、たいした共通機能はつくっていなのですが、
たとえばこんなのを共通機能として定義します。
CommonUtil.mqh
===============================================
//ファイルへのハンドラ
int LOG_FILE;
/**
ログ関連のAPI
*/
//フォーマット指定で時間を出す。
string timeStr() {
return (TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS));
}
//Open時の基礎情報を出す。
void mySignalLog(int x) {
myPrint( TimeToStr(Time[x] ,TIME_DATE|TIME_SECONDS) +" : "+ Open[x] ) ;
}
//Open時の基礎情報に、メッセージを付加して出す。
void mySignalLogWithMsg(int x,string msg) {
myPrint( TimeToStr(Time[x] ,TIME_DATE|TIME_SECONDS) +" : "+ Open[x] +" : "+msg) ;
}
//ファイルへの書き込みの本体
void myPrint(string logMsg) {
FileWrite( LOG_FILE ,logMsg) ;
FileFlush( LOG_FILE);
return (0);
}
===============================================
で、この関数を使いたいindicatorのヘッダーに下記の一行を追記すると、
そのMQL内で上述の共通機能が使用できるようになります。
#include <CommonUtil.mqh>
あと、ファイルのオープンとクローズはindicatorの方でやってます。
これは、ファイル名を分けたりする場合があるからです。
ファイルのオープンは、init()に以下の一行を追加
LOG_FILE =FileOpen("XXX.log",FILE_WRITE);
ファイルのクローズは、deinit()に以下の一行を追加
FileClose (LOG_FILE);
という感じです。
このファイルのモード(?)では、起動するたびにログファイルの中身を消すので、
ログをアペンド(前の内容を残して追記)したい場合は、
FileSeek(handle, 0, SEEK_END);
を追記するといいようです。
ちなみに、このようにして作ったファイルは、
C:Program Files\MetaTrader 4\experts\files
に出力されます。
できましたら、下記の協力お願いいたします。
お客さん来ないんでちょっとは宣伝しようと思っております。
FC2 Blog Ranking
MetaTraderでは、デバック情報等を出力する出力先に
Printとか、Alertを使用している人が多いかと思います。
私も、当初はそのようなやり方をしていたのですが、
正直、開発しにくくてたまりませんでした。
で、ファイルにメッセージを吐き出す簡単な関数を作ったのですが、
これらは共通的なものであるので、複数のindicatorで共通的に使いたいわけです。
これを実現するには方法が二つあり
・include
・libraries
のどちらかを使用することになります。
本来は、librariesとして扱うのが正しいと思うのですが、
どうも、エラーがでまくって落ちてしまうので、今回はinclude
で実装しました。
C:Program Files\MetaTrader 4\experts\include
に、ファイルを作り、共通的に使いたい関数の記述を行います。
まだ、たいした共通機能はつくっていなのですが、
たとえばこんなのを共通機能として定義します。
CommonUtil.mqh
===============================================
//ファイルへのハンドラ
int LOG_FILE;
/**
ログ関連のAPI
*/
//フォーマット指定で時間を出す。
string timeStr() {
return (TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS));
}
//Open時の基礎情報を出す。
void mySignalLog(int x) {
myPrint( TimeToStr(Time[x] ,TIME_DATE|TIME_SECONDS) +" : "+ Open[x] ) ;
}
//Open時の基礎情報に、メッセージを付加して出す。
void mySignalLogWithMsg(int x,string msg) {
myPrint( TimeToStr(Time[x] ,TIME_DATE|TIME_SECONDS) +" : "+ Open[x] +" : "+msg) ;
}
//ファイルへの書き込みの本体
void myPrint(string logMsg) {
FileWrite( LOG_FILE ,logMsg) ;
FileFlush( LOG_FILE);
return (0);
}
===============================================
で、この関数を使いたいindicatorのヘッダーに下記の一行を追記すると、
そのMQL内で上述の共通機能が使用できるようになります。
#include <CommonUtil.mqh>
あと、ファイルのオープンとクローズはindicatorの方でやってます。
これは、ファイル名を分けたりする場合があるからです。
ファイルのオープンは、init()に以下の一行を追加
LOG_FILE =FileOpen("XXX.log",FILE_WRITE);
ファイルのクローズは、deinit()に以下の一行を追加
FileClose (LOG_FILE);
という感じです。
このファイルのモード(?)では、起動するたびにログファイルの中身を消すので、
ログをアペンド(前の内容を残して追記)したい場合は、
FileSeek(handle, 0, SEEK_END);
を追記するといいようです。
ちなみに、このようにして作ったファイルは、
C:Program Files\MetaTrader 4\experts\files
に出力されます。
できましたら、下記の協力お願いいたします。
お客さん来ないんでちょっとは宣伝しようと思っております。
MetaTrader についてのあれこれ Part4 (Onlineライブラリ)
MetaTrader のデフォルトで、Onlineのライブラリをみる方法です。
(今まで知りませんでした・・・・・)
orz..........................
非常に簡単で、
ナビゲータ > Custom Indicators > 右クリック > Online Library
とやるだけで、MetaEditerにOnline Librayが表示されます。
当然、この方法で検索できないコミュニティも多量にありますが、
まず、これで調べてから、ほかのサイトを調べると無駄な時間が省けると思います。
できましたら、下記の協力お願いいたします。
お客さん来ないんでちょっとは宣伝しようと思っております。
FC2 Blog Ranking
(今まで知りませんでした・・・・・)
orz..........................
非常に簡単で、
ナビゲータ > Custom Indicators > 右クリック > Online Library
とやるだけで、MetaEditerにOnline Librayが表示されます。
当然、この方法で検索できないコミュニティも多量にありますが、
まず、これで調べてから、ほかのサイトを調べると無駄な時間が省けると思います。
できましたら、下記の協力お願いいたします。
お客さん来ないんでちょっとは宣伝しようと思っております。
MetaTrader についてのあれこれ Part3 (iCustom)
今日は、MetaTrader で自動売買を考える上で便利な関数を紹介します。
基本となるindicatorは、拾ってきたほうが早いと思っているのですが、
サインを出すロジックは、自分で実装せざるおえません。
そんな時、便利なのが、iCustom です。
これを使用すると、indicatorフォルダにあるindicatorを自由に呼び出せるようになります。
下記に使用例を記述します。
=================================================
int start()
{
int i, counted_bars = IndicatorCounted();
int limit =Bars-counted_bars;
int shift,back,lasthighpos,lastlowpos;
//ほぼ全バーに対して一括してデータ生成
for(shift=limit; shift>=0; shift--)
{
RCIBuffer1[shift] = iCustom(NULL, 0, "RCI",rangeN1,0,rangeN1+10,true, 0,shift);
RCIBuffer2[shift] = iCustom(NULL, 0, "RCI",rangeN2,0,rangeN2+10,true, 0,shift);
RCIBuffer3[shift] = iCustom(NULL, 0, "RCI",rangeN3,0,rangeN3+10,true, 0,shift);
check80_80(shift);
}
return(0);
}
=================================================
上記は、どのようなことをやっているかというと、
indicatorでさまざまな期間で値を出し、とりあえず、バッファに格納しています。
iCustomが他の関数と違うところは、
iCustom(NULL, 0, "RCI",rangeN3,0,rangeN3+10, true, 0,shift);
上の線が引いてある部分が、indicatorの必要とするパラメータの数に
応じて変化するところです。
この部分には、呼び出すindicatorのextern変数を指定します。
このような感じで、indicatorのデータを取得し、
特定の条件になった場合、サインを出すように実装します。
まず、最初は、いきなりExpert Advisorを作らずに、
1.複数のindicatorを組み合わせたindicatorを作る
2.判断ロジックを組み込み、そのindicator上で、
チャートに表示時にマーカーが出るように改造する。
3.Expert Advisorから、iCustomを使用して、先ほど作ったマーカーを見るようにして
売買ロジックを追加しバックテストを行う。
のような手順がよいかと思います。
マーカーの表示の仕方につきましては、
Toyolab FX - 手ぶらで為替取引
http://forex.toyolab.com/archives/2006/05/mt413_-_1.html
が参考になります。
できましたら、下記の協力お願いいたします。
お客さん来ないんでちょっとは宣伝しようと思っております。
FC2 Blog Ranking
基本となるindicatorは、拾ってきたほうが早いと思っているのですが、
サインを出すロジックは、自分で実装せざるおえません。
そんな時、便利なのが、iCustom です。
これを使用すると、indicatorフォルダにあるindicatorを自由に呼び出せるようになります。
下記に使用例を記述します。
=================================================
int start()
{
int i, counted_bars = IndicatorCounted();
int limit =Bars-counted_bars;
int shift,back,lasthighpos,lastlowpos;
//ほぼ全バーに対して一括してデータ生成
for(shift=limit; shift>=0; shift--)
{
RCIBuffer1[shift] = iCustom(NULL, 0, "RCI",rangeN1,0,rangeN1+10,true, 0,shift);
RCIBuffer2[shift] = iCustom(NULL, 0, "RCI",rangeN2,0,rangeN2+10,true, 0,shift);
RCIBuffer3[shift] = iCustom(NULL, 0, "RCI",rangeN3,0,rangeN3+10,true, 0,shift);
check80_80(shift);
}
return(0);
}
=================================================
上記は、どのようなことをやっているかというと、
indicatorでさまざまな期間で値を出し、とりあえず、バッファに格納しています。
iCustomが他の関数と違うところは、
iCustom(NULL, 0, "RCI",rangeN3,0,rangeN3+10, true, 0,shift);
上の線が引いてある部分が、indicatorの必要とするパラメータの数に
応じて変化するところです。
この部分には、呼び出すindicatorのextern変数を指定します。
このような感じで、indicatorのデータを取得し、
特定の条件になった場合、サインを出すように実装します。
まず、最初は、いきなりExpert Advisorを作らずに、
1.複数のindicatorを組み合わせたindicatorを作る
2.判断ロジックを組み込み、そのindicator上で、
チャートに表示時にマーカーが出るように改造する。
3.Expert Advisorから、iCustomを使用して、先ほど作ったマーカーを見るようにして
売買ロジックを追加しバックテストを行う。
のような手順がよいかと思います。
マーカーの表示の仕方につきましては、
Toyolab FX - 手ぶらで為替取引
http://forex.toyolab.com/archives/2006/05/mt413_-_1.html
が参考になります。
できましたら、下記の協力お願いいたします。
お客さん来ないんでちょっとは宣伝しようと思っております。
おすすめのWebページ 2ch 市況2
「まじかよ」と思われるかもしれませんが、2chの知識レベルは相当のものがあります。
上がった、下がった等の情報は全くあてになりませんが、
多数の人がさまざまな書き込みをしておりますので、
知識の幅は、確実に広がると思います。
実はこのプログの内容も結構2chから仕入れております。
上がった、下がった等の情報は全くあてになりませんが、
多数の人がさまざまな書き込みをしておりますので、
知識の幅は、確実に広がると思います。
実はこのプログの内容も結構2chから仕入れております。
ロールオーバーの利用について(スワップ3倍Dayについて)
非常にシステム化に向いたネタということで、
スワップ3倍Day(木曜朝6時)の値動きについて、記述したいと思います。
ご存知の方も多いかとは思いますが、木曜日朝6時は、土日分のスワップもつくため、
平日のスワップ付与の約3倍のスワップが付与されます。
が、正確な統計を取ったわけではないですが、
スワップの付与が行われた瞬間にスワップ分以上に下落することが非常に多いようです。
GFT系 の業者の場合、スワップの付与時間が違うため、
5時59分に売りをかけ、6時過ぎ下がったところで
売りをかけるといったことが可能なようです。
後ほど、1年ぐらいの統計をとって、記述したいと思います。
補足:個人的には、正攻法ではないので、ほどほどのレバレッジでやるべきだと思います。
スワップ3倍Day(木曜朝6時)の値動きについて、記述したいと思います。
ご存知の方も多いかとは思いますが、木曜日朝6時は、土日分のスワップもつくため、
平日のスワップ付与の約3倍のスワップが付与されます。
が、正確な統計を取ったわけではないですが、
スワップの付与が行われた瞬間にスワップ分以上に下落することが非常に多いようです。
GFT系 の業者の場合、スワップの付与時間が違うため、
5時59分に売りをかけ、6時過ぎ下がったところで
売りをかけるといったことが可能なようです。
後ほど、1年ぐらいの統計をとって、記述したいと思います。
補足:個人的には、正攻法ではないので、ほどほどのレバレッジでやるべきだと思います。



