easylanguageプログラミング入門(サンプル)...4 本書の構成...
TRANSCRIPT
4
本書の構成
本書は全7章から成り、各章の内容は以下の種類のパートで構成されています。
●トレードステーション口座の開設 本書で解説するトレード専用プログラミング言語「EasyLanguage」のプログラミングを行う
には、トレードステーション口座開設が必要です。口座開設はマネックス証券のウェブサイト
から行えます。
https://info.monex.co.jp/tradestation/
本書の読み方
「アドバイス」 : プログラミングに役立つ豆知識や関連した派生的な知識を紹介
「EasyLanguageプログラム」 : 「タイトル」「プログラム」「印刷ログ」で構成
「タイトル」 : プログラムの説明とダウンロードファイルのファイル名
「コラム」 : 一部の章末に掲載。トレードステーションやEasyLanguageプログラミングに関連するコラムを掲載
「プログラム」: EasyLanguageのサンプルプログラム本文。重要ポイントには説明を追加
「本文」 : プログラミングおよびトレードステーションの説明
「囲み」 : 重要なポイントのまとめ
「注意」: プログラミングやトレードステーションの操作で避けるべき行動、陥りやすい失敗などを紹介
「印刷ログ」 : プログラム実行による出力結果の一部(3行)を引用
5
●トレードステーションのダウンロードとインストール トレードステーションはWindows上で稼働するPCインストール型ソフトウェアです。動画での詳しいダウンロード方法の解説は以下をご覧ください。 https://info.monex.co.jp/tradestation-support/movie.html
ダウンロード後の詳しいインストール方法は以下の操作マニュアルをご覧ください。 https://info.monex.co.jp/tradestation-support/manual.html
●推奨システム利用環境 OS: Windows7以上、プロセッサ : Multi-core Intel またはAMD 3GHz以上、メモリ : 4GB以上、ハードディスク : 1GB以上の空き容量、画面解像度 : 1280×1024ピクセル以上、Webブラウザ :
Microsoft Internet Explorer (最新版)、回線 : ブロードバンド回線 6Mbps以上
●学習の進め方 本書には多数のサンプルプログラムを掲載しています。本文を読むだけでなく、自分の手を動かしてサンプルプログラムをタイピングし、トレードステーションで実行することで理解が深まります。 プログラミング技術は、一度頭で理解しただけではなかなか身につかず、使いこなすことはできません。何度も手を動かし、復習し、試行錯誤することで深いレベルで身につき、知識を実践し応用することができます。 なお、第4章以降に掲載するサンプルプログラムファイルは、Webサイトからダウンロードできます。
●サンプルプログラムのダウンロード方法 本書で提供するサンプルプログラムは、以下のWebサイトよりダウンロード可能です。ダウンロードしたサンプルプログラムファイルはトレードステーション(エディタ)にインポートすることで実行できます。 http://www.standards.co.jp/lk/eld.html
●サンプルプログラムの目的と使用上の注意点 本書で提供するサンプルプログラムは、EasyLanguageの学習を目的とするプログラムです。本プログラムおよびこれを一部使用または改変したプログラムを使用した自動売買、裁量トレード、その他いかなる事由により生じた損害であっても、著者および出版元は一切の責任は負いません。また、本プログラムを販売その他商業利用の目的で使用することを禁じます。
6
第1章 概要 ······································································································································································································ 11
1-1 EasyLanguageの歴史と特徴
EasyLanguageの歴史······································································································································································································· 12EasyLanguageの7つの特徴 ························································································································································································· 13
1-2 EasyLanguageの機能
トレードステーションの主な機能メニュー9種1. データ取得・蓄積・記憶・エクスポート機能╱2. チャート表示機能 ··················································································· 163. 高速反復計算機能╱4. 銘柄スクリーニング機能·································································································································· 175.銘柄モニタリング機能╱6. 計算結果のチャートへの描画機能╱7. シグナル生成機能 ············································ 188. 自動売買機能╱9. アラート表示・Eメール送信機能 ······················································································································· 19章末コラム EasyLanguageの実践的独習法 ······················································································································································· 20
第2章 エディタ ······················································································································································································ 21
2-1 エディタの役割
トレードステーションにおけるエディタの役割╱開発ツールとしてのエディタ ······························································· 22エディタとトレードステーションの関係 ······················································································································································· 23
2-2 エディタの画面構成と機能
エディタの起動╱エディタの画面構成 ···························································································································································· 24① メニューバー ··············································································································································································································· 25② ツールバー╱③ 編集エリア ·············································································································································································· 26④ アウトプット ··············································································································································································································· 27
2-3 エディタ操作とファイルの取り扱い
ファイルの新規作成 ······································································································································································································ 28文字入力╱自動補完入力 ··························································································································································································· 29予約語の配色╱エディタ設定 ················································································································································································· 30検証 ·········································································································································································································································· 31ファイルを開く╱アウトライン機能 ································································································································································· 32ファイルの適用先となるチャートの準備 ······················································································································································· 33インジケーターの適用╱ストラテジーの適用 ············································································································································· 36ELDファイルのインポート╱ELDファイルのエクスポート ············································································································ 39ELDファイルの暗号化 ································································································································································································ 40
2-4 計算結果を数値で出力する:印刷ログ
計算結果を定量的に出力し確認できる「印刷ログ」 ································································································································ 42印刷ログエリアの表示 ································································································································································································· 43文字列の出力╱① インジケーターファイルを新規作成する╱② 出力したい内容のプリント文を書く ············· 44③ 検証しエラーがないかを確認する╱④⑤⑥ 印刷ログを確認する ··························································································· 45数値の出力とプリント文の表記改善 ································································································································································· 46プリント文を見やすくする ······················································································································································································ 48
2-5 入手可能なデータの種類と格納データの確認:データウィンドウ
ノイズレスデータの重要性 ······················································································································································································ 52データを入手する ··········································································································································································································· 53
目次 CONTENTS
7
チャートが格納するデータを確認する機能:データウィンドウ ··································································································· 54データウィンドウの開き方╱足種変更によるチャートとデータ表示の更新 ········································································· 55データウィンドウからのデータのエクスポート╱データの種類と範囲と性質 ···································································· 56チャートの足が持つデータ ······················································································································································································ 57過去足のデータ参照 ······································································································································································································ 58
2-6 快適なプログラミング環境の構築
効果的なプログラミング環境とは ······································································································································································· 60章末コラム プログラミングスキルを上げる『ストリートスマート』という思考法 ························································· 62
第3章 基本構造と構成要素 ····································································································································· 63
3-1 EasyLanguageの基本構造
基本構造は他のプログラミング言語と共通╱入力→計算→出力╱データ+命令 ······························································· 64変数+関数 ···························································································································································································································· 65データ処理原則と制御構文╱原則:順次処理 ············································································································································· 66制御構文その1:分岐処理╱制御構文その2:反復処理 ······················································································································· 67
3-2 EasyLanguageならではの特殊構造
EasyLanguageの実行構造 ···························································································································································································· 68ヒストリカルデータ(過去足)へのプログラム適用╱リアルタイムデータ(現在足)へのプログラム適用 ······ 69プログラムの実行タイミング ················································································································································································· 70イントラバーデータの更新╱ヒストリカルデータの参照方法 ········································································································ 71
3-3 最大参照足数の確保
最大参照足数とは ··········································································································································································································· 74トレードステーションからの「分析に用いる足の最大本数」設定:インジケーターの場合 ····································· 76
3-4 構成要素
構成要素を理解して組み合わせるのがプログラミング╱① 語 ······································································································· 78予約語(リザーブドワード、Reserved Word) ············································································································································· 79ユーザー定義語╱② 句読点 ····················································································································································································· 81区切り用の句読点 ··········································································································································································································· 82範囲指定用の句読点 ······································································································································································································ 83コメント用の句読点 ······································································································································································································ 84③ 演算子╱算術演算子 ······························································································································································································· 85比較演算子(関係演算子) ························································································································································································· 86論理演算子 ··························································································································································································································· 87演算子の優先順位╱④ 式╱数値式 ····································································································································································· 89真偽式╱⑤ 文╱変数宣言文 ····················································································································································································· 91変数代入文╱プロット文(インジケーター専用文)╱売買文(ストラテジー専用文) ·················································· 92インジケーターの基本構成パターン╱ストラテジーの基本構成パターン ·············································································· 93
3-5 ファイル構造
インジケーターファイルはスキャナーとレーダースクリーンでも利用できる╱ひとつのELDファイルでインジケーターとストラテジーの兼用はできない ········································································ 94章末コラム トレードを3要素に分解 ·································································································································································· 96
第4章 基本文法 ··················································································································································································· 97
4-1 描画(プロット文)
基本文法学習におけるプロット文の役割 ······················································································································································· 98プロット文の基本形╱プロット文の練習 ······················································································································································· 99
8
4-2 変数
変数の意味と機能╱変数の使用手順 ································································································································································· 104変数の種類 ··························································································································································································································· 105定義済み変数╱ユーザー定義変数の変数宣言 ············································································································································· 106変数宣言文の種類╱ input変数宣言文╱variable変数宣言文 ·············································································································· 108変数代入文 ··························································································································································································································· 109変数の値をティック毎に更新する変数宣言 ·················································································································································· 111
4-3 関数
関数の意味╱引数と戻り値とパラメータ ······················································································································································· 112定義済み関数の使い方 ································································································································································································· 113定義済み関数の例 ··········································································································································································································· 114
4-4 分岐処理(if文)
分岐処理の意味 ················································································································································································································ 116分岐処理の基本形 if…then ······················································································································································································· 117条件が falseの場合に実行する内容を決めておく if…then…else ·································································································· 120
4-5 ブロック文(begin end)
複数の処理をまとめるブロック文 begin end ············································································································································ 122if then elseでブロック文を使う ············································································································································································· 124
4-6 反復処理(for文)
反復処理の意味と基本形╱for文の練習 ·························································································································································· 126for文から途中で抜け出す処理 break······························································································································································· 128
4-7 条件分岐+反復処理(while文)
while文の意味╱while文の練習 ············································································································································································· 130無限ループに陥らないために ················································································································································································· 131実行頻度の設定 イントラバーデータ更新······················································································································································ 132
4-8 ネスト構造
ネスト構造の意味 ··········································································································································································································· 134ネスト構造の練習 if文································································································································································································· 135ネスト構造の練習 for文 ····························································································································································································· 136
4-9 複数データ系列
複数データ系列の参照╱複数銘柄を表示するチャートの作成とデータ確認 ········································································· 140複数データ系列の取り扱いの練習 ······································································································································································· 141
第5章 分析テクニック ··························································································································································· 146
5-1 分析テクニックの開発で学ぶ基本文法の使い方
分析テクニックをカテゴリ別に分類╱ペイントバーの使い方 ········································································································ 146ペイントバーの練習 ······································································································································································································ 147ショウミーの使い方 ······································································································································································································ 150
5-2 統計解析モデル
統計解析を行う理由╱基本統計量 ······································································································································································· 150収益率 ····································································································································································································································· 153対数収益率╱ヒストリカルボラティリティ ·················································································································································· 154相関係数 ································································································································································································································ 156
5-3 出来高分析モデル
出来高分析の重要性╱出来高移動平均線(2本) ······································································································································· 158
9
オンバランスボリューム ··························································································································································································· 160ボリュームレシオ ··········································································································································································································· 161VWAP(Volume Weighted Average Price 出来高加重平均) ··············································································································· 162
5-4 パターン認識モデル
パターン認識モデルとは╱上放れ並び赤、下放れ並び黒 ··················································································································· 166はらみ線(陽はらみ線、陰はらみ線) ······························································································································································· 168三兵(赤三兵、黒三兵) ······························································································································································································ 169三川明けの明星、三川宵の明星 ············································································································································································ 171
5-5 トレンドモデル
トレンドモデルの強みと弱み╱移動平均 ······················································································································································· 174移動平均チャネル ··········································································································································································································· 179移動平均エンベロープ ································································································································································································· 180ボリンジャーバンド ······································································································································································································ 181ピボット ································································································································································································································ 183
5-6 オシレーターモデル
オシレーターモデルの意味╱オシレーター ·················································································································································· 186方向性指数(DMI) ········································································································································································································ 187サイコロジカルライン ································································································································································································· 189ウィリアムズ%R ············································································································································································································ 191RSI ············································································································································································································································· 192ストキャスティクス ······································································································································································································ 193MACD ···································································································································································································································· 194
5-7 非時系列足モデル
非時系列足モデルの意味╱新値三本足 ···························································································································································· 198練行足(練り足) ·············································································································································································································· 199
第6章 ストラテジー ····································································································································································· 201
6-1 ストラテジープログラミングの意味
ストラテジー活用法╱ストラテジーの自動売買以外での活用場面 ······························································································ 202本章の学習項目 ················································································································································································································ 203
6-2 売買文の基本
基本売買文╱売買注文語 ··························································································································································································· 204ラベル ····································································································································································································································· 205取引数量 ································································································································································································································ 206注文タイミング╱注文の種類 ················································································································································································· 208
6-3 イントラバー計算の設定
イントラバー計算の意味と設定の種類 ···························································································································································· 212トレステでのイントラバー計算設定╱プログラムでの記述 intrabarordergeneration、intrabarpersist ····················· 213
6-4 条件付注文
売買文への条件追加方法╱ if文で条件を加えthen以下の実行式を売買文とする ······························································· 216セットアップ ····················································································································································································································· 218フィルタ ································································································································································································································ 219ランダムエントリーストラテジー(売買文練習用) ································································································································ 221
6-5 決済注文の応用
トレーリングストップ ································································································································································································· 222アベレージトゥルーレンジをトレーリングストップに応用 ············································································································· 223
10
イントラバー決済注文の概要 ················································································································································································· 225イントラバー決済注文(第1レベル :注文の単位)╱イントラバー決済注文(第2レベル :注文の種類)················· 226イントラバー決済注文の事例 ················································································································································································· 228
6-6 足数の数え方
足を数える ··························································································································································································································· 230足の状況を知る barstatus ···························································································································································································· 231
6-7 時間管理
日付、時間、曜日などに関する予約語 ···························································································································································· 234EasyLanguageでの発注時間の考え方 ·································································································································································· 235イントラバー注文を有効にする ············································································································································································ 237ティックトレード ··········································································································································································································· 238日付計算 ································································································································································································································ 240時間計算╱日計り売買 ································································································································································································· 241
6-8 ポジション管理
ポジションとエントリーの状況を知る必要性╱エントリー(新規約定と保有ポジション)の状況を知る ······ 244エグジット(決済)の状況を知る ······································································································································································· 245複数エントリーのトレードを許可する設定 ·················································································································································· 246複数エントリーを管理する ······················································································································································································ 248
6-9 サンプルストラテジー集
インジケーターをセットアップに利用するストラテジー ··················································································································· 250ブレイクアウトストラテジー ················································································································································································· 252乖離率逆張りストラテジー ······················································································································································································ 255切り下げ・切り上げパターンストラテジー ·················································································································································· 256酒田五法(赤三兵、黒三兵)ストラテジー ·················································································································································· 258新値三本、練行足ストラテジー ············································································································································································ 259ペアトレードストラテジー ······················································································································································································ 261マルチタイムフレーム(MTF)ストラテジー ············································································································································ 263値幅制限ストラテジー ································································································································································································· 265ダウ逆張りストラテジー ··························································································································································································· 267章末コラム トレステと仮想通貨 ··········································································································································································· 270
第7章 自動売買 ··················································································································································································· 271
7-1 バックテスト
プログラミングの次の工程、バックテスト╱イントラバーでのバックテスト ···································································· 272パフォーマンスレポートに取引手数料を加味する方法╱パフォーマンスレポートの活用法 ····································· 274
7-2 最適化
最適化とは╱最適化機能の操作方法 ································································································································································· 276ストラテジー最適化レポート ················································································································································································· 278他の銘柄やインターバルに適用し試行錯誤 ·················································································································································· 279
7-3 自動売買の設定と運用
フォワードテスト ··········································································································································································································· 280資金管理 ································································································································································································································ 281ポートフォリオ╱ストラテジーのイントラバーデータ更新 ············································································································· 282売買株数の設定方法╱トレードステーションの注文同期機能 ········································································································ 283自動発注の設定方法╱トレードマネージャーの操作 ····························································································································· 284注文送信プロセスを理解する ················································································································································································· 285自動売買は自動ではない╱自動売買の環境整備 ······································································································································· 286自動売買に関する意思決定 ······················································································································································································ 287章末コラム プログラミングはルーティンワークからの解放手段 ·································································································· 288
12
概 要
1
■ EasyLanguageの歴史 EasyLanguageとは、 米国で数々のNo.1の評価を受けるトレーディングプラットフォーム「ト
レードステーション」を動かすためのトレード専用プログラミング言語です(以下、本書では
「トレステ」と省略する場合があります)。トレステとEasyLanguageは共に1970年にアメリカの
ウィリアム・クルーズとラファエル・クルーズ兄弟により開発され、現在までバージョンアッ
プを続けています(2018年5月時点:トレステはバージョン9.5)。
トレステとEasyLanguageが登場するまで、アメリカの一部の先進的な機関投資家やヘッジファ
ンドはシステムエンジニアを雇用し自社開発でシステム開発を行い、コンピュータによる金融
市場分析を行っていました。同じくアメリカのタートルズなど一部のプロップファーム(自己
資金の売買で生計を立てる集団)やCTA(投資顧問業者)は、人間の感情を交えないルールベ
ースのトレーディングを人間のトレーダーに行わせていました。今では常識となったシステム
トレードですが、トレステの登場まではエンドユーザーのみならず機関投資家からも効果があ
るのかは疑念を持たれていました。一方で、効果があるとわかっている投資家も、システムト
レードを実装・運用するには莫大な額のシステム投資とエンジニアリングの知識が必要となる
世界初であり世界標準のトレード専用プログラミング言語EasyLanguage
EasyLanguageの歴史と特徴1-1
● TradeStation Group,Inc.ウェブサイト
13
1-1
EasyLanguageの歴史と特徴
ため簡単には実装できず、一部の限られた投資家のみがその恩恵を享受していました。
そのような環境下でトレステはデビューしました。システムトレードの優位性を理解する先
鋭的なトレーダー達は、EasyLanguageでストラテジー(売買戦略)をプログラミングしトレー
ドするスタイルに移行しました。個人トレーダーが自宅のパソコンでシステムトレードを行え
る画期的な時代となったのです。その流れは個人のみならず金融機関にも波及し、投資銀行な
どのトレーディングルームにトレステが設置され始め、以後トレステはアメリカ市場で普及し
ていきました。
そして現在では、マネックスグループの一員となった TradeStation Group,Inc.(米フロリダ)
はさらにトレステを進化させました。トレステは金融分野の優れたトレーディングプラットフ
ォームとして現在も数々の賞を受賞し続けています。
トレードの本場アメリカのトレーダー達は、過去数十年にわたってトレステとEasyLanguage
を使い倒し、磨き上げてきました。およそ考え得る限りの多様な相場分析とトレード手法がEa
syLanguageを使って開発され、成功と失敗を収めてきました。その結果、膨大な数のインジケ
ーターやストラテジーがアーカイブとして残されており、今日の私たちもその恩恵を受けるこ
とができます。
アメリカのトレード解説書籍では、インジケーター(テクニカル分析指標)やストラテジー(売
買戦略)がEasyLanguageで書かれていることがよくあります。これはEasyLanguageがトレードの
世界の事実上の標準プログラムミング言語であることの証左でもあります。
■ EasyLanguageの7つの特徴 EasyLanguageはその名が表すようにインジケーターやストラテジーの開発をイージー(簡単)
に行えるよう設計されたトレーダーのための専用プログラミング言語です。EasyLanguageの主
な特徴は次の7つです。
❶ トレステを動かすための専用言語 EasyLanguageはトレステ上でのみ動作するトレード専用プログラミング言語です。これから
EasyLanguageで開発を行うにあたっても「このプログラムでトレステをどう動かすか」という
意識を持つようにしましょう。EasyLanguageの書き方次第でトレステを効率よく動かせるか、ま
たは思ったように動かせずトレードで損失を出してしまうかが分かれます。なお、本書ではト
レステが動いた結果を「出力」と呼ぶ場合があります。
❷ トレードの流れに沿ったシンプルな基本構造を持つ EasyLanguageはトレードに特化し最適化した言語構造を持ちます。その基本構造は①銘柄の
時系列データなどのデータの確保・蓄積(入力)、②データの計算(処理)、③計算結果のチャ
ートへの描画や売買の執行(出力)というトレードの流れに沿った3段階構造となっています。
トレーダーの思考の流れを阻害せず、アイデアや戦略をスムーズにプログラミングできる基本
構造です。
14
概 要
1
❸ 単語や文法の構造が英語に近く可読性が高い EasyLanguageでは time,open,high,low,closeなどのトレード用語として登場する名詞、buy, sell
などの動詞、at, inなどの前置詞(78ページ参照)を英作文に近い感覚で記述することができま
す。プログラム自体が英文に近いため他者が書いたプログラムも読みやすく学習しやすいです
し(「可読性が高い」といいます)、改変して自分で試してみることもできます。もちろん自分
のプログラムをシェアすることも容易です。
❹ 単語や文法のパターンが少なく学習コストが低い トレード分野は奥深いものですが、それでも登場する概念や用語、トレーダーの行動パター
ンの範囲は限られており、表現するパターンにも自ずと一定の範囲があります。確かにEasy
Languageにはトレード用語が満載でプログラミング初心者はその膨大な単語や文法の数に圧倒さ
れるでしょう。その一方でEasyLanguageにはトレード以外の単語や文法は存在しません。例えば
自動運転車や将棋のAIをEasyLanguageでプログラミングすることはありません。
EasyLanguageはトレード用語をプログラムで使用する「語」(予約語)として網羅しています。
トレードに深い理解があり自分のトレードを合理化や自動化したいトレーダーほど学習しやす
く記述しやすい言語です。ましてやトレーダー自身が実現したい取引手法を既に決めていれば、
あとはその取引手法をプログラムで実装するための最小限の単語と文法を最短距離で学習する
だけです。トレードに専門化していると聞くと難しそうですが、実は逆で、学習範囲が限られて
いるため他のプログラミング言語と比較してもEasyLanguageの学習コストは低いのです。Easy
Languageにどのような単語や文法があるかはヘルプ(61ページ参照)を検索・参照することで
見通しをつけることができます。
❺ 短いプログラムで実装できる C言語やPythonなどの汎用プログラミング言語であれば何百行、何千行を書く必要があるプ
ログラムであっても、EasyLanguageであれば数行、少し複雑なものでも数十行程度あれば自分
が意図したプログラムを記述しトレステに実装することができます。
例えば他の言語では新規(「スクラッチから」という呼び方もあります)に作成する関数で
あっても、EasyLanguageではトレードに関する関数がライブラリに多数取り揃えられておりそ
れを使って短いプログラムで表現することができます。一方、あらかじめ定義された関数が存
在しない場合には他言語同様に新規にプログラムを書く必要があります。その上EasyLanguage
ならではの文法や決まり事、挙動、癖のようなものがありますので、その点についてはその都
度学習する必要があります。
❻ トレステのトレードアプリ上で実行 EasyLanguageで記述したプログラムは、トレステのチャートやレーダースクリーン、スキャ
ナーといったトレードアプリ上で実行します。トレステ以外のアプリケーション上ではEasy
Languageを実行することはできません。実行するには事前にトレステを起動し、チャートやレ
ーダースクリーンを立ち上げ、インジケーターやストラテジーのプログラムファイルを適用する
15
1-1
EasyLanguageの歴史と特徴
(「挿入する」)作業を行います。
❼ 機械語に変換する「検証」(コンパイル)が必要 EasyLanguageは、C言語などと同様に人間が書いたプログラムをコンピュータが理解でき
る言語(機械語)にいったん変換(コンパイル)し、その機械語をコンピュータが読み取って
実行する言語です。
このように変換というワンクッションの作業を置く理由は、一旦変換するとコンピュータへ
の命令はすべて機械語で処理され処理速度が速くなるというメリットがあるためです。
一方、人間がプログラミングするたびに、人間の手によって機械語に変換する手間がかかる
というデメリットもあります。
しかしそれを補う方法はあります。次章から説明するEasyLanguageを編集するための「エディ
タ」というアプリケーションでは、1クリックでこの変換作業ができます。使い慣れれば変換
の手間をほぼ意識せずにプログラミングを行えるようになります。さらにできるだけこまめに
コンピュータからのフィードバックを受けてエラーを減少する方法については第2章で解説し
ます。
16
概 要
1
■ トレードステーションの主な機能メニュー9種 トレステは多様な機能を持ち、その機能をEasyLanguageにより運用することができます。レス
トランでメニューにある料理を注文すれば調理されて出てくるのと同じように、トレステのメ
ニューにある機能をトレーダーがEasyLanguageの言葉遣いで注文すれば、トレステは注文どお
りのメニューを機械的・自動的に実行してくれます。
本節ではトレステの機能メニューを紹介していきます。これらのメニューをおおまかに知っ
ておくことで、EasyLanguageの学習に着手するモチベーションが生まれ、日々のトレードの合理
化につながります。
■ 1. データ取得・蓄積・記憶・エクスポート機能 時系列データ(time series data)、銘柄データ、口座データ、ポジションデータ、ファンダメ
ンタルデータなど、トレステのデータサーバーや取引サーバーに蓄積された様々なデータをイン
ターネット経由で取得することができます。さらに、データサーバーからフィード(配信)され
た複数の銘柄や複数のインターバルのデータを同時に受信することもできます。
取得したデータはコンピュータのメモリやハードディスクに蓄積・記憶することができます。
そのデータをトレステからCSV(comma separated value、カンマ区切り)形式のファイルでエ
クスポートすることで他の開発環境でも計算・分析することができます。
日本版トレステでは、日本市場の上場銘柄の1991年1月1日からの日足データ、及び最大10年
分の分足データを呼び出すことができます。
通常トレステでは手動で設定することによりデータを取得しますが、EasyLanguageで制御す
ることでデータ取得を自動化することもできます。
■ 2. チャート表示機能 横軸に時間をとり、縦軸に価格をとるチャート(2次元グラフ)でリアルタイムにデータを
表示し、ビジュアルにマーケットの動きを表現することができます。その場合の時間軸(「タイ
ムフレーム」、「インターバル」)の表現方法も例えば50ティック足や35分足などEasyLanguage
で細部まで指定することができます。
EasyLanguageでトレステを動かせる範囲を知る
EasyLanguageの機能1-2
17
1-2
EasyLanguageの機能
■ 3. 高速反復計算機能 トレステのチャート上に呼び出したデータを使い様々な計算を行えます。数式や関数を組み
合わせ、どのような計算をいつ行うかをプログラムで記述し、コンピュータに毎日、毎時、毎分、
毎秒、ティック毎など複雑な計算も高速で繰り返し行わせることができます。
■ 4. 銘柄スクリーニング機能 トレステの銘柄スクリーニングアプリ「スキャナー」にEasyLanguageで開発したインジケー
ターを組み込むことができます。スキャナーで「スキャンの自動実行スケジュール」を設定し
ておけば、インジケーターで指定した任意の条件に合致する銘柄を自動的かつ定期的に抽出で
きます。
● チャート分析 表示画面
● スキャナー
18
概 要
1■ 5.銘柄モニタリング機能
トレステの「レーダースク
リーン」(銘柄ボードアプリ)
を使えば、開発したインジケ
ーターで指定した条件の値を
リアルタイムで表示し設定し
た間隔でソート(並べ替え)
することができます。
■ 6. 計算結果のチャートへの描画機能 チャート上に任意の計算結果を反映した描画(プロット)を行うことができます。トレステ
には複数の描画方法があり、チャートに多様な表現を行えます。
本書では、描画方法の中でも特に線グラフを描画する「インジケーター」とローソク足に着
色する「ペイントバー」を使用します。EasyLanguageで指定することで、グラフに点(ドット)
を打つ、線を引く、配色するなどインジケーターをカスタマイズして表現できます。例えば特
定の銘柄のチャート上に自分が決めた条件でラインを引くインジケーターを作り、それを裁量
トレードに活用することもできます。また、ファンダメンタルデータを表示するなど裁量トレー
ドを行なうためのインジケーターや後述する自動売買のためのストラテジー、さらに高度なも
のとしてはオブジェクト指向のEasyLanguage(「OOEL」と呼びます)を駆使し、チャートやレー
ダースクリーンのよう
な形態でインジケータ
やストラテジー機能を
搭載したオリジナルア
プリを開発することも
できます(なお、本書
ではOOELは扱いま
せん)。
■ 7. シグナル生成機能 価格データなどをプログラムで計算した結果を売買信号(売買シグナル)としてチャート上
に描画することができます。これにより開発したストラテジーの売買タイミングの良し悪しを
● ペイントバー
● レーダースクリーン
19
1-2
EasyLanguageの機能
目視および要約されたレポート形式(ストラテジーパフォーマンスレポート:272ページ参照)
の両方で確認することができます。
■ 8. 自動売買機能 トレステにリアルタイムで価格データを計算させ、売買シグナルを生成させるストラテジーを
開発・実装することで自動売買を行うことができます。忙しい仕事中に自分でスマホを操作して
発注しなくても、パソコンの前に座っていなくても、トレステが決定的なタイミングを逃さずに
トレーダーを代行して発注します。リアルタイムトレード特有の注意点に気をつければ、トレー
ダーはより生産性の高い時間の使い方ができるようになります(280ページ参照)。
■ 9. アラート表示・Eメール送信機能 EasyLanguageで予め条件をプログラムしておけば、取引時間中にその条件を充たす事象が発生
したタイミングでアラートを出すことによりトレーダーに事象の発生を知らせることができます。
アラート機能は、音を鳴らしたり、ポップアップウィンドウを表示したり、システムトレイのア
イコンを点滅したりできます。発生したアラートはメッセージセンターにも表示されます。設定
を行えばアラートをE
メールで送信すること
も可能です。
● シグナル(矢印)
● メッセージセンター
20
概 要
1EasyLanguageの実践的独習法
周囲にプログラムに関して質問できる人がいないのでどうやって学習を進めていったらよいか分からない、そんな時にどうやって学習を進めたらよいでしょうか。 まずは、トレステフォーラムで最近の投稿を眺めたり、キーワード検索したりすることです。多くのユーザーが多種多様な質問を提起しています。中にはあなたと同じ悩みを投稿し既に回答されているものもあるかもしれません。フォーラムはトレステユーザーにとっては宝の山です。検索しても手がかりが得られない場合は、フォーラムに質問を書き込みましょう。誰かが回答してくれます。 また、フォーラムには多くのサンプルプログラムがあります。これはトレステユーザーが自由に使ってもよいものです。まずはプログラムを読んでみましょう。プログラマーは読むのが8割、書くのが2割と言われます。それほど他人の書いたプログラムを読むことは有益とされています。読んでわからないことがあっても気にする必要はありません。わからないから学ぶのです。 次に、他人が書いたプログラムをトレステで動かしてみましょう。エディタから新規ファイルを作成し、コピペしたものを検証し、チャートやレーダースクリーンで起動させます。そのプログラムは動くでしょうか?どのように挙動するでしょうか?観察対象としてもってこいです。夜中で相場が動いていないときは、為替レートやビットコイン指数レートに適用すれば平日であれば動きを見ることができます。相場が動いていない土日でもバックテストはできます。 さらにお勧めの方法としては、サンプルプログラムをキーボードで入力して丸写しするトレーニング方法があります。この行為はプログラミングの世界では「写経」と呼ばれます。写経が現代の仏教でも修行の一部として残っているように、丸写しは一見時間がかかって無駄な作業のようですが、小学校や中学校で行った漢字の書き取りや算数の計算練習、英単語を覚えるときの単語カードへの書き込みと同じで、意味を考えながら手を動かして入力することで文のコンテキスト(文脈)が分かってくる効果があります。プログラムは長くなればなるほど全体構造が見えにくくなり、文脈を追っていても道を見失ってしまい迷子になってしまう(ロストする)ことがあります。写経することで流れを意識するようになり、繋がりが見えてくれば全体構造と要素の関係を体で理解できるようになります。以上の理由により、丸写しに写経がメタファーとして使われるのは、うなずけるところです。 同様なことはウェブサイトやブログでも行えます。トレステについて情報発信しているサイトは検索すると沢山出てきます。「トレードステーション」+疑問点のキーワードで検索すると目的のサイトに辿り着けるかもしれません。 トレステに既に入っているビルトインインジケーターやビルトインストラテジーでも同じ学習を行えます。これらはいわばEasyLanguageの実例集です。プログラムを写経するのもよし、プログラムをコピーし新規ファイルに貼り付けてカスタマイズするのもよしです。
● マネックス証券の 総合口座から トレードステーション フォーラムサイトに いける
22
エディタ
2
■ トレードステーションにおけるエディタの役割 インジケーターやストラテジーのプログラムをEasyLanguageで開発する場合に使用するアプ
リをトレードステーション開発環境「TDE」(TradeStation Development Environment)といい
ます。TDEには複数の機能が搭載されていますが、そのメイン機能がEasyLanguageを編集する
エディタです。このエディタはWindowsのアプリケーションで言えば「メモ帳」のような機能
のアプリです。
本書では分かりやすさを優先してTDEを「エディタ」または「TDEエディタ」と呼んでい
ます。
エディタはプログラムを速く正確に入力しコンピュータに正確に解釈させるための機能を有し
ています。これらの機能を理解し使いこなすことで、プログラムの開発を効率的に進められます。
■ 開発ツールとしてのエディタ エディタではEasyLanguageプログラムの閲覧、記述、編集、保存を行えます。プログラミン
グ言語の学習に入る前に、エディタの機能や設定方法、利用方法を一通り学んでおくことで、そ
の後の学習がスムーズに進行します。
トレステとは独立した開発環境アプリであるエディタは、トレステを立ち上げていない状態
でも使用可能です。またトレステ同様、最後にログインしてから30日間に限り、インターネッ
トに接続しないオフライン状態での開発も可能です。
プログラムを入力し開発していくエディタの役割
エディタの役割2-1
外部エディタの使用EasyLanguageのプログラミング自体は、メモ帳やNotepad++などの他のアプリケーションでも行えます。ただしトレステの開発環境の一部であるTDEエディタにはEasyLanguageを編集することに特化した便利な機能があり(後述)、さらにトレステが理解する機械語への変換(「検証」)はこのTDEエディタでしか行えないため、最終的にはTDEエディタを使う必要があります。
アドバイス
23
エディタの役割
2-1■ エディタとトレードステーションの関係 便利で強力なツールであるエディタもプログラム開発のすべてのプロセスをカバーしている
わけではありません。開発プロセスの一部の作業はトレステ本体で行います。両者は次のよう
に関連して動作します。
❶ インジケーターやストラテジーのプログラムをエディタで開発します。❷ 開発したプログラムをトレステのチャートに適用します。❸ トレステが取得した銘柄のデータにプログラムを走らせて計算します。❹ 計算結果に基づきトレステがテスト結果レポートの表示、チャートの描画や自動売買などを
実行します。
プログラミング中はエディタだけでなくトレステ本体も立ち上げておき、両者を行き来する
ことが多くなりますので、ディスプレイ上にエディタとトレステの両アプリケーションを横に
並べて表示するのがよいでしょう(46ページ参照)。
トレステとエディタの役割の違いは次の表を参照してください。本章ではエディタの解説と
共にプログラム開発途上で関連してくるトレステの機能とその利用法も併せて解説します。
● トレードステーションとエディタの役割分担
トレードステーション● データ取得、表示● アプリの実行● プログラムの適用、計算、実行● プログラム実行結果の表示● リアルタイム発注
エディタ● プログラム開発● プログラム検証
24
エディタ
2
■ エディタの起動 本節では開発のメイン場所であるエディタの機能を詳しく解説します。
エディタを立ち上げる方法は2種類あります。
● トレステの画面の左端にある[ トレーディングアプリ ]タブをクリックして[ EasyLan
guage ]と書かれているアイコンをクリックします。● メニューバーの[ 表示 ] →[ EasyLanguage開発環境 ]をクリックします。
■ エディタの画面構成 エディタを立ち上げたら次にエディタのメイン画面の構成を理解しましょう。
上から順に[メニューバー]、[ツールバー]、一番広い真ん中のスペースが[編集エリア]、下
の段にはアウトプットなどの[タブエリア]があります。左右側面には3つの[タブ]があり
ます。左側にはツールボックスのタブ、右側にはプロパティと辞書タブがあります。これら左
右3つのタブは本書では使用しません。
エディタが持つ多様な機能を起動方法から解説
エディタの画面構成と機能2-2
● トレステのトレーディングアプリタブからのエディタ立ち上げ
トレステ
25
エディタの画面構成と機能
2-2
■ ① メニューバー
● エディタ起動時の画面
● エディタのメニューバー
[ウィンドウ](ファイルを開いている場合のみ表示)ファイルをウィンドウ単位で表示します。標準では[タブ表示]にチェックが入っています。
[ファイル]新規作成、開く、閉じる、保存などのファイル操作に使用します。
[表示] エディタのツールバーに表示する機能を選べます。
[デバッグ]デバック機能を利用できます。基本的にプリント文(44ページ参照)でバグ取りするので使いません。
[ヘルプ]EasyLanguageのヘルプが参照できるウェブサイトが表示されます(61ページ参照)。
[編集]コピーや貼り付けなどプログラムを編集する際に使用します。
[構築する]プログラムを変換する「検証」機能が置かれています(31ページ参照)。
[ツール]エディタの表示設定を変更します。 [オプション] の選択で画面の配色やフォント(字体)の種類やサイズを変更できます。
①メニューバー
プロパティなど
②ツールバー③編集エリア
④アウトプット
エディタ
26
エディタ
2■ ② ツールバー ツールバーの初期画面では以下のアイコンが表示されています。
(※注)オブジェクト指向機能とは、EasyLanguageに後発で追加されたオブジェクト指向言語(Object Oriented EasyLanguage、OOEL)を記述するための機能を指します。本書では扱いません。
■ ③ 編集エリア エディタのメインエリアです。ここにファイルを開いてプログラムを記述していきます。エ
ディタを開いたばかりの状態は、前ページの起動時のように背景がグレーの空白となっていま
す。ファイルを新規作成するか、トレステにあらかじめ組み込まれているサンプルのインジケ
ーター(ビルトインインジケーター)やストラテジー(ビルトインインストラテジー)のファイ
ルを開くと背景が白い状態となり、編集エリアでプログラミングを開始できます。編集エリア
では同時に複数のファイルを開くこともできます。ひとつのファイルにつき、ひとつのタブが
● エディタのタブ切り替え表示
● エディタのツールバー
[新規] [保存]
[開く] [印刷]
[切り取り]文字の切り取りを行います。
[コピー]文字のコピーを行えます。
[やり直し] [元に戻す]で戻した作業を前に戻します。
[貼り付け]コピーもしくは切り取った文字を貼り付けます。
[バージョン情報] トレステとエディタのバージョン数が表示されます。
[ヘルプ] エディタとは独立してヘルプウィンドウが起動します。
[検証] 検証機能でプログラムを変換します。(31ページ参照)。
[プロパティウィンドウ]オブジェクト指向機能(※注)の設定を行います。
[ツールボックス] オブジェクト指向機能を設定するものです。
[辞書] 単語や文法を調べるために使う機能です。主に高度なオブジェクト指向機能の際に使用します。
[元に戻す]直前に行った作業をひとつ戻します。
[ファイル内を検索]双眼鏡のアイコンから、任意のキーワードを入力すると全ファイルの中身を検索します。検索結果は「④アウトプット」エリアの「ファイル内を検索」タブで表示されます。一方、検索窓からキーワードを入力すると編集中のファイル内だけが検索対象となります。
27
エディタの画面構成と機能
2-2
割り当てられ、アクティブなタブを手前に表示します。ファイルを同時に複数開くことにより、イ
ンジケーターとストラテジーの並行開発やサンプルプログラムを参照しつつオリジナルのプロ
グラムを開発するなど柔軟なプログラミング作業を行うことができます。
■ ④ アウトプット エディタ下部にある検証結果や検索終了後の出力結果を表示するエリアです。
● アウトプットエリアでのエラー表示
[アウトプット] プログラムの検証結果を出力します。エラーや警告があった箇所の行番号やエラーの種類などを表示します。エラーがない場合には [ 0 エラー , 0 警告 ] と表示されます。検証するインジケーターやストラテジーファイルをチャートやレーダースクリーンに適用しておけば、プログラムの検証時に自動的にデータが再計算され、チャートやレーダースクリーンなどの表示が瞬時にアップデートされます。
[ファイル内を検索]キーワードを検索した結果を表示します。
[自動]このタブは本書では使用しません。
[バーインフォメーション/プロット]このタブは本書では使用しません。
[ウォッチ] このタブは本書では使用しません。