トレステのアラートには、アラート文を音声で読み上げてくれる機能が存在します。
通常設定ですとビープ音(ポン!という音)とともに、画面右下に黄色のウィンドウでお知らせしてくれると思いますが、この時に「設定したテキスト」を読み上げてくれる、というものになります。
正直僕もこれまであまり使った事がなかったのですが、先日開催したオンラインセミナーで質問を受け、色々調べたら非常に面白い機能だったので、具体的なEasyLanguageの書き方についてご紹介したいと思います。
【こんな風に読み上げてくれます】
自動音声読み上げの仕組み
どこから設定するのか?
自動音声読み上げの設定は、ショウミーやインジケーターの設定画面にある「アラート」タブから行なえます。
「グローバルメッセージ設定を使用」を選択すると、右側の設定ボタンが有効になるのでクリックし、【アラーム音】を「ビープ音」から「音声(スピーチ用テキスト)」に変更しましょう。
どこに設定したものを読み上げてくれるのか?
EasyLanguageでアラート発生を定義する時に Alert 命令を利用しますが、ここで設定したテキスト(=黄色のアラート通知ウィンドウでも表示されるテキスト)を読み上げてくれます。
例えば以下のように書けば、「おわりねれんぞくしょうしょう」と読み上げてくれます。
Alert( "終値連続上昇" );
※トレステ標準搭載のショウミーやインジケーターでは、この部分をいじれない事が多いので、意図しないテキストが読み上げられるかもしれません。
銘柄コードも読み上げてもらうには?
上の例は固定のテキストを読み上げるものですが、アラートをたくさんのチャートやレーダースクリーンで利用する場合、固定テキストですと「どの銘柄が」アラート発生したのか分かりづらいです。
アラート発生時、発生した銘柄コードも合わせて読み上げてくれると、便利ですよね。
どうすれば良いでしょうか?
・・答えは、「SymbolRoot命令を使う」です。
SymbolRootは、現在ショウミーやインジケーターが適用されている銘柄のコードを取得してくれる命令です。これを、アラートで出したいテキストと繋げてあげればよいです。
(同じような命令で Symbol もありますが、こちらは後ろの市場コード(-TSなど)も取ってくるので、数字部分だけ取りたい場合は SymbolRoot がおススメです)
具体的なコード例
以下、「終値が連続上昇」した時にサイン発生する、ショウミーのサンプルコードです。アラート設定をしていれば、アラート発生時に「(銘柄コード):終値連続上昇」と音声で読み上げてくれます。
If Close > Close[1] then Begin Plot1( High, "終値連続上昇" ); If AlertEnabled then Begin Alert( SymbolRoot + ":終値連続上昇" ); End; End;
(裏技?)数字1ケタずつ読ませたい
上のコードでも十分使えると思いますが、1つ気になったのは銘柄コードの読まれ方です。
例えば銘柄コード「8698(マネックスグループ)」でアラート設定した場合、アラートで読み上げられるテキストとしては
“8698:終値連続上昇”
となりますが、音声読み上げ機能では、この銘柄コードを4ケタの数字と認識するようで、
『はっせんろっぴゃくきゅうじゅうはち おわりねれんぞくじょうしょう』
と、読み上げられてしまいます。
銘柄コードは1ケタずつ読む事がほとんどだと思いますので、できれば
『はち ろく きゅう はち おわりねれんぞくじょうしょう』
と読み上げてほしいなー、と。
で、色々調べた結果、半角スペースやコロン(:)など、一部の文字や記号は読み上げられない事が分かったので、「じゃあ銘柄コードの間に半角スペース入れたらいいんじゃないか?」と思いつき、以下のようなコードを作ってみました。
using elsystem; Method string SplitChar( string strTarget, string strSep ) vars: int intLength, string strResult; begin intLength = strTarget.Length; strResult = ""; For Value1 = 0 to intLength - 1 begin strResult += strTarget.Chars[Value1] + strSep; end; return strResult; end; If Close > Close[1] then Begin Plot1( High, "終値連続上昇" ); If AlertEnabled then Begin Alert( SplitChar( SymbolRoot, " " ) + ":終値連続上昇" ); End; End;
自作関数のSplitCharで、渡された文字を1文字ずつ分解し、間に半角スペースを入れるような処理をしています。
これで、アラート読み上げ用のテキストが以下のようになります。
“8 6 9 8 :終値連続上昇”
これにより、数字が1つ1つの文字として認識されるので、意図した通りに銘柄コードが読み上げられるようになりました。
(無理やり感がハンパないので、「裏技」とさせていただきましたが・・うまくは動くはず 笑)
おわりに
今回は銘柄コードを例に挙げましたが、他にも価格や倍率など、アラート発生時の様々な情報を音声で読み上げられるようにすると、様々なアラートが作れて面白いんじゃないかと思います。
ぜひ、参考にしてみてください。
しゅん様
サイトを拝見させて頂きました。
大変勉強になりました。ありがとうございます。
突然のメッセージで大変申し訳ございませんが、EasyLanguageで、どうしても分からない部分があり、ご連絡させて頂きました。
どうかお教え頂きたく、ご質問させて頂いてもよろしいでしょうか?
お手数おかけしまして申し訳ございませんが、何卒よろしくお願い申し上げます。
コメントありがとうございます!
はい、本コメントで質問いただければお答えします。どういった内容でしょうか?