ファンダメンタルデータを取得する関数を作る

Pocket

今回は、前回解析したTradeStationの標準のファンダメンタルデータ取得のインジケーターを改変して関数を作成します。今回のプログラムは、TradeStationの標準インジケーターのソースコードを改変したものです。
※今回の関数は、入力パラメータに銘柄コードを取っているため、銘柄コードを変えて関数を連続して呼べば複数の銘柄のファンダメンタルデータを取得できるように見えますが、このプログラムには問題があって、連続で呼び出すといろいろと問題が出ます。別の投稿でそのあたりを改善したプログラムを掲載予定です。


関数を作成していきます。EasyLanguage側で以下の操作をして関数を新規作成します。リターンタイプはダブル(double)が初期値ですが、そのままにしておいてください。

ファイル(F) → 新規作成(N) → 関数(F) → 名前(N)を”$get_fundamental_double_data”と入力してOK

名前にあえてdoubleをつけています。ファンダメンタルデータは日付とか文字列が返ってくるものもありますが、この関数はdoubleにしか対応できていません。戻り値を文字列にするとかいろいろ方法は考えられますが、とりあえずdouble専用の関数としておきます。

まずは前回使ったインジケーター(カスタムファンダメンタル)のソースコードを関数の新規作成コードに貼り付けます。TradeStationとEasyLanguageを起動してチャートを起動してください。

チャート上で右クリックして分析テクニックを挿入(Q)… → カスタムファンダメンタルを選択してEasyLanguageを編集(E)… → ソースコード上でCtrl+a,Ctrl+c → 関数側でCtrl+v

まず入力部分のカスタマイズです。引数としては、1番目から5番目までの引数はそのまま使って、6番目と7番目は廃止します。それと銘柄コードを追加します。インジケーターから関数になるので、入力パラメータの書き方は変える必要があります。引数の型のNumericSimpleなどですが、履歴を持たない値はSimpleをつけて定義するみたいです。関数の引数に履歴という概念をもたせる必要のある場合があるのかどうかわかりませんが、とりあえず今回は不要です。

銘柄コードのパラメータ名は”SymbolCode”にします。CreateFundamentalQuotesProviderの”Symbol”を”SymbolCode”に変更します。”Symbol”という名前はシステムの予約語なので変数名としては使えないので後ろにCodeを付けました。

では実行部分をカスタマイズします。onceから下の部分です。onceブロックは不要なのでとります。この関数から見れば呼ばれたタイミングで1回実行されるだけで、2回目という概念はありません。逆に言えばこの関数は呼び出した時にもとのインジケーターが実行している初期処理を毎回実行しますので、最適化されていません。同じ銘柄で複数のファンダメンタルデータをたくさん取りたい場合などは、LoadProviderを関数の外に出すなどで最適化する必要があります。ここではその部分は無視してすすめます。値が取れない場合は”-1″を返すようにします。改変したソースコードを載せます。

連続で関数を呼んだ場合に前の情報が残っていたので、”CreateFundamentalQuotesProvider”の後に、”OkayToPlot”を初期化する処理を入れています。
では、このプログラムを呼び出す親プログラムを書きます。呼び出してprintするだけです。売上高(CR_SALES)を取得しています。文字列はここにヘルプがあります。銘柄は日産ですが、適宜、変更してください。

関数側と親プログラム側をそれぞれ検証(F3)して、親プログラム側を実行(F5)してください。

ファンダメンタルデータ取得結果

プログラムから任意の銘柄のファンダメンタルデータが取得できました。今回のプログラムは関数側はここから、親プログラムはここからダウンロードできます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です