プログラムに慣れてきて、自作プログラムの行数が増えると、突き当たる壁が「デバッグ」です。
Trade stationのEasy Language開発環境でプログラムを作成していると、プログラムのミスをEasy Languageエディターが教えてくれます。
でも、教えてくれたプログラムのミスは直したのに、自分が思ったように動いてくれない!!
そんなときに有効なのが、「プリント」と「コメント」です。
特に「プリント」は、テキストで書き出されるので、エクセル等の外部アプリケーションに手軽に転送できます。
株価の分析にも重宝しますよ。
株式投資をするうえで、現在最強のトレードツールは マネックス証券の トレードステーション です。(個人評価)
その、トレードステーションを自由自在に操るには、イージーランゲージ[EasyLanguage]の知識が必要です。
イージーランゲージ[EasyLanguage]?
※すぐに実習(解説)記事に進みたい方は、このページ最初の 目次 3.<実習…> をクリックしてください。
イージーランゲージ[EasyLanguage]はプログラム言語
プログラム言語!? 「そんなの出来るはずない」 「聞いただけで鳥肌が立つ」と思う方が大半ですよね。
EasyLanguageとは?
トレードステーション上のほぼ全てのアクションは、EasyLanguageという独自の言語で構成されます。”Easy”と名付けられている通り、初歩的な英文で記述される非常にシンプルなプログラム言語になります。
例えば、移動平均線がゴールデンクロスした場合に買い注文を出すプログラムは、以下の一文で済むほどシンプルです。
”If FastAvg crosses over SlowAvg then Buy next bar at market ”
出所:https://info.monex.co.jp/tradestation/features/other/ マネックス証券の機能紹介ページ
簡単なんです。だって”Easy”って名前だから。。。。
イージーランゲージ[EasyLanguage]を学ぶには
簡単と言っても、EasyLanguageはプログラム言語です。
しっかり学びたい方におすすめなのが、マネックス証券の公開しているマニュアル
EasyLanguage ホームスタディコース(ガイドブック) です。
https://info.monex.co.jp/tradestation-support/manual.html#01; こちらのページでもらえます。
このブログでは、「EasyLanguage ホームスタディコース」の演習問題を実際に操作しながら解いてゆく、過程を紹介したいと思います。
EasyLanguage からのアウトプット表示: プリントログ
トレードステーション は EasyLanguageの Print 予約語を使用して書かれたプリント文を [印刷ログ]ウィンドウにアウトプットすることができます。
[印刷ログ]ウィンドウは初期設定でトレードステーション 本体下部に表示されています。
メインメニューの[表示] →[EasyLanguage 印刷ログ]で表示することもできます。
プリントログウィンドウは、次の例文のように、インジケーターやストラテジーのプロ グラムの中のプリント文に書かれた、数値、真偽値、文字列を表示します。
2重引用符 で囲まれた値は任意の文字です。アウトプットしたい変数の前にラベルとして書くと、 その変数がどのような変数なのか、プリントログウィンドウ内で認識しやすくなります。Print(“日付”,Date,“値 1”,Value1,“条件 1”,Condition1);
このプリント文は、日付、Value1 の値、そして Condition1 の値(真または偽)と、それぞれのラベル文字をプリントログウィンドウにアウトプットします。
出所:Easy Languageホームスタディコース P125
EasyLanguage からのアウトプット表示: 分析コメント
分析コメントウィンドウは、インジケーターやストラテジーのプログラムの中のコメンタリー文に書かれた、数値、真偽値、文字列を表示することができます。
分析コメント ウィンドウはインジケーターやストラテジーが入っているチャート分析ウィンドウ、レ ーダースクリーン、またはオプションスクリーンウィンドウから開くことができます。
それらのウィンドウにコメンタリー文が含まれているインジケーターやストラテジーを 適用すると、トレードステーション上部のツールバーの分析コメントボタンが有効 になるのでクリックしてください。
分析コメントボタン
またはメインメニューの[表示]→[分析コメント]を 選択してください。
そして分析コメントを見たい足をマウスでクリックすると分析コメ ントウィンドウが開きます。
コメンタリー文は次のように書くことができます:
Commentary(“日付”,Date,“値 1”,Value1,“条件 1”,Condition1);
このコメンタリー文は日付、Value1 の値、そして Condition1 の値(真または偽)と、それぞれのラベル文字を分析コメントウィンドウにアウトプットします。
出所:Easy Languageホームスタディコース P126
練習問題: *35 モメンタム交差
◇学習の目的: プリント文とコメンタリー文を使用して、プリントログウィンドウと分析 コメントウィンドウに情報をアウトプットする。
◇詳細: 練習問題*25 Momentum Crosを応用する。
モメンタムが現在の足を含めて 4足連 続で 0を下回っておらず、現在の足で 0を上抜いたとき買い、またはモメンタムが現在 の足を含めて 4足連続で 0を上回っておらず、0現在の足でを下抜いた時に売る。
モメ ンタムが 2足連続で下降したら決済売り(転売)、2足連続で上昇したら決済買い(買戻し)を行う。
出所:Easy Languageホームスタディコース P122
EasyLanguage開発環境(エディタ)を起動します
※EasyLanguage開発環境を起動させる方法は、この連載1のページ中頃をご覧ください。
過去に作成した #25 Momentum Cros というストラテジーを流用します。
Easy Language開発環境を開き、 ファイル ー 開く ー ストラテジー で 25 Momentum Cros を開きます。
ストラテジーが開いたら、別のファイル名を付けて保存しましょう。
ファイル名は #25 Momentum Cros2 とします。
Easy Language開発環境をの、 ファイル ー 名前を付けて保存 ー ストラテジー で #25 Momentum Cros2 の名前で保存します。
新しく名前を付けた #25 Momentum Cros2 に、 プリント文 と コメント文 を追加します。
プログラムコードの中身はこちら===
Input: Length(10);
Vars: Mom(0), BullCx(false), BearCx(false);
Mom = Momentum(Close, Length);
BullCx = Mom crosses over 0;
BearCx = Mom crosses under 0;
If BullCx and MRO(BearCx,4,1) = -1 then Buy next bar at Close of this bar limit;
If BearCx and MRO(BullCx,4,1) = -1 then SellShort next bar at Close of this bar limit;
If Mom < Mom[1] and Mom[1] < Mom[2] then Sell next bar at market;
If Mom > Mom[1] and Mom[1] > Mom[2] then BuytoCover next bar at market;
//ここから下が新しく追加したプログラムコードです。
Print(“日付”, Spaces(2), Date:7:0, Spaces(2),
“時間”, Spaces(2), Time:4:0, Spaces(2),
“モメンタム”, Spaces(2), Mom, Spaces(2),
“強気交差”, Spaces(2), BullCx, Spaces(2),
“弱気交差”, Spaces(2), BearCx);
Commentary(“日付”, Spaces(2), Date:7:0, Spaces(2),
“時間”, Spaces(2), Time:4:0, Spaces(2),
“モメンタム”, Spaces(2), Mom, Spaces(2),
“強気交差”, Spaces(2), BullCx, Spaces(2),
“弱気交差”, Spaces(2), BearCx);
プログラムコードここまで===
スポンサーリンク
貼り付けまたは、書き込みが終わったら、プログラムコードに間違いが無いか、チエックするボタンを押して確認します。(いつものやつですね)
0エラー、0警告ならOK。
誤りがあれば修正し、チエックするボタンを再度押します。
プログラムコードの意味
Input: Length(10);
インプット宣言文で初期値を指定して宣言しています。
インプット名が Length 初期値は 10 です。
Vars: Mom(0), BullCx(false), BearCx(false);
変数宣言文で初期値を指定して宣言しています。
変数名が Mom 初期値は 0 です。
変数名が BullCx 初期値は false です。
変数名が BearCx 初期値は false です。
真偽変数
BullCx と BearCx の 初期値は false です。
これは 真偽変数 と呼ばれるものです。
真偽(正しいか間違っているか)を格納する変数です。
false : 偽
true : 真
この真偽変数の使い方はのちほど説明しますね。
Mom = Momentum(Close, Length);
Momentum モメンタム(勢い)の関数です。
わからない関数が出てきたら、まずヘルプで調べましょう。
調べ方は、 Easy Language開発環境エディターの Momentum の上で右クリックでしたね。
今回のプログラムコードでは
Input: Length(10);
インプット名が Length 初期値は 10 です。
なので、初期設定では 10足前 の 終値 と比較しています
BullCx = Mom crosses over 0;
ここで先ほどの真偽変数が出てきました。
BullCx が真偽変数でしたね。
Mom は 下のコードで モメンタムが格納されている変数です。
Mom = Momentum(Close, Length);
Mom crosses under 0;
モメンタムが ゼロを 下抜いたか?
これが 真偽変数の
BullCx に 格納されます。
false : 偽
true : 真
BearCx = Mom crosses under 0;
これも 真偽変数の BearCx に
モメンタムが ゼロを 上抜いたか?
BearCx に 格納されます。
If BullCx and MRO(BearCx,4,1) = -1 then Buy next bar at Close of this bar limit;
MRO(BearCx,4,1)
MRO も 新しく出てきた関数です。 さっそく 右クリックーヘルプ ですね。
BearCx の状態が 過去 4足 の間に発生したか?
これを判断して、値を返します。(戻り値)
BearCx が 過去4足のうちに発生していなければ -1 を返します。
なので、
If BullCx and MRO(BearCx,4,1) = -1 then
もし BullCxが真 そして BearCxが過去4足のうちに発生していなければ、
Buy next bar at Close of this bar limit;
買い注文を出す。
このようになります。
If BearCx and MRO(BullCx,4,1) = -1 then SellShort next bar at Close of this bar limit;
上記と同様に、
もし BearCxが真 そして BullCxが過去4足のうちに発生していなければ、
Buy next bar at Close of this bar limit;
買い注文を出す。
If Mom < Mom[1] and Mom[1] < Mom[2] then Sell next bar at market;
現在の足のモメンタムが 1足前のモメンタムより小さく、
1足前のモメンタ ムが 2足前のモメンタムよりも小さい場合、
つまりモメンタムが 2足連続で下降した場合に決済売りの注文を出します。
出所:EasyLanguage ホームスタディコース p92
If Mom > Mom[1] and Mom[1] > Mom[2] then BuytoCover next bar at market;
現在の足のモメンタムが 1足前のモメンタムより大きく、
1足前のモメンタ ムが 2足前のモメンタムよりも大きい場合、
つまりモメンタムが 2足連続で上昇した場合に決済買いの注文を出します。
出所:EasyLanguage ホームスタディコース p92
//ここから下が新しく追加したプログラムコードです。
”//” を文のはじめに入力すると プログラムコードの説明文として認識されます。
後から読み返したときに、分かりやすいように、こまめに説明を入れるようにしましょう。
Print(“・・・・・・・・
プリント文の説明をします。
Print(“日付”, Space(2), Date:7:0, Spaces(2),
Print(“日付”, Spaces(2), Date:7:0, Spaces(2),
Print:プリント文のはじまりです
”日付”: 後に続く Date のラベルとして表示させます
Space : 2つの コンテンツの間にスペースを入れる予約語です
Date:7:0 :
Date:7:0 -予約語 Dateは足の終値時点での日付を数値式で返す予約語です。
数値式の形式はYYYMMDDです。YYYは 1900年からの年を、MMは月を、DD は日を表します。
例えば 1030611は 2003年 6月 11日です。
Date:7:0 の Date 後に続く左側の数値は整数部分の桁数、右側は小数点以下桁数を指定しています。
日付は小数点以下桁数を表示する必要がないので 0になっています。
出所:Easy Languageホームスタディコース P128
“時間”, Spaces(2), Time:4:0, Spaces(2),
”時間”: 後に続く Timee のラベルとして表示させます
Space : 2つの コンテンツの間にスペースを入れる予約語です
Time:4:0:
Time:4:0 -予約語 Timeは足の終値時点での時間を数値式で返す予約語です。
時間の形式は HHMMです。
例えば 1600は午後 4時です。
Time:4:0 の Time の 後に続く左側の数値は整数部分の桁数、右側は小数点以下桁数を指定しています。
時間は小数点以下桁数を表示する必要がないので 0になっています。
出所:Easy Languageホームスタディコース P128
“モメンタム”, Spaces(2), Mom, Spaces(2),
”モメンタム” : 後に続く Mom のラベルとして表示させます
Space : 2つの コンテンツの間にスペースを入れる予約語です
Mom : プログラムコード Mom = Momentum(Close, Length); で代入された値を表示させます
“強気交差”, Spaces(2), BullCx, Spaces(2),
”強気交差” : 後に続く BullCx のラベルとして表示させます
Space : 2つの コンテンツの間にスペースを入れる予約語です
BullCx : プログラムコード BullCx = Mom crosses over 0; で代入された値を表示させます
“弱気交差”, Spaces(2), BearCx);
”弱気交差” : 後に続く BullCx のラベルとして表示させます
Space : 2つの コンテンツの間にスペースを入れる予約語です
BearCx) : プログラムコード BearCx = Mom crosses under 0; で代入された値を表示させます
Commentary(“・・・・・・・・
コメント文の説明をします。
Commentary(“日付”, Spaces(2), Date:7:0, Spaces(2),
Commentary(“日付”, Spaces(2), Date:7:0, Spaces(2),
Print:プリント文のはじまりです
”日付”: 後に続く Date のラベルとして表示させます
Space : 2つの コンテンツの間にスペースを入れる予約語です
Date:7:0 :
Date:7:0 -予約語 Dateは足の終値時点での日付を数値式で返す予約語です。
数値式の形式はYYYMMDDです。YYYは 1900年からの年を、MMは月を、DD は日を表します。
例えば 1030611は 2003年 6月 11日です。
Date:7:0 の Date 後に続く左側の数値は整数部分の桁数、右側は小数点以下桁数を指定しています。
日付は小数点以下桁数を表示する必要がないので 0になっています。
出所:Easy Languageホームスタディコース P128
“時間”, Spaces(2), Time:4:0, Spaces(2),
”時間”: 後に続く Timee のラベルとして表示させます
Space : 2つの コンテンツの間にスペースを入れる予約語です
Time:4:0:
Time:4:0 -予約語 Timeは足の終値時点での時間を数値式で返す予約語です。
時間の形式は HHMMです。
例えば 1600は午後 4時です。
Time:4:0 の Time の 後に続く左側の数値は整数部分の桁数、右側は小数点以下桁数を指定しています。
時間は小数点以下桁数を表示する必要がないので 0になっています。
出所:Easy Languageホームスタディコース P128
“モメンタム”, Spaces(2), Mom, Spaces(2),
”モメンタム” : 後に続く Mom のラベルとして表示させます
Space : 2つの コンテンツの間にスペースを入れる予約語です
Mom : プログラムコード Mom = Momentum(Close, Length); で代入された値を表示させます
“強気交差”, Spaces(2), BullCx, Spaces(2),
”強気交差” : 後に続く BullCx のラベルとして表示させます
Space : 2つの コンテンツの間にスペースを入れる予約語です
BullCx : プログラムコード BullCx = Mom crosses over 0; で代入された値を表示させます
“弱気交差”, Spaces(2), BearCx);
”弱気交差” : 後に続く BullCx のラベルとして表示させます
Space : 2つの コンテンツの間にスペースを入れる予約語です
BearCx) : プログラムコード BearCx = Mom crosses under 0; で代入された値を表示させます
チャートにストラテジーを適応させる
チャート上で右クリックし、 ストラテジーを挿入
今回作成した #25 Momentum Cros2 を選択して OKボタンを押します。
分析コメントの表示方法
トレードステーション上部のツールバーの分析コメント ボタンが有効 になるのでクリックしてください。
またはメインメニューの[表示]→[分析コメント]を 選択してください。
そして分析コメントを見たい足をマウスでクリックすると分析コメントウィンドウが開きます。
出所:Easy Languageホームスタディコース P126
分析コメントのボタンは、この辺にあります。
プリントの表示方法
トレードステーション は EasyLanguageの Print 予約語を使用して書かれたプリント文を [印刷ログ]ウィンドウにアウトプットすることができます。
[印刷ログ]ウィンドウは初 期設定でトレードステーション 本体下部に表示されています。
メインメニューの[表示]→[EasyLanguage 印刷ログ]で表示することもできます。
出所:Easy Languageホームスタディコース P125
まとめ
今回学習した「プリント」はプログラムのデバックや、株価分析に大活躍するはずです。
テキストファイルで出力されますので、コピーしてエクセルに貼り付けて、エクセルで分析を進める事も出来ます。
これまで連載してきた、
「トレードステーションとイージーランゲージ[EasyLanguage]を学び、株式投資で差をつける。」 シリーズも今回で34回目となります。
EasyLanguage ホームスタディコース (2017年9月発行版)← 2018年12月23日時点で最新です。
1回目から34回目まで通して学習された方は、EasyLanguage ホームスタディコースのカリキュラムを、ひととおり終了したことになります。
大変お疲れ様でした。
Easy Language の基礎はしっかりと学べましたので、後は実践あるのみです。
トレードステーション で システムトレードの世界 に羽ばたいてください!
なお、こちらでより高度なEasy Languageプログラムを学ぶ事も出来ます。
https://info.monex.co.jp/tradestation-support/manual.html#01
今後の連載継続は検討中です。
より実践的な内容を紹介する、新連載を始めるか?
この連載で学んだ内容を組み合わせた、発展的な内容で連載を続けるか?
「日本のシステムトレードを盛り上げるために何が出来るか」じっくり考えたいと思います。
ご要望があれば、下のコメント欄又はメールにてお知らせください。
メールアドレス:ashio@yutaka.life
※頂いたメールアドレスに対して、執拗にメール配信する事はありませんので、ご安心ください。
長い間ご覧いただきましてありがとうございました。
お疲れ様でした。
この記事を書いた人
ゆたかドットらいふ編集部
あしおゆたか
投資歴20年の個人投資家
机上の理論ではなく、実体験に基づいた記事作りをモットーにしています。
スポーツクラブに毎週2日~3日通い、サウナ後の暴飲暴食が趣味。
◇主な投資対象
日本株式
株式ETF(上場投資信託)
日経225先物
日経225先物オプション
◇運営者情報はこちら
スポンサーリンク