重要指標を表示するインジケータを作ってみる
50種類以上の通貨ペア、各種CFD(金、株など)対応
作成するといってもかなり難しいので、慣れてきてから応用してください。
いつもなら関数の説明などもしていますが、今回は省きます。
ダウンロードは、ここから。
ImportantNews 重要指標を表示するインジケータ
今回は、WindowsのAPIを利用してインターネット経由で重要指標を取得。
それを解析して、インジケータとして画面にプロットします。
重要指標の入手元は、
DailyFX
http://www.dailyfx.com/
で、ここはcsv形式で重要指標を入手できます。
こんな感じでcsvを入手できます。
http://www.dailyfx.com/calendar/Dailyfx_Global_Economic_Calendar.csv?direction=none&collector=allInFolderDateDesc&view=week&timezone=GMT
http://www.dailyfx.com/calendar/cal.csv?sort=dateDesc&timezone=¤cy=|&importance=|
MT4は、英語しか表示できないので(日本は表示可能です)英語のサイトのほうが都合がいいのとcsv形式でリアルタイムに入手できるので解析しやすいのが利点です。
csvファイルを入手して読み込ませる方法もありますが、せっかくなのでインターネットから直接入手します。
MT4には、外部DLLを利用する機能があるので、Windows標準のDLL(wininet.dll)を利用して、インターネットのアクセスを可能にします。
※外部DLLの利用はデフォルトなしになっているので、インジケータ組み込み時にありにする必要があります。
↑赤丸のところ
ソースのはじめの方に
#import “使いたいDLL”
使いたい関数
#import
という宣言があると思います。
ここで、インターネット接続関係の関数を利用できるようにします。
・インターネット接続確認
InternetAttemptConnect()
・インターネット接続
InternetOpenA()
・URLオープン
InternetOpenUrlA()
・インターネット読み込み
InternetReadFile()
・インターネットクローズ
InternetCloseHandle()
オリジナルで作成している関数は、
ReadHttp()
StrToSplitArray()
の2つあります。
ReadHttp()は、インターネットに接続し、内容を文字列として読み込みます。
StrToSplitArray()は、文字列を区切り文字で分割して配列に格納します。
今回は、DailyFXへインターネット経由でアクセスして、csvファイルを取得していますから、ReadHttp()を使ってアクセスした結果がcsvファイルの内容で、戻り値にstringとしてメモリ上に展開されます。
csvファイルを取得してもらうと分かりますが、改行など無駄な部分もたくさんあるので、start()の中でStrToSplitArray()を利用して、改行を区切り文字として行データを配列へ格納、行データを「,」で分割して各項目データとして取得しています。
start()で行っていることは、
1.15分ごとの更新
2.表示データの削除
3.csvデータ(重要指標)の取得
4.データの分割
5.年月日など表示用に適した形への変換
6.タイムゾーンの一致
7.データの表示
今回のタイムゾーンは、デフォルト日本時間を採用しています。
server_timezone
show_timezone
で設定しています。
サーバ時間と表示時間を分けていますが、通常は同じでかまわないでしょう。
自分の環境に合わせてください。
データ表示で書かれている文字ですが、今の状態の上のほうから書き始めていますので、スクロールなどすると消えてしまいます。
次の更新で復活しますので、その辺は我慢してください。
デフォルトで取得している重要指標はすべてです。
URLの問い合わせで
&importanceFilter=Medium|Low|
&importance=Medium|Low|
などを追加して、Highのみにすることも可能です。
また、通貨ペアのフィルターも可能です。
¤cyFilter=GBP|CHF|CAD|AUD|NZD|
¤cy=GBP|CHF|CAD|AUD|NZD|
今回は、ちょっと難しいので少しずつ理解して行ってください。
慣れてきてから、応用するのもありだと思います。
タグ
2009年06月30日
コメント&トラックバック(10)
| トラックバックURL
|
カテゴリ: MQL4 インジケータ メタトレーダープログラミング メタトレーダー入門
FX自動売買ロボット作成マニュアル
50種類以上の通貨ペア、各種CFD(金、株など)対応
ちょっと本屋に寄ったら、FX自動売買ロボット作成マニュアルというのが売っていました。
やっとメタトレーダーの本が増えてきましたね。
今までのこれは全般的なことが載っていました。
FX自動売買ロボット作成マニュアルは、本屋の立ち読みレベルだとEAが重視されています。
自動売買といっているので当たり前ですが。。。
といってもものすごく細かいことが書いてあるわけではないので、初心者向けです。
設定関係が、写真つきで説明してあるのでまだ始めたばかりという人は、いい感じの本かもしれません。
本屋で見かけたら、立ち読みしてみてください。
一応次の予告です。
次は、重要指標を表示するインジケータを作ります。
作ってあるのですが、だいぶ難易度が高いのでどう説明するか悩んでいます。
説明が短かったら、あきらめたと思ってください。。。
タグ
2009年06月26日
コメント&トラックバック(0)
| トラックバックURL
|
CSVファイルを出力してみる。
50種類以上の通貨ペア、各種CFD(金、株など)対応
今回は、ファイル出力を行いたいと思います。
タイトルでは、CSVファイルを出力することになっていますが、なるべく利用しやすいように文字列の行書きだしの関数を作ります。
CSVファイルも出力できますし、ログとして出力することもできます。
EAでもインジケータでもいいのですが、とりあえず、インジケーターで作成してみましょう。
何でもいいので、MetaEditorでインジケーターを作成してください。
別にパラメータなど入りませんので、適当でかまいません。
以下の関数をコピーして、最後にでもペースとしてください。
int LogWrite(string strFileName,string strText)
{
int handle;
handle=FileOpen(strFileName, FILE_BIN|FILE_READ|FILE_WRITE);
if(handle<1)
{
Print(”can’t open file error-”,GetLastError());
return(-1);
}
FileSeek(handle, 0, SEEK_END);
strText = strText + “\r\n”;
FileWriteString(handle, strText, StringLen(strText));
FileClose(handle);
return(0);
}
この関数は、
1.ファイルを開く
2.ファイルの最後に移動
3.ファイルへ出力
4.ファイルを閉じる
このことを行っています。
ちょこっと難しいというか、分かりにくいのが、
FileOpen(strFileName, FILE_BIN|FILE_READ|FILE_WRITE);
の
FILE_BIN|FILE_READ|FILE_WRITE
バイナリーモードで読み書きするという意味ですが、
その他にもファイルの中身を消去しないという意味があります。
今回は、書くだけなので「FILE_WRITE」だけでいいような気がしますが、
これだけだと、ファイルの中身を消してしまいます。
ということで、消したくないときは「FILE_READ|FILE_WRITE」の2つを指定する必要があります。
たぶん、ここが分かりにくいでしょうね。
FileSeek(handle, 0, SEEK_END);
は、ファイルの一番最後へ移動。
strText = strText + “\r\n”;
は、指定された文字の最後に改行コードを入れています。
これを入れないと改行されずに、連続した文字になってしまいます。
FileWriteString(handle, strText, StringLen(strText));
で、文字を指定した文字数分書き出しています。
FileClose(handle);
でファイルを閉じています。
この関数を使うと、簡単にファイルを出力できます。
LogWrite(ファイル名,出力したい文字列)
を指定すればいいだけです。
ちなみにファイルですが、
インストールパス\MetaTrader\experts\files
に出力されます。
EAのテストモードだけ出力先が変わって、
インストールパス\MetaTrader\tester\files
です。
では、関数を呼び出す部分を作ってみましょう。
int start()
の中に、以下の行を追加してください。
string strText = StringConcatenate(Year(),”/”,Month(),”/”,Day(),” “,Hour(),”:”,Minute(),”:”,Seconds(),”,”,Ask,”,”,Bid);
LogWrite(”AskBid.csv”,strText);
YYYY/MM/DD hh:mm:ss,買値,売値
CSVファイルで出力していますが、CSVファイルはカンマ区切りのテキストファイルです。
本当は、もう少し細かいルールがありますが、とりあえず問題ないはずです。
詳しく知りたい人は、ぐぐってみてください。
これで、コンパイルして適当な表にドラッグすれば、ファイルができあがっているはずです。
この関数は、文字なら何でも出力できるので、重宝すると思います。
せっかくなので、もう一つ出力例を
init()の上あたりに以下の宣言を追加してください。
datetime timeNow;
start()の中に以下の処理を追加してください。
if(timeNow != iTime(NULL,0,1))
{
timeNow = iTime(NULL,0,1);
string strTextAshi = StringConcatenate(TimeYear(timeNow),”/”,TimeMonth(timeNow),”/”,TimeDay(timeNow),” “,TimeHour(timeNow),”:”,TimeMinute(timeNow),”:”,TimeSeconds(timeNow),”,”,iHigh(NULL,0,1),”,”,iOpen(NULL,0,1),”,”,iClose(NULL,0,1),”,”,iLow(NULL,0,1));
LogWrite(”Ashi.csv”,strTextAshi);
}
今度のは、足が確定したときの高値、始値、終値、安値を出力しています。
レートが変わるたびに出力しても意味がないので、1本前の時間が変わったときに出力するようにしています。
こんな感じです。
ファイル出力は、分かりましたか?
他にも出力の仕方は、色々あるので試してみてくださいね。
タグ
2009年06月17日
コメント&トラックバック(7)
| トラックバックURL
|
さわさわさん手法について考える
50種類以上の通貨ペア、各種CFD(金、株など)対応
リクエストにありました「さわさわさん手法」について考えたいと思います。
さわさわさん手法って知っていますか?
トラップリピートイフダン(R)
とかリピートイフダンと言われる手法です。
簡単に説明すると
たとえば、JPYUSJで考えて見ましょう。
現在100円だとします。
小さいと面白くないので、25銭単位で仕込みます。
100円、100.25円、100.50円、100.75円、101円に買いと売り注文を両建てで注文を入れます。
利益確定は、25銭単位。
利益確定と同時に確定した買い注文をまた出します。
ロスカットはなしです。
101円まで円安が進むと。
買いポジションは、
25銭が4回確定して、1円の利益です。
売りポジションのほうは、
1円、0.75円、0.5円、0.25円のマイナスで、2.5円のマイナスです。
これがまた、100円まで戻ってくると
マイナスだった売りポジションは、1円のプラスに
逆に買いポジションは、2.5円のマイナスです。
トータルでは、2円プラスの2.5円マイナスです。
もう一度、101円まで動いたとします。
そうすると、利益が3円、マイナスが2.5円で0.5円の利益がでます。
ここまでくるとわかると思いますが、上下を繰り返すとどんどん利益が増えていく手法です。
いい感じですよね。
でも、一方向へ大きく動くと大変なマイナスポジションを持ってしまいます。
ですが、通常上下しながら移動するので、基本的にはプラスになるはずです。
長い目で見れば、140円まで安くなったとしても数年で100円まで戻ってくる可能性が大きいですね。
ある程度、リスクはあると同時に強制ロスカットにならないだけの資金が必要ですが有効な手法だと思います。
オリジナルでは、1円単位でポジションを持っているみたいです。
人によっては、ロスカットも加えている人がいます。
という手法ですが、これをメタトレーダーで実装することを考えます。
結果からいえば、プログラムを作ることは可能です。
ですが、通信が切れたらどうなりますか?
PCが壊れたら。。。
この辺を考えるとちょっと怖いですね。
ということで、作ることは可能ですがおすすめできません。
こうした機能を実装しているFX会社があります。
そちらを利用したほうが、結果的によいのではないでしょうか。
タグ
2009年06月13日
コメント&トラックバック(9)
| トラックバックURL
|
ねた募集!
50種類以上の通貨ペア、各種CFD(金、株など)対応
メタトレーダーのプログラミングをメインにした、このブログをスタートして、1ヶ月半近くになりました。
色々うれしいコメントをいただいて、ありがたい限りです。
基本的な部分は、ほぼ終了かなと思っています。
後は、紹介していない関数などの使い方などがメインになると思います。
ですが、せっかくですので、みなさんからのリクエストを受け付けたいと思います。
このブログや本などを参考に、簡単なプログラムは組めるようになったけど、ちょっと難しいことをやろうとしてちょこっと挫折気味!!
どうしてもこの関数の使い方が分からない。
こんな方のリクエストを募集します。
MT4、MQL4に関することならなんでもOKです。
ただし、プログラムに関することだけです。
一応、プログラムを組めるようになるためのブログなので。。。
一応、初心者のための情報を載せておきます。
メタトレーダーの書籍としては、
これが、有名です。
というか、これしかありません。
本じゃないと分かりにくいという方は、購入をお勧めします。
ちょこっと知りたいという方は、本屋で立ち読みでもいいかもしれません。
でも、関数のリファレンス関係がほとんどありません。
このあたりは本家MQL4の英文ですが、日本語に直訳してくれているサイトがあります。
わたしもよく使っている大変ありがたいサイトです。
無料ですし。。。
でも、ちょっと直訳過ぎて分かりにくいところもあります。
ちょこっと高めですので買ってくださいとは言いませんが、こんなのもあります。
FX完全自動売買システム構築のための250の技 MetaTrader4逆引き大全集

有料だけあって、詳しく書かれています。
半額だったら、買ってくださいとおすすめできますが、ちょこっと高めですね。
気合いを入れて、やろうと思っているなら本を3冊買ったと思って手に入れてもいいかもしれません。
ということで、ネタ募集と入門書関係のお知らせでした。
タグ
2009年06月09日
コメント&トラックバック(13)
| トラックバックURL
|
インジケータの情報を取得する2
50種類以上の通貨ペア、各種CFD(金、株など)対応
前回に引き続き、「ZigZag」インジケータを利用します。
この「ZigZag」インジケータをつかって、別のインジケータを作ってみましょう。
「簡単インジケータ作成テンプレート」を使ったサンプルを作ってみます。
テンプレートを適当なファイル名にコピーして、
インストールパス\MetaTrader\experts\indicators
に入れてください。
コピーした、テンプレートのinit()を以下のように修正してください。
int init()
{
//—- indicators
SetIndexStyle(0,DRAW_ARROW, EMPTY, 4);
SetIndexArrow(0,159);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexStyle(1,DRAW_ARROW, EMPTY, 2);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexStyle(2,DRAW_ARROW, EMPTY, 2);
SetIndexBuffer(2,ExtMapBuffer3);
//—-
return(0);
}
次は、DataSet()を以下のように修正してください。
void DataSet(int i)
{
ExtMapBuffer1[i]=iCustom(NULL, 0, “ZigZag”,12,5,3,0,i);
ExtMapBuffer2[i]=iCustom(NULL, 0, “ZigZag”,12,5,3,1,i);
ExtMapBuffer3[i]=iCustom(NULL, 0, “ZigZag”,12,5,3,2,i);
}
これで終了です。
今回注目する点は、
iCustom(NULL, 0, “ZigZag”,12,5,3,2,i);
インターフェース仕様は、
double iCustom( string symbol, int timeframe, string name, …, int mode, int shift)
で、symbolにNULLを入れることで、今利用している通貨ペアを使用します。
timeframeに0を入れることで、今利用している通貨ペアの時間軸を使います。
nameは、利用したいインジケータ名「ZigZag」。
ファイル名の拡張子をのぞいた名前を使います。
問題は、次の…。
ここは、利用元のインジケータのパラメータを入れます。
「ZigZag」は、3つパラメータがあるので、3つ。
12,5,3
を指定しています。
利用元のインジケータのパラメータが0なら0、20なら20。
引数が可変になるので、分かりにくいところです。
modeは、何番目のバッファから取得するか。
shiftは、何番目の足の情報を取得するかです。
パラメータ設定部分が、わかりにくいので注意してくださいね。
コンパイルして、動かすと元々線が出ていた場所は、赤丸。
バッファ1が青い×。
バッファ2が緑の×。
が表示されるはずです。
この方法は、いろいろなインジケータから情報を取得できるので、おもしろいことができると思います。
タグ
2009年06月06日
コメント&トラックバック(3)
| トラックバックURL
|
カテゴリ: インジケータ メタトレーダー入門 簡単インジケータ作成テンプレート
インジケータの情報を取得する
50種類以上の通貨ペア、各種CFD(金、株など)対応
インジケータから、情報を取得することを考えたいと思います。
有料のインジケータを買った(右の広告みたいなところから)ときに、そのインジケータを元にEAを作りたくなった。
インジケータとインジケータを組み合わせたときのあるタイミングで、シグナルを出したい。
たぶん、こんなこと思う人が結構いると思います。
ということで、インジケータのデータは、どうやってみるか?
ということを考えてみます。
リクエストにもあったので、標準で付いてくるインジケータで「ZigZag」というので考えてみます。
まず、どこの通貨ペアでもいいので、「ZigZag」を張り付けてみてください。
ほかのインジケータを使っていない状態の方が、わかりやすいので「ZigZag」だけにしてください。
アップダウンが、ジグザグに表示されるおもしろいインジケータですね。
「ZigZag」はソースが付いていますが、わからないと仮定します。
データウィンドウを表示してください。
スコープみたいなアイコンをクリックするか、「Ctrl+D」で表示できます。
こんな感じのものが表示されたはずです。
マウスカーソルの位置のデータが表示されて、大変便利です。
で、「ZigZag」のデータは、
ZigZag、Value2、Value3の3つです。
実際に、マウスを動かして、データがどうなっているか調べていきます。
調べていくと、ZigZagというところが、山と谷の位置でデータが入っていることがわかります。
ということは、表示されている線のデータですね。
Value2、Value3は、山と思わしき場所、谷と思わしき場所の値が入っています。
ZigZagの値が、線のデータでほかのデータも使えそうですね。
次は、プログラムでデータを取得してみます。
タグ
2009年06月02日
コメント&トラックバック(5)
| トラックバックURL
|
週末にまとめてクローズするEA
50種類以上の通貨ペア、各種CFD(金、株など)対応
サンプルプログラムばかりであまり役に立っていないと思うので、ほしい人はほしいもの。
週末持ち越しは、いやだけどEAがポジション持ちっぱなしなんだよね!
という人のために、週末に強制的にクローズするEAです。
121証券のようにサーバが日本時間であることを前提に話します。
別の時間帯を採用しているFX会社と契約している方は、時間を調整してください。
EAを作ってみるを参考にEAを作ってください。
名前は、WeekendCloseとします。
パラメータは、ウィザードで設定してもらっても構いませんし、コードに以下のように指定してもらっても構いません。
extern int CloseWeek=6;
extern int CloseTime=5;
CloseWeekの6は、土曜日。
CloseTimeの5は、5時です。
曜日は、日曜日が0で、月曜日が1。
順番になっています。
まず、曜日と時刻をチェックする関数を追加します。
int ChkCloseTime()
{
int ChkWeek=DayOfWeek();
int ChkHour=Hour();
if((ChkWeek==CloseWeek && ChkHour>=CloseTime))
{
return(1);
}
return(0);
}
曜日と時間を取得して、指定した曜日と時間以上なら、1を返します。
次に、チケット番号をクローズする関数を追加します。
void ClosingTicket(int CloseTicket)
{
if(OrderSelect(CloseTicket, SELECT_BY_TICKET)==true)
{
if(OrderType() == OP_SELL || OrderType() == OP_SELLLIMIT || OrderType() == OP_SELLSTOP)
{
// Closing
if(OrderClose(OrderTicket(),OrderLots(),Ask,3,Green) == false)
{
OrderDelete(OrderTicket());
}
}
else
{
// Closing
if(OrderClose(OrderTicket(),OrderLots(),Bid,3,Green) == false)
{
OrderDelete(OrderTicket());
}
}
}
}
指定された、チケットのオーダーをコントロールできるようにしてからクローズします。
クローズに失敗したときは、未確定の注文として注文の取り消しを行っています。
次に、実装部分を作ります。
int start()
{
if(ChkCloseTime() == 0) return(0);
int total=OrdersTotal();
int i;
for(i=0;i < total;i++){
if(OrderSelect(i, SELECT_BY_POS)==true)
{
ClosingTicket(OrderTicket());
}
}
return(0);
}
まず、終了時間かチェックします。
まだなら、そのまま関数を抜けます。
終了時間の場合は、現在もっているポジションを調べ、すべてのポジションをクローズしていきます。
サンプルを参考に改造して使ってみてください。
今回のプログラムは、以下からダウンロードできます。
EA(自動売買)は、
インストールパス\MetaTrader\experts
に入れてください。
タグ
2009年05月26日
コメント&トラックバック(1)
| トラックバックURL
|
メール送信インジケータ
50種類以上の通貨ペア、各種CFD(金、株など)対応
前回のインジケータを派手にするで、アラートウィンドウを開いたり、音を鳴らしたりしました。
今回は、メールを送信してみたいと思います。
ですが、メールの設定は結構めんどうなので、簡単にユーザを作れるYahooメールを例に設定を説明します。
とりあえず、Yahooメールと契約してください。
で、メール設定に「POPアクセスとメール転送」があります。
「ブラウザアクセスとPOPアクセス」にチェックを入れて、設定してください。
これで、Yahooメールの設定は終了です。
次は、メタトレーダーの設定です。
メニューのツール-オプションを開いてください。
「E-メール」タブで、
「有効にする」にチェックを入れます。
SMTPサーバー:「smtp.mail.yahoo.jpsmtp.mail.yahoo.co.jp:587」
SMTPログインID:「YahooのユーザID」
SMTPパスワード:「Yahooのパスワード」
発信元:「ユーザID@yahoo.co.jp」
送信先:「送信したいメールアドレス」
これを入力して、「Test」ボタンを押してください。
テストメールが送信されれば、設定OKです。
では、プログラムの方に行ってみましょう。
前回のソースを使います。
ここから、読み始めた人は、前回のインジケータを派手にするを見てくださいね。
では、DataSetを以下のように書き換えてください。
void DataSet(int i)
{
double dBBUp = iBands(NULL,0,Param1,2,0,PRICE_CLOSE,MODE_UPPER,i);
double dBBDown = iBands(NULL,0,Param1,2,0,PRICE_CLOSE,MODE_LOWER,i);
if(dBBUp < High[i])
{
ExtMapBuffer1[i]=dBBUp;
if(ExtMapBuffer1[i+1] == EMPTY_VALUE)
{
if(i == 0){
SendMail(”Test BB” , “BBUp Over:” + DoubleToStr(High[i],Digits));
PlaySound(”alert.wav”);
}
ExtMapBuffer1[i+1] = ExtMapBuffer2[i+1];
}
}
else
{
ExtMapBuffer2[i]=dBBUp;
if(ExtMapBuffer2[i+1] == EMPTY_VALUE)ExtMapBuffer2[i+1] = ExtMapBuffer1[i+1];
}
if(dBBDown > Low[i])
{
ExtMapBuffer3[i]=dBBDown;
if(ExtMapBuffer3[i+1] == EMPTY_VALUE)
{
if(i == 0){
SendMail(”Test BB” , “BBDown Over:” + DoubleToStr(Low[i],Digits));
PlaySound(”alert.wav”);
}
ExtMapBuffer3[i+1] = ExtMapBuffer4[i+1];
}
}
else
{
ExtMapBuffer4[i]=dBBDown;
if(ExtMapBuffer4[i+1] == EMPTY_VALUE)ExtMapBuffer4[i+1] = ExtMapBuffer3[i+1];
}
// ExtMapBuffer5[i]=iMA(NULL,0,14,0,MODE_SMA,PRICE_WEIGHTED,i);
// ExtMapBuffer6[i]=iMA(NULL,0,14,0,MODE_EMA,PRICE_WEIGHTED,i);
// ExtMapBuffer7[i]=iMA(NULL,0,14,0,MODE_SMMA,PRICE_WEIGHTED,i);
// ExtMapBuffer8[i]=iMA(NULL,0,14,0,MODE_LWMA,PRICE_WEIGHTED,i);
}
今回は、前回のアラートウィンドウの代わりにメール送信を行います。
SendMail(タイトル,本文);
を使います。
DoubleToStr(High[i],Digits)
で、High[i]の数字を文字型に変更しています。
DoubleToStr(double型の変数,有効小数点桁数)
Digitsは、現在の通貨ペアの小数点桁数を表します。
ということで、ボリンジャーバンドにタッチしたときの高値か安値をメールで送信するプログラムのできあがりです。
いままで、数回同じようなネタで行いましたが、結構簡単にいろいろなことができることが分かったと思います。
小難しいことを知らなくても意外と何とかなるでしょ!
では、また次回。
タグ
2009年05月22日
コメント&トラックバック(6)
| トラックバックURL
|
カテゴリ: インジケータ メタトレーダー入門 簡単インジケータ作成テンプレート
インジケータを派手にする
50種類以上の通貨ペア、各種CFD(金、株など)対応
前回のちょっと賢いボリンジャーバンドインジケータをちょっと派手にしたいと思います。
前回のソースをそのまま使うので、今回からお読みの方は、前回を参考にソースを作成してください。
で、どのように派手にするかというと、アラートウィンドウを開き、音を鳴らします。
リクエストもあったので、今回の例で説明します。
アラートウィンドウと音を鳴らすタイミングは、ボリンジャーバンドを抜けたときに行います。
では、DataSetを以下のように書き換えてください。
void DataSet(int i)
{
double dBBUp = iBands(NULL,0,Param1,2,0,PRICE_CLOSE,MODE_UPPER,i);
double dBBDown = iBands(NULL,0,Param1,2,0,PRICE_CLOSE,MODE_LOWER,i);
if(dBBUp < High[i])
{
ExtMapBuffer1[i]=dBBUp;
if(ExtMapBuffer1[i+1] == EMPTY_VALUE)
{
if(i == 0){
Alert(”BBUp Over:”,High[i]);
PlaySound(”alert.wav”);
}
ExtMapBuffer1[i+1] = ExtMapBuffer2[i+1];
}
}
else
{
ExtMapBuffer2[i]=dBBUp;
if(ExtMapBuffer2[i+1] == EMPTY_VALUE)ExtMapBuffer2[i+1] = ExtMapBuffer1[i+1];
}
if(dBBDown > Low[i])
{
ExtMapBuffer3[i]=dBBDown;
if(ExtMapBuffer3[i+1] == EMPTY_VALUE)
{
if(i == 0){
Alert(”BBDown Over:”,Low[i]);
PlaySound(”alert.wav”);
}
ExtMapBuffer3[i+1] = ExtMapBuffer4[i+1];
}
}
else
{
ExtMapBuffer4[i]=dBBDown;
if(ExtMapBuffer4[i+1] == EMPTY_VALUE)ExtMapBuffer4[i+1] = ExtMapBuffer3[i+1];
}
// ExtMapBuffer5[i]=iMA(NULL,0,14,0,MODE_SMA,PRICE_WEIGHTED,i);
// ExtMapBuffer6[i]=iMA(NULL,0,14,0,MODE_EMA,PRICE_WEIGHTED,i);
// ExtMapBuffer7[i]=iMA(NULL,0,14,0,MODE_SMMA,PRICE_WEIGHTED,i);
// ExtMapBuffer8[i]=iMA(NULL,0,14,0,MODE_LWMA,PRICE_WEIGHTED,i);
}
if(i == 0)でくくっているのは、過去のラインを描画するときにもメッセージや音が出てしまうためです。
新規にボリンジャーバンドを抜けたときだけ、処理を行います。
Alertは、アラートウィンドウを表示する関数で、引数はコメントと同じで「,」カンマ区切りで、文字や数値を連結できます。
PlaySoundは、音を出す命令で、引数にサウンドファイル名を指定します。
インストールパス\MetaTrader\sounds
に入っているファイルを指定できます。
これで、好きなときに音を出したりできますね。
色々挑戦してみてください。
タグ
2009年05月21日
コメント&トラックバック(1)
| トラックバックURL
|
カテゴリ: インジケータ メタトレーダー入門 簡単インジケータ作成テンプレート




![[image]投資で失敗しない7つの法則:無料CDプレゼント](http://www.affiliatecenter.jp/invest/img/FX_freeCD/banner165x100seven_rule5e.gif)
![[image]無料レポートプレゼント:ドルが紙くずになった時に資産を守る方法](http://www.affiliatecenter.jp/invest/img/dollar/MNL4_165x100.jpg)


MyBlog
