ChartStudio入門(6)です。
※ChartStudioをもっていない方はDealbook360(サザインベストメント)を入手してください。
今回はシステムで提供されているインディケータ関数の仕様確認の仕方です。
稀にですがヘルプに乗っているサンプルプログラムが利用しているインディケータ関数が誤っており動作しない場合があります。このようなときに関数の仕様を確認できると修正できるようになります。
たとえばヘルプには次のような、MACDのゴールデンクロス、デットクロスで自動売買を行うストラテジーがサンプルとして記載されています。
<ソースコード抜粋>
strategy sample_macd;
input lots = 1;
begin
MACD();
if crossup (MACD.res, MACD.signal) then buy(lots);
if crossdown(MACD.res, MACD.signal) then sell(lots);
end.
sample_macdプログラムは上記のようになっていますが、実はこのままコンパイルをするとエラーになってしまいます。
Error: line "res" does not exist
Error: type of parameter 1 is invalid, expected type is series
Error: line "signal" does not exist
Error: type of parameter 2 is invalid, expected type is series
エラー内容は「res、signalという変数が存在しない」というものです。これがなぜでるかというと、MACDインディケータの仕様が違うためのようです。おそらくヘルプを作成した時点のMACD関数が若干古く、最新のMACD関数と上手く整合が取れないのだと思います。
さて、それでは最新のMACD関数の仕様を見て見ましょう。実はChartStudioでは各種インディケータの関数はソースコードが公開されていますので、仕様を簡単に確認することができるのです。
「SystemModule」タブを開いて「MACD」を探します。「MACD」をダブルクリックしてプログラムを開くとソースコードを見ることが出来ます。
次のようになっていると思います。
<プログラム抜粋>
indicator MACD;
input price = close,
first_period = 12,
second_period = 26,
signal_period = 9;
draw line("MACD"), line_signal("MACD sig"), line_histogram("MACD hgm", Histogram);
begin
line := ema(price, first_period) - ema(price, second_period);
line_signal := ema(line, signal_period);
line_histogram := line - line_signal;
end.
注意してみてほしいのがdrawで定義されている箇所です。drawで定義された変数がMACDインディケータの出力、つまりインディケータの線に対応するのですが、この変数を外部のストラテジーから呼び出すことができるのです。
よく見ていただくとわかると思いますが、変数名はline、line_signal、line_histogramとなっています。
さきほどのストラテジーから呼び出していた変数は、resとsignalでしたね。ここで不一致がおきていますので、最新のMACDに合わせて次のように修正してください。これでコンパイルが通るようになると思います。
<プログラム抜粋>
strategy sample_macd;
input lots = 1;
begin
MACD();
if crossup (MACD.line, MACD.line_signal) then buy(lots);
if crossdown(MACD.line, MACD.line_signal) then sell(lots);
end.
このように非常に簡単にインディケータの仕様を確認することができますので、何か困った事があったらインディケータ関数のソースコードを解読してみると良いかと思います。
また、これらの関数はサンプルとしても非常に参考になると思います。プログラムの幅が広がりますので、一度眺めて見てはいかがでしょうか。