16
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

テコテックAdvent Calendar 2019

Day 3

EasyLanguageでTradeStationとExcelの連携

Last updated at Posted at 2019-12-02

はじめに

EasyLanguageとはマネックス証券提供の株式取引ツールTradeStationで使われている独自言語です。
EasyLanguageを使って、TradeStationとエクセルの連携する方法をまとめました。

目次

・流れ
・Workbookクラス
・おまけ EasyLanguageのコンポーネントを使って楽をする
・発展

##流れ

  • 読み込む(書き込む)Excelワークブックかスプレッドシートを用意します。
  • TradeStationからEasyLanguage開発環境を開きます。
  • 新規インジケーターを開きます。
  • 作成したインジケーターをチャートに挿入します。

    (TradeStationでEasyLangageのプログラムを利用するにはチャートやレーダースクリーンにインジケーターを挿入する必要があります。)

Workbook クラス

Workbookを使用すると、指定したExcelワークブックやスプレッドシートのセルに対する値を読み取って
TradeStation上で使用出来たり、TradeStation上の値を書き込んだりすることが可能になります。

###読み込み
読み込むExcelには日経平均先物売買高上位のABNアムロクリアの日経先物手口の日次データが入っています。
スクリーンショット (3).png
"日通し"(2~4列目,4行目)のデータを取得します。

using elsystem.office.excel;

Vars:
    Workbook ElWbRead(NULL),
    String iFileName1("C:\TradeStation\WbRead.xlsx"),   //準備したエクセルの保存フォルダと、ファイル名
    int cnt(0);

Once begin
    ElWbRead = new Workbook;
    ElWbRead.FileName = iFileName1;
    ElWbRead.Load = true;                                    //おまけで説明しています
    ElWbRead.SaveOnClose = True;
End;

For cnt = 0 to 29 begin
    Plot1[cnt]((ElWbRead.sheets[1].CellsAsInt[2,cnt+4]),"買い ");  //2列目4行目の値を取得
    Plot2[cnt](-(ElWbRead.sheets[1].CellsAsInt[3,cnt+4]),"売り ");
    Plot3[cnt]((ElWbRead.sheets[1].CellsAsInt[4,cnt+4]),"差し引き ");
end;

日経平均先物の日足チャートに挿入してみました。
スクリーンショット (4).png
30営業日分しかデータを用意できなかったので、わかりにくいですね...

###書き込み
TradeStation上のチャートに表示されている4本値と出来高をExcelに書き込みます。
スクリーンショット (6).png

using elsystem.office.excel;

Vars:
    Workbook ElWbWrite(NULL),
    String iFileName2("C:\TradeStation\WbWrite.xlsx"),
    int cnt(0);
    
Once begin
    ElWbWrite = new Workbook;
    ElWbWrite.FileName = iFileName2;
    ElWbWrite.Load = true;
    ElWbWrite.SaveOnClose = True;
End;

for cnt = 0 to 90 begin
    ElWbWrite.sheets[1].CellsAsInt[1,cnt+2] = Date[cnt] ;      //予約語 Date:足の日付を取得
    ElWbWrite.sheets[1].CellsAsInt[2,cnt+2] = Open[cnt] ;      //予約語 Open:足の始値を取得
    ElWbWrite.sheets[1].CellsAsInt[3,cnt+2] = High[cnt] ;      //予約語 High:足の高値を取得
    ElWbWrite.sheets[1].CellsAsInt[4,cnt+2] = Low[cnt] ;       //予約語 Low:足の安値を取得
    ElWbWrite.sheets[1].CellsAsInt[5,cnt+2] = Close[cnt] ;     //予約語 Close:足の終値を取得
    ElWbWrite.sheets[1].CellsAsInt[6,cnt+2] = Volume[cnt] ;     //予約語 Volume:足の出来高を取得
end;

日経平均先物の日足チャートに挿入してみました。
Excelはこうなりました。(EasyLanguage独特の日付表記で、「1191203」先頭の数字1が西暦2000を表しています。)
スクリーンショット (8).png

おまけ EasyLanguageのコンポーネントを使って楽をする

EasyLanguage でより簡単にオブジェクトの追加と使用ができるように、一部のオブジェクト クラスはコンポーネントとして設計されています。
オブジェクトを EasyLanguage ドキュメントへドラッグ & ドロップして特別なエディターを使用するだけで、コードを記述せずにオブジェクトのプロパティを変更できます。

コンポーネントオブジェクトが EasyLanguage ドキュメントに追加されると、プロパティエディターで各オブジェクトを使用できるように設定することができます。

あとは、予約語や関数を参照するように、各オブジェクトのプロパティとメソッドにアクセスする独自の EasyLanguage ステートメントを記述するだけです。

コンポーネントオブジェクトの挿入

  1. TradeStation開発環境の左側にある [ツールボックス] タブをクリックして [ツールボックス] パネルを開きます。
    追加したいコンポーネントをクリックして現在のEasyLanguageドキュメントに追加します。
    スクリーンショット (14).png
  2. 挿入すると、コンポーネントのアイコンがエディターウインドウの下にあるコンポーネントトレイに表示されます。
    スクリーンショット (15).png
  3. TradeStation開発環境
    の右側にある [プロパティ] タブをクリックして、[プロパティ] エディターを開きます。
    このエディターでは、コンポーネント値、入力値、イベントを管理・変更できます。
    スクリーンショット (16).png

<コンポーネントのプロパティ名と値>

     名     前      タ  イ  プ 説 明
ActiveSheet integer アクティブなワークシートのインデックス番号を取得または設定する  
FileName string コンピューター上の Excel(スプレッドシート)の
パスおよびファイル名を指定する
Load boolean 真の場合、リアルタイムでExcel(スプレッドシート)を更新する
SaveOnClose boolean 真の場合、接続を閉じたときに
Excel(スプレッドシート)に加えた変更を保存する
Shared boolean 真の場合、複数のWorkbookオブジェクトで
1つのExcel(スプレッドシート)を共有する  
SheetCount integer ワークブック内のシート数を指定する
Sheets
[index]
object 使用可能なシートのインデックスに基づき
Sheetを取得する  
Sheets
[sSheetName]
object 指定したシート名文字列に基づき
Sheetを取得する  
Visible boolean 真の場合は接続時にExcel(スプレッドシート)を表示する

コンポーネントを使った場合のコードは下記の分だけで済みます。

読み込み

Vars:
    int cnt(0);

For cnt = 0 to 29 begin
    Plot1[cnt]((ElWbRead.sheets[1].CellsAsInt[2,cnt+4]),"買い ");
    Plot2[cnt](-(ElWbRead.sheets[1].CellsAsInt[3,cnt+4]),"売り ");
    Plot3[cnt]((ElWbRead.sheets[1].CellsAsInt[4,cnt+4]),"差し引き ");
end;

書き込み

Vars:
    int cnt(0);

for cnt = 0 to 90 begin
    ElWbWrite.sheets[1].CellsAsInt[1,cnt+2] = Date[cnt] ;      //予約語 Date:足の日付を取得
    ElWbWrite.sheets[1].CellsAsInt[2,cnt+2] = Open[cnt] ;      //予約語 Open:足の始値を取得
    ElWbWrite.sheets[1].CellsAsInt[3,cnt+2] = High[cnt] ;      //予約語 High:足の高値を取得
    ElWbWrite.sheets[1].CellsAsInt[4,cnt+2] = Low[cnt] ;       //予約語 Low:足の安値を取得
    ElWbWrite.sheets[1].CellsAsInt[5,cnt+2] = Close[cnt] ;     //予約語 Close:足の終値を取得
    ElWbWrite.sheets[1].CellsAsInt[6,cnt+2] = Volume[cnt] ;     //予約語 Volume:足の出来高を取得
end;

発展

EasyLanguageでは、長期投資でも短期トレードでも使えるテクニカルデータやファンダメンタルズデータが
予約語としてそろえられています。

私が2年以上使ってきて足りないなと思ったのは浮動株数(比率)や投資部門別売買状況、先物の手口情報ぐらいです。(普通どこの証券会社のツールでも表示していませんが)

Workbookクラス(コンポーネント)を使えば、楽に、さまざまな情報をチャート上に表示したり、データを使って自動売買システムを作れます。

岡三RSSと連携させれば、TradeStationでは対応していない先物でも、自動売買することができるようになります。

16
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?