チャート分析ウィンドウを表示させずに任意の期間で個別銘柄の株価データが取得できる方法を探していたところ、PriceSeriesProviderクラスが使えそうだったので試してみました。
以下サンプルコードです。銘柄コードや足種や期間などを指定して、印刷ログに株価データを出力しています。印刷ログへはタブ区切りで出力しているので、Excelへそのままコピペできます。
(トレーディングアプリとして作成しているので、AnalysisTechniqueのInitializedイベントに「AnalysisTechnique_Initialized」を設定して動かしています)
(例外処理などは省略しています)
using elsystem; using tsdata.marketdata; vars: PriceSeriesProvider psp(Null), varIndex(0); method void AnalysisTechnique_Initialized( elsystem.Object sender, elsystem.InitializedEventArgs args ) begin ClearPrintLog; psp = PriceSeriesProvider.Create(); // 銘柄の設定 psp.Symbol = "1321"; // チャートの設定(足種など) psp.Interval.ChartType = DataChartType.Bars; psp.Interval.IntervalType = DataIntervalType.Daily; psp.Interval.IntervalSpan = 1; // 期間の設定 psp.Range.Type = DataRangeType.Years; psp.Range.Years = 1; psp.Range.LastDate = Datetime.Create(2017,4,30); psp.LoadProvider(); // 取得した株価データを印刷ログに出力 varIndex = 0; For Value1 = 0 to psp.Count - 1 Begin varIndex = ( psp.Count - 1 ) - Value1; Print( psp.Symbol, " ", psp.Time[varIndex].Format("%Y/%m/%d"), " ", psp.Open[varIndex].ToString(), " ", psp.High[varIndex].ToString(), " ", psp.Low[varIndex].ToString(), " ", psp.Close[varIndex].ToString(), " ", psp.Volume[varIndex].ToString(), " " ); End; end;
PriceSeriesProviderのIndex値については、通常OpenやCloseで添え字指定する時と同じように最も新しい足からカウントされるようなので、過去から順にPrint出力するよう調整しています。
For文前にある、銘柄コードや足種や期間をPriceSeriesProviderへ設定している部分を変更すれば、様々な形式の株価データが取得可能になります。
チャート分析ウィンドウ不要でデータ取得できるのは、トレーディングアプリ開発でかなり使えそうです。
シンボルリストダイアログやExcel連携などと組み合わせれば、任意のシンボルリストの過去株価データをExcelファイルに一括出力するようなトレーディングアプリなんかも作れそうですね。
最近大量のバックテストを実施していて、テスト作業をもう少し効率化させるようなトレーディングアプリを作りたいので、PriceSeriesProviderクラスはガンガン使っていくと思います。
オブジェホームコースにとりかかった初心者です、コピペして試しに走らせたら検証過程で14行目pspにinvalid data typeのエラーが出て進みません。利便性の良いprogだと思うので利用したいのですが、どうすると先にすすめるのでしょうか?
コメントありがとうございます!
ご質問の件、いくつか原因は考えられると思いますが、先頭の「use~」という部分が抜けていると「invalid data type」エラーが出ると思います。
using elsystem;
using tsdata.marketdata;
再度、すべてのコードをコピペして試してみてください。よろしくお願い致します。