So-net無料ブログ作成
検索選択

キャッシュ用の決算発表予定分析テクニック [データ共有]

決算発表予定のニュースは取得できないことが多々あるため、取得したデータをキャシュとして保存して、保存済みのキャッシュを利用してレーダースクリーンに出力するバージョンを開発中です。
最新のデータを取得した場合は、レーダースクリーンの全行を選択して更新する必要がありますが、分析テクニック追加済みのレーダースクリーンを表示したままワークスペースを閉じたとしても、再度ワークスペースを開いたときにキャッシュを読み込むので決算予定がすぐに表示されるようになります。

GlobalDictionaryとキャッシュがなければ、スクリーンショットの様にエラーが表示されます。
no_cashfile_error.png

ショウミーないしインジケーターを新規作成して、以下のコードを張り付けて検証してください。
*次回発表するキャッシュ保存用のアプリと共に、キャッシュを保存するディレクトリを各自の環境に合わせて同じに書き換えてください(変数「dir」 最後にディレクトリ区切り「\」が必要!)。

//--------------------------------------------------------------------
//This code is created by Tradestation Developement Enviroment ver 9.5
//Copyright (c) 2017 nari
//Released under the MIT license
//http://opensource.org/licenses/mit-license.php
//--------------------------------------------------------------------

using elsystem;
using elsystem.collections;
using elsystem.io;

Variables: GlobalDictionary gDicKessan(null)
	, string dir("C:\Program Files (x86)\TradeStation 9.5\Program\")	//環境によっては要変更
	, string sCode(""), Vector vec(null), elsystem.DateTime dd(null), string wJp(""), string str("");


Method string LoadCash()
Vars: string fn, bool isFileExist, StreamReader reader, string line, Vector vec, string ret;
Begin
	//print(DateTime.Now.ToString(), " ", Symbol, " LoadCash");
	fn = dir + "kscash.da0";
	Try
		reader = StreamReader.Create(fn);
		isFileExist = true;
	Catch(elsystem.io.FileNotFoundException ex)
		ret = ex.Message;
	end;
	If isFileExist then
	Begin
		Try
			Repeat
				line = reader.ReadLine();
				If line = "" then break;
				If line.Contains(",") = false then break;
				vec = line.Split(",");
				If gDicKessan.Contains(vec.at(0).ToString()) = false then
					gDicKessan.Add(vec.at(0).ToString(), vec.at(2).ToString() + " " + vec.at(3).ToString());
			Until (reader.EndOfStream);
			print("kessan cash loaded ", DateTime.Now.ToString());	
		Catch(elsystem.io.IOException ex)
			ret = ex.Message;
		Finally
			reader.Close();	
		End;
	End;
	Return ret;	
End;

Once Begin
	sCode = LeftStr(Symbol, 4);
	gDicKessan = GlobalDictionary.Create(true, "kessan");
	If gDicKessan.Count = 0 then str = LoadCash();
	If str <> "" then
		Plot1(str, "決算", White, GetBackgroundColor)
	Else
		Begin
		If gDicKessan.Contains(sCode) then
		Begin
		
			vec = gDicKessan[sCode].ToString().Split(" ");
			If elsystem.DateTime.TryParse(vec.at(0).ToString(), dd) then
			Begin
				Switch(Dayofweek(dd.ELDate))
				Begin
				Case 0:
					wJp = "日";
				Case 1:
					wJp = "月";
				Case 2:
					wJp = "火";
				Case 3:
					wJp = "水";
				Case 4:
					wJp = "木";
				Case 5:
					wJp = "金";
				Case 6:
					wJp = "土";
				End;
				Plot1(dd.Month.ToString() + "/" + dd.Day.ToString() + wJp + " " + vec.at(1).ToString(), "決算");
			End;
		End;
		If dd = null then 
			Plot1("", "決算", White, GetBackgroundColor) 
		Else 
		Begin
			Switch(dd.ELDate - DateTime.Now.ELDate)
			Begin
			Case is < -1:
				Setplotcolor(1, LightGray);
				Setplotbgcolor(1, GetBackgroundColor);
			Case is < 0:
				Setplotcolor(1, Yellow);
				Setplotbgcolor(1, GetBackgroundColor);
			Case is < 2:	//2日以内黄色で強調
				Setplotcolor(1, Red);
				Setplotbgcolor(1, Yellow);
			Case is < 8:	//1w以内になったらシアン
				Setplotcolor(1, Cyan);
				Setplotbgcolor(1, GetBackgroundColor);
			Default:
				Setplotcolor(1, White);
				Setplotbgcolor(1, GetBackgroundColor);
			End;
		End;
	End;
End;

印刷ログを見る限りでは、決算のGlobalDictionaryが存在しない状態で、キャッシュが存在する場合には1回だけキャッシュを読み込むようです。

前回のアプリでGrobalDictionaryが作成されている状態であれば、レーダースクリーンに挿入すると決算予定が表示されるはずです。


**注意**
GlobalDictionaryは動作が極端に遅いようです。
GlobalDictionalの全銘柄を直接ファイルに保存しよとした場合、何度も無限ループエラーが出てしまいました。
今のところ読み込みではエラー出ていませんが、銘柄数が多くなった場合にエラーで動かなくなる可能性があるかもしれません。
この場合はお手上げです。



キャッシュを保存するトレーディングアプリは、ほぼできましたが決算ニュースが配信されたときに検証できていないので、デバッグしたのちに次の記事で発表します。



nice!(0)  コメント(3)  トラックバック(0) 
共通テーマ:

nice! 0

コメント 3

坂本

この間は水平線ありがとうございました。過去の記事参考に見てたら1/17のレーダースクリーンの写真に業績の項目を見つけました。これはいいと思いまして探したのですが見つからずサポートセンターに電話したところありませんと言われインターネットでもいろいろ探したのですが見つけることが出来ませんでした。もし可能であれば表示の仕方教えていただけませんでしょうか。出来ればメモの表示もお願い出来たらありがたいです。
よろしくお願いします

by 坂本 (2017-01-20 10:27) 

nari

坂本さんこんにちは。
業績は自作インジケーターです、記事を書いていたつもりでしたが書いていませんでした。
コードは書いていませんが「http://nari-trade.blog.so-net.ne.jp/2016-11-23-1」を参考にしてください。
とはいっても、これをレーダースクリーンのインジケータ用にコードを書き換えるのは初心者には難しいでしょうね。
現在も自分は利用していますが、コードを見直して記事にしようと思います。
期待せずに、気長にお待ちください。

「メモ」に関しては、標準のインジケーターの「カスタムメモ」のことです。
インジケーターを挿入して、レーダースクリーンのセルをダブルクリックするとダイアログが出ます。
「入力」タブの「値」にメモを手入力するかコピペすれば表示されます。
「""」で文字列を囲む必要があります。

by nari (2017-01-20 12:05) 

坂本

お世話になります
nari様
プログラム教えていただけるなんて本当に感激です。ありがとうございます
カスタムメモさっそく挿入しました。トレードステーションが使いやすくなっていくので
本当に楽しいです。
坂本
by 坂本 (2017-01-20 20:21) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。