基礎から学ぶシステムトレード
シストレブログ人気ランキング  

シストレ徹底攻略シストレマスターへの道ワールド・トレーディング・エッジ基礎から学ぶシステムトレードシストレニュースシストレツールシストレナビTOPへ

 

2010年01月19日(火)

配列の注意点(2) [プログラミング]



前回に引き続き、配列の話です。

C言語で配列を勉強した人にとっては、配列を宣言するときに配列のサイズを指定するのは当然でしょうが、MQL4では必ずしもそうではないようです。

MQL4のプログラムでよく出てくる配列は、終値や高値、安値、あるいは移動平均、RSIなどのテクニカル指標などです。

これらは、Close[0], Close[1], Low[0], Low[1], Buf[0], Buf[1]のように使うので、通常の配列と同じように見えます。

しかし、宣言については、予約配列のため宣言が不要だったり、宣言するとしても、

double buf[];

のように配列のサイズを指定せずに宣言します。

このようにローソク足の4本値やテクニカル指標の値を格納する配列は、通常の配列ではなく、「時系列配列」と呼ばれる、MQL4特有のものです。

この場合、配列のサイズを指定する必要はありません。

ということは、通常の配列はサイズを指定する、時系列配列はサイズを指定しない、と覚えておけばいいのでしょうが、困ったことに、通常の配列でも配列のサイズを指定しない場合があります。

例えば、このようなプログラムです。
int start()
{
double buf[] = {1,2,3,4,5};

Print(buf[0]);
Print(buf[1]);
Print(buf[2]);
Print(buf[3]);
Print(buf[4]);

return(0);
}

ここで buf[] は、宣言時にサイズを指定していませんが、時系列配列ではなく、通常の配列です。

ただ、宣言と同時に初期値が代入されているところに注意してください。

ここでは、5個の初期値を代入しているので、
double buf[5];

と宣言してそれぞれの要素に値を代入したのと同じことになります。

こういうケースを見ていると、次のように間違ったプログラムを作成してしまう場合があります。
int start()
{
double buf[];

buf[0] = 1;
buf[1] = 2;
buf[2] = 3;

Print(buf[0]);
Print(buf[1]);
Print(buf[2]);

return(0);
}

これは、配列宣言時に初期値が代入されていないので、実際には配列の要素はひとつも確保されていません。

具体的に値を代入しているにも関わらず、結果はすべて0になります。

これも、コンパイルや実行時にエラーが出ないので、配列のサイズを指定していないことに気づくまで、プログラムの間違いがわかりません。

エラーの出ない間違いは初心者にとって大きな壁です。

これからもそういう例を取り上げていきたいと思います。


>>“基礎から学ぶシステムトレード”全記事バックナンバーはこちらから




Posted at 15時32分


ページのトップへ ページのトップへ

Sponsor AD

2010/1

          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            

プロフィール

豊嶋久道

2003年よりFX取引を始め、システムトレードの道へ。最近ではFXオプション取引も含めたトレーディングシステムの研究を行っている。システムトレードを基礎から正しく理解するための情報を発信する予定。

PHOTO

相場はランダムウォーク?

相場はランダムウォーク?

カテゴリーリスト

最近の記事

検索


当サイトコメントについて

当コメントは情報提供のみを目的として作成されたものであり、投資に関してはご自身でご判断くださいますようお願い致します。また、当資料は著作物であり著作権法により保護されております。無断で全文または一部を転載することはできません。

RSS1.0

[Login]


powered by a-blog
Copyright (C) 2008 PhiConcept,Inc. All rights reserved.