見出し画像

決算発表予定日

CSVやテキストなどからレーダースクリーンに決算発表予定を表示させてる人はいると思いますが、そのCSV等を定期的に作るのがめんどくさっ!
なので既存アプリのニュースのテキストから抜き出してレーダースクリーンに表示するインジケータです
データとしてトレステ内に持っているわけではないのでスキャナーで日付によるスキャンとかは出来ません
ニュースプロバイダをみて処理しているのでニュースアプリは立ち上げとかなくても大丈夫です
レーダースクリーンに登録してある銘柄がニュースに取り上げられたら表示してニュースが消えたら表示されなくなります

画像1

プログラム

using elsystem;																					//tsdataクラスによって使用される基本クラスと、その他一般的なelsystemクラス
using tsdata.marketdata;																		//価格クオート、市場レベル、ファンダメンタル値などの市場データへのアクセスに使用されるクラス

vars:		{ 変数宣言 }
	string ksdate( "" ),																		//決算発表予定日/期
	string kstime( "" ),																		//決算発表予定時間
	NewsProvider NP( null );																	//NewsProviderクラス 各プロバイダーから提供されているカテゴリーやソースを使用して、ニュース記事を取得するために使用
{ -------------------------------------------------- }	//タイトルに"決算発表予定""コード順""日付順"があったら記事内容読み込み、項目を其々セット
method void NP_Updated( elsystem.Object sender, NewsUpdatedEventArgs args )
begin
	if args.Data <> null then begin
		if args.Data.Title.Contains( "決算発表予定" ) and args.Data.Title.Contains( "コード順" ) then begin
			args.Data.Content.Load();															//記事の内容を読み込み
			args.Data.PublishDate.AddHours( 9 );												//日本時間に変更
			if args.Data.Content.Text.Contains( symbol.Substring( 0, 4 ) ) then					//ニューステキスト内に銘柄コードが存在するか判断
			kstext1( args.Data.Content.Text );													//テキスト抜き出しメソッド(コード順)
		end;
		if args.Data.Title.Contains( "決算発表予定" ) and args.Data.Title.Contains( "日付順" ) then begin
			args.Data.Content.Load();															//記事の内容を読み込み
			args.Data.PublishDate.AddHours( 9 );												//日本時間に変更
			if args.Data.Content.Text.Contains( symbol.Substring( 0, 4 ) ) then					//ニューステキスト内に銘柄コードが存在するか判断
			kstext2( args.Data.Content.Text );													//テキスト抜き出しメソッド(日付順)
		end;
	end;
	if ksdate <> "" then Plot1( ksdate, "日/期" );
	if kstime <> "" then Plot2( kstime, "時間" );												//読み込んだニュースの数を確認したい時	Plot3( NP.News.Count, "件数" );															//読み込んだニュースの数を確認したい時
end;{ method NP_Updated }
{ -------------------------------------------------- }	//ニューステキストから決算発表予定日、決算期を抜き出し
method void kstext1( string content )
vars:
	int pos1, int pos2;
begin
	pos1 = 0; pos2 = 0; ksdate = "";															//銘柄コードは <> で発表日と期は () で囲まれてる
	if content.Length > 0 then begin
		pos2 = content.IndexOf( symbol.Substring( 0, 4 ), pos1 );								//pos2に銘柄コードの位置
		pos1 = content.IndexOf( "(", pos2 );													//pos1に左括弧の位置
		pos2 = content.IndexOf( ")", pos1 );													//pos2に右括弧の位置
		ksdate = content.Substring( pos1 + 1, pos2 - pos1 - 1 );								//決算発表予定日、決算期を抜き出し
	end;{ content.Length }
end;{ method }
{ -------------------------------------------------- }	//ニューステキストから決算時間を抜き出し
method void kstext2( string content )
vars:
	int pos1, int pos2;
begin
	pos1 = 0; pos2 = 0; kstime = "";															//銘柄コードは <> で囲まれてる、決算時間は◆のすぐ後
	if content.Length > 0 then begin
		pos2 = content.IndexOf( symbol.Substring( 0, 4 ), pos1 );								//pos2に銘柄コードの位置
		pos1 = content.LastIndexOf( "◆", pos2 );												//pos1に◆の位置(先頭に戻る方向で検索)
		kstime = content.Substring( pos1 + 1, 3 );												//決算発表時間抜き出し(3文字)
		kstime = kstime.Trim();																	//先頭および末尾からすべてのスペース文字を削除
	end;{ content.Length }
end;{ method }
{ -------------------------------------------------- }	//メイン処理
once begin
	NP = NewsProvider.Create();
	NP.Symbol = Symbol;
	NP.Realtime = true;
	NP.Updated += NP_Updated;
	NP.FilterType = 2;																			//All:0 symbols:1 keywords:2
	NP.HistoryType = NewsHistoryType.DaysBack;													//DaysBack時の過去ニュース期間
	NP.DaysBack = 3;																			//長くすると表示が遅くなりますがその分過去の発表日まで表示します(5以下推奨)
	NP.Keywords = "決算発表予定 AND コード順 OR 決算発表予定 AND 日付順";							//ヘッドライン絞り込み
	NP.Load = true;
end;{once}

初期設定のフォントArial、サイズ8だと見づらい時は、
ページの設定で見やすいフォントやサイズに変更して下さい
画像はMS UI Gothic、サイズ10でクォーターの〇数字も判断できます

画像2


日付と期、分割Ver

期が別れて日付、時間の順で昇順に表示出来るようになりました

画像3

プログラム

using elsystem;																					//tsdataクラスによって使用される基本クラスと、その他一般的なelsystemクラス
using tsdata.marketdata;																		//価格クオート、市場レベル、ファンダメンタル値などの市場データへのアクセスに使用されるクラス

vars:		{ 変数宣言 }
	string ksdate( "" ),																		//決算発表予定日
	string kstime( "" ),																		//決算発表予定時間
	string kski( "" ),																			//決算発表予定期
	NewsProvider NP( null );																	//NewsProviderクラス 各プロバイダーから提供されているカテゴリーやソースを使用して、ニュース記事を取得するために使用
{ -------------------------------------------------- }	//タイトルに"決算発表予定""コード順""日付順"があったら記事内容読み込み、項目を其々セット
method void NP_Updated( elsystem.Object sender, NewsUpdatedEventArgs args )
begin
	if args.Data <> null then begin
		if args.Data.Title.Contains( "決算発表予定" ) and args.Data.Title.Contains( "コード順" ) then begin
			args.Data.Content.Load();															//記事の内容を読み込み
			args.Data.PublishDate.AddHours( 9 );												//日本時間に変更
			if args.Data.Content.Text.Contains( symbol.Substring( 0, 4 ) ) then					//ニューステキスト内に銘柄コードが存在するか判断
			kstext1( args.Data.Content.Text );													//テキスト抜き出しメソッド(コード順)
		end;
		if args.Data.Title.Contains( "決算発表予定" ) and args.Data.Title.Contains( "日付順" ) then begin
			args.Data.Content.Load();															//記事の内容を読み込み
			args.Data.PublishDate.AddHours( 9 );												//日本時間に変更
			if args.Data.Content.Text.Contains( symbol.Substring( 0, 4 ) ) then					//ニューステキスト内に銘柄コードが存在するか判断
			kstext2( args.Data.Content.Text );													//テキスト抜き出しメソッド(日付順)
		end;
	end;
	if ksdate <> "" then Plot1( ksdate, "日付" );
	if kstime <> "" then Plot2( kstime, "時間" );
	if kski <> "" then Plot3( kski, "期" );
end;{ method NP_Updated }
{ -------------------------------------------------- }	//ニューステキストから決算発表予定日、決算期を抜き出し
method void kstext1( string content )
vars:
	int pos1, int pos2;
begin
	pos1 = 0; pos2 = 0; ksdate = "";															//銘柄コードは <> で発表日と期は () で囲まれてる
	if content.Length > 0 then begin
		pos2 = content.IndexOf( symbol.Substring( 0, 4 ), pos1 );								//pos2に銘柄コードの位置
		pos1 = content.IndexOf( "(", pos2 );													//pos1に左括弧の位置
		pos2 = content.IndexOf( ")", pos1 );													//pos2に右括弧の位置
		ksdate = content.Substring( pos1 + 1, pos2 - pos1 - 1 );								//決算発表予定日、決算期を抜き出し
	end;
	if ksdate.Length > 0 then begin																//決算発表予定日、決算期を分割
		kski = ksdate.Substring( ksdate.Length - 1, 1 );										//決算発表予定日文字数-1から1文字取得
		ksdate = ksdate.Remove( ksdate.Length - 1 );											//決算発表予定日1文字削除
	end;
end;{ method }
{ -------------------------------------------------- }	//ニューステキストから決算時間を抜き出し
method void kstext2( string content )
vars:
	int pos1, int pos2;
begin
	pos1 = 0; pos2 = 0; kstime = "";															//銘柄コードは <> で囲まれてる、決算時間は◆のすぐ後
	if content.Length > 0 then begin
		pos2 = content.IndexOf( symbol.Substring( 0, 4 ), pos1 );								//pos2に銘柄コードの位置
		pos1 = content.LastIndexOf( "◆", pos2 );												//pos1に◆の位置(先頭に戻る方向で検索)
		kstime = content.Substring( pos1 + 1, 3 );												//決算発表時間抜き出し(3文字)
		kstime = kstime.Trim();																	//先頭および末尾からすべてのスペース文字を削除
	end;
end;{ method }
{ -------------------------------------------------- }	//メイン処理
once begin
	NP = NewsProvider.Create();
	NP.Symbol = Symbol;
	NP.Realtime = true;
	NP.Updated += NP_Updated;
	NP.FilterType = 2;																			//All:0 symbols:1 keywords:2
	NP.HistoryType = NewsHistoryType.DaysBack;													//DaysBack時の過去ニュース期間
	NP.DaysBack = 3;																			//長くすると表示が遅くなりますがその分過去の発表日まで表示します(5以下推奨)
	NP.Keywords = "決算発表予定 AND コード順 OR 決算発表予定 AND 日付順";							//ヘッドライン絞り込み
	NP.Load = true;
end;{ once }


日経クイックニュース対応Ver

20/02/04で今までの時事通信のニュースが配信されなくなってしまったので
代わりに配信されてるクイックのニュースから表示するように対応しました

画像4

・機能的には前のとほぼ同じです
・曜日と市場が追加されました
・ニュース読み込み日数を3日では表示されない事もあったので5日に変更
 遅くならないようにキーワードとタイトルで絞って読み込み
・2つ目3つ目のスペースが思ったように認識できず、
 期が上手く抜き取れなかったので発想を変えて検索して表示しました

※ NP.DaysBack = 7;で16日日曜の朝9:30頃には先週の記事 2/10 7:35 の
 今週の決算発表予定が読み込めていない状況でした、なので当日含めた
 日にちで、配信された時間辺りまでなら表示されてると思います
 過ぎた決算日も長めに知りたい人は土曜には金曜の実績が出来てるので、 決算発表日で対応するか、表示が遅くなると思いますがDaysBackの数字を 長めにするか画面スペースやPC性能等考慮してお好みで対応して下さい

画像5

プログラム

using elsystem;																					//tsdataクラスによって使用される基本クラスと、その他一般的なelsystemクラス
using tsdata.marketdata;																		//価格クオート、市場レベル、ファンダメンタル値などの市場データへのアクセスに使用されるクラス

vars:		{ 変数宣言 }
	string ksdate( "" ),																		//決算発表予定日
	string kstime( "" ),																		//決算発表予定時間
	string kski( "" ),																			//決算発表予定期
	string sijo( "" ),																			//市場
	NewsProvider NP( null );																	//NewsProviderクラス 各プロバイダーから提供されているカテゴリーやソースを使用して、ニュース記事を取得するために使用
{ -------------------------------------------------- }	//タイトルに"決算発表予定"+"今週"、"決算発表予定"+"来週"があったら記事内容読み込み、項目を其々セット
method void NP_Updated( elsystem.Object sender, NewsUpdatedEventArgs args )
begin
	if args.Data <> null then begin
		if args.Data.Title.Contains( "決算発表予定" ) and args.Data.Title.Contains( "今週" ) or 
			args.Data.Title.Contains( "決算発表予定" ) and args.Data.Title.Contains( "来週" ) then begin
			args.Data.Content.Load();															//記事の内容を読み込み
			if args.Data.Content.Text.Contains( symbol.Substring( 0, 4 ) ) then begin			//ニューステキスト内に銘柄コードが存在するか判断
				kstext1( args.Data.Content.Text );												//予定日	抜き出しメソッド
				kstext2( args.Data.Content.Text );												//時間	抜き出しメソッド
				kstext3( args.Data.Content.Text );												//決算期	抜き出しメソッド
				kstext4( args.Data.Content.Text );												//市場	抜き出しメソッド
			end;
		end;
	end;
	if ksdate <> "" then Plot1( ksdate, "日付" );
	if kstime <> "" then Plot2( kstime, "時間" );
	if kski <> "" then Plot3( kski, "期" );
	if sijo <> "" then Plot4( sijo, "市場" );
end;{ method NP_Updated }
{ -------------------------------------------------- }	//ニューステキストから決算発表予定日を抜き出し
method void kstext1( string content )
vars:
	int pos1, int pos2;
begin
	pos1 = content.Length; pos2 = 0; ksdate = "";												//決算日は●のすぐ後
	if content.Length > 0 then begin
		pos2 = content.LastIndexOf( symbol.Substring( 0, 4 ), pos1 );							//pos2に銘柄コードの位置
		pos1 = content.LastIndexOf( "●", pos2 );												//pos1に●の位置(先頭に戻る方向で検索)
		ksdate = content.Substring( pos1 + 1, 9 );												//決算発表日抜き出し(9文字)曜日必要ない場合は5文字
	end;
end;{ method kstext1 }
{ -------------------------------------------------- }	//ニューステキストから決算発表時間を抜き出し
method void kstext2( string content )
vars:
	int pos1, int pos2;
begin
	pos1 = content.Length; pos2 = 0; kstime = "";												//時間は銘柄コードのすぐ前
	if content.Length > 0 then begin
		pos2 = content.LastIndexOf( symbol.Substring( 0, 4 ), pos1 );							//pos2に銘柄コードの位置
		pos1 = pos2 - 6;																		//pos1に銘柄コードの位置-6
		kstime = content.Substring( pos1, 5 );													//決算発表時間抜き出し(5文字)
	end;
end;{ method kstext2 }
{ -------------------------------------------------- }	//ニューステキストから決算期を抜き出し
method void kstext3( string content )
vars:
	int pos1, int pos2;
begin
	pos1 = content.Length; pos2 = 0; kski = "";													//期は銘柄コードのスペースの後
	if content.Length > 0 then begin
		pos2 = content.LastIndexOf( symbol.Substring( 0, 4 ), pos1 );							//pos2に銘柄コードの位置
		pos1 = content.IndexOf( " ", pos2 + 5 );												//pos1に銘柄コード後1つ目のスペースの位置
		kski = content.Substring( pos1, 20 );													//決算期抜き出し(銘柄名含む20文字相当)
		if kski.Contains( "1Q" ) then begin kski = "1";											//決算期に1Qが存在するか判断
		end else if kski.Contains( "2Q" ) then begin kski = "2";								//決算期に2Qが存在するか判断
		end else if kski.Contains( "3Q" ) then begin kski = "3";								//決算期に3Qが存在するか判断
		end else if kski.Contains( "本" ) then begin kski = "本";								//決算期に本が存在するか判断
		end else kski = "-";																	//存在なし
	end;
end;{ method kstext3 }
{ -------------------------------------------------- }	//ニューステキストから市場を抜き出し
method void kstext4( string content )
vars:
	int pos1, int pos2;
begin
	pos1 = content.Length; pos2 = 0; sijo = "";													//市場は銘柄コードのスペースの後
	if content.Length > 0 then begin
		pos2 = content.LastIndexOf( symbol.Substring( 0, 4 ), pos1 );							//pos2に銘柄コードの位置
		pos1 = content.IndexOf( " ", pos2 + 5 );												//pos1に銘柄コード後1つ目のスペースの位置
		sijo = content.Substring( pos1, 20 );													//市場抜き出し(銘柄名含む20文字相当)
		if sijo.Contains( "TM" ) then begin sijo = "マザ";
		end else if sijo.Contains( "T" ) then begin sijo = "東証";
		end else if sijo.Contains( "M" ) then begin sijo = "名証";
		end else if sijo.Contains( "SA" ) then begin sijo = "SA";
		end else if sijo.Contains( "S" ) then begin sijo = "札証";
		end else if sijo.Contains( "FK" ) then begin sijo = "福証";
		end else if sijo.Contains( "JQ" ) then begin sijo = "JQ";
		end else if sijo.Contains( "MC" ) then begin sijo = "MC";
		end else sijo = "-";
	end;
end;{ method kstext4 }
{ -------------------------------------------------- }	//メイン処理
once begin
	NP = NewsProvider.Create();
	NP.Symbol = Symbol;
	NP.Realtime = true;
	NP.Updated += NP_Updated;
	NP.FilterType = 2;																			//All:0 symbols:1 keywords:2
	NP.HistoryType = NewsHistoryType.DaysBack;													//DaysBack時の過去ニュース期間
	NP.DaysBack = 7;																			//長くすると表示が遅くなりますがその分過去の発表日まで表示します(少ない数推奨)
	NP.Keywords = "決算発表予定 AND 今週 OR 決算発表予定 AND 来週";								//ヘッドライン絞り込み
	NP.Load = true;
end;{ once }

サポートされると喜んでアイスを買っちゃいます!٩(๑❛ᴗ❛๑)۶