蜡烛图又称日本线、K线、阴阳线、棒线等,目前常用的说法百是“K线”以下统称K线。K线源于日本德川幕府时代(1603~1867年)的米市交易,用来计算米价每天的涨跌,后来把它引入股票市场价格走势的分析中,目前已成为股票、外汇技术分析中的重要方法。是技术分析的一种,最早为日本人于十九世纪所度创,被当时日本米市的商人用来记录米市的行知情与价格波动,包括开市价、收市价、最高价及最低价,阳烛代表当日升市,阴烛代表跌市。这种图表分析法在当时的中国以至整个东南亚地区均尤为流行。由于用这种方法绘制出来的图表形状颇似一根根蜡烛道,加上这些蜡烛有黑白之分,因而也叫阴阳线图表。通过K线图,人们能够把每日或某一周期的市况表现完全记录下来,股价经过一段时间的盘档后,在图上即形成一种特殊区域或形版态,不同的形态显示出不同意义。可以从这些形态的变化中摸索出一些有规律的东西出来。权K线图形态可分为反转形态、整理形态及缺口和趋向线等。后K线图因其细腻独到的标画方式而被引入到股市及期货市场。
小提琴图 (Violin Plot) 用于显示数据分布及其概率密度。这种图表结合了箱形图和密度图的特征,主要用来显示数据的分布形状。中间白点为中位数,中间的黑色粗条表示四分位数范围。上下贯穿小提琴图的黑线代表最小非异常值min到最大非异常值max的区间,线上下端分别代表上限和下限,超出此范围为异常数据。(或者,从黑色粗条延伸的细黑线代表 95% 置信区间)
下面给出具体代码步骤:
新建一块画布:
TCanvas *c1 = new TCanvas("c1", "Candle Presets", 800, 600);
将画布横向分为三块,纵向分为两块:
c1->Divide(3, 2);
创建随机数:
TRandom *rng = new TRandom();
新建二维直方图:
TH2I *h1 = new TH2I("h1", "Sin", 18, 0, 360, 100, -1.5, 1.5);
设置x标题:
h1->GetXaxis()->SetTitle("Deg");
利用随机数高斯填充直方图:
float myRand;
for (int i = 0; i < 360; i+= 10) {
for (int j = 0; j < 100; j++) {
myRand = rng->Gaus(sin(i * 3.14 / 180), 0.2);
h1->Fill(i, myRand);
}
}
作出6种类型格式的Candle图:
for (int i = 1; i < 7; i++) {
c1->cd(i);
TString title = TString::Format("CANDLEX%d", i);
TH2I *myhist = (TH2I*)h1->DrawCopy(title);
myhist->SetTitle(title);
}
创建第二块画布:
TCanvas *c2 = new TCanvas("c2", "Violin Presets", 800, 300);
将画布分为两个区域:
c2->Divide(2, 1);
作出两种不同类型的Violin图:
for (int i = 1; i < 3; i++) {
c2->cd(i);
TString title = TString::Format("VIOLINX%d", i);
TH2I *myhist = (TH2I*)h1->DrawCopy(title);
myhist->SetFillColor(kGray + 2);
}
创建第三张画布:
TCanvas *c3 = new TCanvas("c3", "Playing with candle and violin-options", 800, 600);
将画布横向分为三块,纵向分为两块:
c3->Divide(3, 2);
作出6中不同类型的Candle图:
TString myopt[6] = {"1000000", "2000000", "3000000", "1112111", "112111", "112111"};
for (int i = 0; i < 6; i++) {
c3->cd(i + 1);
TString title = TString::Format("candlex(%s)", myopt[i].Data());
TH2I *myhist = (TH2I*)h1->DrawCopy(title);
myhist->SetFillColor(kYellow);
if (i == 4) {
TH2I *myhist2 = (TH2I*)h1->DrawCopy("candlex(1000000) same");
myhist2->SetFillColor(kRed);
}
if (i == 5) {
myhist->SetBarWidth(0.2);
myhist->SetBarOffset(0.25);
TH2I *myhist2 = (TH2I*)h1->DrawCopy("candlex(2000000) same");
myhist2->SetFillColor(kRed);
myhist2->SetBarWidth(0.6);
myhist2->SetBarOffset(-0.5);
}
myhist->SetTitle(title);
}
代码地址:https://github.com/root-project/root/blob/master/tutorials/hist/candlehisto.C