文系人間のためのシステムトレーダー養成所 アラート関数の作り方
--------

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
2009-05-11

アラート関数の作り方

前回CodersGuruさんのアラート関数を読み、自分でいろいろ試行錯誤した結果、アラート関数をつくり出すことに成功しました!
今回は僕が作ったアラート関数を紹介したいと思います。

アラート関数作成法

前科の疑問は
1,関数はどこに保存したら良いのか
2.保存した関数をどうすれば読み込めるのか
3,時々わからない変数が出てくる

というものでした。

前回の疑問の僕なりに出した答えはこちらです。
1,Libraryに保存します。
2,#import を使用したいコードの先頭で使用し、libraryに保存したコードを読み込みます。
3,分かりやすいアラートがならせるコードを探して応用する(こちらのBolliToucher.mq4 を参考にして作成しました。)

それでは関数を作っていきましょう。

ステップ1 Libraryに自作関数を保存する。

1,メタエディターのfile→Newをクリック。
2,Libraryをクリックして次へを選択。

Libra.png

3,NameにAlertOnceと入力→完了をクリック。

libra2.png


すると
//+------------------------------------------------------------------+
//| AlertOnce.mq4                    |
//| FXboy                      |
//| http://fxboyt.blog56.fc2.com/                  |
//+------------------------------------------------------------------+
#property copyright "FXboy"
#property link "http://fxboyt.blog56.fc2.com/"
//+------------------------------------------------------------------+
//| My function                      |
//+------------------------------------------------------------------+
// int MyCalculator(int value,int value2)
// {
// return(value+value2);
// }
//+------------------------------------------------------------------+

このようなものが出てきたと思います。(#propertyの2行はコードに関係ないので表示が違っていても全く問題ありません)

コメントで記述されているMyFunctionは例文だと思います。
MyFunction(私の関数)と書かれているのでここに自作関数を作るというのは間違いなさそうです。

それでは記述していきましょう。

//+------------------------------------------------------------------+
//| AlertOnce.mq4                    |
//| FXboy                      |
//| http://fxboyt.blog56.fc2.com/                  |
//+------------------------------------------------------------------+
#property copyright "FXboy"
#property link "http://fxboyt.blog56.fc2.com/"
#property library

extern bool Use_Sound=true;
//+------------------------------------------------------------------+
//| My function |
//+------------------------------------------------------------------+
void DoAlert()
{
if(!NewBar() || !Use_Sound)
return;
PlaySound("Alert2");
}

bool NewBar()
{
static datetime dt=0;
if(dt!=Time[0])
{
dt=Time[0];
return(true);
}
}
// int MyCalculator(int value,int value2)
// {
// return(value+value2);
// }
//+------------------------------------------------------------------+


記述する位置はどこでも良いのですがせっかくなのでMy functionと書かれている下から記述してみました。一番下の灰色のコメント部分は気になるようでしたら消しちゃってください。

このコードの概念としては前回の記事のCodersGuruさんのNewBarの判断の仕方と同じです。
ここではAlertではなく、音がなるだけですが、もしAlertになさりたければ、 PlaySound("Alert2");の部分をAlertに変更してください。

コードの解説は省きますが、
static変数は受け取った値を保持するという役割がある
! は「~でないなら」
|| は「もしくは」
NewBar関数を使ってDoAlert関数を機能させている。

ということを頭にいれておけばなんとなく理解できると思います。


先頭に#property libraryと記述しなければ、Start関数が無い(=何も動作をおこせない)じゃないかとコンパイラーが怒り出しますので注意してください。

以上で無事、アラート関数をつくり、保存することができました。

それでは次にこのアラート関数をどのようにして使うかを説明します。

ステップ2 アラート関数を呼び出す。
まずご自身のアラート関数を埋め込みたいと思われているインディケーターのコードをお開きください。
そしたらコードの先頭(init関数の始まる前)に

#import"AlertOnce.ex4"
bool NewBar();
void DoAlert();

を記述し、関数をよびだしてください(これで自分で作った関数が使えるようになります。)

あとはstart関数の中で自分がアラートを鳴らしたい場所にいれこんで頂ければ完了です。

参考までに僕が使用した例をのせておきます。

//+------------------------------------------------------------------+
//| TouchBB.mq4 |
//| FXboy |
//| http://fxboyt.blog56.fc2.com/ |
//+------------------------------------------------------------------+
#property copyright "FXboy"
#property link "http://fxboyt.blog56.fc2.com"

#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 CLR_NONE
#property indicator_color2 Red
#property indicator_color3 Red
#import "AlertOnce.ex4"
bool NewBar();
void DoAlert();


double BufMA[];
double BufUpper[];
double BufLower[];


extern int BandsPeriod = 20;
extern double BandsDeviationsHigh = 2.0;
extern double BandsDeviationsLow =2.0;

//+------------------------------------------------------------------+
//|Custom indicator intialization function |
//+------------------------------------------------------------------+
int init()
{
SetIndexBuffer(0,BufMA);
SetIndexBuffer(1,BufUpper);
SetIndexBuffer(2,BufLower);



return(0);
}

//+------------------------------------------------------------------+
//|custom indicator interation function |
//+------------------------------------------------------------------+
int start()
{
int limit = Bars-IndicatorCounted();
if(limit == Bars) limit -= BandsPeriod-1;

for(int i=limit-1; i>=0; i--)
{
BufMA[i] = iMA(NULL,0,BandsPeriod,0,MODE_SMA,PRICE_CLOSE,i);

double sum=0.0;
for(int a=0; a {
double newres = Close[i+a]-BufMA[i];
sum += newres*newres;
}
double deviation = MathSqrt(sum/BandsPeriod);
BufUpper[i] = BufMA[i]+BandsDeviationsHigh*deviation;
BufLower[i] = BufMA[i]-BandsDeviationsLow*deviation;

if(i<2)
{

if(BufLower[i] + 50*Point>Bid) DoAlert() ;
if(BufUpper[i] - 50*Point<Bid) DoAlert();

}

}
return(0);
}
//+------------------------------------------------------------------+

このように使います。ロジックとしてはボリンジャーバンドにローソク足が触れる直前でサウンドを鳴らすというものです。

もしよろしければこちらにAlertOnce関数と、ボリンジャーバンドに価格が近付くとアラートがなるインディケーターを置いておきましたのでDLしてください。

TouchBBはMetaTrader-expert -indicatorのフォルダに
AlertOnceはMetaTrader-expert-librariesのフォルダに
いれてくださいね。

長くなってしまいましたが以上です。何か質問がありましたらシステムトレーダー交流所の方へお越しください。


最後までお付き合い頂きありがとうございました。

押していただけると大変励みになりますのでよろしくお願いします。 人気ブログランキングへ

theme : FXでシステムトレード
genre : 株式・投資・マネー

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。