MATLAB Answers

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

3 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を使用しています。

  0 Comments

Sign in to comment.

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

Show 1 older comment
Kazuya
Kazuya on 17 May 2019
Good luck :)
そうですね・・表示の柔軟性が欠けますね。表示するスパンによって
TMW.Time.Format
で表示形式を変更するか(長いと年月だけにするとか)あとは表示角度を変えるだけでもある程度改善できます。例:
load SimulatedStock.mat;
candle(TMW{end-20:end,1:4},'b');
title('Candlestick chart for TMW')
ha = gca;
xticksloc = ha.XTick + 1;
TMW.Time.Format = 'yyyy/MM';
ha.XTickLabel = string(TMW.Time(xticksloc));
ha.XTickLabelRotation = 30;
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)

Sign in to answer this question.

Products


Release

R2019a