一、什么是K線圖
1、K線圖的定義:
K線(Candlestick chart)又稱“陰陽燭”,是反映價格走勢的一種圖線,其特色在于一個線段內(nèi)記錄了多項(xiàng)訊息,相當(dāng)易讀易懂且實(shí)用有效,廣泛用于股票、期貨、貴金屬、數(shù)字貨幣等行情的技術(shù)分析,稱為K線分析
2、K線圖相關(guān)的專業(yè)術(shù)語
K線可分“陽線”、“陰線”和“中立線”三種
陽線代表收盤價大于開盤價
陰線代表開盤價大于收盤價
中立線則代表開盤價等于收盤價。
3、K線圖的表示
最早陽線以紅色表示,陰線則以黑色表示,但由于彩色印刷成本高,所以后來陽線常改以白色空心方塊表示。在亞洲國家(或大中華經(jīng)濟(jì)圈),多半配合傳統(tǒng)習(xí)慣,陽線以紅色表示,陰線以綠色表示,即是紅升綠跌。至于中立線的顏色則不一而足,難以卒論,但以異于其他兩線為原則。在歐美,習(xí)慣則正好相反,陰線以紅色表示,陽線以綠色表示。香港跟歐美相同,采用綠升紅跌。
二、怎么畫K線圖
首先我們找到該日或某一周期的最高和最低價,垂直地連成一條直線;然后再找出當(dāng)日或某一周期的開市和收市價,把這二個價位連接成一條狹長的長方柱體。假如當(dāng)日或某一周期的收市價較開市價為高(即低開高收),我們便以紅色來表示,或是在柱體上留白,這種柱體就稱之為"陽線"。如果當(dāng)日或某一周期的收市價較開市價為低(即高開低收),我們則以綠色表示,又或是在柱上涂黑色,這柱體就是"陰線"了。
分時圖是大盤和個股的實(shí)時(即時)分時走向圖,其在實(shí)戰(zhàn)研判中的地位極其重要,是即時把握多空力量轉(zhuǎn)化即市場變化直接的根本所在。
K線圖分類:
分時K線圖,分時K線圖實(shí)際上就是一個折線圖
標(biāo)準(zhǔn)K線圖,一般畫成陰陽燭的樣式
1、折線圖畫法
計算坐標(biāo)
先計算出單位數(shù)值所占的Y軸的高度:diviceHeight = ?SizeHeight/(MaxNumber-MinNumber)
計算出當(dāng)前Y軸的坐標(biāo):總高度減去當(dāng)前值所占的高度currentY = Height - ? (nowNumber *diviceHeight);
開始畫圖
重寫drawRect方法
- (void)drawRect:(CGRect)rect {
if (self.pointsArray) {
//畫連接線
CGContextRef context = UIGraphicsGetCurrentContext();//獲取繪圖上下文
CGContextSetLineWidth(context, _lineWidth);//設(shè)置線寬
CGContextSetShouldAntialias(context, YES);//設(shè)置反鋸齒邊緣
UIColor *color = _lineColor?_lineColor:_defaultColor;
CGContextSetStrokeColorWithColor(context, [color CGColor]);//設(shè)置線的顏色
//定義多個點(diǎn),畫多點(diǎn)連線
for (id item in self.pointsArray) {
CGPoint currentPoint = CGPointFromString(item);
if ((int)currentPoint.y<=(int)self.frame.size.height && currentPoint.y>=0) {
if ([self.pointsArray indexOfObject:item]==0) {
CGContextMoveToPoint(context, currentPoint.x, currentPoint.y);//這個是起始點(diǎn)
continue;
}
CGContextAddLineToPoint(context, currentPoint.x, currentPoint.y);
CGContextStrokePath(context); //開始畫線
if ([self.pointsArray indexOfObject:item]
CGContextMoveToPoint(context, currentPoint.x, currentPoint.y);
}
}
}
}
}
2、陰陽燭圖,該圖需要4個坐標(biāo)點(diǎn),開盤,關(guān)盤,最大值,最小值
計算坐標(biāo)
坐標(biāo)計算方法同折線圖
畫圖
首先,要確定線的顏色,收盤值-開盤值>0紅線,收盤值-開盤值<0綠線,開盤值-收盤值=0白線;
第二,在最高值和次高值之間畫一條線(線寬是陰線的寬度)
第三,在開盤值和收盤值之間畫一條寬線(燭線寬,畫線時不繪制端點(diǎn))
第四,特殊情況,開盤值、收盤值、最高值和最低值都相等的,繪制的是橫線,線寬是1,線長是燭線寬,繪制起始點(diǎn)是(oldX-(燭線寬/2),oldY),結(jié)束(oldX-(燭線寬/2),oldY)
#pragma mark畫一根K線
-(void)drawKWithContext:(CGContextRef)context height:(CGPoint)heightPoint Low:(CGPoint)lowPoint open:(CGPoint)openPoint close:(CGPoint)closePoint width:(CGFloat)width{
CGContextSetShouldAntialias(context, NO);
//首先判斷是綠的還是紅的,根據(jù)開盤價和收盤價的坐標(biāo)來計算
BOOL isKong = NO;
UIColor *color = [UIColor colorWithHexString:@"#FF0000"withAlpha:1];//設(shè)置默認(rèn)紅色
//如果開盤價坐標(biāo)在收盤價坐標(biāo)上方則為綠色即空
if (openPoint.y
isKong = YES;
color = [UIColor colorWithHexString:@"#00FFFF"withAlpha:1];//設(shè)置為綠色
}
//設(shè)置顏色
CGContextSetStrokeColorWithColor(context, [color CGColor]);
//首先畫一個垂直的線包含上影線和下影線
//定義兩個點(diǎn)畫兩點(diǎn)連線
CGContextSetLineWidth(context, KLineWidth);
const CGPoint points[] = {heightPoint,lowPoint};
CGContextStrokeLineSegments(context, points, 2);//繪制線段(默認(rèn)不繪制端點(diǎn))
//再畫中間的實(shí)體
CGFloat halfWidth = 0;
//糾正實(shí)體的中心點(diǎn)為當(dāng)前坐標(biāo)
openPoint = CGPointMake(openPoint.x-halfWidth, openPoint.y);
closePoint = CGPointMake(closePoint.x-halfWidth, closePoint.y);
//開始畫實(shí)體
CGContextSetLineWidth(context, width); //改變線的寬度
const CGPoint point[] = {openPoint,closePoint};
CGContextStrokeLineSegments(context, point, 2);//繪制線段(默認(rèn)不繪制端點(diǎn))
//CGContextSetLineCap(context, kCGLineCapSquare) ;//設(shè)置線段的端點(diǎn)形狀,方形
//開盤價格和收盤價格一樣,畫一條橫線
if ((openPoint.y-closePoint.y<=1) && (closePoint.y-openPoint.y<=1) ) {
//這里設(shè)置開盤價和收盤價一樣時候的顏色CGContextSetStrokeColorWithColor(context, [color CGColor]);
CGPoint pointLeft = CGPointMake(openPoint.x-KCandleWidth/2, openPoint.y);
CGPoint pointRight = CGPointMake(openPoint.x+KCandleWidth/2, openPoint.y);
CGContextSetLineWidth(context, 1); //改變線的寬度
const CGPoint point[] = {pointLeft,pointRight};
CGContextStrokeLineSegments(context, point, 2);//繪制線段(默認(rèn)不繪制端點(diǎn))
}
}
最后,上代碼K線圖demo