前回[EasyLanguage]例題でわかる!システムトレードのオブジェクト型記述に慣れようまでで、EasyLanguageにおける「PriceSeriesProvider」コンポーネントの使い方がかなりわかったかと思います。
今回は、さらに細かいところについて考えてみましょう。
「PriceSeriesProvider」の特性をしっかりつかんで、システムトレードに役立てましょう。

目次
今回のポイント
今回は、マネックス証券のマニュアルの「例題4」を一緒に解いてみましょう。
ここでは、チャートに表示されている足種に関わらず、常に日足で、株価の変化率を計算できるようにします。
さらに、if文を使うことで、厳密に日足で計算をする方法を紹介します。
ここで説明しても分かりにくいと思いますので、早速EasyLanguageでプログラムを書いてみましょう。
PriceSeriesProviderの設定
まずは、「PriceSeriesProvider」の設定をしましょう。
設定方法は、前回の例題と同じです。
まずは、ツールボックスから、「PriceSeriesProvider」をダブルクリックして、コンポーネントを追加してください。

以下の画像のように、「PriceSeriesProvider」のプロパティを設定します。
「Symbol」銘柄コードは、input文で入力できるようにします。

また前回と同じように、「PriceSeriesProvider」コンポーネントを、もうひとつ追加します。

こちらも、以下の画像のように設定します。
「Symbol」の欄には「symbol」と入れています。
これは、チャートに表示されている銘柄を参照しますという意味になります。

プログラム内容の解説

ここからは、プログラムの解説をします。プログラムコードは、このサイトの下の方にあるので、コピーしてお使いください。
変数の宣言(1~3行目)
1~3行目は変数の宣言です。1行目は、「入力」によりすでに自動で書かれています。
if文(4~7行目)
4~7行目では、if文のまとまりとなっています。
『DateがDate[ 1 ]で無い場合』、if文内のプログラムが実行されます。
これは、参照している足の日付とそのひとつ前の足の日付が異なる場合を示しており、日付が変わった最初の足のときのみ、if文内のプログラムが実行されます。
if文の中身としては、株価の変化率を表しています。
「SymbolPerf」が、「PriceSeriesProvider2」なので、チャートに表示されている株価の変化率を表しています。
『LookBack』を8としており、かつ、足種を日足で設定しているので、8日前の株価からの変化率を表します。
同じ要領で、「BenchPerf」は、「PriceSeriesProvider1」なので、日経平均株価の8日前からの株価の変化率を表しています。
これらの計算は、if文の中にあるので、日付が変わった最初の足で実行されます。
日経平均株価との比較の計算(8行目)
8行目では、上で計算した「SymbolPerf」と「BenchPerf」の差を計算しています。
チャートに表示されている株価の変化率と、日経平均株価の変化率の比較なので、日経平均株価に対して、どういった値動きをするかがわかります。
描画設定(9~12行目)
9~12行目では、計算した結果の描画(Plot)を設定しています。
関数「PercentChange」は、割合を算出しますが、名前の通り%で計算されるかと思いきや、そうではありません。
したがって、Plot文の中で100倍して、%表示になるようにしています。
もちろんこれは、5,6行目の計算の時点で100倍することも可能です。
プログラムコード
以下にプログラムコードを載せておきますので、コピーしてお使いください。
Input: string iSymbol1( "$MNK" );
Input: int LookBack( 8 );
Vars: SymbolPerf( 0 ), BenchPerf( 0 ), RelPerf(0);
If Date <> Date[ 1 ] then begin
SymbolPerf = PercentChange(PriceSeriesProvide2.Close, LookBack) ;
BenchPerf = PercentChange(PriceSeriesProvide1.Close, LookBack);
end;
RelPerf = SymbolPerf - BenchPerf;
Plot1(SymbolPerf*100, "Symbol Perf");
Plot2(BenchPerf*100, "Bench Perf");
Plot3(RelPerf*100, "Rel Perf");
Plot4(0);
チャートに表示しよう
プログラムが完成したら、F3キーを押して検証して、問題なければ、チャートに表示してみましょう。

チャート分析上で表示されている足種を日足にすると、変化率が分かりやすいでしょう。

チャートを5分足にした場合でも、日付が変わった最初の足で計算していることがわかります。

もしもif文がなかったら?
もし、if文がなくなったらどうなるでしょうか。「PriceSeriesProvider」のプロパティで、日足を選択しているので、そもそも必要ないのではないでしょうか。

if文を書かずにプログラムを保存して(F3キーで検証して)、5分足のチャートに表示してみましょう。
そうすると、日付が変わるひとつ前の足でも計算してしまっていることがわかります。
理由はよくわかりませんが、そういう仕様なのだと思います。

したがって、やはりif文は記述しておかないと、正確には判定できていないことがわかりました。
さいごに
「PriceSeriesProvider」を使う際の細かいところについて解説しました。
今回の内容が、大きな損失を招くことになるかというと、そうではないかもしれません。
ですが、些細な違いがシステムトレードでは大きな違いになり得ます。
長期間で考えると、塵も積もっていきます。
自分の思い通りになっているかをしっかりと確認しましょう。
次回は、イベントハンドラを使って、あるイベントが起きたときに実行されるメソッドを紹介します。

If Date Date then begin この部分記述間違えです。
これに発見するまで約3時間かかったペーペーですが
非常に勉強させてもらってます。ありがとうございます。
にこにこ様
コメントありがとうございます。
ご指摘通り、間違えています。。申し訳ございません。
正しくは、
If Date < > Date[1] then begin
ですね。
本文も修正しておきました。
これからも本サイトで勉強していただければ幸いです!