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

デバッグ環境 [ファンダメンタル]

久しぶりにFundamentalQuotesProviderを書き直して、エラーで突然落ちてしまう現象が再現されました。ファンダメンタデータを試行錯誤している時に度々出現したのを思い出しました。
スクリーンショット 2017-01-21 08.38.11.png


インジケーターを作成して、以下のコードをレーダスクリーンで挿入すると、自分の環境では「args.Field」が原因で落ちます。
*これは試さないでください!

using tsdata.marketdata;

Vars: 	FundamentalQuotesProvider fundamental( null );

method void Fundamental_Updated( elsystem.Object sender, tsdata.marketdata.FundamentalQuoteUpdatedEventArgs args ) 
begin
	print(Symbol, " ", args.Field);
	//Plot1("test");	//ShowMeではかならずPlotが必要
end;

Once begin
	fundamental = FundamentalQuotesProvider.Create();	
	//or  fundamental = new FundamentalQuotesProvider();
	fundamental.Symbol = Symbol;
	fundamental.Fields.Add("CE_PER");
	fundamental.Updated += Fundamental_Updated;
	fundamental.Load = true;
End;

FundamentalQuoteUpdatedEventArgsの他の要素も取得できないのは納得いきませんが、できないものは仕方ありません。
「Updated」の中を、
print(Symbol, " ", fundamental.Fields[0], " ", fundamental.Quote[0].PostDate[0].ToString());
に変更すると落ちません。

以前にもトラブルで書きましたが、このように落ちた後でごく稀にトレステが再起動できなくなる場合もあります。

今回は、自分が注意している予防策を書いておきます。


ファイル」「新規作成」「ワークスペース」で空のワークスペースを作成し、「ワークスペースに名前を付けて保存」で「debug」など適当な名前に変更しておきます。

レーダスクリーンを新規に追加するか、今まで利用しているワークスペースからコピーします。
レーダースクリーンを選択して、「編集」「ウィンドウをコピー」、新しいワークスペースに移動して編集または右クリックコンテキストメニューで「ウィンドウを貼り付け」。

これで、デバッグ用のワークスペースができました。
さらに、エラーで突然落ちた時のために、「ファイル」「設定」「TradeStationデスクトップ」のダイアログを表示して、「ワークスペース」タブの起動時をワークスペースを開かないにしておきます。
スクリーンショット 2017-01-21 08.16.51.png
起動時にワークスペースを開く手間が増えますが、コード変更を繰り返し試す場合には、再起動で無限に落ち続けることはなくなるので安全と思います。必要なくなれば戻せばいいですから。


--------------------------------------------------------------------------------------------

続いて、次の記事から利用していくためのインジケーターを作成します。

スクリーンショット 2017-01-20 22.46.49.png
データスクリーン表示用なので、チャートチェックはオフにします。

using tsdata.marketdata;

Vars: 	FundamentalQuotesProvider fundamental( null );

method void Fundamental_Updated( elsystem.Object sender, tsdata.marketdata.FundamentalQuoteUpdatedEventArgs args ) 
Vars: int counter;
begin
	If fundamental.HasQuoteData(0) then  //0は追加したフィールド番号-1です 今回はフィールド1個だけなので「0」のみになります。
	Begin		//ヘルプ FundamentalQuote クラスを参照のこと
		Plot1(fundamental.Fields[0], "name", white, GetBackgroundColor);	//多数Plotすると勝手に背景色が変わって見にくいのでコードで指定
		Plot2(fundamental.Quote[0].DoubleValueLast, "LastValue", white, GetBackgroundColor); //最後のデータ(double)
		Plot3(fundamental.Quote[0].PostDateLast.ToString(), "LastDate", white, GetBackgroundColor);	//最後の発表日
	  //------debug-------
	  print(Symbol);
	  For counter = 0 to fundamental.Quote[0].Count -1
	  Begin	//Quote全データをPrintlogに表示(最終発表日から逆順に表示される)
		  print(fundamental.Fields[0] + " " + NumToStr(counter, 0) 
			  , " ", fundamental.Quote[0].DoubleValue[counter]
			  , " ", fundamental.Quote[0].PostDate[counter].ToString());
	  End;
	  //------------------
	End;
end;

Once begin	//銘柄ごとに一度実行される
	fundamental = FundamentalQuotesProvider.Create();	//初期化
	//or  fundamental = new FundamentalQuotesProvider();
	fundamental.Symbol = Symbol;			//銘柄を指定
	fundamental.Fields.Add("CR_SALES");		//売上高(実績)予想はCE_ 「,」で区切ると複数のフィールドを追加できます。
	fundamental.Updated += Fundamental_Updated;		//イベントを設定
	fundamental.Load = true;	//これで初めてデータが取得可能になりイベントが機能する
End;

コードを貼り付けて検証しておきます。ファンダメンタル取得の基本的コードで、後でヘルプを見くらべてこの程度は理解できるように努力してください。

レーダースクリンを新規作成します。
データ検証のため1銘柄だけ銘柄を挿入してください。ここではソニー(6758)を選びました。

インジケータの作成で省略名を入力しておくと、レーダースクリーンの「設定」「ページ」で表示されるダイアログの「一般」タブの右側で分析テクニック表示を省略名にしておくとファイル名を表示させなくて良くなります。
スクリーンショット 2017-01-20 22.47.59.png
自分は標準ファイルと区別するため@をファイル名の先頭につけています。

続いて、データ検証のために印刷ログを表示して、作成したインジケータと売上高の標準インジケータをレーダースクリーンに追加します。
スクリーンショット 2017-01-21 09.58.41.png

標準インジケーターの数値と作成したデータを確認してください。
続いて、印刷ログに出力されたデータと四季報あるいは株探などのページの業績と比較してください。
counter番号の売り上げが何を指しているのか、どうしたら本決算の売り上げを取得できるのかを想像してください。




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

nice! 0

コメント 0

コメントを書く

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

トラックバック 0

この記事のトラックバックURL:

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