All Projects → zhiquan911 → Chklinechart

zhiquan911 / Chklinechart

Licence: mit
纯Swift4.0代码编写的K线图表组件,支持:MA,EMA,BOLL,SAR,KDJ,MACD等技术指标显示。集成使用简单,二次开发扩展强大

Programming Languages

swift
15916 projects

Projects that are alternatives of or similar to Chklinechart

Tradingview Trainer
A lightweight app for practicing your trading on Tradingview
Stars: ✭ 106 (-74.08%)
Mutual labels:  bitcoin, stocks
Ta4j
A Java library for technical analysis.
Stars: ✭ 948 (+131.78%)
Mutual labels:  bitcoin, stocks
Kchartview
KChart for Android ;股票k线图
Stars: ✭ 864 (+111.25%)
Mutual labels:  stocks, kline
KLineChartAndroid
A kline chart UI widget for android(Android版本的k线).
Stars: ✭ 51 (-87.53%)
Mutual labels:  stocks, kline
Ethereumkit
EthereumKit is a free, open-source Swift framework for easily interacting with the Ethereum.
Stars: ✭ 400 (-2.2%)
Mutual labels:  bitcoin
Mempool
An open-source explorer developed for the Bitcoin community, focusing on the emerging transaction fee market to help our transition into a multi-layer ecosystem.
Stars: ✭ 374 (-8.56%)
Mutual labels:  bitcoin
Crypto Bar
📈 A menu bar app that updates cryptocurrencies prices in real-time
Stars: ✭ 379 (-7.33%)
Mutual labels:  bitcoin
Financeops
Research in investment finance with Python Notebooks
Stars: ✭ 378 (-7.58%)
Mutual labels:  stocks
Payment Gateway
Bitcoin/Altcoins PHP Payment Class. It supports Bitcoin BitcoinCash DASH Dogecoin Litecoin Reddcoin Feathercoin Vertcoin Potcoin Speedcoin. Install GoUrl php script - bitcoin api payment gateway on your site!
Stars: ✭ 406 (-0.73%)
Mutual labels:  bitcoin
Techan
Technical Analysis Library for Golang
Stars: ✭ 404 (-1.22%)
Mutual labels:  bitcoin
Hycharts
柱状图、折/曲线图、K线图(主图、交易量图、辅助图), 图与图可以自由组合, 支持分页加载数据 -----> 低内存、低耗电、滑动缩放顺滑
Stars: ✭ 394 (-3.67%)
Mutual labels:  kline
Bitcoin Core
A modern Bitcoin Core REST and RPC client.
Stars: ✭ 379 (-7.33%)
Mutual labels:  bitcoin
Xchange Stream
XChange-stream is a Java library providing a simple and consistent streaming API for interacting with Bitcoin and other crypto currency exchanges via WebSocket protocol. It is build on top of of XChange library providing new interfaces for streaming API. User can subscribe for live updates via reactive streams of RxJava library.
Stars: ✭ 402 (-1.71%)
Mutual labels:  bitcoin
Miningcore
Miningcore is a high-performance Mining-Pool Engine that runs on Linux and Windows and supports a variety of crypto-currencies.
Stars: ✭ 378 (-7.58%)
Mutual labels:  bitcoin
Okklineswift
Draw the K-Line by Swift, support iOS & macOS
Stars: ✭ 406 (-0.73%)
Mutual labels:  kline
Unchained
My personal study of blockchain related technology.
Stars: ✭ 379 (-7.33%)
Mutual labels:  bitcoin
Ticker.sh
Real-time stock tickers from the command-line.
Stars: ✭ 392 (-4.16%)
Mutual labels:  stocks
Bitcoinj
A library for working with Bitcoin
Stars: ✭ 4,162 (+917.6%)
Mutual labels:  bitcoin
Crypto Whale Watching App
Python Dash app that tracks whale activity in cryptocurrency markets.
Stars: ✭ 389 (-4.89%)
Mutual labels:  bitcoin
Cryptocurrency
Overview of top cryptocurrencies
Stars: ✭ 385 (-5.87%)
Mutual labels:  bitcoin

CHKLineChart

s1.png s2.pngs3.png s4.pngs5.png

纯Swift4.0代码编写的K线图表组件,支持:MA,EMA,KDJ,MACD,RSI等技术指标显示。集成使用简单,二次开发扩展强大。

Features

  • 完美支持Swift4.0编译。
  • 线图丰富,蜡烛图,时分图,柱状图,提供画线扩展模型。
  • 目前支持MA,EMA,BOLL,SAR,KDJ,MACD,RSI等技术指标,提供指标算法扩展模型。
  • 支持使用代码创建视图或使用xib/storyboard创建视图。
  • 样式提供更多配置,满足更多商业定制。
  • 底层采用CALayer+UIBezierPath绘制图表,大大提高性能。

Requirements

  • iOS 8+
  • Xcode 8+
  • Swift 4.0+
  • iPhone/iPad

Installation

CocoaPods

CocoaPods is a dependency manager for Cocoa projects.

You can install it with the following command:

$ gem install cocoapods

To integrate Log into your Xcode project using CocoaPods, specify it in your Podfile:

use_frameworks!

pod 'CHKLineChartKit'

Manual

打开文件夹/CHKLineChart/Carthage/Build/iOS/,复制CHKLineChartKit.framework到你的项目文件夹中。在Project -> Target -> General -> Embedded Binaries,点+,导入CHKLineChartKit.framework。

Example

详细例子,打开Example/Example.xcworkspace,参考ChartCustomViewController的例子。

应用代码片段:

import CHKLineChartKit

class ChartCustomViewController: UIViewController {

    /// 数据源
    var klineDatas = [KlineChartData]()

    /// 图表
    lazy var chartView: CHKLineChartView = {
        let chartView = CHKLineChartView(frame: CGRect.zero)
        chartView.style = .base       //默认样式
        chartView.delegate = self
        return chartView
    }()

    override func viewDidLoad() {
        self.view.addSubview(self.chartView)
    }

    override func viewDidLayoutSubviews() {
        self.chartView.frame = self.view.bounds
    }

}

// MARK: - 实现K线图表的委托方法
extension ChartCustomViewController: CHKLineChartDelegate {
    
    /// 图表显示数据总数
    func numberOfPointsInKLineChart(chart: CHKLineChartView) -> Int {
        return self.klineDatas.count
    }
    
    /// 提供图表数据源
    func kLineChart(chart: CHKLineChartView, valueForPointAtIndex index: Int) -> CHChartItem {
        let data = self.klineDatas[index]
        let item = CHChartItem()
        item.time = data.time
        item.openPrice = CGFloat(data.openPrice)
        item.highPrice = CGFloat(data.highPrice)
        item.lowPrice = CGFloat(data.lowPrice)
        item.closePrice = CGFloat(data.closePrice)
        item.vol = CGFloat(data.vol)
        return item
    }
    
    /// 自定义Y轴坐标值显示内容
    func kLineChart(chart: CHKLineChartView, labelOnYAxisForValue value: CGFloat, atIndex index: Int, section: CHSection) -> String {
        var strValue = ""
        if section.key == "volume" {
            if value / 1000 > 1 {
                strValue = (value / 1000).ch_toString(maxF: section.decimal) + "K"
            } else {
                strValue = value.ch_toString(maxF: section.decimal)
            }
        } else {
            strValue = value.ch_toString(maxF: section.decimal)
        }
        
        return strValue
    }
    
    /// 自定义X轴坐标值显示内容
    func kLineChart(chart: CHKLineChartView, labelOnXAxisForIndex index: Int) -> String {
        let data = self.klineDatas[index]
        let timestamp = data.time
        let dayText = Date.ch_getTimeByStamp(timestamp, format: "MM-dd")
        let timeText = Date.ch_getTimeByStamp(timestamp, format: "HH:mm")
        var text = ""
        //跨日,显示日期
        if dayText != self.chartXAxisPrevDay && index > 0 {
            text = dayText
        } else {
            text = timeText
        }
        self.chartXAxisPrevDay = dayText
        return text
    }
    
    
    /// 调整每个分区的小数位保留数
    ///
    /// - parameter chart:
    /// - parameter section:
    ///
    /// - returns:
    func kLineChart(chart: CHKLineChartView, decimalAt section: Int) -> Int {
        return 2
    }
}

Custom Index(开发自定义指标)

本K线图表最大的一个亮点就是提供了非常容易的指标开发入口。 如何开发自己的指标呢?步骤如下:

1. 开发者需要实现CHChartAlgorithmProtocol。例子参考CHChartAlgorithm枚举。

/**
 常用技术指标算法
 */
public enum CHChartAlgorithm: CHChartAlgorithmProtocol {
    
    case none                                   //无算法
    case timeline                               //时分
    case ma(Int)                                //简单移动平均数
    case ema(Int)                               //指数移动平均数
    case kdj(Int, Int, Int)                     //随机指标
    case macd(Int, Int, Int)                    //指数平滑异同平均线
    case boll(Int, Int)                         //布林线
    case sar(Int, CGFloat, CGFloat)             //停损转向操作点指标(判定周期,加速因子初值,加速因子最大值)
    case sam(Int)                               //SAM指标公式
    
    /**
     处理算法
     
     - parameter datas:
     
     - returns:
     */
    public func handleAlgorithm(_ datas: [CHChartItem]) -> [CHChartItem] {
        switch self {
        case .none:
            return datas
        case .timeline:
            return self.handleTimeline(datas: datas)
        case let .ma(num):
            return self.handleMA(num, datas: datas)
        case let .ema(num):
            return self.handleEMA(num, datas: datas)
        case let .kdj(p1, p2, p3):
            return self.handleKDJ(p1, p2: p2, p3: p3, datas: datas)
        case let .macd(p1, p2, p3):
            return self.handleMACD(p1, p2: p2, p3: p3, datas: datas)
        case let .boll(num, k):
            return self.handleBOLL(num, k: k, datas: datas)
        case let .sar(num, minAF, maxAF):
            return self.handleSAR(num,minAF: minAF, maxAF: maxAF, datas: datas)
        case let .sam(num):
            return self.handleSAM(num, datas: datas)
        }
    }

    ......


}

2. extension CHSeries,编写自己的线组。

// MARK: - 工厂方法
extension CHSeries {
    
    /**
     返回一个MACD系列样式
     */
    public class func getMACD(_ difc: UIColor,
                              deac: UIColor,
                              barc: UIColor,
                              upStyle: (color: UIColor, isSolid: Bool),
                              downStyle: (color: UIColor, isSolid: Bool),
                              section: CHSection) -> CHSeries {
        let series = CHSeries()
        series.key = CHSeriesKey.macd
        let dif = CHChartModel.getLine(difc, title: "DIF", key: "\(CHSeriesKey.macd)_DIF")
        dif.section = section
        let dea = CHChartModel.getLine(deac, title: "DEA", key: "\(CHSeriesKey.macd)_DEA")
        dea.section = section
        let bar = CHChartModel.getBar(upStyle: upStyle, downStyle: downStyle, titleColor: barc, title: "MACD", key: "\(CHSeriesKey.macd)_BAR")
        bar.section = section
        series.chartModels = [bar, dif, dea]
        return series
    }
}

3. 如果现有的线模型无法满足你,你可以新建类继承CHChartModel,重载drawSerie方法。

/**
 *  圆点样式模型
 */
open class CHRoundModel: CHChartModel {

    open override func drawSerie(_ startIndex: Int, endIndex: Int) -> CAShapeLayer {
    ......
    }
}

// MARK: - 工厂方法
extension CHChartModel {

    //生成一个圆点样式
    class func getRound(upStyle: (color: UIColor, isSolid: Bool),
                        downStyle: (color: UIColor, isSolid: Bool),
                        titleColor: UIColor, title: String,
                        plotPaddingExt: CGFloat,
                        key: String) -> CHRoundModel {
        let model = CHRoundModel(upStyle: upStyle, downStyle: downStyle,
                                 titleColor: titleColor, plotPaddingExt: plotPaddingExt)
        model.title = title
        model.key = key
        return model
    }
}

4. 自定义自己的图表CHKLineChartStyle,把指标算法和线组加入。

    let style = CHKLineChartStyle()
    ......

    //配置图表处理算法
    style.algorithms = [
        CHChartAlgorithm.ema(12),       //计算MACD,必须先计算到同周期的EMA
        CHChartAlgorithm.ema(26),       //计算MACD,必须先计算到同周期的EMA
        CHChartAlgorithm.macd(12, 26, 9),
    ]

    let trendSection = CHSection()
    let macdSeries = CHSeries.getMACD(
        UIColor.ch_hex(0xDDDDDD),
        deac: UIColor.ch_hex(0xF9EE30),
        barc: UIColor.ch_hex(0xF600FF),
        upStyle: upcolor, downStyle: downcolor,
        section: trendSection)
    macdSeries.title = "MACD(12,26,9)"
    macdSeries.symmetrical = true
    trendSection.series = [macdSeries]

    style.sections = [priceSection, volumeSection, trendSection]

    let chartView = CHKLineChartView(frame: CGRect.zero)
    chartView.style = style
    ......

5. 运行程序调试你的指标是否计算对了。

Custom Style(开发自定义样式)

通用的方案是,扩展CHKLineChartStyle编写自己的样式。

// MARK: - 扩展样式
public extension CHKLineChartStyle {
    
    //实现一个最基本的样式,开发者可以自由扩展配置样式
    public static var best: CHKLineChartStyle {
        let style = CHKLineChartStyle()
        ......
        return style
    }

    self.chartView.style = .best
}

Contribution(贡献更多指标)

本人现在很少专注K线图表的开发工作,大部分时间投入到区块链的研究与开发工作,如果你感兴趣,可以联系我

如果你对本K线指标的开发感兴趣,请fork项目,给大家Pull requests更多技术指标。

Donations

如果大家觉得非常好用的话,不忘打赏一下小弟,给小弟一些鼓励。

支付宝:

支付宝

微信支付:

微信支付

接收以下数字货币:

  • BTC: 16XyEUNgwF3KX6UyMEWtpQDWWXkmqgH7V8
  • ETH: 0x4fffdaa5dbba850ae41aa6d031a6dffd91614608
  • LTC: LLevkg1aUiECvY6Uda1bvDbqa38zykjLyR

Author

License

Released under MIT License.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].