candleチャート​の表示で休場日の間隔​が空かない様にしたい

4 次查看(过去 30 天)
Shoumei
Shoumei 2019-5-16
评论: Kazuya 2019-5-23
Financial Toolboxのcandleを使ってローソクチャートを表示した際に、土日祝日でデータが無い場合、チャートが歯抜け状態で表示されます。
Yahoo Financeのチャートだと歯抜けにならいよう、間を詰めて表示してくれるのですが、同様にローソクチャートを表示することはできないでしょうか?
例えばcandleだと下図のようにGW期間のデータが無いので歯抜け部分があります。
Yahooファイナンスだと下図のように歯抜けにならずに表示されます。
おおよそ同じ期間のデータを表示していますが、異なるチャートの様に見えてしまいます。
なお、candle表示する際の元データはtimetableを使用しています。

采纳的回答

Kazuya
Kazuya 2019-5-16
確かに不便ですね・・。x軸に datetime 型を使っている以上、間が空いてしまうのは避けられないので、candle 関数への入力を行列(各列が'Open', 'High', 'Low', 'Close'の順)にして、あとから x 軸に日付っぽいラベルを付けるというのが1つです。
load SimulatedStock.mat;
candle(TMW{end-20:end,1:4},'b');
title('Candlestick chart for TMW')
ha = gca;
xticksloc = ha.XTick + 1; % なぜか0スタートなので。
ha.XTickLabel = string(TMW.Time(xticksloc));
  4 个评论
Shoumei
Shoumei 2019-5-23
備忘録
load SimulatedStock.mat;
stockData = TMW(end-180:end, :);
candle(stockData{:, 1:4}) % 休場日が歯抜けになるので並べ替え
legend('Day', 'Location', 'northwest')
ha = gca;
xticksloc = ceil(ha.XTick);
tempTime = stockData.Time;
for n = length(stockData.Time)+1:max(xticksloc)+1
% Timetableの最終データからXTickの最後インデックスまでNaN代入
tempTime(end+1) = tempTime(end)+1;
end
sz1 = size(tempTime, 1);
if sz1 < 40
% データが少ないときは月日表示
tempTime.Format = 'M月d日';
ha.XTickLabel = string(tempTime(xticksloc+1));
xlabel(year(tempTime(end)))
else
% データが多いときは年月表示
tempTime.Format = 'yy年M月';
ha.XTickLabel = string(tempTime(xticksloc+1));
% 最初と最後だけ年月日
tempTime.Format = 'yy年M月d日';
ha.XTickLabel{1} = string(tempTime(xticksloc(1)+1));
ha.XTickLabel{end} = string(tempTime(xticksloc(end)+1));
if strcmp(year(tempTime(1)), year(tempTime(end)))
xlabel(year(tempTime(end)))
else
% 複数年に渡るときは開始年と終了年表示
xlabel(string(year(tempTime(1)))+' - '+string(year(tempTime(end))))
end
end
Clipboard01.png
Kazuya
Kazuya 2019-5-23
すごい。

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 2 次元および 3 次元プロット 的更多信息

标签

产品


版本

R2019a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!