簡単インジケータ作成テンプレート
50種類以上の通貨ペア、各種CFD(金、株など)対応
インジケータプログラムの楽しさを知ってもらうために、「簡単インジケータ作成テンプレート」を作成しました。
まず、ダウンロードしてください。
それでは、簡単に使い方を説明します。
indicator_temp.mq4
を作りたいインジケータ名に変更します。
今回は、サンプルでボリンジャーバンドを表示してみたいと思います。
ですので、ファイル名を「Bands_I.mq4」に変更してください。
リネームしたファイルを以下のフォルダーへコピーしてください。
インストールパス\MetaTrader\experts\indicators
では、メタトレーダーを起動して、メタエディターを起動してください。
ナビゲータウィンドウのFilesタブにindicatorsを開くと、ファイル一覧が表示されます。
ここに先ほどコピーした、「Bands_I.mq4」があるはずなので、ダブルクリックして開いてください。
下の方に、「DataSet」という関数があります。
このテンプレートでは、基本的にこの中だけをいじります。
では、以下のように書き換えてください。
void DataSet(int i)
{
ExtMapBuffer1[i]=iBands(NULL,0,21,3,0,PRICE_CLOSE,MODE_UPPER,i);
ExtMapBuffer2[i]=iBands(NULL,0,21,2,0,PRICE_CLOSE,MODE_UPPER,i);
ExtMapBuffer3[i]=iBands(NULL,0,21,1,0,PRICE_CLOSE,MODE_UPPER,i);
ExtMapBuffer4[i]=iMA(NULL,0,21,0,MODE_SMA,PRICE_CLOSE,i);
ExtMapBuffer5[i]=iBands(NULL,0,21,1,0,PRICE_CLOSE,MODE_LOWER,i);
ExtMapBuffer6[i]=iBands(NULL,0,21,2,0,PRICE_CLOSE,MODE_LOWER,i);
ExtMapBuffer7[i]=iBands(NULL,0,21,3,0,PRICE_CLOSE,MODE_LOWER,i);
// ExtMapBuffer8[i]=iMA(NULL,0,14,0,MODE_LWMA,PRICE_WEIGHTED,i);
}
ラインは、7本使うので最後の1行はコメントアウトしています。
ボリンジャーバンドの3θ、2θ、1θを上下1本ずつ、合計6本と中央に移動平均を引くので、合計7本です。
このように、メタトレーダー標準の関数の値を代入するだけで、お手軽にいろいろな線を引くことができるテンプレートとなっています。
標準では、メインウィンドウへ書きますので、現在のレートに近い値を代入しないと表示できません。
※範囲外になってしまうので。。。
のようにコメントを変更してください。
ちなみに以下のように書き直すと、RSIが表示できます。
このように、比較的簡単にいろいろな指標を表示できます。
次回から、このテンプレートを使って遊んでみたいと思います。
タグ
2009年05月19日
コメント&トラックバック(1)
| トラックバックURL
|
カテゴリ: インジケータ メタトレーダー入門 簡単インジケータ作成テンプレート
プログラムが組める自分を想像する
50種類以上の通貨ペア、各種CFD(金、株など)対応
FXや株でも何でもそうですが、過去のデータを参考に投資を行うと思います。
自分なりに、相場がこうなるといい感じになりそうだから買おう、とかルールを決めている人が多いと思います。
というか、ルールを決めないとほとんどギャンブルになっちゃうので、決めましょうね。
で、このルールを見つけるのが大変ですよね。
私も日々、見つけようと努力しています。
グラフなどをみて、この線を組み合わせるといいかもしれない!
と思ったら、過去にどうなっているか調べるわけです。
ここからが、プログラムを組める人と組めない人の差が開きます。
組めない人は、グラフとにらめっこして、ここでは増えた、ここではダメ。
とかすべて、見ていかなければなりません。
その上、パラメータをいじってみたら、もう一度同じことを繰り返す必要があります。
大変ですよね。
たぶん、ルールを見つける作業がいやになるのは、この辺ではないかと。。。
逆にプログラムを組める人は、最初にルールを元にしたプログラムを組みます。
後は、解析結果を待つだけです。
バックテストで、パラメータを変えながら最適な結果を見つける方法も説明しました。
1度組んでしまえば、解析まで自動でできます。
まあ、プログラムを組むのが面倒なんですがね。
プログラムを組める場合と組めない場合では、どちらが有利か説明するまでも無いと思います。
いままで、いろいろなサンプルで説明してきましたが、難しいと思う人も多いかと思います。
でも、行数を見てください。
100行ぐらいで、できているはずです。
たった100行ですよ。
これで、それなりのものができてしまうんです。
少し頑張ればできそうな気がしませんか?
メタトレーダーのプログラムは、ウィンドウズのプログラムを書こうと思うより、はるかに楽です。
よく考えてください。
やることは、値の比較だけ。
やっても何か特殊な計算をするぐらいですよね。
たくさんの指標を計算する関数がMT4には用意されているので、オリジナルで作ることは少ないと思います。
だから、指標の組み合わせと比較だけです。
全く目的が違うんです。
だから複雑なことをやらせないので、短いステップ数で完成することが多いんです。
いくつか、自分で組んでみると分かると思います。
まずは、まねから始めてみませんか?
覚えることは、
- 変数の宣言
- if文
- for文
- 標準で用意されている関数の呼び方
この4つをマスターすれば、あらかた組めますのでチャレンジしてみましょう。
4の標準で用意されている関数は、基本的に覚える必要はありません。
使いたいときに探して、目的のものがあれば使う。
無ければ計算で求めるだけです。
単純に考えましょう。
では、頑張ってください。
タグ
2009年05月18日
コメント&トラックバック(0)
| トラックバックURL
|
カテゴリ: メタトレーダープログラミング メタトレーダー入門
トレンドラインを書いてみる3
50種類以上の通貨ペア、各種CFD(金、株など)対応
さて、前回と前々回で、トレンドラインを書くプログラムの基本とプログラムを書くときに気をつけたほうがいいことを書きました。
今回は、トレンドラインの総仕上げとして、ループ回数を最小にして、好きな本数のトレンドラインを書くインジケータを作成します。
少々、難易度が上がりますが、がんばってついてきてください。
トレンドラインを書いてみるを参考にインジケータのスケルトンを作成してください。
前回のソースにそのまま上書きでもかまいません。
まず、前半の定義部分です。
#property indicator_chart_window
extern int nPeriod=9;
extern int Limit=350;
extern int nLine=3;
nLineを追加しました。
これは、トレンドラインの数です。
デフォルトでは、3本ずつ書きます。
初期化部分です。
int init()
{
int i;
for(i=0;i<nLine;i++)
{
ObjectCreate(”Trend DN-”+i,OBJ_TREND,0,0,0,0,0);
ObjectSet(”Trend DN-”+i,OBJPROP_COLOR,Maroon);
ObjectSet(”Trend DN-”+i,OBJPROP_WIDTH,3);
ObjectCreate(”Trend UP-”+i,OBJ_TREND,0,0,0,0,0);
ObjectSet(”Trend UP-”+i,OBJPROP_COLOR,Green);
ObjectSet(”Trend UP-”+i,OBJPROP_WIDTH,3);
}
return(0);
}
オブジェクトの作成ですが、前回と違って指定した数だけ作る必要があるため、ループをまわして指定した数のトレンドラインを書くためのオブジェクトを作成します。
名前が、「Trend UP-0″」など固定でしたが、数にあわせて名前を変更したいので、「Trend UP-”+i」としてループの値を名前に追加するように変更しました。
また、線が細くて見にくかったので、今回は少し太く描画させて見ます。
ObjectSet(”Trend DN-”+i,OBJPROP_WIDTH,3);
の部分で、線の幅をデフォルトの1ポイントから3ポイントに広げます。
次は、終了処理です。
int deinit()
{
int i;
for(i=0;i<nLine;i++)
{
ObjectDelete(”Trend UP-”+i);
ObjectDelete(”Trend DN-”+i);
}
return(0);
}
初期処理と同じく、指定された数分だけ削除するようにループしています。
次は、本題のメイン処理です。
int start()
{
//今回は、線の数が分からないので、配列を使います。
//まず、空の配列を用意します。
//固定で指定する場合は、double r[10];の様に数字を指定します。
double r[];
int rt[];
double s[];
int st[];
//配列に必要な入れ物を指定した数だけ用意します。
//はじめと終わりの入れ物が必要なので、実際の線の数より1つ多い数を指定します。
ArrayResize(r,nLine+1);
ArrayResize(rt,nLine+1);
ArrayResize(s,nLine+1);
ArrayResize(st,nLine+1);
int nCurBar;
int ChkRLine=0;
int ChkSLine=0;
if(Bars<Limit) Limit=Bars-nPeriod;
//前回とは逆に最新のものから指定本数までループをまわします。
for(nCurBar=0; nCurBar<Limit; nCurBar++)
{
//一番低い谷を見つけます。
if(Low[nCurBar+(nPeriod-1)/2] == Low[iLowest(NULL,0,MODE_LOW,nPeriod,nCurBar)])
{
//値が1つだけでは線を引けないので、配列に代入だけします。
if(ChkSLine==0)
{
s[ChkSLine]=Low[nCurBar+(nPeriod-1)/2];
st[ChkSLine]=nCurBar+(nPeriod-1)/2;
ChkSLine++;
}
//2本目の値で、1つ目の値より小さい場合描画します。
else if(s[ChkSLine-1] < Low[nCurBar+(nPeriod-1)/2] && ChkSLine <= nLine)
{
//値の代入を行い
s[ChkSLine]=Low[nCurBar+(nPeriod-1)/2];
st[ChkSLine]=nCurBar+(nPeriod-1)/2;
//描画させます。
ObjectMove(”Trend DN-”+(ChkSLine-1),1,Time[st[ChkSLine-1]],s[ChkSLine-1]);
ObjectMove(”Trend DN-”+(ChkSLine-1),0,Time[st[ChkSLine]],s[ChkSLine]);
//ラインを1つ進めます。
ChkSLine++;
}
//もし、1つ前より小さい値が見つかったときに値を入れ替えます。
else if(s[ChkSLine-1] > Low[nCurBar+(nPeriod-1)/2] && ChkSLine <= nLine)
{
s[ChkSLine-1]=Low[nCurBar+(nPeriod-1)/2];
st[ChkSLine-1]=nCurBar+(nPeriod-1)/2;
}
}
//谷と同様に山を見つけます。
if(High[nCurBar+(nPeriod-1)/2] == High[iHighest(NULL,0,MODE_HIGH,nPeriod,nCurBar)])
{
if(ChkRLine==0)
{
r[ChkRLine]=High[nCurBar+(nPeriod-1)/2];
rt[ChkRLine]=nCurBar+(nPeriod-1)/2;
ChkRLine++;
}
else if(r[ChkRLine-1] > High[nCurBar+(nPeriod-1)/2] && ChkRLine <= nLine)
{
r[ChkRLine]=High[nCurBar+(nPeriod-1)/2];
rt[ChkRLine]=nCurBar+(nPeriod-1)/2;
ObjectMove(”Trend UP-”+(ChkRLine-1),1,Time[rt[ChkRLine-1]],r[ChkRLine-1]);
ObjectMove(”Trend UP-”+(ChkRLine-1),0,Time[rt[ChkRLine]],r[ChkRLine]);
ChkRLine++;
}
else if(r[ChkRLine-1] < High[nCurBar+(nPeriod-1)/2] && ChkRLine <= nLine)
{
r[ChkRLine-1]=High[nCurBar+(nPeriod-1)/2];
rt[ChkRLine-1]=nCurBar+(nPeriod-1)/2;
}
}
//上昇・下降ともに指定本数見つかった場合、ループを抜けます。
if(ChkSLine > nLine && ChkRLine > nLine)break;
}
return(0);
}
メイン処理は、ループの中に納まっていて、必要な本数が見つかった後、breakで抜けいていることが分かると思います。
必要な数だけ、ループをまわすようにして負荷を抑えています。
値は、配列に格納しています。
本当は、配列に代入しなくても描画だけなら可能です。
ですが、今後の拡張のために値を残しておくようにしました。
値を残しておくことで、いろいろ拡張できると思います。
値の格納も1つ目の変数への格納と、条件を満たした場合に次の配列へ格納すること、一度格納した配列より大きい・小さい値の場合入れ替える処理を追加してあります。
少々複雑になりましたが、コンパクトにまとまっていると思います。
インジケータは、
インストールパス\MetaTrader\experts\indicators
に入れてください。
タグ
2009年05月11日
コメント&トラックバック(1)
| トラックバックURL
|
トレンドラインを書いてみる
50種類以上の通貨ペア、各種CFD(金、株など)対応
前回は、インジケーターを作ってみるで足に対応したバッファに代入することで、メタトレーダーの機能を使いグラフを自動的に描画方法を試してみました。
今回は、オブジェクトという機能を使い好きな場所に線や文字などを描画する方法を試してみます。
で、単純に線を書いてもおもしろくないのでトレンドラインを書いてみたいと思います。
トレンドとは、上下に動きながら移動している為替も平均してみると上昇していたり、下降しているときがあります。
こうした状態をトレンド相場と呼びます。
平均した線が横ばいの場合は、レンジ相場と呼びます。
為替は、上昇トレンド、下降トレンド、レンジ相場の3種類のどれかの状態になっています。
このトレンドを表す線をトレンドラインと呼びます。
上昇トレンドラインは、上下に動いている山の高値と高値を結んだ線。
下降トレンドラインは、谷の安値と安値を結んだ線のことをいいます。
このトレンドラインをインジケーターの機能を使って、描画したいと思います。
インジケーターを作ってみるを参考にスケルトンを作ります。
Nameを「TrendLine」。
その他は、何も入力しません。
まずは、TrendLineのスケルトンを作成してください。
まず、前半の宣言部分を作成します。
//メインウィンドウに描画します。
#property indicator_chart_window
//山と谷を見つける幅をパラメータとして指定します。
extern int nPeriod=9;
//先頭から何本まで山、谷を見つけるかパラメータとして指定します。
extern int Limit=350;
次は、初期化処理です。
int init()
{
//下降トレンドライン0番目のオブジェクトを作ります。
ObjectCreate(”Trend DN-0″,OBJ_TREND,0,0,0,0,0);
//下降トレンドライン0番目のオブジェクトの色を指定します。
ObjectSet(”Trend DN-0″,OBJPROP_COLOR,Maroon);
//上昇トレンド0番目のラインオブジェクトを作成します。
ObjectCreate(”Trend UP-0″,OBJ_TREND,0,0,0,0,0);
ObjectSet(”Trend UP-0″,OBJPROP_COLOR,Green);
return(0);
}
上昇、下降用のトレンドラインを引くためのオブジェクトを用意しました。
次は、終了処理です。
インジケータを削除したときに、オブジェクトが残ってしまいます。
そのために、インジケータ終了時に自分が作ったオブジェクトを削除する処理を追加します。
次は、トレンドラインを描画するための山、谷を見つけラインを引く処理です。
//山、谷の値と足番号を格納する変数と描画する値を格納する変数を宣言します。
これで、終了です。
コンパイルして、インジケータを表示させてみてください。
以下のようにトレンドラインが表示されれば成功です。
ちょっとは、らしいものができたのではないでしょうか?
少しずつレベルをアップしていきますね。
今回のプログラムは、以下からダウンロードできます。
インジケータは、
インストールパス\MetaTrader\experts\indicators
に入れてください。
タグ
2009年05月09日
コメント&トラックバック(3)
| トラックバックURL
|
インジケーターを作ってみる
50種類以上の通貨ペア、各種CFD(金、株など)対応
今回は、インジケータを作ってみようと思います。 3本の移動平均を表示したいと思います。
簡単なプログラムを作ってみるを参考にMetaEditorのメニューでFile-Newで「Expert Advisor Wizard」を開きます。 「Custom Indicator」にチェックを入れて、次へを押します。
Nameに3EA(名前なので何でもいいです)、Addボタンを押してパラメータを3つ追加します。
Nameをそれぞれ、Peried1、Peried2、Peried3とします。 Typeはintにしてください。
次へを押します。
Addボタンを押して、表示するグラフのラインを追加します。
3つ追加して、Red、Yellow、Greenを選んでください。
別に違う色でもかまいません。
今回は、線で表示するのでTypeはLineのままにしてください。
完了を押すと、スケルトンが作成されます。
先頭の方に以下の行があると思います。
コメントを付けて、説明します。
//メインウィンドウに表示する。
#property indicator_chart_window
//グラフに利用する入れ物が3つ(最大8個)
#property indicator_buffers 3
//1本目は、太さ1の赤
#property indicator_color1 Red
//2本目は、太さ1の黄色
#property indicator_color2 Yellow
//3本目は、太さ1の緑
#property indicator_color3 Green
//入力するパラメータは、以下の3つ
extern int Peried1;
extern int Peried2;
extern int Peried3;
//表示するグラフに対応する入れ物3つ
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
さて、以上でプログラムは終了です。
コンパイル(F5)してみましょう。
メタトレーダーへ戻って、3EAを表示させたい通貨のウィンドウへドロップしてみてください。
iMaが移動平均を取得する関数です。
パラメータで、いろいろな移動平均を取得できます。
今回は、単純移動平均(MODE_SMA)、終値(PRICE_CLOSE)を利用しました。
他にも、指数平均、平滑平均、加重平均なども選べます。
終値の他にも始値、高値、安値、平均をとったものなどを選ぶことができます。
今回のプログラムは、以下からダウンロードできます。
インジケータは、
インストールパス\MetaTrader\experts\indicators
に入れてください。
タグ
2009年05月01日
コメント&トラックバック(9)
| トラックバックURL
|
簡単なプログラムを作ってみる
50種類以上の通貨ペア、各種CFD(金、株など)対応
とりあえず、プログラムを作ってみましょう。 今回は、現在のレートを表示するものを作ります。 インジケータ、EAどちらでも作れますが、設定の簡単なEAで作ります。 まず、MetaEditorを起動します。
メタトレーダーの赤丸のボタンを押すとエディターが起動します。
こんな感じの画面が開いたと思います。
次にメニューからFile-Newを選択します。
こんな感じの画面が開いたと思います。
「Custom Indicator」にチェックを入れて、次へを押します。
Nameにプログラムの名前、今回は「NowRate」
Authorは、作成者名
Linkは、公開先のURLなど
Author、Linkは省略可能です。
Parametersには、外部入力するパラメータを入れますが、今回は利用しないのでそのままにします。
次へを押してください。
Indicator in separete windowにチェックを入れると、サブウィンドウに表示されます。
今回は、メインウィンドウに表示するのでチェックを入れません。
Minimum、Maximumはサブウィンドウの最大・最小を固定するときに利用します。
Indexesは、グラフの線を追加し、色などを設定するときに使います。
今回は利用しません。
完了を押してください。
エディターにスケルトンが表示されたと思います。
int start()
{
int counted_bars=IndicatorCounted();
//—-
//—-
return(0);
}
FX完全自動売買システム構築のための250の技 MetaTrader4逆引き大全集
気になる方は、チェックしてみてください。
インジケータは、
インストールパス\MetaTrader\experts\indicators
に入れてください。
タグ
2009年05月01日
コメント&トラックバック(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
