投資で実現!不労所得生活

EasyLanguage の変数の特徴(値の伝搬のしくみ)

更新:
作成:
EasyLanguage の変数は、一般的なプログラミング言語とは少し異なる性質を持っています。

EasyLanguage でユーザー変数を定義するときは、次のように var: を使います(variables: でも OK)。

var: int hoge(0);

このように定義した変数 hoge は、次のような性質を持ちます。

  • チャートにアタッチしたときのみ初期化される(上記の例では 0 に初期化される)。
  • 変数に代入した値は、次の足の処理に引き継がれる。
  • hoge[n] とすると、n 本前の足の最終的な値を参照できる。hoge[0]hoge と同じ意味になる。

この振る舞いは、次のようなサンプルコードを実行してみるとよく分かります。 このプログラムでは、初期値 0 の数値変数 hoge を定義し、各足の処理ごとにインクリメントしています。 そして最後に、現在の hoge の値と、1 つ前、2 つ前の足での hoge の値を出力しています。

サンプルコード
var: int hoge(0);

hoge += 1;
Print(String.Format("{0} {1} {2}", hoge[0], hoge[1], hoge[2]));
実行結果
1 0 0
2 1 0
3 2 1
4 3 2
5 4 3

hoge に代入された値は次の足へと引き継がれていくため、1、2、3、4、5 とひとつずつ増えていきます。 最初の足の処理で、hoge[1]hoge[2] のように過去の足の値を参照した場合は、初期値で設定している 0 が得られます。

このような変数の性質を理解していると、過去の足での計算結果を再利用した、効率的なコードを記述できるようになります。

ちなみに、このように各足ごとに Print を実行すると、大量にログが出力されてしまうので、チャート上で 10 bars <Enter> のように入力して、足の数を絞っておくと見やすくなります。

関連記事

投資で実現!不労所得生活
サイトマップまくへのメッセージ