トレステのアラートを「銘柄コード入りで」自動音声読み上げさせるショウミー用EasyLanguageの作成方法

トレステのアラートには、アラート文を音声で読み上げてくれる機能が存在します。

通常設定ですとビープ音(ポン!という音)とともに、画面右下に黄色のウィンドウでお知らせしてくれると思いますが、この時に「設定したテキスト」を読み上げてくれる、というものになります。

正直僕もこれまであまり使った事がなかったのですが、先日開催したオンラインセミナーで質問を受け、色々調べたら非常に面白い機能だったので、具体的な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つの文字として認識されるので、意図した通りに銘柄コードが読み上げられるようになりました。

(無理やり感がハンパないので、「裏技」とさせていただきましたが・・うまくは動くはず 笑)

おわりに

今回は銘柄コードを例に挙げましたが、他にも価格や倍率など、アラート発生時の様々な情報を音声で読み上げられるようにすると、様々なアラートが作れて面白いんじゃないかと思います。

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

2 件のコメント

  1. しゅん様
    サイトを拝見させて頂きました。
    大変勉強になりました。ありがとうございます。

    突然のメッセージで大変申し訳ございませんが、EasyLanguageで、どうしても分からない部分があり、ご連絡させて頂きました。
    どうかお教え頂きたく、ご質問させて頂いてもよろしいでしょうか?
    お手数おかけしまして申し訳ございませんが、何卒よろしくお願い申し上げます。

    1. コメントありがとうございます!

      はい、本コメントで質問いただければお答えします。どういった内容でしょうか?

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です