EasyLanguage研究所

マネックス証券が提供する株式トレードツール「TradeStation」専用のプログラミング言語である、EasyLanguageについて。特にオブジェクト指向型EasyLanguage(OOEL)の情報を中心に。

複数の銘柄コードをEasyLanguageで扱う方法(3)カスタムシンボルリストのファイルを読み込み

前々回と前回で、EasyLanguageで複数の銘柄コードを扱う方法について2つご紹介しました。

eltraders.hatenablog.com

eltraders.hatenablog.com

今回は最終回という事で、固定のカスタムシンボルリストをEasyLanguage上から直接読み込んで、銘柄コード一覧を取得する方法を紹介します。

この方法を使うと、フォームを利用しないアプリでもカスタムシンボルリストが扱えるので、自分専用の分析アプリやバッチ系処理アプリを作る時なんかに便利かと思います。

方法3:カスタムシンボルリストのテキストファイルを直接読み込む

色々調べてみたんですが、シンボルリスト名を指定すれば銘柄コード一覧が取得できる関数・・といったものは残念ながら用意されていないようです。

で、どうにか出来ないかなーと思っていたんですが、ふとトレードステーションのファイル構成を調べている時に「カスタムシンボルリスト」が保管されているフォルダを発見しました。(TradeStationがインストールされているフォルダの「Custom Symbol Lists」フォルダ)

これを見ると、カスタムシンボルリストは拡張子が「.csl」のファイルとして保管されているんですが、ファイルの中身を見ると単純にCSV形式のテキストファイルなんですね。

↓こんな感じのファイル
f:id:eltraders:20170612172153p:plain

オブジェクト指向EasyLanguageでは、PC内のファイルを読み込む事ができるStreamReaderクラス(名前空間:elsystem.io)が用意されています。

という事はつまり、利用したいカスタムシンボルリストのファイルをStreamReaderクラスで読み込んで必要な情報のみ取り出せば、銘柄コード一覧が取り出せる・・?

という事で、書いてみたのが以下のコードです。フォーム上に3つのコントロールを配置しています。

TextBox txtSymbolListName カスタムシンボルリスト名を入力(デフォルトで「ブログテスト用」を設定)
Button btnRun 実行ボタン
TextBox(MultiLine) txtResult 取得した銘柄コード一覧を表示
using elsystem;
using elsystem.io;
using elsystem.windows.forms;

method void AnalysisTechnique_Initialized( elsystem.Object sender, elsystem.InitializedEventArgs args ) 
begin
	txtSymbolListName.Text = "ブログテスト用";
	frmMain.Show();
end;

method void btnRun_Click( elsystem.Object sender, elsystem.EventArgs args )
var:
	StreamReader myFile,
	string lineText,
	string strResult;

begin
	txtResult.Text = "";
	
	myFile = StreamReader.Create("C:/Program Files (x86)/TradeStation 9.5/Custom Symbol Lists/"+txtSymbolListName.Text+".csl"); //ここのパスはインストール場所により変わります
	
	strResult = "";
	While myFile.EndOfStream = false Begin
		lineText = myFile.ReadLine();
		If lineText.Trim() <> "" and
		   Not lineText.StartsWith(";") then Begin
			strResult = strResult + lineText.Split(",")[0].toString().Replace(DoubleQuote,"") + NewLine;
		End;
	End;
	txtResult.Text = strResult;
	
	myFile.Close();
end;

メリット

  • カスタムシンボルリスト名だけで取得できるので、ダイアログが不要。
  • EasyLanguage上でカスタムシンボルリスト名も指定すれば、フォームも不要で取得可能。(全自動化)

デメリット

  • 「TradeStation銘柄リスト」や「マネックス銘柄リスト」は取得できない。
  • パス指定になるので、将来的にファイルやディレクトリの構成が変わったら修正が必要。

「TradeStation銘柄リスト」や「マネックス銘柄リスト」が扱えないのが残念ですが、同様のものをカスタムシンボルリストとして用意しておけば対応はできるかなと思います。

何より、ダイアログやフォーム不要で全自動化できますし、コードをいじらずに銘柄コードの追加削除が行なえるのが嬉しい点です。

さらに例えば「スキャナー」などはスキャン結果をカスタムシンボルリストとして自動生成してくれるので、他アプリと連携もしやすくなると思います。

以上、EasyLanguage上で複数の銘柄コードを扱う3つの方法をご紹介してきました。

どれがベストの方法なのかは状況によって異なると思います。ぜひ色々試して、使い分けてみてください。

ではでは。