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