2008年06月08日

MetaTrader - 売買シグナルを表示させる@-2

自動的にシグナルが出るようにするには、以下のようにすればとりあえずOK。

#property indicator_chart_window
#property indicator_color1 Blue
#property indicator_color2 Red
#property indicator_color3 Blue
#property indicator_color4 Red
#property indicator_buffers 4

//新しくBufBuy,BufSellを定義
double BufFast[];
double BufSlow[];
double BufBuy[];
double BufSell[];

extern int FastPeriod = 9;
extern int SlowPeriod = 21;

//初期化関数
int init()
{
 //指標バッファの割り当て
 SetIndexBuffer(0,BufFast);
 SetIndexBuffer(1,BufSlow);
 SetIndexBuffer(2,BufBuy);
 SetIndexBuffer(3,BufSell);

 //指標2と3を矢印で表示
 SetIndexStyle(2,DRAW_ARROW,STYLE_SOLID,1,Blue);
 SetIndexStyle(3,DRAW_ARROW,STYLE_SOLID,1,Red);

 //指標2と3の矢印を定義
 SetIndexArrow(2,233);
 SetIndexArrow(3,234);

}

int start()
{
 int counted_bars = IndicatorCounted();
 int limit = Bars - counted_bars;

 if(counted_bars == 0) limit -= SlowPeriod-1;
 for(int i=limit-1; i>=0; i--)
 {
  //移動平均の計算@
  BufFast[i]=0;
  for(int j=0; j<=FastPeriod-1; j++)
  {
   BufFast[i] += Close[i+j];
  }
  BufFast[i] /= FastPeriod;

  //移動平均の計算A
  BufSlow[i]=0;
  for(j=0; j<=SlowPeriod-1; j++)
  {
   BufSlow[i] += Close[i+j];
  }
  BufSlow[i] /= SlowPeriod;

  //買いシグナルの表示
  BufBuy[i]=EMPTY_VALUE;
  if(BufFast[i+2]<=BufSlow[i+2] && BufFast[i+1]>=BufSlow[i+1]) BufBuy[i]=Open[i];

  //売りシグナルの表示
  BufSell[i]=EMPTY_VALUE;
  if(BufFast[i+2]>=BufSlow[i+2] && BufFast[i+1]>=BufSlow[i+1]) BufSell[i]=Open[i];
 }
 return(0);
}


まず、BufBuy,BufSellという2つの指標バッファを定義。
それぞれ、2番目・3番目の指標として割り当てます。
同時に#propertyにてカラーも定義しておきます。

init()内の矢印についての記述は後回しにします。
移動平均の計算はこれまでと同じです。

買いシグナルの部分ですが、これは移動平均の交差(golden cross)が
確定したOpenの値をBufBuy[]に入れています。

EMPTY_VALUEというのは何も入っていないということを意味し、
if文の中身(つまりGC)を満たさない限り、その時のBufBuyには
何も入らないことになります。

売りシグナルはこの真逆です。

結果、BufBuyf,BufSellにはそれぞれGolden Cross, Dead Crossが確定した際のOpen値が入ることになりますが、これを矢印で表示してやるために
init()内で2と3の指標は矢印で表示するように定義するわけです。
【売買シグナルを表示させる@の最新記事】
posted by torinosuke at 20:36| Comment(0) | TrackBack(0) | 売買シグナルを表示させる@ | このブログの読者になる | 更新情報をチェックする

2008年06月06日

MetaTrader - 売買シグナルを表示する@

さーて、佳境に入って来ましたでしょうか?

チャート上に売り買いのシグナルを自動で出せるようになると
少しはメタトレーダーを扱っている感じがして来ますね!

今回は2本の移動平均線を使って、
@FastPeriodの移動平均線がSlowPeriodの移動平均線を上抜いたら買い
AFastPeriodの移動平均線がSlowPeriodの移動平均線より下抜けたら売り

のシグナルを出してみましょー。

目標はこれです。
11.gif

赤と青の売買シグナルが見えますか?
小さくて見えないかな??
posted by torinosuke at 19:36| Comment(0) | TrackBack(0) | 売買シグナルを表示させる@ | このブログの読者になる | 更新情報をチェックする

MetaTrader - インジケーター自作 【3-3】

ちゃんと描けましたね♪
10.gif

それぞれプロパティで期間は変更できます。
勿論、いくつもMA(Moving Average)のインジケーターを追加すれば
2本だろうが3本だろうが同じチャートに挿入出来るんですが、
自動売買のお膳立てをするためにやってみました。

つづいては、「売買シグナルを表示する」です。
posted by torinosuke at 19:24| Comment(0) | TrackBack(0) | 移動平均線を作るB | このブログの読者になる | 更新情報をチェックする

MetaTrader - インジケーター自作 【3-2】

さて、start関数の中身です。

int start()
{
  int counted_bars = IndicatorCounted();
  int limit = Bars - counted_bars;
  
  if(counted_bars == 0) limit -= SlowPeriod-1;
  for(int i=limit-1; i>=0; i--)
  {
    BufFast[i]=0;
    for(int j=0; j<=FastPeriod-1; j++)
    {
      BufFast[i] += Close[i+j];
    }
    BufFast[i] /= FastPeriod;

    BufSlow[i]=0;
    for(j=0; j<=SlowPeriod-1; j++)
    {
      BufSlow[i] += Close[i+j];
    }
    BufSlow[i] /= SlowPeriod;
  }
 return(0);
}


さて、基本的には2つ計算させていること意外はさっきのAと同じです。
一度FastPeriodの計算にiを使っているんですが、一度forループを抜けて
また使う分には問題ないので、再度SlowPeriodの計算で使っています。

その際、最初にint iという風にiが整数であることを指定しているので
次に使うときは特に型を宣言してやる必要はないようです。

BufFast[i] += Close[i+j]; というのは、
BufFast[i] = BufFast[i] + Close[i+j]; と同じ意味です。/=も、
BufFast[i] = BufFast[i]/FastPeriod; を表しています。

これで大丈夫なはず。
posted by torinosuke at 19:06| Comment(0) | TrackBack(0) | 移動平均線を作るB | このブログの読者になる | 更新情報をチェックする

MetaTrader - インジケーター自作 【3-1】

今度は移動平均線を2本表示してみましょー。

移動平均の交差で自動売買するためのファーストステップです。

まず、プロパティの設定。
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red

期間の違う2本の移動平均を作るのが目的なので、指標は2つ。
色を青、赤で指定します。

extern int FastPeriod = 9;
extern int SlowPeriod = 21;

外部変数として適当に名付けたFastPeriod,SlowPeriodを指定します。
初期値として9,21を入れています。

double BufFast[];
double BufSlow[];

指標バッファを2つ用意します。ここへ移動平均の計算を入れていきます。

続いて初期関数を指定します。
int init()
{
SetIndexBuffer(0,BufFast);
SetIndexBuffer(1,BufSlow);
}

BufFastの列に入れた計算結果を0番の指標、
BufSlowの列に入れた計算結果を1番の指標と定義してやります。

ここで、propertyで使ったcolor1, color2と矛盾しますが、
なぜか指標は0番から7番までの8つと決まっているので
0番から入れてやるんです。

colorやstyleなどは1〜8で指定してやる必要があります。面倒ですね。。
posted by torinosuke at 18:38| Comment(0) | TrackBack(0) | 移動平均線を作るB | このブログの読者になる | 更新情報をチェックする