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

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

Accepted Answer

Kazuya
Kazuya on 16 May 2019
確かに不便ですね・・。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 Comments
Shoumei
Shoumei on 23 May 2019
備忘録
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 on 23 May 2019
すごい。

Sign in to comment.

More Answers (0)

Categories

Find more on 書式設定と注釈 in Help Center and File Exchange

Products


Release

R2019a

Community Treasure Hunt

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

Start Hunting!