オブジェクト指向EasyLanguageには様々なクラスが用意されていますが、たくさんありすぎて何ができるやら分からないというのが実状だと思います。

そこで本記事ではオブジェクト指向EasyLanguageで利用可能なクラスの中から、特によく使うものや知っておくと役に立つクラスを中心にまとめてみました。

グループに分けて整理してみたので、まだ使ったことのないクラスを発見できるかも。

プロパティだけで利用されるクラスや列挙型などは基本除外していますが、特に説明しておきたいクラスはたまに追記しています。また今後、各クラスについて詳細解説したサンプルコード付きの個別記事も順次アップしていく予定です。

全クラスを網羅しているわけではないので、「このクラス忘れてるよ」などあれば本記事コメントやTwitterでこっそり教えてください。笑

現在僕が運営しているTwitterアカウント(@eltraders)にて、日々様々なOOELクラスを紹介しており、それらをまとめたのが本記事になります。ハッシュタグ「#OOEL辞典」でつぶやいているので、興味のある方はぜひこちらもご覧ください。

1. プロバイダー系クラス

チャートの足情報、注文、ポジション、などトレステから様々な情報を取得できるクラスを、オブジェクト指向EasyLanguageでは「プロバイダー(Provider)」と呼んでいるようです。クラスの最後にProviderと付いているのがそれ。

以下のようなプロバイダー系クラスが用意されています。

1-1. 銘柄に関する情報を取得

PriceSeriesProvider

チャート足の価格/出来高を取得できるクラス。銘柄/足種/期間を指定して利用します。別足種のデータを参照したり、OHLCVデータをファイルに出力したりなど、幅広い用途で使えます。

PriceSeriesProviderクラスの解説とサンプルコードはこちら

SymbolAttributesProvider

銘柄に関する属性情報を取得できるクラス。銘柄名など銘柄固有の情報はここから取得可能です。

プロパティがたくさんありますが、国内版トレステでは取得できない情報もあるので注意。

逆に国内市場特有の情報(値幅制限や呼び値など)を取得できるプロパティもあるのですが、ヘルプに載っていなかったりするので注意。

SymbolAttributesProviderクラスの解説とサンプルコードはこちら

FundamentalQuotesProvider

銘柄のファンダメンタル情報を取得できるクラスです。「EPS/PER/PBR/ROE/ROA」や「売上高などの決算情報」を取得可能となっています。

1-2. リアルタイム情報を取得

リアルタイムの動きを監視するプロバイダー系クラス。価格、歩み値、板情報などなど。

これらの情報は、リアルタイムでの取得にも対応しており、日中データが更新されるたびに処理を行なうような事が可能ですが、取得頻度が高いクラスほど処理に時間が掛かったり、同時に利用できる銘柄数の上限などが存在するので、デイトレ・スキャルピング・高頻度取引などで活用したい場合はご注意ください。

QuotesProvider

クオート情報を取得できるクラス。レート情報(ASK/BID)をリアルタイムに取得できます。また直近情報以外にも「前日終値」「当日足」「52週高値安値」などが取得可能。レーダースクリーンでリアルタイムの価格変動を監視したい場合等に使う事が多いです。

QuotesProviderクラスの解説とサンプルコードはこちら

TimeAndSalesProvider

歩み値情報を取得できるクラスです。トレステ標準機能「タイム&セールス(歩み値)」で表示されるような内容が取得できます。(歩み値=何時何分何秒にどの価格で何株の約定があったか)

TimeAndSalesProviderクラスの解説とサンプルコードはこちら

MarketDepthProvider

板情報を取得できるクラスです。トレステ標準機能「マトリクス(板情報)」で表示されるような内容が取得できます。同時に数十銘柄までしか監視できないようですが、板情報を元に自動発注するようなプログラムを作ったりもできます。

1-3. 口座や取引状況に関する情報を取得

現在利用しているトレステ口座に関する情報を取得できるプロバイダー系クラスです。注文やポジションなどの情報も取得できます。

AccountsProvider

口座情報を取得できるクラスです。トレステ標準機能「トレードマネージャー」の「口座」タブに表示されるような情報が取得可能。口座IDの取得、買付可能金額の取得、などがよく使うかなと思います。

OrdersProvider

注文情報を取得できるクラスです。トレステ標準機能「トレードマネージャー」の「注文状況」タブに表示されるような情報が取得可能。情報が更新された時のイベントも用意されているので、新しい注文が発行されたり注文が約定するごとに処理するようなコードを記述する事も可能です。

PositionsProvider

ポジション情報を取得できるクラスです。トレステ標準機能「トレードマネージャー」の「ポジション」タブに表示されるような情報が取得可能。こちらも更新時イベントが用意されているので、新しいポジションが増えた時などに処理するようなコードを記述できます。

1-4. 外部情報を取得

ニュースやRSSなど、外部配信されている情報を取得できるクラスです。

NewsProvider

トレステ標準機能「ニュース」内で配信されているニュース情報を取得できるクラス。

RSSProvider

RSS情報を取得できるクラス。

2. チャート描画

ラインや図形をチャートに描画するクラスなどを。トレステのチャートはマウス操作でもラインや図形を描画できますが、オブジェクト指向EasyLanguageならプログラム上からこれらを描画できます。リアルタイムに移動するライン、変形する図形などを描画可能です。

2-1. ラインの描画

「描画ツール」から描画できる各ラインと同じものがプログラムから描画できます。

HorizontalLine

水平ラインを描画できるクラスです。
HorizontalLineクラスの解説とサンプルコードはこちら

VerticalLine

垂直ラインを描画できるクラスです。
VerticalLineクラスの解説とサンプルコードはこちら

TrendLine

始点と終点をつないだラインを描画できるクラスです。「トレンドライン」という名前ですがトレンドラインに限らず様々な用途で利用できます。
TrendLineクラスの解説とサンプルコードはこちら

2-2. 図形の描画

「描画ツール」から描画できる各図形と同じものがプログラムから描画できます。足の価格を頂点に指定できるので、リアルタイムに右側へ伸びていくような図形描画も可能です。

Rectangle

長方形を描画できるクラスです。
Rectangleクラスの解説とサンプルコードはこちら

Ellipse

楕円を描画できるクラスです。
Ellipseクラスの解説とサンプルコードはこちら

2-3. テキストの描画

チャート上にテキストを描画できるクラスも用意されています。

TextLabel

テキストを描画できるクラスです。足の位置に合わせて表示したり、チャートに固定して表示させたりもできます。(チャートに固定=スクロールしても同じ位置に表示)
TextLabelクラスの解説とサンプルコードはこちら

2-4. 座標に関するクラス

単独利用するクラスではありませんが、チャート描画関連クラスで必ず登場するのが、座標に関するクラスです。「チャートのどの位置に描画するか?」という事。(ラインなら開始と終了の位置、図形なら各頂点の位置、など)

EasyLanguageでは座標の指定方法として3つのクラスが用意されており、目的に応じて使いやすいものを選ぶことができます。

特にチャートに合わせたラインや図形を描画する場合は、X軸を足の日時で指定できるDTPointや、足番号で指定できるBNPointを使うのが便利です。

DTPoint

X軸をチャート足の日時、Y軸を価格で指定できる座標クラスです。

BNPoint

X軸をチャート足の足番号、Y軸を価格で指定できる座標クラスです。

XYPoint

XY軸をチャート上の絶対値で指定できる座標クラスです。チャートの固定位置に描画させたい場合などに利用します。

TextLabelクラスのサンプルコードで、各クラスを利用しています。

2-5. ドローイングオブジェクト管理クラス

描画関連のクラスは、生成しただけではチャート上に反映されません。

DrawingObjectsと呼ばれるクラスに追加する事で、チャート上に描画されるようになります。
(DrawingObjectsは分析テクニック内蔵のクラスなので、名前空間を宣言するだけで使えます)

DrawingObjects

プログラム上からチャートに登録する描画クラスを管理しているクラス。ここに描画クラスを追加する事でチャート上に描画されます。

DrawingObject

DrawingObjects内に登録される描画クラスの型。すべての描画クラスはこのDrawingObjectクラスから継承されています。

3. 型

標準EasyLanguageでも変数の型(整数int、小数double、文字列string、真偽値bool)は存在しましたが、あまり意識しなくても良かったと思います。

オブジェクト指向EasyLanguageにおいては、クラスも1つの”型”として扱われますし、型を正しく変換しなければいけないケースも増えてくるので、非常に重要となります。

ここでは、オブジェクト指向で欠かせない「コレクション」と呼ばれるクラス型と、標準EasyLanguageで使える変数型を拡張したクラス型について紹介します。

3-1. 拡張された型

標準EasyLanguageの型を拡張したものがクラスとして用意されています。特によく使うのはDateTimeとELStringでしょうか。

ELString

文字列型stringの拡張クラス。JoinやFormatなど直接呼び出せるメソッドをよく使います。

Joinは指定した区切り文字で複数の文字を繋いでくれるため、CSVやタブ区切りの文字列生成に便利。さらに複雑な文字列を作りたければFormatで。

ELStringクラスの解説とサンプルコードはこちら

ELInt

整数型intの拡張クラス。

ELDouble

小数型doubleの拡張クラス。

ELBoolean

真偽値型boolの拡張クラス。

DateTime

日時に関するクラス。オブジェクト指向EasyLanguageでは多くのクラスから日付情報を取得する際にDateTime型となる事が多いので、どういったプロパティがあるのか知っておくと便利です。

Formatメソッドを使うと、DateTime型を任意の日付形式の文字列に変換できます。他のプログラミング言語でもよくあるやつです。添付画像のように指定すれば「2019/12/11 21:45:32」といった形式の文字列で返してくれます。

また、DateTime.Nowのように変数を使わず呼び出せるようなプロパティもあります。DateTime.Nowで現在日時をDateTime型で取得できるので、よく使いますね。

標準EasyLanguageでも、BarDateTimeという予約語を使うと現在足の日時をDateTime型で返してくれるので、覚えておくと便利です。

TimeSpan

時間間隔に関するクラス。

3-2. コレクション

複数のデータを保持できるコレクション型も存在します。標準EasyLanguageでも「配列」が利用できますが、コレクション型を使うと配列だけでは難しい複数データの保持が可能です。

他のプログラミング言語でもおなじみのVectorやDictionaryなどが用意されています。

Vector

要素を後から追加できるコレクション。配列と違って後からいくつでもデータを追加できるので、要素数が決まっていない時に便利。また、クラスのインタンスを追加できる点もポイントです。

Vectorクラスの解説とサンプルコードはこちら

Dictionary

「キー/値」のペアで要素を管理できるコレクション。例えば銘柄をキーにして銘柄ごとの設定や情報を管理したりできます。Vectorと併せて多用するコレクションになるでしょう。

Dictionaryクラスの解説とサンプルコードはこちら

Stack

LIFO(後入れ先出し)方式で要素を管理できるコレクション。

Queue

FIFO(先入れ先出し)方式で要素を管理できるコレクション。

4. ファイル入出力

オブジェクト指向EasyLanguageでは、外部ファイルの入出力(読み書き)が可能です。

テキストやCSV、Excelファイルなどと連携する事で、トレステでは取得できないようなデータを参照したり、トレステで取得した情報を外部に保存したりできるようになります。

僕にとっては欠かせない機能です。これ出来なかったらEasyLanguageやってなかったかも。笑

4-1. テキストファイルの入出力

StreamReader

テキストファイルの読み込みを行なうクラスです。パスを指定して開き、WriteLineで1行ずつ書き込み。もちろん追記も可能。

StreamWriter

テキストファイルへの書き込みを行なうクラスです。こちらもパスを指定して読み込みます。EndOfStreamプロパティで「ファイルの最後まで読んだかどうか」を判定できるので、While構文で1行ずつ読み込んだりもできます。

ちなみに「カスタムシンボルリスト」って実はテキストファイルです。トレステフォルダ内「Custom Symbol Lists」フォルダの中にcsl形式で保管されています。という事はこれをStreamReaderで読み込むと・・?色々可能性が広がりそうですね

【参考記事】
複数の銘柄コードをEasyLanguageで扱う方法(3)
– カスタムシンボルリストのファイルを読み込み
https://eltraders.com/get-symbollist-readfile/

4-2. Excelファイルの入出力

Workbook

Excelファイルを読み書きできます。ファイルパスを指定して開けば、あとはシートとセルの位置を指定してセル内容を読み書きできます。

<例>
objWB.Sheets[1].CellsAsString[2,3]
=>1シート目の2列3行にあるセル内容を取得&書込できる

注意点として、当然ではありますがそもそも起動するトレステにExcelがインストールされていないと動きません。

またもう1つの注意点は、テキストファイルに比べると読み書きに時間が掛かる点です。高速な動作が求められるプログラムでは、ExcelでなくCSV形式などのテキストファイルで管理する方が良いです。

5. アプリ間連携

こちらも高度なプログラムを作成する上で欠かせない、「アプリ間連携」について。

通常コード内の変数はそのプログラム内でしか使えませんが、今回紹介するクラスを利用すると別々のプログラム同士で値を共有できるようになります。

別々のアプリやワークスペースでも値を共有できるので、例えば「レーダースクリーン上で発生したサインを保存し自作アプリ側で呼び出す」といった事もできます。前回のファイル入出力系と併せて、僕にとっては欠かせないクラスです。

GlobalValue

単一の値を共有できるクラスです。整数、小数、文字列、真偽値を別々のプログラム同士で共有できます。

ただ、クラスのインスタンスを格納できないので複雑なプログラムでは使いにくいです。

GlobalDictionary

「キー/値」の組み合わせで要素を共有できるクラスです。オブジェクトやコレクションも格納できるので、これが一番よく使います。

例えば銘柄コードをキーにして、銘柄ごとの様々な情報(発生サインや設定など)を様々なプログラムで共有するなど。

GlobalValueやGlobalDictionaryは、値に変更があった際に発生する「イベント」が用意されています。これを利用する事で、別アプリ間での連携が可能になります。

図にするとこんな感じ。プログラム1のコードではGlobalDictionaryなどに値を設定します。すると各種イベントが発生するので、プログラム2のコードにはイベント発生時の処理を記述。こうする事で共有データが更新されるごとに処理を行なえるという仕組みです。

6. タイマーや通知

標準EasyLanguageでは「足が生成されるごとに」コードが実行されるのが基本でしたが、オブジェクト指向EasyLanguageでは「一定間隔ごとに」何か処理したい・・というケースもよくあります。そんな時に使えるクラスたちです。

Timer

一定間隔ごとにイベントを発生できるクラス。例えば設定を「1秒」にすると、1秒ごとに「Elapsed」イベントというものが発生します。このイベントを自作プログラム側で捉える事で1秒ごとに実行するような処理を記述できるようになります

Alarm

Timerは「●秒ごと」でしたが、Alarmは「この時刻になったら」イベントを発生させられます。ちょうど時計のアラームのように、予め指定した時刻になったら実行したいような処理を記述できます。

またAlarmには「スヌーズ機能」が搭載されています。これも実際の時計のスムーズ機能のように、指定時刻に初めて起動して、その後は●分起きに実行を繰り返す・・といった処理も可能です。

StopWatch

こちらはその名の通り「ストップウォッチ」です。開始から停止までの経過時間を測定できます。

objSW = StopWatch.Create();
objSW.Start();
// 処理
objSW.Stop();

といった感じで書けば、Start~Stopの合間の処理にどのくらい時間が掛かったのか?を計測できます

StopWatchは開発時にも、「処理スピードが遅くなっている部分はどこか?」を探ったりする時に使ったりもしますね。

(以下、追記中・・)


以上になります。

オブジェクト指向EasyLanguageにはほかにも様々なクラスが用意されていますが、今回は特によく使うものを中心に取り上げてみました。

また、紹介しきれなかったクラスや、今回紹介した各クラスについて詳細に解説した記事についても、今後随時追加していく予定ですので、興味のある方は楽しみにしていてください!

それでは。