【トレステ】いろんな分析テクニックを自作、アレンジしてみよう-【中級編】ーPart2ートレステスキャナーで抽出したデータを外部データに保存し読み込む事で銘柄コードと紐付ける-Part1。これでレーダースクリーンがパワーアップ。Eps推移を調べよう!



【中級編】ーPart1で紹介した外部ファイルと紐づけするフォーマットを使って、各銘柄のEPSの推移を表示するインジケーターを作ります。

それでは、トレードステーション【トレステ】EasyLanguage(イージーランゲージ)でプログラムを作っていきましょう。

表示する要素は、『来期EPS(会社予想)』、『今期EPS』、『前期EPS』、『前々期EPS』にします。
なぜ、コレにしたかというと、この値、実はトレステのスキャナーで出すことが出来るのです。

では、今回は、まず読み込むファイルのデータをトレステスキャナーで抽出する方法の説明をして、データファイルを作り、【中級編】ーPart1で使用したフォーマットをどう変化させるか学んでいきたいと思います。

『来期EPS(会社予想)』、『今期EPS』、『前期EPS』、『前々期EPS』のデータをトレステのスキャナーで抽出する

  1. トレーディングアプリからスキャナーを機動する。
  2. スキャナーが立ち上がったら左側のウィンドウの下にある挿入ボタンをクリック。
  3. スキャンを挿入のウィンドウが立ち上がるので、名前を入力。今回は『EPS推移』とでもしときます。
  4. 右下の進むを押す。
  5. スキャンするシンボルの範囲を今回は東証全体にしますので、含まれるコードと書かれた部分の下の黄色い部分を押して出てきたウィンドゥの
    『取引所』の横の『+』をクリック ⇒ 『株』の横の『+』をクリック ⇒ 東証を選択
  6. 右下の進むを押す。
  7. スキャンで使用する基準を選択の『フィールド』と書かれた部分の下の黄色い部分を押して出てきたウィンドゥの
    『会社プロファイル』の横の『+』をクリック ⇒ 銘柄名を選択
  8. 真ん中の演算子と書かれた部分の下の黄色い部分を押して出てきたウィンドゥの一番下の『表示』を選択。このコマンドで、会社名を表示するとなります。
    7.8をしないと銘柄コードだけで、会社名がわかりません。
  9. スキャンで使用する基準を選択の『フィールド』と書かれた部分の下の黄色い部分を押して出てきたウィンドゥの
    『業績』の横の『+』をクリック ⇒ 『会社予想』の横の『+』をクリック⇒ 1株あたりの純利益[EPS]会社予想を選択
  10. 真ん中の演算子と書かれた部分の下の黄色い部分を押して出てきたウィンドゥの一番下の『表示』を選択。
  11. スキャンで使用する基準を選択の『フィールド』と書かれた部分の下の黄色い部分を押して出てきたウィンドゥの
    『業績』の横の『+』をクリック ⇒ 『実績』の横の『+』をクリック⇒ 1株あたりの純利益[EPS]を選択
  12. 真ん中の演算子と書かれた部分の下の黄色い部分を押して出てきたウィンドゥの一番下の『表示』を選択。
  13. スキャンで使用する基準を選択の『フィールド』と書かれた部分の下の黄色い部分を押して出てきたウィンドゥの
    『業績』の横の『+』をクリック ⇒ 『実績』の横の『+』をクリック⇒ 1株あたりの純利益[1期前][EPS]を選択
  14. 真ん中の演算子と書かれた部分の下の黄色い部分を押して出てきたウィンドゥの一番下の『表示』を選択。
  15. スキャンで使用する基準を選択の『フィールド』と書かれた部分の下の黄色い部分を押して出てきたウィンドゥの
    『業績』の横の『+』をクリック ⇒ 『実績』の横の『+』をクリック⇒ 1株あたりの純利益[2期前][EPS]を選択
  16. 右下の実行を押す。
  17. データ抽出完了。
  18. トレステスキャナー上で全ての銘柄及びデータ全部を選択してコピーしwindowsメモ帳にペーストします。うまくペーストできました!
    銘柄コードに『-TS』がついていると認識しないので、windowsメモ帳の編集で置換を選択し検索する文字列を『-TS』にして置換後の文字列を空欄にし、すべて置換を選択。
    同様に『-JQ』も行う。
  19. ファイル名をボリュームDの一番上でeps.txtで保存する。ファイルの種類は、テキスト文書、文字コードはUTF-8で保存。
  20. これで、データファイルの作成完了です。

今回はいつもの手順でなく、実際のプログラムから紹介した後、前回使用したフォーマットをどう変化させたか理解が必要なところは赤い文字にしています、そこだけ説明します。
それ以外の部分は、まるまる使用して頂く形で良いと思います。

実際のプログラム

using elsystem.io;
using elsystem.collections;

Inputs: string iFile(“D:\eps.txt”) [DisplayName=”フォルダまでのパス”];

vars: StreamReader SR(null),
StreamWriter SW(null),

Dictionary dRead(null),
Vector vRead(null);

Method Void CreateSR()
Begin

SR = StreamReader.Create(iFile,elsystem.text.Encoding.UTF8 );
While SR.EndOfStream = false
Begin
vRead = SR.ReadLine().Split(” “);
if vRead.at(0) asType string = Symbolroot Then
Begin
dRead.Add(symbolroot, DicSR() );
Break;
End;
End;
SR.Close();

if vRead.at(0) asType string = Symbolroot Then
Begin
Plot1 ( StrToNum(vRead.at(2) asType string), “来期EPS(会社予想)” );
Plot2 ( StrToNum(vRead.at(3) asType string), “今期EPS” );
Plot3 ( StrToNum(vRead.at(4) asType string), “前期EPS” );
Plot4 ( StrToNum(vRead.at(5) asType string), “前々期EPS” );
If StrToNum(vRead.at(2) asType string) > StrToNum(vRead.at(3) asType string)then SetPlotColor(1,red) else SetPlotColor(1,Cyan) ;
If StrToNum(vRead.at(3) asType string) > StrToNum(vRead.at(4) asType string)then SetPlotColor(2,red) else SetPlotColor(2,Cyan) ;
If StrToNum(vRead.at(4) asType string) > StrToNum(vRead.at(5) asType string)then SetPlotColor(3,red) else SetPlotColor(3,Cyan) ;
If StrToNum(vRead.at(5) asType string) < 0 then SetPlotColor(4,Cyan);

End
Else Begin
Plot1 ( 0, “来期EPS(会社予想)” );
Plot2 ( 0, “今期EPS” );
Plot3 ( 0, “前期EPS” );
Plot4 ( 0, “前々期EPS” );
End;
End;

Method Dictionary DicSR()
Vars: Dictionary d1;
Begin
d1 = new Dictionary();
d1.Add(“コード”, vRead.at(0) asType string );
d1.Add(“銘柄名”, vRead.at(1) asType string );
d1.Add(“来期EPS(会社予想)”,vRead.at(2) asType string );
d1.Add(“今期EPS”,vRead.at(3) asType string );
d1.Add(“前期EPS”,vRead.at(4) asType string );
d1.Add(“前々期EPS”,vRead.at(5) asType string );
Return d1;
End;

Once Begin
Clearprintlog;
dRead = new Dictionary;
vRead = new Vector;
CreateSR();
End;

プログラムが【中級編】ーPart1とどう違うか順をおって説明します。

Plot1 ( StrToNum(vRead.at(2) asType string), “来期EPS(会社予想)” );
Plot2 ( StrToNum(vRead.at(3) asType string), “今期EPS” );
Plot3 ( StrToNum(vRead.at(4) asType string), “前期EPS” );
Plot4 ( StrToNum(vRead.at(5) asType string), “前々期EPS” );
If StrToNum(vRead.at(2) asType string) > StrToNum(vRead.at(3) asType string)then SetPlotColor(1,red) else SetPlotColor(1,Cyan) ;
If StrToNum(vRead.at(3) asType string) > StrToNum(vRead.at(4) asType string)then SetPlotColor(2,red) else SetPlotColor(2,Cyan) ;
If StrToNum(vRead.at(4) asType string) > StrToNum(vRead.at(5) asType string)then SetPlotColor(3,red) else SetPlotColor(3,Cyan) ;
If StrToNum(vRead.at(5) asType string)/100 < 0 then SetPlotColor(4,Cyan);

StrToNum(vRead.at(2) asType string) まずこの部分、この StrToNum(“”) は 文字認識されてる数字を数字に変換し直す関数です。
おそらくですが、Dictionaryを使う場合は、全て文字にしないとイケないので、数字を『asType』を使って文字に変換してるのです。
例えば、258という数字は、文字としても捉えられますし。しかし数字を文字として捉えると並び替え(ソート)した時に順番がおかしくなるのです。
例えば、1,2,10を文字として認識すると1,10,2の順になり、数字と認識すると1,2,10の順になるのです。
ですので、EPSを高い順に並べたりしたかったので、数字に変換しました。

If StrToNum(vRead.at(2) asType string) > StrToNum(vRead.at(3) asType string)then SetPlotColor(1,red) else SetPlotColor(1,Cyan) ;
この部分は、vRead.at(2)は、来期EPS(会社予想)を示してて、vRead.at(3)は、今期EPSを示します。
ですので、文の意味的には、来期EPS(会社予想)が 今期EPS より高い時は、来期EPS(会社予想)の文字の色を赤く、
そうでなく低い時は、文字の色をシアン色にする。という文です。これで、前のEPSが高くなったか低くなったかすぐ分かるかなと思いました。

If StrToNum(vRead.at(5) asType string)/100 < 0 then SetPlotColor(4,Cyan);
この部分は、前々期EPS以前のデータが無いため、比較対象が無いので、前々期EPSがプラスかマイナスかだけ判断しようと思ったので、こうしました。

【中級編】ーPart1の場合は、全てが文字情報だったので何もする必要なかったのですが、数字情報が入っていると、文字の並び替えを考えたりすると数字に直したほうが利便性が高くなるので今回のやり方にしました。数字情報がある場合は、このやり方を使った方が便利になると思います。

Plot1 ( 0, “来期EPS(会社予想)” );
Plot2 ( 0, “今期EPS” );
Plot3 ( 0, “前期EPS” );
Plot4 ( 0, “前々期EPS” );

【中級編】ーPart1の場合は、下記のようになってました。
Plot1 ( “-“, “テーマ” );              
Plot2 ( “-“, “事業内容” );
Plot3 ( “-“, “備考” );

今回と前回の違いは、文字か数字なのです。つまり、今回は最初にPlot文の中身を数字として認識したので、“-“は文字になるのでおかしいデータとしてエラーになるのです。
ですので、あえて0を入れました。ホントは、誤解内容に100,000,000,000とか入れたほうが良かったですかね?悩むトコです。
とにかくPlot文を文字形で読むなら文字、数字で読むなら読み込む値を数字にしなくてはならないのです。

以上です!

次は、この手順で、トレステスキャナーを使って、配当利回りや売上推移等だしていきたいと思います!

Follow me!