Close[n]は配列ではない?
ストラテジーやインジケーターのソースを見ると、Close[1]みたいな記述を見かけるかと思います。
他の言語では、一般的に配列を示しますが
EasyLanguageに限って言えば、やや意味合いが異なります。
トレステのEasyLanguageでは、変数に[n]を付けることで、n本前の計算結果を取得することができます。
OpenやCloseといった予約語だけでなく、自分で宣言した変数についても過去の計算結果を取得できます。
(こういう値のことを履歴値と言うそうです)
以前書いた平均足のコード(再掲載)
inputs: Kai(0); vars: AnswerOpen(0), AnswerClose(0), AnswerHigh(0), AnswerLow(0), PColor(White), BarCount(0); AnswerHigh = High; AnswerLow = Low; AnswerOpen = (AnswerOpen[1] + AnswerClose[1]) / 2; IF Kai = 1 then AnswerClose = (AvgPrice[3] + AvgPrice[2] + AvgPrice[1] + AvgPrice) / 4 ELSE AnswerClose = AvgPrice; IF Date <> Date[1] or CurrentBar = 1 then BEGIN AnswerOpen = OpenD(0); AnswerClose = AvgPrice; BarCount = 0; END; IF BarCount = 1 and Kai = 1 then AnswerClose = (AvgPrice[1] + AvgPrice) / 2; IF BarCount = 2 and Kai = 1 then AnswerClose = (AvgPrice[2] + AvgPrice[1] + AvgPrice) / 3; IF AnswerHigh < AnswerOpen then AnswerHigh = AnswerOpen; IF AnswerHigh < AnswerClose then AnswerHigh = AnswerClose; IF AnswerLow > AnswerOpen then AnswerLow = AnswerOpen; IF AnswerLow > AnswerClose then AnswerLow = AnswerClose; IF AnswerOpen < AnswerClose then PColor = Red ELSE IF AnswerOpen > AnswerClose then PColor = Cyan ELSE PColor = White; BarCount += 1; Plot1(AnswerHigh, !( "高値" ), PColor, Default, 1); Plot2(AnswerLow, !( "安値" ), PColor, Default, 1); Plot3(AnswerOpen, !( "始値" ), PColor, Default, 5); Plot4(AnswerClose, !( "終値" ), PColor, Default, 5);
始値(AnswerOpen)を算出するには1本前の足の始値と終値を合計して2で割ります。
計算式としてはAnswerOpen[1]で「1本前の足の始値」、AnswerClose[1]で「1本前の足の終値」を取得して
それを2で割るので
AnswerOpen = (AnswerOpen[1] + AnswerClose[1]) / 2;
となります。
EasyLanguageでの配列は?
では、EasyLanguageで一般的な配列は使えるのか?って話ですが
宣言にArraysを使うことで利用できます。
arrays: DummyArray[6](0);
上記にて0から6までの7要素の1次元配列を宣言し、初期値を0に設定します。
ここで問題なのですが、HighestArrayなどの配列に関する演算関数は
[0]に設定された値を無視する という仕様になっています。
なので、[0]は使用しないことが推奨されています。
一般的な言語(JavaScriptなど)では[0]から使用しますが、EasyLanguageでは[1]から使用すると認識したほうが良いでしょう。
履歴値も配列も同じ[n]で表現されているところが仕様的に微妙ですが、宣言を確認するしかないですね。