見出し画像

連結/単独問題

プログラムをいくつか作成して気づいたことですが、
今まで所々データ表示がないのは新しい会社か決算まだの会社かなと思ってたけど、入力値の連結か単独かでデータの場所が違うためとわかりました
殆どどちらかしかデータがなく、一括で変更するとどちらかが表示されなくなる、ちょっとこれは問題です!(°_°)
本来連結/単独意識せず、連結会社は連結データ、単独会社は単独データが出力されて欲しい、入力値の連結/単独を判断しているのは、米国版そのままなのか、設計ミスかは分かりませんが、データのセットとプログラムとの整合性が取れていません
その為ユーザーが一つ一つの企業ごと、指標ごとに連結か単独か判断して、入力値を変更しなければいけません!

各プログラム内で整数値タイプで宣言して、初期値は 1 がセットされています
int ConsolidationLevel( 1 ) [DisplayName = "ConsolidationLevel", ToolTip =
"Enter 1 if consolidated data is desired; enter any other value for non-consolidated data."],
各プログラム内では 1 が連結、それ以外は単独と判断してデータをセットしています
if ConsolidationLevel = 1 then
ConsLevel = ConsolidatedValue
else
ConsLevel = NonConsolidatedValue;

公式にメールで問い合わせをしたところ、指標ごとに昇順か降順にまとめて選択すれば一括で変更出来るとの事でした
しかし、銘柄を殆ど入れ替えない人なら問題ないかもしれませんが、新しく企業を追加・変更する度にこの作業は煩わしすぎる(´д`;)
ただ、今のところは企業ごとに手入力で変更するしかないようです
実績データのでき方が今一つ把握出来ていないので、もう少し調べてから対応した指標を作成しないといけないと思います

単独会社が表示されていない状態

本来は連結/単独関係なく表示されて欲しい

連結/単独インジケータ(汎用)

どこかに企業毎に連結か単独かの判断になるキー項目が存在しないか暫く探していましたが見つからず、自分なりの考えで入力せずに連結か単独か判断できるインジケータを作成しました
このプログラムを関数にしてあちこちから呼び出して判断したかったのですが関数ではプロバイダが使えないみたいなのでこの内容を元にサブルーチン化してあちこちに組み込んで使用するしかなさそうです

プログラム

using elsystem;
using tsdata.marketdata;

vars:		{ 変数宣言 }
	FundamentalQuotesProvider FQP( null ),
	string Acct( "JSTD" ),																	//会計基準初期設定:日本会計基準
	string Consol( "Consolidated" );														//連単初期設定:連結

constants:	{ 定数宣言 }
	string KeyTermType( "TermType" ),														//期間タイプ
	string KeyFullTerm( "FullTerm" ),														//本決算
	string KeyAccounting( "AccountingStandard" ),											//会計基準
	string KeyConsolidated( "ConsolidationLevel" ),											//連単
	string KeyActualFieldName( "CR_Op" );													//実績営業利益
//※ 実績営業利益のデータが1件もない場合は判断できないので初期設定のJSTD、連結
method bool GetQuoteVal( FundamentalQuote FQ, DateTime tempdt, out string Acct, out string Consol )
vars:																						//サブルーチン内変数宣言
	int Counter,																			//カウント
	bool QuoteFound,																		//データの存在有無
	DateTime LastDateTime,																	//直近本決算日
	DateTime FQDateTime;																	//発表日
begin
	if FQ = null or tempdt = null then return false;										//データ存在無し、又は現在日なしの時、falseでサブルーチン終了
		QuoteFound = false;																	//データの存在無セット
		LastDateTime = DateTime.Create( 1900, 1, 1 );										//直近本決算日セット1900/01/01
		Consol = "Consolidated";															//連単初期設定:連結
	for counter = FQ.Count - 1 downto 0 begin												//カウント分繰り返し古いデータから逆順に確認
		FQDateTime = FQ.PostDate[counter];													//発表日セット
		//FullTerm判断
		if FQ.ExtendedProperties[counter][KeyTermType].StringValue = KeyFullTerm then begin	//FullTerm 本決算判断
			if tempdt >= FQDateTime and FQDateTime >= LastDateTime then	begin				//現在日時以下、直近本決算日以上の時
				LastDateTime = FQDateTime;													//直近本決算日セット
			end;
			//FullTerm1件しかない場合の判断(FullTerm2件で連単両方ある場合は初期設定の連結で判断)
			if FQ.Count = 1 then begin
				Acct = FQ.ExtendedProperties[counter][KeyAccounting].ToString();			//会計基準
				Consol = FQ.ExtendedProperties[counter][KeyConsolidated].ToString();		//連単
			end;
		//FullTerm以外判断
		end else if tempdt >= FQDateTime and FQDateTime >= LastDateTime then begin			//FullTerm本決算以外 現在日時以下、直近本決算日以上の時
			Acct = FQ.ExtendedProperties[counter][KeyAccounting].ToString();				//会計基準
			Consol = FQ.ExtendedProperties[counter][KeyConsolidated].ToString();			//連単
		end;
		QuoteFound = true;																	//データの存在有セット
	end;{ for downto }
return QuoteFound;						
end;{ GetQuoteVal method }

once begin
	FQP = new FundamentalQuotesProvider();													//クラスのオブジェクトを作成し、そのクラスのコンストラクターを起動
	FQP.Symbol = symbol;																	//銘柄指定
	FQP.Fields += KeyActualFieldName;														//項目指定 CR_Op 実績営業利益
	FQP.LoadProvider();																		//データプロバイダーへの接続を確立
end;{ once }

if GetQuoteVal( FQP[KeyActualFieldName], BarDateTime, Acct, Consol ) then begin
	Plot1( Acct, "会計基準" );																//1:日本会計基準 2:米国会計基準 3:IFRS
	if Consol = "Consolidated" then	Plot2( "連", "連単", Magenta )
	else Plot2( "単", "連単", Yellow );														//Consol:連結 NonConsol:単独
end;{ GetQouteVal }

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