EasyLanguage研究所

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

「Tab」と書けばTab文字になるよう、関数を自作してみました。(コードはたったの1行)

最近EasyLanguageで出力した結果を
Excelファイルに落としてデータ分析する機会が多いです。

それで、大量データをまとめてExcelファイルに落としたい時は
前回の記事でご紹介したWorkbookクラスを使って処理するのですが・・
eltraders.hatenablog.com

ちょっとしたデータを取りたい時は、
”Tab(タブ)区切りの文字列”をPrint関数で印刷ログに出力しています。
(全選択->コピペでそのままExcelに貼り付けられて便利なので)

ただ、EasyLanguageでタブ文字を扱いたい場合、
改行(NewLine)のような予約語は用意されていないようです。
(僕がまだ探せていないだけかもしれませんが)

代替え案として、
「"」+「Tab入力」+「"」と書くとTab文字として認識してくれるようなので
これまではこれを利用していました。

f:id:eltraders:20171127172431p:plain:w320

(画像だと分かりにくいですが、
 6行目のダブルクオテーションの間は半角スペースでなくタブ入力です)

「Tabをスペースに自動変換」設定をした時に悲劇は起きた

最近、コードをブログなどに貼り付ける事も多いので
「ツール」->「オプション」の「一般タブ」で
「インテンドする際にタブの代わりにスペースを挿入」をチェックしました。

f:id:eltraders:20171127173353p:plain:w320

エディタ上でTabを入力すると、
自動で任意の半角スペース(初期では4つ)に変換してくれます。

・・ただこの設定をすると、
Tab入力で作った上のTab文字も自動で変換されてしまうのです・・orz

f:id:eltraders:20171127172436p:plain:w320

(勝手に半角スペース4つになってしまった)

こういった問題が発生しましたし、
そもそも「"」+「Tab入力」+「"」だと
パッと見てTabなのかスペースなのか分かり辛いよね、という事で
【Tab文字を返してくれる関数】を自作してみる事にしました。

Tab文字関数の作り方

Tab文字関数のコードは、以下の通りです。

Tab = "	";

・・はい。たったこれだけ。1行。

「インテンドする際にタブの代わりにスペースを挿入」をチェック外した状態で
「"」+「Tab入力」+「"」と入力しています。

EasyLanguageの関数は、

引数:分析テクニックやストラテジーと同様にInputs:で定義(今回はありませんが)
戻り値:関数名=XX; で定義

となっております。
例えば他のプログラミング言語で書くならこんなイメージでしょうか?

function Tab() {
  return  "	";
}

一応関数作成の手順も載せておきます。
関数名はお好きな名前でどうぞ。

関数作成の手順

1. 新規作成で「関数」を選択
f:id:eltraders:20171127170431p:plain:w320

2. 関数名とリターンタイプ(今回は文字列)を選択
f:id:eltraders:20171127181007p:plain:w320

3. 以下のコードを貼り付けて検証
(上で紹介したものと同じコードです、再掲)

Tab = "	";

f:id:eltraders:20171127180152p:plain:w320

4. 後は使いたいコード内でTabと入力
f:id:eltraders:20171127180229p:plain:w320
※入力したTabが関数用の色(初期では紫色)になれば正しく認識されています。

おわりに

たった1行のコードですが、
このように関数化しておくと便利なものは
コードを書けば書くほど出てくると思います。

「このコードは何回も書いているから関数化できないかな?」
と考えるクセをつけておくと、より簡潔なコードが書けるようになります。

ぜひ、参考にしてみてください。

ではでは。

チャート表示されたすべての足情報をExcelファイルに自動書き込み(Workbookクラス使用)

チャートに表示された足情報を
直接Excelファイルに書き込んでくれるEasyLanguageコードのサンプルです。
「インジケーター」として作成し、チャートに挿入することで機能します。

前提条件

  • お使いのパソコンにExcelがインストールされている必要があります。
  • 実行前に以下のようなExcelファイルを作っておいてください。(場所はCドライブにフォルダ「test」を作ってその中に)

f:id:eltraders:20171121163141p:plain

using elsystem;
using elsystem.office.excel;
    
Vars:
    Workbook oBook(NULL),
    intBarNum(0);

Once (LastBarOnChartEx) Begin
    oBook = Workbook.Create();
    oBook.FileName = "C:\test\Output.xlsx";
    oBook.Visible = False;    // Excelの起動を見えないようにする(TrueだとExcelが立ち上がる)
    oBook.SaveOnClose = True; // oBook.Closeした時に自動で上書き保存されるようにする
    oBook.Load = True;        // ここで実際にファイルが読み込まれる
    
    // 最終足から最初の足まで遡って各足の情報を取得
    For intBarNum = 0 to MaxBarsBack+CurrentBar-1 Begin
        oBook.Sheets[1].CellsAsInt   [1, 2+intBarNum] = Date[intBarNum];
        oBook.Sheets[1].CellsAsInt   [2, 2+intBarNum] = Time[intBarNum];
        oBook.Sheets[1].CellsAsDouble[3, 2+intBarNum] = Open[intBarNum];
        oBook.Sheets[1].CellsAsDouble[4, 2+intBarNum] = High[intBarNum];
        oBook.Sheets[1].CellsAsDouble[5, 2+intBarNum] = Low[intBarNum];
        oBook.Sheets[1].CellsAsDouble[6, 2+intBarNum] = Close[intBarNum];
        oBook.Sheets[1].CellsAsDouble[7, 2+intBarNum] = Volume[intBarNum];
    End;
    
    oBook.Close();
End;

注意点

  • チャートの設定(銘柄/足種/期間)を変更すると、Excelファイルも上書きされますのでご注意ください。特に行数が減る場合は、前の情報が残ってしまうことがあります。

【目次】「EasyLanguage小ネタ」まとめ

Twitterでつぶやいていた
「EasyLanguage小ネタ」も50を超えてきたので、
まとめ記事を用意することにしました。

それで、ただ時系列にまとめるだけでは
Twitterで見るのと変わりないので、
見やすいようカテゴリ分けてみることにしました。

随時追加していきますので、ぜひ参考にしてください。

また、「RT(リツイート)」や「いいね」の多かったつぶやきについては、
さらに掘り下げた内容の記事を書こうかなと思っています。

各記事に貼り付けているTwitterのつぶやきは、
Twitterアカウントお持ちであればすぐにRTやいいねできると思いますので、
日付関係なくお気軽にRT/いいねして頂けると嬉しいです!

ではでは、よろしくお願い致します。

(EL小ネタの始まりはここから)

(追記)2017.11.12
RT/いいね、ありがとうございます! m(__)m