├── StockMarketForecaster ├── Base │ ├── Assets.xcassets │ │ ├── Contents.json │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ ├── Optional.swift │ ├── String.swift │ ├── Array+NSCopying.swift │ ├── AppDelegate.swift │ ├── Info.plist │ └── SceneDelegate.swift ├── Domain │ ├── MLModel │ │ ├── FB.mlmodel │ │ ├── IBM.mlmodel │ │ ├── AAPL.mlmodel │ │ ├── AMZN.mlmodel │ │ ├── BABA.mlmodel │ │ ├── BBCA.mlmodel │ │ ├── GOOG.mlmodel │ │ ├── INTC.mlmodel │ │ └── MSFT.mlmodel │ ├── DynamicMLModel │ │ ├── DynamicMLModelOutput.swift │ │ ├── DynamicMLModelInput.swift │ │ ├── DynamicMLModelError.swift │ │ └── DynamicMLModel.swift │ ├── StockMarketModel │ │ ├── StockMarketModelOutput.swift │ │ └── StockMarketModelInput.swift │ ├── StockMarketEntity.swift │ └── StockMarketInteractor.swift ├── Presentation │ ├── Detail │ │ ├── DetailState.swift │ │ ├── DetailChartGenerator.swift │ │ ├── DetailPresenter.swift │ │ └── DetailViewController.swift │ ├── Storyboard │ │ └── Base.lproj │ │ │ ├── LaunchScreen.storyboard │ │ │ └── Main.storyboard │ └── Master │ │ └── MasterViewController.swift └── Data │ ├── StockMarket │ └── StockMarketLocal.swift │ └── StockMarketHistory │ └── BABA.csv ├── README.md ├── Podfile ├── Podfile.lock ├── LICENSE ├── .gitignore └── StockMarketForecaster.xcodeproj └── project.pbxproj /StockMarketForecaster/Base/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /StockMarketForecaster/Domain/MLModel/FB.mlmodel: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DickyChengg/Stock-Market-Forecaster/HEAD/StockMarketForecaster/Domain/MLModel/FB.mlmodel -------------------------------------------------------------------------------- /StockMarketForecaster/Domain/MLModel/IBM.mlmodel: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DickyChengg/Stock-Market-Forecaster/HEAD/StockMarketForecaster/Domain/MLModel/IBM.mlmodel -------------------------------------------------------------------------------- /StockMarketForecaster/Domain/MLModel/AAPL.mlmodel: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DickyChengg/Stock-Market-Forecaster/HEAD/StockMarketForecaster/Domain/MLModel/AAPL.mlmodel -------------------------------------------------------------------------------- /StockMarketForecaster/Domain/MLModel/AMZN.mlmodel: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DickyChengg/Stock-Market-Forecaster/HEAD/StockMarketForecaster/Domain/MLModel/AMZN.mlmodel -------------------------------------------------------------------------------- /StockMarketForecaster/Domain/MLModel/BABA.mlmodel: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DickyChengg/Stock-Market-Forecaster/HEAD/StockMarketForecaster/Domain/MLModel/BABA.mlmodel -------------------------------------------------------------------------------- /StockMarketForecaster/Domain/MLModel/BBCA.mlmodel: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DickyChengg/Stock-Market-Forecaster/HEAD/StockMarketForecaster/Domain/MLModel/BBCA.mlmodel -------------------------------------------------------------------------------- /StockMarketForecaster/Domain/MLModel/GOOG.mlmodel: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DickyChengg/Stock-Market-Forecaster/HEAD/StockMarketForecaster/Domain/MLModel/GOOG.mlmodel -------------------------------------------------------------------------------- /StockMarketForecaster/Domain/MLModel/INTC.mlmodel: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DickyChengg/Stock-Market-Forecaster/HEAD/StockMarketForecaster/Domain/MLModel/INTC.mlmodel -------------------------------------------------------------------------------- /StockMarketForecaster/Domain/MLModel/MSFT.mlmodel: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DickyChengg/Stock-Market-Forecaster/HEAD/StockMarketForecaster/Domain/MLModel/MSFT.mlmodel -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Stock-Market-Forecaster 2 | Stock Market Forecasting with CoreML in Swift 3 | 4 | Dynamically load MLModel with String (based on model name). 5 | 6 | Note: 7 | All csv data are downloaded from `Google Spreadsheet` with `GOOGLEFINANCE`. 8 | -------------------------------------------------------------------------------- /Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment the next line to define a global platform for your project 2 | platform :ios, '13.2' 3 | 4 | target 'StockMarketForecaster' do 5 | # Comment the next line if you don't want to use dynamic frameworks 6 | use_frameworks! 7 | 8 | pod 'Charts', '3.5.0' 9 | pod 'SwiftCSV', '0.5.6' 10 | pod 'SwiftDate', '6.1.0' 11 | pod 'SwiftyJSON', '5.0' 12 | 13 | end 14 | -------------------------------------------------------------------------------- /StockMarketForecaster/Domain/DynamicMLModel/DynamicMLModelOutput.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DynamicMLModelOutput.swift 3 | // StockMarketForecaster 4 | // 5 | // Created by Dicky on 01/06/20. 6 | // Copyright © 2020 Organization Name. All rights reserved. 7 | // 8 | 9 | import CoreML 10 | 11 | internal protocol DynamicMLModelOutput: AnyObject, MLFeatureProvider { 12 | init(features: MLFeatureProvider) 13 | } 14 | -------------------------------------------------------------------------------- /StockMarketForecaster/Base/Optional.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Optional.swift 3 | // StockMarketForecaster 4 | // 5 | // Created by Dicky on 01/06/20. 6 | // Copyright © 2020 Organization Name. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | extension Optional { 12 | func ifNil(_ value: Wrapped) -> Wrapped { 13 | if let currentValue = self { 14 | return currentValue 15 | } 16 | return value 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /StockMarketForecaster/Domain/DynamicMLModel/DynamicMLModelInput.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DynamicMLModelInput.swift 3 | // StockMarketForecaster 4 | // 5 | // Created by Dicky on 01/06/20. 6 | // Copyright © 2020 Organization Name. All rights reserved. 7 | // 8 | 9 | import CoreML 10 | 11 | internal protocol DynamicMLModelInput: AnyObject, MLFeatureProvider { 12 | init() 13 | init(data: [String: Any]) 14 | 15 | func validateInput() throws 16 | } 17 | -------------------------------------------------------------------------------- /StockMarketForecaster/Base/String.swift: -------------------------------------------------------------------------------- 1 | // 2 | // String.swift 3 | // StockMarketForecaster 4 | // 5 | // Created by Dicky on 02/06/20. 6 | // Copyright © 2020 Organization Name. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | extension Double { 12 | func decimal(_ total: Int) -> String { 13 | String(format: "%\(total)g", self) 14 | } 15 | 16 | func decimalLessThanOne(_ total: Int) -> String { 17 | String(format: "%.\(total)g", self) 18 | } 19 | } 20 | 21 | -------------------------------------------------------------------------------- /StockMarketForecaster/Domain/DynamicMLModel/DynamicMLModelError.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DynamicMLModelError.swift 3 | // StockMarketForecaster 4 | // 5 | // Created by Dicky on 01/06/20. 6 | // Copyright © 2020 Organization Name. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | enum DynamicMLModelError: Error { 12 | case errorMessages([String]) 13 | 14 | var localizedDescription: String { 15 | switch self { 16 | case .errorMessages(let errors): 17 | return errors.joined(separator: "\n") 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /StockMarketForecaster/Presentation/Detail/DetailState.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DetailState.swift 3 | // StockMarketForecaster 4 | // 5 | // Created by Dicky on 01/06/20. 6 | // Copyright © 2020 Organization Name. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | internal final class DetailState { 12 | var ticker: String = "" 13 | 14 | var actualData: [StockMarketEntity] = [] 15 | var predictedData: [StockMarketEntity] = [] 16 | 17 | var selectedDate: String = "-" 18 | var actualClose: Double = 0 19 | var predictedClose: Double = 0 20 | } 21 | -------------------------------------------------------------------------------- /Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - Charts (3.5.0): 3 | - Charts/Core (= 3.5.0) 4 | - Charts/Core (3.5.0) 5 | - SwiftCSV (0.5.6) 6 | - SwiftDate (6.1.0) 7 | - SwiftyJSON (5.0.0) 8 | 9 | DEPENDENCIES: 10 | - Charts (= 3.5.0) 11 | - SwiftCSV (= 0.5.6) 12 | - SwiftDate (= 6.1.0) 13 | - SwiftyJSON (= 5.0) 14 | 15 | SPEC REPOS: 16 | trunk: 17 | - Charts 18 | - SwiftCSV 19 | - SwiftDate 20 | - SwiftyJSON 21 | 22 | SPEC CHECKSUMS: 23 | Charts: 40a08591df1f8ad5c223ddedfb1a06da92f24f7c 24 | SwiftCSV: efb4a15dd7f2f1212b3d6986f97a3369ff6c5100 25 | SwiftDate: fa2bb3962056bb44047b4b85a30044e5eae30b03 26 | SwiftyJSON: 36413e04c44ee145039d332b4f4e2d3e8d6c4db7 27 | 28 | PODFILE CHECKSUM: fed32182fe1549e1aff2291e5420b1f2ab21ffc7 29 | 30 | COCOAPODS: 1.8.4 31 | -------------------------------------------------------------------------------- /StockMarketForecaster/Base/Array+NSCopying.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Array+NSCopying.swift 3 | // StockMarketForecaster 4 | // 5 | // Created by Dicky on 02/06/20. 6 | // Copyright © 2020 Organization Name. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | extension Array where Element: NSCopying { 12 | func copy(with zone: NSZone? = nil) -> [Element] { 13 | var result: [Element] = [] 14 | for element in self { 15 | let copiedElement = element.copy(with: zone) as? Element 16 | if let data = copiedElement { 17 | result.append(data) 18 | } 19 | } 20 | 21 | return result 22 | } 23 | } 24 | 25 | extension Array { 26 | subscript(safe index: Int) -> Element? { 27 | guard index >= 0 && index < self.count else { return nil } 28 | return self[index] 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /StockMarketForecaster/Domain/StockMarketModel/StockMarketModelOutput.swift: -------------------------------------------------------------------------------- 1 | // 2 | // StockMarketModelOutput.swift 3 | // StockMarketForecaster 4 | // 5 | // Created by Dicky on 01/06/20. 6 | // Copyright © 2020 Organization Name. All rights reserved. 7 | // 8 | 9 | import CoreML 10 | 11 | internal final class StockMarketModelOutput: DynamicMLModelOutput { 12 | typealias Output = Double 13 | 14 | // MARK: - Properties 15 | private let provider: MLFeatureProvider 16 | 17 | var featureNames: Set { 18 | provider.featureNames 19 | } 20 | 21 | lazy var output: Double = { [unowned self] in 22 | return self.provider.featureValue(for: self.provider.featureNames.first!)!.doubleValue 23 | }() 24 | 25 | // MARK: - Initializations 26 | init(features: MLFeatureProvider) { 27 | provider = features 28 | } 29 | 30 | // MARK: - General Methods 31 | func featureValue(for featureName: String) -> MLFeatureValue? { 32 | return provider.featureValue(for: featureName) 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 DickyChengg 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /StockMarketForecaster/Domain/StockMarketEntity.swift: -------------------------------------------------------------------------------- 1 | // 2 | // StockMarketEntity.swift 3 | // StockMarketForecaster 4 | // 5 | // Created by Dicky on 01/06/20. 6 | // Copyright © 2020 Organization Name. All rights reserved. 7 | // 8 | 9 | import SwiftDate 10 | import SwiftyJSON 11 | 12 | final class StockMarketEntity: NSCopying { 13 | var open: Double = 0.0 14 | var high: Double = 0.0 15 | var low: Double = 0.0 16 | var volume: Double = 0.0 17 | var close: Double = 0.0 18 | var timestamp: Double = 0.0 19 | private(set) var json: [String: Any] = [:] 20 | 21 | var dateString: String { 22 | Date(timeIntervalSince1970: timestamp).toFormat("d MMMM yyyy") 23 | } 24 | 25 | init(json: JSON) { 26 | self.json = json.dictionaryObject.ifNil([:]) 27 | 28 | open = json["Open"].doubleValue 29 | high = json["High"].doubleValue 30 | low = json["Low"].doubleValue 31 | close = json["Close"].doubleValue 32 | volume = json["Volume"].doubleValue 33 | timestamp = json["Timestamp"].doubleValue 34 | } 35 | 36 | func copy(with zone: NSZone? = nil) -> Any { 37 | let data = StockMarketEntity(json: [:]) 38 | data.open = open 39 | data.high = high 40 | data.low = low 41 | data.volume = volume 42 | data.close = close 43 | data.timestamp = timestamp 44 | return data 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /StockMarketForecaster/Data/StockMarket/StockMarketLocal.swift: -------------------------------------------------------------------------------- 1 | // 2 | // StockMarketLocal.swift 3 | // StockMarketForecaster 4 | // 5 | // Created by Dicky on 01/06/20. 6 | // Copyright © 2020 Organization Name. All rights reserved. 7 | // 8 | 9 | import SwiftCSV 10 | import SwiftyJSON 11 | 12 | internal final class StockMarketLocal { 13 | enum Error: Swift.Error { 14 | case failedToReadCsv 15 | 16 | var localizedDescription: String { 17 | "Failed to read CSV" 18 | } 19 | } 20 | 21 | func load( 22 | ticker: String, 23 | onComplete: @escaping ([StockMarketEntity], Swift.Error?) -> Void 24 | ) { 25 | DispatchQueue.global(qos: .userInitiated).async { 26 | do { 27 | let resource: CSV? = try CSV( 28 | name: ticker, 29 | extension: "csv", 30 | bundle: .main, 31 | encoding: .utf8 32 | ) 33 | guard let csv = resource else { 34 | return onComplete([], Error.failedToReadCsv) 35 | } 36 | 37 | let jsonArray = JSON(csv.namedRows).arrayValue.suffix(100) 38 | let result: [StockMarketEntity] = jsonArray.map(StockMarketEntity.init) 39 | 40 | DispatchQueue.main.async { 41 | onComplete(result, nil) 42 | } 43 | } catch { 44 | onComplete([], error) 45 | } 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /StockMarketForecaster/Base/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // StockMarketForecaster 4 | // 5 | // Created by Dicky on 31/05/20. 6 | // Copyright © 2020 Organization Name. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @UIApplicationMain 12 | class AppDelegate: UIResponder, UIApplicationDelegate { 13 | 14 | 15 | 16 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 17 | // Override point for customization after application launch. 18 | return true 19 | } 20 | 21 | // MARK: UISceneSession Lifecycle 22 | 23 | func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { 24 | // Called when a new scene session is being created. 25 | // Use this method to select a configuration to create the new scene with. 26 | return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) 27 | } 28 | 29 | func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) { 30 | // Called when the user discards a scene session. 31 | // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. 32 | // Use this method to release any resources that were specific to the discarded scenes, as they will not return. 33 | } 34 | 35 | 36 | } 37 | 38 | -------------------------------------------------------------------------------- /StockMarketForecaster/Presentation/Storyboard/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /StockMarketForecaster/Domain/StockMarketModel/StockMarketModelInput.swift: -------------------------------------------------------------------------------- 1 | // 2 | // StockMarketModelInput.swift 3 | // StockMarketForecaster 4 | // 5 | // Created by Dicky on 01/06/20. 6 | // Copyright © 2020 Organization Name. All rights reserved. 7 | // 8 | 9 | import CoreML 10 | 11 | internal final class StockMarketModelInput: DynamicMLModelInput { 12 | private(set) var data: [String: Any] 13 | var featureNames: Set = ["Open", "High", "Low", "Volume", "Timestamp"] 14 | 15 | // MARK: - Initializations 16 | init() { 17 | data = [:] 18 | } 19 | 20 | init(data: [String : Any]) { 21 | self.data = data 22 | } 23 | 24 | // MARK: - Setter Methods 25 | func set(open: Double) { 26 | data["Open"] = open 27 | } 28 | 29 | func set(high: Double) { 30 | data["High"] = high 31 | } 32 | 33 | func set(low: Double) { 34 | data["Low"] = low 35 | } 36 | 37 | func set(volume: Double) { 38 | data["Volume"] = volume 39 | } 40 | 41 | func set(timestamp: Double) { 42 | data["Timestamp"] = timestamp 43 | } 44 | 45 | // MARK: - General Methods 46 | func validateInput() throws { 47 | var errorMessages: [String] = [] 48 | let keys = data.keys 49 | 50 | for featureName in featureNames { 51 | if !keys.contains(featureName) { 52 | errorMessages.append("`\(featureName)` not found!") 53 | } 54 | } 55 | 56 | if !errorMessages.isEmpty { 57 | throw DynamicMLModelError.errorMessages(errorMessages) 58 | } 59 | } 60 | 61 | func featureValue(for featureName: String) -> MLFeatureValue? { 62 | guard let str = data[featureName] as? String, let doubleValue = Double(str) else { return nil } 63 | return MLFeatureValue(double: doubleValue) 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /StockMarketForecaster/Domain/StockMarketInteractor.swift: -------------------------------------------------------------------------------- 1 | // 2 | // StockMarketInteractor.swift 3 | // StockMarketForecaster 4 | // 5 | // Created by Dicky on 01/06/20. 6 | // Copyright © 2020 Organization Name. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import SwiftyJSON 11 | 12 | public final class StockMarketInteractor { 13 | private lazy var dataLoader = StockMarketLocal() 14 | 15 | func load( 16 | ticker: String, 17 | onComplete: @escaping ([StockMarketEntity], Error?) -> Void 18 | ) { 19 | dataLoader.load(ticker: ticker, onComplete: onComplete) 20 | } 21 | 22 | func predictions(data inputs: [BBCAInput]) throws -> [StockMarketEntity] { 23 | let result: [StockMarketEntity] = inputs.map { item in 24 | let data = StockMarketEntity(json: [:]) 25 | data.open = item.Open 26 | data.high = item.High 27 | data.low = item.Low 28 | data.volume = item.Volume 29 | data.timestamp = item.Timestamp 30 | return data 31 | } 32 | 33 | let model = BBCA() 34 | let outputs: [BBCAOutput] = try model.predictions(inputs: inputs) 35 | 36 | for (index, output) in outputs.enumerated() { 37 | result[index].close = output.Close 38 | } 39 | return result 40 | } 41 | 42 | func predictions(ticker: String, data inputs: [StockMarketModelInput]) throws -> [StockMarketEntity] { 43 | let result: [StockMarketEntity] = inputs.map { item in 44 | let json = JSON(item.data) 45 | return StockMarketEntity(json: json) 46 | } 47 | 48 | let model = try DynamicMLModel(model: ticker) 49 | let outputs: [StockMarketModelOutput] = try model.predictions(inputs: inputs) 50 | 51 | for (index, output) in outputs.enumerated() { 52 | result[index].close = output.output 53 | } 54 | return result 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /StockMarketForecaster/Base/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "20x20", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "20x20", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "29x29", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "29x29", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "40x40", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "40x40", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "size" : "60x60", 36 | "scale" : "2x" 37 | }, 38 | { 39 | "idiom" : "iphone", 40 | "size" : "60x60", 41 | "scale" : "3x" 42 | }, 43 | { 44 | "idiom" : "ipad", 45 | "size" : "20x20", 46 | "scale" : "1x" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "size" : "20x20", 51 | "scale" : "2x" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "size" : "29x29", 56 | "scale" : "1x" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "size" : "29x29", 61 | "scale" : "2x" 62 | }, 63 | { 64 | "idiom" : "ipad", 65 | "size" : "40x40", 66 | "scale" : "1x" 67 | }, 68 | { 69 | "idiom" : "ipad", 70 | "size" : "40x40", 71 | "scale" : "2x" 72 | }, 73 | { 74 | "idiom" : "ipad", 75 | "size" : "76x76", 76 | "scale" : "1x" 77 | }, 78 | { 79 | "idiom" : "ipad", 80 | "size" : "76x76", 81 | "scale" : "2x" 82 | }, 83 | { 84 | "idiom" : "ipad", 85 | "size" : "83.5x83.5", 86 | "scale" : "2x" 87 | }, 88 | { 89 | "idiom" : "ios-marketing", 90 | "size" : "1024x1024", 91 | "scale" : "1x" 92 | } 93 | ], 94 | "info" : { 95 | "version" : 1, 96 | "author" : "xcode" 97 | } 98 | } -------------------------------------------------------------------------------- /StockMarketForecaster/Presentation/Detail/DetailChartGenerator.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DetailChartGenerator.swift 3 | // StockMarketForecaster 4 | // 5 | // Created by Dicky on 02/06/20. 6 | // Copyright © 2020 Organization Name. All rights reserved. 7 | // 8 | 9 | import Charts 10 | 11 | final class DetailChartGenerator { 12 | func createLineChartData(actualData: [StockMarketEntity], predictedData: [StockMarketEntity]) -> LineChartData? { 13 | let chartData = LineChartData() 14 | 15 | if !actualData.isEmpty { 16 | let dataSet = createActualChartDataSet(data: actualData) 17 | chartData.addDataSet(dataSet) 18 | } 19 | 20 | if !predictedData.isEmpty { 21 | let dataSet = createPredictedChartDataSet(data: predictedData) 22 | chartData.addDataSet(dataSet) 23 | } 24 | 25 | if chartData.dataSets.isEmpty { 26 | return nil 27 | } 28 | return chartData 29 | } 30 | 31 | private func createActualChartDataSet(data: [StockMarketEntity]) -> LineChartDataSet { 32 | let dataEntries = createChartDataEntries(data: data) 33 | let dataSet = LineChartDataSet(entries: dataEntries, label: "Actual Data") 34 | dataSet.colors = [UIColor.gray] 35 | dataSet.circleColors = [UIColor.blue] 36 | dataSet.circleRadius = 1 37 | return dataSet 38 | } 39 | 40 | private func createPredictedChartDataSet(data: [StockMarketEntity]) -> LineChartDataSet { 41 | let dataEntries = createChartDataEntries(data: data) 42 | let dataSet = LineChartDataSet(entries: dataEntries, label: "Predicted Data") 43 | dataSet.colors = [UIColor.yellow] 44 | dataSet.circleColors = [UIColor.red] 45 | dataSet.circleRadius = 1 46 | return dataSet 47 | } 48 | 49 | private func createChartDataEntries(data: [StockMarketEntity]) -> [ChartDataEntry] { 50 | var dataEntries: [ChartDataEntry] = [] 51 | for (index, item) in data.enumerated() { 52 | let doubleIndex = Double(index) 53 | let entry = ChartDataEntry(x: doubleIndex, y: item.close) 54 | dataEntries.append(entry) 55 | } 56 | return dataEntries 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /StockMarketForecaster/Base/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | LSRequiresIPhoneOS 22 | 23 | UIApplicationSceneManifest 24 | 25 | UIApplicationSupportsMultipleScenes 26 | 27 | UISceneConfigurations 28 | 29 | UIWindowSceneSessionRoleApplication 30 | 31 | 32 | UISceneConfigurationName 33 | Default Configuration 34 | UISceneDelegateClassName 35 | $(PRODUCT_MODULE_NAME).SceneDelegate 36 | UISceneStoryboardFile 37 | Main 38 | 39 | 40 | 41 | 42 | UILaunchStoryboardName 43 | LaunchScreen 44 | UIMainStoryboardFile 45 | Main 46 | UIRequiredDeviceCapabilities 47 | 48 | armv7 49 | 50 | UIStatusBarTintParameters 51 | 52 | UINavigationBar 53 | 54 | Style 55 | UIBarStyleDefault 56 | Translucent 57 | 58 | 59 | 60 | UISupportedInterfaceOrientations 61 | 62 | UIInterfaceOrientationPortrait 63 | UIInterfaceOrientationLandscapeLeft 64 | UIInterfaceOrientationLandscapeRight 65 | 66 | UISupportedInterfaceOrientations~ipad 67 | 68 | UIInterfaceOrientationPortrait 69 | UIInterfaceOrientationPortraitUpsideDown 70 | UIInterfaceOrientationLandscapeLeft 71 | UIInterfaceOrientationLandscapeRight 72 | 73 | 74 | 75 | -------------------------------------------------------------------------------- /StockMarketForecaster/Domain/DynamicMLModel/DynamicMLModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DynamicMLModel.swift 3 | // StockMarketForecaster 4 | // 5 | // Created by Dicky on 01/06/20. 6 | // Copyright © 2020 Organization Name. All rights reserved. 7 | // 8 | 9 | import CoreML 10 | 11 | internal final class DynamicMLModel { 12 | private let model: MLModel 13 | 14 | init(model: String) throws { 15 | let bundle = Bundle(for: DynamicMLModel.self) 16 | guard let modelURL = bundle.url(forResource: model, withExtension: "mlmodelc") else { 17 | throw DynamicMLModelError.errorMessages(["MLModel with name: \(model) not found!"]) 18 | } 19 | 20 | do { 21 | self.model = try MLModel(contentsOf: modelURL) 22 | } catch { 23 | throw DynamicMLModelError.errorMessages(["Failed to dynamically load \(model): \(error.localizedDescription)"]) 24 | } 25 | } 26 | 27 | func prediction( 28 | input: Input, 29 | options: MLPredictionOptions = MLPredictionOptions() 30 | ) throws -> Output { 31 | try validateInput(inputs: [input]) 32 | 33 | let outFeatures = try model.prediction(from: input, options: options) 34 | return Output.init(features: outFeatures) 35 | } 36 | 37 | func predictions( 38 | inputs: [Input], 39 | options: MLPredictionOptions = MLPredictionOptions() 40 | ) throws -> [Output] { 41 | try validateInput(inputs: inputs) 42 | 43 | let batchIn = MLArrayBatchProvider(array: inputs) 44 | let batchOut = try model.predictions(from: batchIn, options: options) 45 | 46 | var results: [Output] = [] 47 | results.reserveCapacity(inputs.count) 48 | for i in 0.. Int { 50 | return 1 51 | } 52 | 53 | override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 54 | return tickers.count 55 | } 56 | 57 | override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 58 | let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) 59 | cell.textLabel?.text = tickers[indexPath.row] 60 | return cell 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 4 | 5 | ## Data 6 | Pods/ 7 | *.xcworkspace 8 | 9 | ## User settings 10 | xcuserdata/ 11 | xcshareddata/ 12 | 13 | ## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9) 14 | *.xcscmblueprint 15 | *.xccheckout 16 | 17 | ## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4) 18 | build/ 19 | DerivedData/ 20 | *.moved-aside 21 | *.pbxuser 22 | !default.pbxuser 23 | *.mode1v3 24 | !default.mode1v3 25 | *.mode2v3 26 | !default.mode2v3 27 | *.perspectivev3 28 | !default.perspectivev3 29 | 30 | ## Obj-C/Swift specific 31 | *.hmap 32 | 33 | ## App packaging 34 | *.ipa 35 | *.dSYM.zip 36 | *.dSYM 37 | 38 | ## Playgrounds 39 | timeline.xctimeline 40 | playground.xcworkspace 41 | 42 | # Swift Package Manager 43 | # 44 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. 45 | # Packages/ 46 | # Package.pins 47 | # Package.resolved 48 | # *.xcodeproj 49 | # 50 | # Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata 51 | # hence it is not needed unless you have added a package configuration file to your project 52 | # .swiftpm 53 | 54 | .build/ 55 | 56 | # CocoaPods 57 | # 58 | # We recommend against adding the Pods directory to your .gitignore. However 59 | # you should judge for yourself, the pros and cons are mentioned at: 60 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 61 | # 62 | # Pods/ 63 | # 64 | # Add this line if you want to avoid checking in source code from the Xcode workspace 65 | # *.xcworkspace 66 | 67 | # Carthage 68 | # 69 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 70 | # Carthage/Checkouts 71 | 72 | Carthage/Build/ 73 | 74 | # Accio dependency management 75 | Dependencies/ 76 | .accio/ 77 | 78 | # fastlane 79 | # 80 | # It is recommended to not store the screenshots in the git repo. 81 | # Instead, use fastlane to re-generate the screenshots whenever they are needed. 82 | # For more information about the recommended setup visit: 83 | # https://docs.fastlane.tools/best-practices/source-control/#source-control 84 | 85 | fastlane/report.xml 86 | fastlane/Preview.html 87 | fastlane/screenshots/**/*.png 88 | fastlane/test_output 89 | 90 | # Code Injection 91 | # 92 | # After new code Injection tools there's a generated folder /iOSInjectionProject 93 | # https://github.com/johnno1962/injectionforxcode 94 | 95 | iOSInjectionProject/ -------------------------------------------------------------------------------- /StockMarketForecaster/Presentation/Detail/DetailPresenter.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DetailPresenter.swift 3 | // StockMarketForecaster 4 | // 5 | // Created by Dicky on 01/06/20. 6 | // Copyright © 2020 Organization Name. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | internal final class DetailPresenter { 12 | enum DatePickerSource: String { 13 | case fromDate = "From Date" 14 | case toDate = "To Date" 15 | case selectedDate = "Selected Date" 16 | } 17 | 18 | weak var view: DetailViewController? 19 | lazy var interactor: StockMarketInteractor = StockMarketInteractor() 20 | let state: DetailState 21 | 22 | private var currentDatePickerSource: DatePickerSource! 23 | 24 | init(vc: DetailViewController) { 25 | view = vc 26 | state = DetailState() 27 | } 28 | 29 | func viewWillAppear() { 30 | loadData() 31 | } 32 | 33 | private func render() { 34 | view?.render(state: state) 35 | } 36 | 37 | private func loadData() { 38 | view?.showLoading() 39 | interactor.load(ticker: state.ticker) { [weak self] (response, error) in 40 | guard let ws = self else { return } 41 | ws.view?.hideLoading() 42 | 43 | if let error = error { 44 | ws.view?.presentError(message: error.localizedDescription) 45 | } else { 46 | ws.state.actualData = response 47 | } 48 | ws.render() 49 | } 50 | render() 51 | } 52 | } 53 | 54 | // MARK: - General Methods 55 | extension DetailPresenter { 56 | func set(ticker: String) { 57 | state.ticker = ticker 58 | } 59 | 60 | func predict() { 61 | // Convert Entity to MLModelInput 62 | let inputs: [StockMarketModelInput] = state.actualData.map { item in 63 | StockMarketModelInput(data: item.json) 64 | } 65 | 66 | // Start Predicting 67 | do { 68 | state.predictedData = try interactor.predictions(ticker: state.ticker, data: inputs) 69 | render() 70 | } catch { 71 | view?.presentError(message: error.localizedDescription) 72 | } 73 | } 74 | 75 | func calculateAccuracy(actual: Double, predicted: Double) -> Double { 76 | let absError = abs(predicted - actual) 77 | let diff = absError / actual 78 | let errorPercentage = diff * 100 79 | return errorPercentage 80 | } 81 | 82 | func chartValueSelected(index: Int) { 83 | if let data = state.actualData[safe: index] { 84 | state.selectedDate = data.dateString 85 | state.actualClose = data.close 86 | } 87 | 88 | if let data = state.predictedData[safe: index] { 89 | state.predictedClose = data.close 90 | } 91 | render() 92 | } 93 | } 94 | -------------------------------------------------------------------------------- /StockMarketForecaster/Presentation/Detail/DetailViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DetailViewController.swift 3 | // StockMarketForecaster 4 | // 5 | // Created by Dicky on 31/05/20. 6 | // Copyright © 2020 Organization Name. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import Charts 11 | 12 | internal final class DetailViewController: UIViewController { 13 | private(set) lazy var presenter: DetailPresenter = DetailPresenter(vc: self) 14 | private lazy var chartGenerator: DetailChartGenerator = DetailChartGenerator() 15 | 16 | @IBOutlet weak var chart: LineChartView! 17 | @IBOutlet weak var loadingView: UIView! 18 | 19 | // MARK: Detail Information 20 | @IBOutlet weak var selectedDateLbl: UILabel! 21 | @IBOutlet weak var actualCloseLbl: UILabel! 22 | @IBOutlet weak var predictedCloseLbl: UILabel! 23 | @IBOutlet weak var accuracyLbl: UILabel! 24 | 25 | override func viewDidLoad() { 26 | super.viewDidLoad() 27 | hideLoading() 28 | chart.delegate = self 29 | } 30 | 31 | override func viewWillAppear(_ animated: Bool) { 32 | super.viewWillAppear(animated) 33 | presenter.viewWillAppear() 34 | } 35 | 36 | @IBAction func onTapPredictBtn(_ sender: Any) { 37 | presenter.predict() 38 | } 39 | } 40 | 41 | // MARK: - Render 42 | extension DetailViewController { 43 | func render(state: DetailState) { 44 | title = state.ticker 45 | 46 | renderCharts(state: state) 47 | renderDetailInformation(state: state) 48 | } 49 | 50 | private func renderCharts(state: DetailState) { 51 | let lineChartData = chartGenerator.createLineChartData( 52 | actualData: state.actualData, 53 | predictedData: state.predictedData 54 | ) 55 | chart.data = lineChartData 56 | } 57 | 58 | private func renderDetailInformation(state: DetailState) { 59 | selectedDateLbl.text = state.selectedDate 60 | actualCloseLbl.text = state.actualClose.decimal(3) 61 | predictedCloseLbl.text = state.predictedClose.decimal(3) 62 | 63 | let accuracy = presenter.calculateAccuracy( 64 | actual: state.actualClose, 65 | predicted: state.predictedClose 66 | ) 67 | if accuracy.isNaN { 68 | accuracyLbl.text = "-" 69 | } else { 70 | let accuracyStr = accuracy.decimalLessThanOne(3) 71 | accuracyLbl.text = "\(accuracyStr)%" 72 | } 73 | } 74 | } 75 | 76 | // MARK: - Interaction 77 | extension DetailViewController { 78 | func showLoading() { 79 | loadingView.alpha = 0.5 80 | } 81 | 82 | func hideLoading() { 83 | loadingView.alpha = 0 84 | } 85 | 86 | func presentError(message: String) { 87 | let alert = UIAlertController( 88 | title: "Error", 89 | message: message, 90 | preferredStyle: .alert 91 | ) 92 | alert.addAction( 93 | UIAlertAction(title: "OK", style: .default, handler: nil) 94 | ) 95 | self.present(alert, animated: true, completion: nil) 96 | } 97 | } 98 | 99 | extension DetailViewController: ChartViewDelegate { 100 | func chartValueSelected(_ chartView: ChartViewBase, entry: ChartDataEntry, highlight: Highlight) { 101 | let index = Int(entry.x) 102 | presenter.chartValueSelected(index: index) 103 | } 104 | } 105 | -------------------------------------------------------------------------------- /StockMarketForecaster/Base/SceneDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SceneDelegate.swift 3 | // StockMarketForecaster 4 | // 5 | // Created by Dicky on 31/05/20. 6 | // Copyright © 2020 Organization Name. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class SceneDelegate: UIResponder, UIWindowSceneDelegate, UISplitViewControllerDelegate { 12 | 13 | var window: UIWindow? 14 | 15 | 16 | func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { 17 | // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. 18 | // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. 19 | // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). 20 | guard let window = window else { return } 21 | guard let splitViewController = window.rootViewController as? UISplitViewController else { return } 22 | guard let navigationController = splitViewController.viewControllers.last as? UINavigationController else { return } 23 | navigationController.topViewController?.navigationItem.leftBarButtonItem = splitViewController.displayModeButtonItem 24 | navigationController.topViewController?.navigationItem.leftItemsSupplementBackButton = true 25 | splitViewController.delegate = self 26 | } 27 | 28 | func sceneDidDisconnect(_ scene: UIScene) { 29 | // Called as the scene is being released by the system. 30 | // This occurs shortly after the scene enters the background, or when its session is discarded. 31 | // Release any resources associated with this scene that can be re-created the next time the scene connects. 32 | // The scene may re-connect later, as its session was not neccessarily discarded (see `application:didDiscardSceneSessions` instead). 33 | } 34 | 35 | func sceneDidBecomeActive(_ scene: UIScene) { 36 | // Called when the scene has moved from an inactive state to an active state. 37 | // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive. 38 | } 39 | 40 | func sceneWillResignActive(_ scene: UIScene) { 41 | // Called when the scene will move from an active state to an inactive state. 42 | // This may occur due to temporary interruptions (ex. an incoming phone call). 43 | } 44 | 45 | func sceneWillEnterForeground(_ scene: UIScene) { 46 | // Called as the scene transitions from the background to the foreground. 47 | // Use this method to undo the changes made on entering the background. 48 | } 49 | 50 | func sceneDidEnterBackground(_ scene: UIScene) { 51 | // Called as the scene transitions from the foreground to the background. 52 | // Use this method to save data, release shared resources, and store enough scene-specific state information 53 | // to restore the scene back to its current state. 54 | } 55 | 56 | // MARK: - Split view 57 | 58 | func splitViewController(_ splitViewController: UISplitViewController, collapseSecondary secondaryViewController:UIViewController, onto primaryViewController:UIViewController) -> Bool { 59 | // guard let secondaryAsNavController = secondaryViewController as? UINavigationController else { return false } 60 | // guard let topAsDetailController = secondaryAsNavController.topViewController as? DetailViewController else { return false } 61 | // if topAsDetailController.detailItem == nil { 62 | // // Return true to indicate that we have handled the collapse by doing nothing; the secondary controller will be discarded. 63 | // return true 64 | // } 65 | return true 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /StockMarketForecaster/Presentation/Storyboard/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 50 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 80 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 110 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 140 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | -------------------------------------------------------------------------------- /StockMarketForecaster.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 51; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 1FB226E465720D19E5BFD0F7 /* Pods_StockMarketForecaster.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8C1020503D0752C770D435A5 /* Pods_StockMarketForecaster.framework */; }; 11 | 8E2F227E2483A90800EEDC89 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E2F227D2483A90800EEDC89 /* AppDelegate.swift */; }; 12 | 8E2F22802483A90800EEDC89 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E2F227F2483A90800EEDC89 /* SceneDelegate.swift */; }; 13 | 8E2F22822483A90800EEDC89 /* MasterViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E2F22812483A90800EEDC89 /* MasterViewController.swift */; }; 14 | 8E2F22842483A90800EEDC89 /* DetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E2F22832483A90800EEDC89 /* DetailViewController.swift */; }; 15 | 8E2F22872483A90800EEDC89 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 8E2F22852483A90800EEDC89 /* Main.storyboard */; }; 16 | 8E2F22892483A90900EEDC89 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 8E2F22882483A90900EEDC89 /* Assets.xcassets */; }; 17 | 8E2F228C2483A90900EEDC89 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 8E2F228A2483A90900EEDC89 /* LaunchScreen.storyboard */; }; 18 | 8E3D94BF248591BA00D72D8B /* String.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E3D94BE248591BA00D72D8B /* String.swift */; }; 19 | 8E3D94C12485988900D72D8B /* StockMarketInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E3D94C02485988900D72D8B /* StockMarketInteractor.swift */; }; 20 | 8E7327312487B2E90027CA71 /* BBCA.mlmodel in Sources */ = {isa = PBXBuildFile; fileRef = 8E7327302487B2E90027CA71 /* BBCA.mlmodel */; }; 21 | 8E7327332487B4790027CA71 /* BBCA.csv in Resources */ = {isa = PBXBuildFile; fileRef = 8E7327322487B4790027CA71 /* BBCA.csv */; }; 22 | 8E7327342487B70F0027CA71 /* DynamicMLModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8EC247A7248511DE002946E6 /* DynamicMLModel.swift */; }; 23 | 8E7327352487B81B0027CA71 /* StockMarketModelInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8EC247B224851343002946E6 /* StockMarketModelInput.swift */; }; 24 | 8E7327362487B81D0027CA71 /* StockMarketModelOutput.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8EC247B4248514F8002946E6 /* StockMarketModelOutput.swift */; }; 25 | 8EA5968124856FAD00F0AA8E /* Array+NSCopying.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8EA5968024856FAD00F0AA8E /* Array+NSCopying.swift */; }; 26 | 8EA5968324857C1700F0AA8E /* DetailChartGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8EA5968224857C1700F0AA8E /* DetailChartGenerator.swift */; }; 27 | 8EAC87C724867E3900D91F4F /* AAPL.mlmodel in Sources */ = {isa = PBXBuildFile; fileRef = 8EAC87C624867E3900D91F4F /* AAPL.mlmodel */; }; 28 | 8EAC87C92486822B00D91F4F /* DynamicMLModelInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8EC247A9248511F5002946E6 /* DynamicMLModelInput.swift */; }; 29 | 8EAC87CA2486822E00D91F4F /* DynamicMLModelOutput.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8EC247AB2485121A002946E6 /* DynamicMLModelOutput.swift */; }; 30 | 8EC2479024845585002946E6 /* DetailPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8EC2478F24845585002946E6 /* DetailPresenter.swift */; }; 31 | 8EC24792248455D7002946E6 /* DetailState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8EC24791248455D7002946E6 /* DetailState.swift */; }; 32 | 8EC247942484F26F002946E6 /* Optional.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8EC247932484F26F002946E6 /* Optional.swift */; }; 33 | 8EC2479724850DD9002946E6 /* AMZN.mlmodel in Sources */ = {isa = PBXBuildFile; fileRef = 8EC2479624850DD9002946E6 /* AMZN.mlmodel */; }; 34 | 8EC2479B24850DE7002946E6 /* BABA.mlmodel in Sources */ = {isa = PBXBuildFile; fileRef = 8EC2479A24850DE7002946E6 /* BABA.mlmodel */; }; 35 | 8EC2479D24850DF0002946E6 /* FB.mlmodel in Sources */ = {isa = PBXBuildFile; fileRef = 8EC2479C24850DF0002946E6 /* FB.mlmodel */; }; 36 | 8EC2479F24850DFB002946E6 /* GOOG.mlmodel in Sources */ = {isa = PBXBuildFile; fileRef = 8EC2479E24850DFB002946E6 /* GOOG.mlmodel */; }; 37 | 8EC247A124850E02002946E6 /* IBM.mlmodel in Sources */ = {isa = PBXBuildFile; fileRef = 8EC247A024850E02002946E6 /* IBM.mlmodel */; }; 38 | 8EC247A324850E0D002946E6 /* INTC.mlmodel in Sources */ = {isa = PBXBuildFile; fileRef = 8EC247A224850E0C002946E6 /* INTC.mlmodel */; }; 39 | 8EC247A524850E12002946E6 /* MSFT.mlmodel in Sources */ = {isa = PBXBuildFile; fileRef = 8EC247A424850E12002946E6 /* MSFT.mlmodel */; }; 40 | 8EC247AE24851257002946E6 /* DynamicMLModelError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8EC247AD24851257002946E6 /* DynamicMLModelError.swift */; }; 41 | 8EC247BC24851FCD002946E6 /* StockMarketLocal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8EC247BB24851FCD002946E6 /* StockMarketLocal.swift */; }; 42 | 8EC247BE24851FDC002946E6 /* StockMarketEntity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8EC247BD24851FDC002946E6 /* StockMarketEntity.swift */; }; 43 | 8EC247CA24852190002946E6 /* MSFT.csv in Resources */ = {isa = PBXBuildFile; fileRef = 8EC247C224852190002946E6 /* MSFT.csv */; }; 44 | 8EC247CB24852190002946E6 /* INTC.csv in Resources */ = {isa = PBXBuildFile; fileRef = 8EC247C324852190002946E6 /* INTC.csv */; }; 45 | 8EC247CC24852190002946E6 /* AMZN.csv in Resources */ = {isa = PBXBuildFile; fileRef = 8EC247C424852190002946E6 /* AMZN.csv */; }; 46 | 8EC247CD24852190002946E6 /* IBM.csv in Resources */ = {isa = PBXBuildFile; fileRef = 8EC247C524852190002946E6 /* IBM.csv */; }; 47 | 8EC247CE24852190002946E6 /* AAPL.csv in Resources */ = {isa = PBXBuildFile; fileRef = 8EC247C624852190002946E6 /* AAPL.csv */; }; 48 | 8EC247CF24852190002946E6 /* BABA.csv in Resources */ = {isa = PBXBuildFile; fileRef = 8EC247C724852190002946E6 /* BABA.csv */; }; 49 | 8EC247D024852190002946E6 /* GOOG.csv in Resources */ = {isa = PBXBuildFile; fileRef = 8EC247C824852190002946E6 /* GOOG.csv */; }; 50 | 8EC247D124852190002946E6 /* FB.csv in Resources */ = {isa = PBXBuildFile; fileRef = 8EC247C924852190002946E6 /* FB.csv */; }; 51 | /* End PBXBuildFile section */ 52 | 53 | /* Begin PBXFileReference section */ 54 | 8C1020503D0752C770D435A5 /* Pods_StockMarketForecaster.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_StockMarketForecaster.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 55 | 8E2F227A2483A90800EEDC89 /* StockMarketForecaster.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = StockMarketForecaster.app; sourceTree = BUILT_PRODUCTS_DIR; }; 56 | 8E2F227D2483A90800EEDC89 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 57 | 8E2F227F2483A90800EEDC89 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; 58 | 8E2F22812483A90800EEDC89 /* MasterViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MasterViewController.swift; sourceTree = ""; }; 59 | 8E2F22832483A90800EEDC89 /* DetailViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailViewController.swift; sourceTree = ""; }; 60 | 8E2F22862483A90800EEDC89 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 61 | 8E2F22882483A90900EEDC89 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 62 | 8E2F228B2483A90900EEDC89 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 63 | 8E2F228D2483A90900EEDC89 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 64 | 8E3D94BE248591BA00D72D8B /* String.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = String.swift; sourceTree = ""; }; 65 | 8E3D94C02485988900D72D8B /* StockMarketInteractor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StockMarketInteractor.swift; sourceTree = ""; }; 66 | 8E7327302487B2E90027CA71 /* BBCA.mlmodel */ = {isa = PBXFileReference; lastKnownFileType = file.mlmodel; path = BBCA.mlmodel; sourceTree = ""; }; 67 | 8E7327322487B4790027CA71 /* BBCA.csv */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = BBCA.csv; sourceTree = ""; }; 68 | 8EA5968024856FAD00F0AA8E /* Array+NSCopying.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Array+NSCopying.swift"; sourceTree = ""; }; 69 | 8EA5968224857C1700F0AA8E /* DetailChartGenerator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailChartGenerator.swift; sourceTree = ""; }; 70 | 8EAC87C624867E3900D91F4F /* AAPL.mlmodel */ = {isa = PBXFileReference; lastKnownFileType = file.mlmodel; path = AAPL.mlmodel; sourceTree = ""; }; 71 | 8EC2478F24845585002946E6 /* DetailPresenter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailPresenter.swift; sourceTree = ""; }; 72 | 8EC24791248455D7002946E6 /* DetailState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailState.swift; sourceTree = ""; }; 73 | 8EC247932484F26F002946E6 /* Optional.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Optional.swift; sourceTree = ""; }; 74 | 8EC2479624850DD9002946E6 /* AMZN.mlmodel */ = {isa = PBXFileReference; lastKnownFileType = file.mlmodel; path = AMZN.mlmodel; sourceTree = ""; }; 75 | 8EC2479A24850DE7002946E6 /* BABA.mlmodel */ = {isa = PBXFileReference; lastKnownFileType = file.mlmodel; path = BABA.mlmodel; sourceTree = ""; }; 76 | 8EC2479C24850DF0002946E6 /* FB.mlmodel */ = {isa = PBXFileReference; lastKnownFileType = file.mlmodel; path = FB.mlmodel; sourceTree = ""; }; 77 | 8EC2479E24850DFB002946E6 /* GOOG.mlmodel */ = {isa = PBXFileReference; lastKnownFileType = file.mlmodel; path = GOOG.mlmodel; sourceTree = ""; }; 78 | 8EC247A024850E02002946E6 /* IBM.mlmodel */ = {isa = PBXFileReference; lastKnownFileType = file.mlmodel; path = IBM.mlmodel; sourceTree = ""; }; 79 | 8EC247A224850E0C002946E6 /* INTC.mlmodel */ = {isa = PBXFileReference; lastKnownFileType = file.mlmodel; path = INTC.mlmodel; sourceTree = ""; }; 80 | 8EC247A424850E12002946E6 /* MSFT.mlmodel */ = {isa = PBXFileReference; lastKnownFileType = file.mlmodel; path = MSFT.mlmodel; sourceTree = ""; }; 81 | 8EC247A7248511DE002946E6 /* DynamicMLModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DynamicMLModel.swift; sourceTree = ""; }; 82 | 8EC247A9248511F5002946E6 /* DynamicMLModelInput.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DynamicMLModelInput.swift; sourceTree = ""; }; 83 | 8EC247AB2485121A002946E6 /* DynamicMLModelOutput.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DynamicMLModelOutput.swift; sourceTree = ""; }; 84 | 8EC247AD24851257002946E6 /* DynamicMLModelError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DynamicMLModelError.swift; sourceTree = ""; }; 85 | 8EC247B224851343002946E6 /* StockMarketModelInput.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StockMarketModelInput.swift; sourceTree = ""; }; 86 | 8EC247B4248514F8002946E6 /* StockMarketModelOutput.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StockMarketModelOutput.swift; sourceTree = ""; }; 87 | 8EC247BB24851FCD002946E6 /* StockMarketLocal.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StockMarketLocal.swift; sourceTree = ""; }; 88 | 8EC247BD24851FDC002946E6 /* StockMarketEntity.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StockMarketEntity.swift; sourceTree = ""; }; 89 | 8EC247C224852190002946E6 /* MSFT.csv */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = MSFT.csv; sourceTree = ""; }; 90 | 8EC247C324852190002946E6 /* INTC.csv */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = INTC.csv; sourceTree = ""; }; 91 | 8EC247C424852190002946E6 /* AMZN.csv */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AMZN.csv; sourceTree = ""; }; 92 | 8EC247C524852190002946E6 /* IBM.csv */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IBM.csv; sourceTree = ""; }; 93 | 8EC247C624852190002946E6 /* AAPL.csv */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AAPL.csv; sourceTree = ""; }; 94 | 8EC247C724852190002946E6 /* BABA.csv */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = BABA.csv; sourceTree = ""; }; 95 | 8EC247C824852190002946E6 /* GOOG.csv */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = GOOG.csv; sourceTree = ""; }; 96 | 8EC247C924852190002946E6 /* FB.csv */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = FB.csv; sourceTree = ""; }; 97 | 8FEFCBDE3B14E5846B9F4FDA /* Pods-StockMarketForecaster.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-StockMarketForecaster.release.xcconfig"; path = "Target Support Files/Pods-StockMarketForecaster/Pods-StockMarketForecaster.release.xcconfig"; sourceTree = ""; }; 98 | 97AD363BCB04DCB7DB8F2266 /* Pods-StockMarketForecaster.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-StockMarketForecaster.debug.xcconfig"; path = "Target Support Files/Pods-StockMarketForecaster/Pods-StockMarketForecaster.debug.xcconfig"; sourceTree = ""; }; 99 | /* End PBXFileReference section */ 100 | 101 | /* Begin PBXFrameworksBuildPhase section */ 102 | 8E2F22772483A90800EEDC89 /* Frameworks */ = { 103 | isa = PBXFrameworksBuildPhase; 104 | buildActionMask = 2147483647; 105 | files = ( 106 | 1FB226E465720D19E5BFD0F7 /* Pods_StockMarketForecaster.framework in Frameworks */, 107 | ); 108 | runOnlyForDeploymentPostprocessing = 0; 109 | }; 110 | /* End PBXFrameworksBuildPhase section */ 111 | 112 | /* Begin PBXGroup section */ 113 | 8E2F22712483A90800EEDC89 = { 114 | isa = PBXGroup; 115 | children = ( 116 | 8E2F227C2483A90800EEDC89 /* StockMarketForecaster */, 117 | 8E2F227B2483A90800EEDC89 /* Products */, 118 | A0C93BE01DE2D6B8986C69A5 /* Pods */, 119 | EE94B3C9108D32B99ADB5F95 /* Frameworks */, 120 | ); 121 | sourceTree = ""; 122 | }; 123 | 8E2F227B2483A90800EEDC89 /* Products */ = { 124 | isa = PBXGroup; 125 | children = ( 126 | 8E2F227A2483A90800EEDC89 /* StockMarketForecaster.app */, 127 | ); 128 | name = Products; 129 | sourceTree = ""; 130 | }; 131 | 8E2F227C2483A90800EEDC89 /* StockMarketForecaster */ = { 132 | isa = PBXGroup; 133 | children = ( 134 | 8EC2478924845339002946E6 /* Base */, 135 | 8EC247B924851FAE002946E6 /* Data */, 136 | 8EC2478B24845351002946E6 /* Domain */, 137 | 8EC2478A24845340002946E6 /* Presentation */, 138 | ); 139 | path = StockMarketForecaster; 140 | sourceTree = ""; 141 | }; 142 | 8EC2478924845339002946E6 /* Base */ = { 143 | isa = PBXGroup; 144 | children = ( 145 | 8E2F228D2483A90900EEDC89 /* Info.plist */, 146 | 8E2F227D2483A90800EEDC89 /* AppDelegate.swift */, 147 | 8EA5968024856FAD00F0AA8E /* Array+NSCopying.swift */, 148 | 8EC247932484F26F002946E6 /* Optional.swift */, 149 | 8E2F227F2483A90800EEDC89 /* SceneDelegate.swift */, 150 | 8E3D94BE248591BA00D72D8B /* String.swift */, 151 | 8E2F22882483A90900EEDC89 /* Assets.xcassets */, 152 | ); 153 | path = Base; 154 | sourceTree = ""; 155 | }; 156 | 8EC2478A24845340002946E6 /* Presentation */ = { 157 | isa = PBXGroup; 158 | children = ( 159 | 8EC2478D24845362002946E6 /* Detail */, 160 | 8EC2478C2484535C002946E6 /* Master */, 161 | 8EC2478E24845375002946E6 /* Storyboard */, 162 | ); 163 | path = Presentation; 164 | sourceTree = ""; 165 | }; 166 | 8EC2478B24845351002946E6 /* Domain */ = { 167 | isa = PBXGroup; 168 | children = ( 169 | 8EC247BD24851FDC002946E6 /* StockMarketEntity.swift */, 170 | 8E3D94C02485988900D72D8B /* StockMarketInteractor.swift */, 171 | 8EC247A6248511CF002946E6 /* DynamicMLModel */, 172 | 8EC2479524850DCF002946E6 /* MLModel */, 173 | 8EC247AF248512EA002946E6 /* StockMarketModel */, 174 | ); 175 | path = Domain; 176 | sourceTree = ""; 177 | }; 178 | 8EC2478C2484535C002946E6 /* Master */ = { 179 | isa = PBXGroup; 180 | children = ( 181 | 8E2F22812483A90800EEDC89 /* MasterViewController.swift */, 182 | ); 183 | path = Master; 184 | sourceTree = ""; 185 | }; 186 | 8EC2478D24845362002946E6 /* Detail */ = { 187 | isa = PBXGroup; 188 | children = ( 189 | 8EA5968224857C1700F0AA8E /* DetailChartGenerator.swift */, 190 | 8EC2478F24845585002946E6 /* DetailPresenter.swift */, 191 | 8EC24791248455D7002946E6 /* DetailState.swift */, 192 | 8E2F22832483A90800EEDC89 /* DetailViewController.swift */, 193 | ); 194 | path = Detail; 195 | sourceTree = ""; 196 | }; 197 | 8EC2478E24845375002946E6 /* Storyboard */ = { 198 | isa = PBXGroup; 199 | children = ( 200 | 8E2F228A2483A90900EEDC89 /* LaunchScreen.storyboard */, 201 | 8E2F22852483A90800EEDC89 /* Main.storyboard */, 202 | ); 203 | path = Storyboard; 204 | sourceTree = ""; 205 | }; 206 | 8EC2479524850DCF002946E6 /* MLModel */ = { 207 | isa = PBXGroup; 208 | children = ( 209 | 8EAC87C624867E3900D91F4F /* AAPL.mlmodel */, 210 | 8EC2479624850DD9002946E6 /* AMZN.mlmodel */, 211 | 8EC2479A24850DE7002946E6 /* BABA.mlmodel */, 212 | 8E7327302487B2E90027CA71 /* BBCA.mlmodel */, 213 | 8EC2479C24850DF0002946E6 /* FB.mlmodel */, 214 | 8EC2479E24850DFB002946E6 /* GOOG.mlmodel */, 215 | 8EC247A024850E02002946E6 /* IBM.mlmodel */, 216 | 8EC247A224850E0C002946E6 /* INTC.mlmodel */, 217 | 8EC247A424850E12002946E6 /* MSFT.mlmodel */, 218 | ); 219 | path = MLModel; 220 | sourceTree = ""; 221 | }; 222 | 8EC247A6248511CF002946E6 /* DynamicMLModel */ = { 223 | isa = PBXGroup; 224 | children = ( 225 | 8EC247A7248511DE002946E6 /* DynamicMLModel.swift */, 226 | 8EC247AD24851257002946E6 /* DynamicMLModelError.swift */, 227 | 8EC247A9248511F5002946E6 /* DynamicMLModelInput.swift */, 228 | 8EC247AB2485121A002946E6 /* DynamicMLModelOutput.swift */, 229 | ); 230 | path = DynamicMLModel; 231 | sourceTree = ""; 232 | }; 233 | 8EC247AF248512EA002946E6 /* StockMarketModel */ = { 234 | isa = PBXGroup; 235 | children = ( 236 | 8EC247B224851343002946E6 /* StockMarketModelInput.swift */, 237 | 8EC247B4248514F8002946E6 /* StockMarketModelOutput.swift */, 238 | ); 239 | path = StockMarketModel; 240 | sourceTree = ""; 241 | }; 242 | 8EC247B924851FAE002946E6 /* Data */ = { 243 | isa = PBXGroup; 244 | children = ( 245 | 8EC247BA24851FBD002946E6 /* StockMarket */, 246 | 8EC247C124852190002946E6 /* StockMarketHistory */, 247 | ); 248 | path = Data; 249 | sourceTree = ""; 250 | }; 251 | 8EC247BA24851FBD002946E6 /* StockMarket */ = { 252 | isa = PBXGroup; 253 | children = ( 254 | 8EC247BB24851FCD002946E6 /* StockMarketLocal.swift */, 255 | ); 256 | path = StockMarket; 257 | sourceTree = ""; 258 | }; 259 | 8EC247C124852190002946E6 /* StockMarketHistory */ = { 260 | isa = PBXGroup; 261 | children = ( 262 | 8EC247C624852190002946E6 /* AAPL.csv */, 263 | 8EC247C424852190002946E6 /* AMZN.csv */, 264 | 8EC247C724852190002946E6 /* BABA.csv */, 265 | 8E7327322487B4790027CA71 /* BBCA.csv */, 266 | 8EC247C924852190002946E6 /* FB.csv */, 267 | 8EC247C824852190002946E6 /* GOOG.csv */, 268 | 8EC247C524852190002946E6 /* IBM.csv */, 269 | 8EC247C324852190002946E6 /* INTC.csv */, 270 | 8EC247C224852190002946E6 /* MSFT.csv */, 271 | ); 272 | path = StockMarketHistory; 273 | sourceTree = ""; 274 | }; 275 | A0C93BE01DE2D6B8986C69A5 /* Pods */ = { 276 | isa = PBXGroup; 277 | children = ( 278 | 97AD363BCB04DCB7DB8F2266 /* Pods-StockMarketForecaster.debug.xcconfig */, 279 | 8FEFCBDE3B14E5846B9F4FDA /* Pods-StockMarketForecaster.release.xcconfig */, 280 | ); 281 | path = Pods; 282 | sourceTree = ""; 283 | }; 284 | EE94B3C9108D32B99ADB5F95 /* Frameworks */ = { 285 | isa = PBXGroup; 286 | children = ( 287 | 8C1020503D0752C770D435A5 /* Pods_StockMarketForecaster.framework */, 288 | ); 289 | name = Frameworks; 290 | sourceTree = ""; 291 | }; 292 | /* End PBXGroup section */ 293 | 294 | /* Begin PBXNativeTarget section */ 295 | 8E2F22792483A90800EEDC89 /* StockMarketForecaster */ = { 296 | isa = PBXNativeTarget; 297 | buildConfigurationList = 8E2F22902483A90900EEDC89 /* Build configuration list for PBXNativeTarget "StockMarketForecaster" */; 298 | buildPhases = ( 299 | A36F7BCD4215162654E06E40 /* [CP] Check Pods Manifest.lock */, 300 | 8E2F22762483A90800EEDC89 /* Sources */, 301 | 8E2F22772483A90800EEDC89 /* Frameworks */, 302 | 8E2F22782483A90800EEDC89 /* Resources */, 303 | 837F95FC8FA2AEFF5BBA082D /* [CP] Embed Pods Frameworks */, 304 | ); 305 | buildRules = ( 306 | ); 307 | dependencies = ( 308 | ); 309 | name = StockMarketForecaster; 310 | productName = StockMarketForecaster; 311 | productReference = 8E2F227A2483A90800EEDC89 /* StockMarketForecaster.app */; 312 | productType = "com.apple.product-type.application"; 313 | }; 314 | /* End PBXNativeTarget section */ 315 | 316 | /* Begin PBXProject section */ 317 | 8E2F22722483A90800EEDC89 /* Project object */ = { 318 | isa = PBXProject; 319 | attributes = { 320 | LastSwiftUpdateCheck = 1130; 321 | LastUpgradeCheck = 1130; 322 | ORGANIZATIONNAME = "Organization Name"; 323 | TargetAttributes = { 324 | 8E2F22792483A90800EEDC89 = { 325 | CreatedOnToolsVersion = 11.3; 326 | }; 327 | }; 328 | }; 329 | buildConfigurationList = 8E2F22752483A90800EEDC89 /* Build configuration list for PBXProject "StockMarketForecaster" */; 330 | compatibilityVersion = "Xcode 9.3"; 331 | developmentRegion = en; 332 | hasScannedForEncodings = 0; 333 | knownRegions = ( 334 | en, 335 | Base, 336 | ); 337 | mainGroup = 8E2F22712483A90800EEDC89; 338 | productRefGroup = 8E2F227B2483A90800EEDC89 /* Products */; 339 | projectDirPath = ""; 340 | projectRoot = ""; 341 | targets = ( 342 | 8E2F22792483A90800EEDC89 /* StockMarketForecaster */, 343 | ); 344 | }; 345 | /* End PBXProject section */ 346 | 347 | /* Begin PBXResourcesBuildPhase section */ 348 | 8E2F22782483A90800EEDC89 /* Resources */ = { 349 | isa = PBXResourcesBuildPhase; 350 | buildActionMask = 2147483647; 351 | files = ( 352 | 8EC247D024852190002946E6 /* GOOG.csv in Resources */, 353 | 8EC247CA24852190002946E6 /* MSFT.csv in Resources */, 354 | 8E2F228C2483A90900EEDC89 /* LaunchScreen.storyboard in Resources */, 355 | 8E2F22892483A90900EEDC89 /* Assets.xcassets in Resources */, 356 | 8E2F22872483A90800EEDC89 /* Main.storyboard in Resources */, 357 | 8EC247CE24852190002946E6 /* AAPL.csv in Resources */, 358 | 8E7327332487B4790027CA71 /* BBCA.csv in Resources */, 359 | 8EC247CC24852190002946E6 /* AMZN.csv in Resources */, 360 | 8EC247CF24852190002946E6 /* BABA.csv in Resources */, 361 | 8EC247D124852190002946E6 /* FB.csv in Resources */, 362 | 8EC247CD24852190002946E6 /* IBM.csv in Resources */, 363 | 8EC247CB24852190002946E6 /* INTC.csv in Resources */, 364 | ); 365 | runOnlyForDeploymentPostprocessing = 0; 366 | }; 367 | /* End PBXResourcesBuildPhase section */ 368 | 369 | /* Begin PBXShellScriptBuildPhase section */ 370 | 837F95FC8FA2AEFF5BBA082D /* [CP] Embed Pods Frameworks */ = { 371 | isa = PBXShellScriptBuildPhase; 372 | buildActionMask = 2147483647; 373 | files = ( 374 | ); 375 | inputFileListPaths = ( 376 | "${PODS_ROOT}/Target Support Files/Pods-StockMarketForecaster/Pods-StockMarketForecaster-frameworks-${CONFIGURATION}-input-files.xcfilelist", 377 | ); 378 | name = "[CP] Embed Pods Frameworks"; 379 | outputFileListPaths = ( 380 | "${PODS_ROOT}/Target Support Files/Pods-StockMarketForecaster/Pods-StockMarketForecaster-frameworks-${CONFIGURATION}-output-files.xcfilelist", 381 | ); 382 | runOnlyForDeploymentPostprocessing = 0; 383 | shellPath = /bin/sh; 384 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-StockMarketForecaster/Pods-StockMarketForecaster-frameworks.sh\"\n"; 385 | showEnvVarsInLog = 0; 386 | }; 387 | A36F7BCD4215162654E06E40 /* [CP] Check Pods Manifest.lock */ = { 388 | isa = PBXShellScriptBuildPhase; 389 | buildActionMask = 2147483647; 390 | files = ( 391 | ); 392 | inputFileListPaths = ( 393 | ); 394 | inputPaths = ( 395 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 396 | "${PODS_ROOT}/Manifest.lock", 397 | ); 398 | name = "[CP] Check Pods Manifest.lock"; 399 | outputFileListPaths = ( 400 | ); 401 | outputPaths = ( 402 | "$(DERIVED_FILE_DIR)/Pods-StockMarketForecaster-checkManifestLockResult.txt", 403 | ); 404 | runOnlyForDeploymentPostprocessing = 0; 405 | shellPath = /bin/sh; 406 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; 407 | showEnvVarsInLog = 0; 408 | }; 409 | /* End PBXShellScriptBuildPhase section */ 410 | 411 | /* Begin PBXSourcesBuildPhase section */ 412 | 8E2F22762483A90800EEDC89 /* Sources */ = { 413 | isa = PBXSourcesBuildPhase; 414 | buildActionMask = 2147483647; 415 | files = ( 416 | 8E7327312487B2E90027CA71 /* BBCA.mlmodel in Sources */, 417 | 8EAC87CA2486822E00D91F4F /* DynamicMLModelOutput.swift in Sources */, 418 | 8E7327352487B81B0027CA71 /* StockMarketModelInput.swift in Sources */, 419 | 8EC2479F24850DFB002946E6 /* GOOG.mlmodel in Sources */, 420 | 8EC24792248455D7002946E6 /* DetailState.swift in Sources */, 421 | 8E7327342487B70F0027CA71 /* DynamicMLModel.swift in Sources */, 422 | 8E3D94BF248591BA00D72D8B /* String.swift in Sources */, 423 | 8EA5968124856FAD00F0AA8E /* Array+NSCopying.swift in Sources */, 424 | 8EAC87C724867E3900D91F4F /* AAPL.mlmodel in Sources */, 425 | 8EA5968324857C1700F0AA8E /* DetailChartGenerator.swift in Sources */, 426 | 8EC247A324850E0D002946E6 /* INTC.mlmodel in Sources */, 427 | 8EC247A524850E12002946E6 /* MSFT.mlmodel in Sources */, 428 | 8E2F227E2483A90800EEDC89 /* AppDelegate.swift in Sources */, 429 | 8EC2479724850DD9002946E6 /* AMZN.mlmodel in Sources */, 430 | 8E2F22802483A90800EEDC89 /* SceneDelegate.swift in Sources */, 431 | 8E3D94C12485988900D72D8B /* StockMarketInteractor.swift in Sources */, 432 | 8EC247942484F26F002946E6 /* Optional.swift in Sources */, 433 | 8E2F22822483A90800EEDC89 /* MasterViewController.swift in Sources */, 434 | 8EC247AE24851257002946E6 /* DynamicMLModelError.swift in Sources */, 435 | 8EC247A124850E02002946E6 /* IBM.mlmodel in Sources */, 436 | 8EC247BE24851FDC002946E6 /* StockMarketEntity.swift in Sources */, 437 | 8E7327362487B81D0027CA71 /* StockMarketModelOutput.swift in Sources */, 438 | 8EC2479024845585002946E6 /* DetailPresenter.swift in Sources */, 439 | 8EAC87C92486822B00D91F4F /* DynamicMLModelInput.swift in Sources */, 440 | 8EC2479D24850DF0002946E6 /* FB.mlmodel in Sources */, 441 | 8EC2479B24850DE7002946E6 /* BABA.mlmodel in Sources */, 442 | 8EC247BC24851FCD002946E6 /* StockMarketLocal.swift in Sources */, 443 | 8E2F22842483A90800EEDC89 /* DetailViewController.swift in Sources */, 444 | ); 445 | runOnlyForDeploymentPostprocessing = 0; 446 | }; 447 | /* End PBXSourcesBuildPhase section */ 448 | 449 | /* Begin PBXVariantGroup section */ 450 | 8E2F22852483A90800EEDC89 /* Main.storyboard */ = { 451 | isa = PBXVariantGroup; 452 | children = ( 453 | 8E2F22862483A90800EEDC89 /* Base */, 454 | ); 455 | name = Main.storyboard; 456 | sourceTree = ""; 457 | }; 458 | 8E2F228A2483A90900EEDC89 /* LaunchScreen.storyboard */ = { 459 | isa = PBXVariantGroup; 460 | children = ( 461 | 8E2F228B2483A90900EEDC89 /* Base */, 462 | ); 463 | name = LaunchScreen.storyboard; 464 | sourceTree = ""; 465 | }; 466 | /* End PBXVariantGroup section */ 467 | 468 | /* Begin XCBuildConfiguration section */ 469 | 8E2F228E2483A90900EEDC89 /* Debug */ = { 470 | isa = XCBuildConfiguration; 471 | buildSettings = { 472 | ALWAYS_SEARCH_USER_PATHS = NO; 473 | CLANG_ANALYZER_NONNULL = YES; 474 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 475 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 476 | CLANG_CXX_LIBRARY = "libc++"; 477 | CLANG_ENABLE_MODULES = YES; 478 | CLANG_ENABLE_OBJC_ARC = YES; 479 | CLANG_ENABLE_OBJC_WEAK = YES; 480 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 481 | CLANG_WARN_BOOL_CONVERSION = YES; 482 | CLANG_WARN_COMMA = YES; 483 | CLANG_WARN_CONSTANT_CONVERSION = YES; 484 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 485 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 486 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 487 | CLANG_WARN_EMPTY_BODY = YES; 488 | CLANG_WARN_ENUM_CONVERSION = YES; 489 | CLANG_WARN_INFINITE_RECURSION = YES; 490 | CLANG_WARN_INT_CONVERSION = YES; 491 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 492 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 493 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 494 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 495 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 496 | CLANG_WARN_STRICT_PROTOTYPES = YES; 497 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 498 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 499 | CLANG_WARN_UNREACHABLE_CODE = YES; 500 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 501 | COPY_PHASE_STRIP = NO; 502 | DEBUG_INFORMATION_FORMAT = dwarf; 503 | ENABLE_STRICT_OBJC_MSGSEND = YES; 504 | ENABLE_TESTABILITY = YES; 505 | GCC_C_LANGUAGE_STANDARD = gnu11; 506 | GCC_DYNAMIC_NO_PIC = NO; 507 | GCC_NO_COMMON_BLOCKS = YES; 508 | GCC_OPTIMIZATION_LEVEL = 0; 509 | GCC_PREPROCESSOR_DEFINITIONS = ( 510 | "DEBUG=1", 511 | "$(inherited)", 512 | ); 513 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 514 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 515 | GCC_WARN_UNDECLARED_SELECTOR = YES; 516 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 517 | GCC_WARN_UNUSED_FUNCTION = YES; 518 | GCC_WARN_UNUSED_VARIABLE = YES; 519 | IPHONEOS_DEPLOYMENT_TARGET = 13.2; 520 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 521 | MTL_FAST_MATH = YES; 522 | ONLY_ACTIVE_ARCH = YES; 523 | SDKROOT = iphoneos; 524 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 525 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 526 | }; 527 | name = Debug; 528 | }; 529 | 8E2F228F2483A90900EEDC89 /* Release */ = { 530 | isa = XCBuildConfiguration; 531 | buildSettings = { 532 | ALWAYS_SEARCH_USER_PATHS = NO; 533 | CLANG_ANALYZER_NONNULL = YES; 534 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 535 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 536 | CLANG_CXX_LIBRARY = "libc++"; 537 | CLANG_ENABLE_MODULES = YES; 538 | CLANG_ENABLE_OBJC_ARC = YES; 539 | CLANG_ENABLE_OBJC_WEAK = YES; 540 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 541 | CLANG_WARN_BOOL_CONVERSION = YES; 542 | CLANG_WARN_COMMA = YES; 543 | CLANG_WARN_CONSTANT_CONVERSION = YES; 544 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 545 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 546 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 547 | CLANG_WARN_EMPTY_BODY = YES; 548 | CLANG_WARN_ENUM_CONVERSION = YES; 549 | CLANG_WARN_INFINITE_RECURSION = YES; 550 | CLANG_WARN_INT_CONVERSION = YES; 551 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 552 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 553 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 554 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 555 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 556 | CLANG_WARN_STRICT_PROTOTYPES = YES; 557 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 558 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 559 | CLANG_WARN_UNREACHABLE_CODE = YES; 560 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 561 | COPY_PHASE_STRIP = NO; 562 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 563 | ENABLE_NS_ASSERTIONS = NO; 564 | ENABLE_STRICT_OBJC_MSGSEND = YES; 565 | GCC_C_LANGUAGE_STANDARD = gnu11; 566 | GCC_NO_COMMON_BLOCKS = YES; 567 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 568 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 569 | GCC_WARN_UNDECLARED_SELECTOR = YES; 570 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 571 | GCC_WARN_UNUSED_FUNCTION = YES; 572 | GCC_WARN_UNUSED_VARIABLE = YES; 573 | IPHONEOS_DEPLOYMENT_TARGET = 13.2; 574 | MTL_ENABLE_DEBUG_INFO = NO; 575 | MTL_FAST_MATH = YES; 576 | SDKROOT = iphoneos; 577 | SWIFT_COMPILATION_MODE = wholemodule; 578 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 579 | VALIDATE_PRODUCT = YES; 580 | }; 581 | name = Release; 582 | }; 583 | 8E2F22912483A90900EEDC89 /* Debug */ = { 584 | isa = XCBuildConfiguration; 585 | baseConfigurationReference = 97AD363BCB04DCB7DB8F2266 /* Pods-StockMarketForecaster.debug.xcconfig */; 586 | buildSettings = { 587 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 588 | CODE_SIGN_STYLE = Automatic; 589 | DEVELOPMENT_TEAM = 2465U6XMD2; 590 | INFOPLIST_FILE = StockMarketForecaster/Base/Info.plist; 591 | LD_RUNPATH_SEARCH_PATHS = ( 592 | "$(inherited)", 593 | "@executable_path/Frameworks", 594 | ); 595 | PRODUCT_BUNDLE_IDENTIFIER = com.dicky.StockMarketForecaster; 596 | PRODUCT_NAME = "$(TARGET_NAME)"; 597 | SWIFT_VERSION = 5.0; 598 | TARGETED_DEVICE_FAMILY = "1,2"; 599 | }; 600 | name = Debug; 601 | }; 602 | 8E2F22922483A90900EEDC89 /* Release */ = { 603 | isa = XCBuildConfiguration; 604 | baseConfigurationReference = 8FEFCBDE3B14E5846B9F4FDA /* Pods-StockMarketForecaster.release.xcconfig */; 605 | buildSettings = { 606 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 607 | CODE_SIGN_STYLE = Automatic; 608 | DEVELOPMENT_TEAM = 2465U6XMD2; 609 | INFOPLIST_FILE = StockMarketForecaster/Base/Info.plist; 610 | LD_RUNPATH_SEARCH_PATHS = ( 611 | "$(inherited)", 612 | "@executable_path/Frameworks", 613 | ); 614 | PRODUCT_BUNDLE_IDENTIFIER = com.dicky.StockMarketForecaster; 615 | PRODUCT_NAME = "$(TARGET_NAME)"; 616 | SWIFT_VERSION = 5.0; 617 | TARGETED_DEVICE_FAMILY = "1,2"; 618 | }; 619 | name = Release; 620 | }; 621 | /* End XCBuildConfiguration section */ 622 | 623 | /* Begin XCConfigurationList section */ 624 | 8E2F22752483A90800EEDC89 /* Build configuration list for PBXProject "StockMarketForecaster" */ = { 625 | isa = XCConfigurationList; 626 | buildConfigurations = ( 627 | 8E2F228E2483A90900EEDC89 /* Debug */, 628 | 8E2F228F2483A90900EEDC89 /* Release */, 629 | ); 630 | defaultConfigurationIsVisible = 0; 631 | defaultConfigurationName = Release; 632 | }; 633 | 8E2F22902483A90900EEDC89 /* Build configuration list for PBXNativeTarget "StockMarketForecaster" */ = { 634 | isa = XCConfigurationList; 635 | buildConfigurations = ( 636 | 8E2F22912483A90900EEDC89 /* Debug */, 637 | 8E2F22922483A90900EEDC89 /* Release */, 638 | ); 639 | defaultConfigurationIsVisible = 0; 640 | defaultConfigurationName = Release; 641 | }; 642 | /* End XCConfigurationList section */ 643 | }; 644 | rootObject = 8E2F22722483A90800EEDC89 /* Project object */; 645 | } 646 | -------------------------------------------------------------------------------- /StockMarketForecaster/Data/StockMarketHistory/BABA.csv: -------------------------------------------------------------------------------- 1 | Date,Open,High,Low,Close,Volume,Timestamp 2 | 9/19/2014 16:00:00,92.7,99.7,89.95,93.89,271879435,1411142400 3 | 9/22/2014 16:00:00,92.7,92.95,89.5,89.89,66657827,1411401600 4 | 9/23/2014 16:00:00,88.94,90.48,86.62,87.17,39009788,1411488000 5 | 9/24/2014 16:00:00,88.47,90.57,87.22,90.57,32088108,1411574400 6 | 9/25/2014 16:00:00,91.09,91.5,88.5,88.92,28597506,1411660800 7 | 9/26/2014 16:00:00,89.73,90.46,88.66,90.46,18339716,1411747200 8 | 9/29/2014 16:00:00,89.62,89.7,88.02,88.75,25302002,1412006400 9 | 9/30/2014 16:00:00,89,90.88,88.46,88.85,24419426,1412092800 10 | 10/1/2014 16:00:00,88.7,88.94,86.04,86.1,24029603,1412179200 11 | 10/2/2014 16:00:00,86.27,88.2,85.61,87.06,21469688,1412265600 12 | 10/3/2014 16:00:00,88.1,89.94,87.65,88.1,18485725,1412352000 13 | 10/6/2014 16:00:00,89.15,89.65,88.06,88.31,9276113,1412611200 14 | 10/7/2014 16:00:00,87.95,89.7,87.06,87.67,12791745,1412697600 15 | 10/8/2014 16:00:00,88,88.5,87.06,88.3,10259807,1412784000 16 | 10/9/2014 16:00:00,88.51,90.35,88,88.79,21506963,1412870400 17 | 10/10/2014 16:00:00,88.25,88.74,85.24,85.88,15431445,1412956800 18 | 10/13/2014 16:00:00,86.85,86.89,84.92,85.12,14845004,1413216000 19 | 10/14/2014 16:00:00,85.81,85.88,83.22,84.95,15567286,1413302400 20 | 10/15/2014 16:00:00,84.04,86.49,82.81,85.6,16824274,1413388800 21 | 10/16/2014 16:00:00,84.98,89.18,84.02,88.85,15231729,1413475200 22 | 10/17/2014 16:00:00,90.4,90.9,87.67,87.91,17360731,1413561600 23 | 10/20/2014 16:00:00,88,89.5,87.86,88.26,9891384,1413820800 24 | 10/21/2014 16:00:00,89.1,92.5,88.5,90.9,23243839,1413907200 25 | 10/22/2014 16:00:00,92.25,93.5,91.01,91.63,20364544,1413993600 26 | 10/23/2014 16:00:00,92.92,94.7,92.82,94.45,20640967,1414080000 27 | 10/24/2014 16:00:00,95.07,98,94.78,95.76,32132556,1414166400 28 | 10/27/2014 16:00:00,97,98.85,96.3,97.79,28302370,1414425600 29 | 10/28/2014 16:00:00,99.84,100.67,98.61,99.68,32127642,1414512000 30 | 10/29/2014 16:00:00,99.88,100,96.82,98.31,28655356,1414598400 31 | 10/30/2014 16:00:00,98.48,99.44,97.3,98.73,15484601,1414684800 32 | 10/31/2014 16:00:00,100.1,100.22,98.14,98.6,18128280,1414771200 33 | 11/3/2014 16:00:00,99.67,102.8,99.05,101.8,40883730,1415030400 34 | 11/4/2014 16:00:00,100.43,106.36,99.51,106.07,67814005,1415116800 35 | 11/5/2014 16:00:00,108.48,110.14,106.48,108.67,48344248,1415203200 36 | 11/6/2014 16:00:00,109.3,111.7,107.21,111.57,33608596,1415289600 37 | 11/7/2014 16:00:00,112.93,114.77,111.75,114.56,51457292,1415376000 38 | 11/10/2014 16:00:00,117.27,119.45,115.2,119.15,75970621,1415635200 39 | 11/11/2014 16:00:00,117.25,117.55,113.69,114.54,71152418,1415721600 40 | 11/12/2014 16:00:00,115.05,119.07,114.02,118.2,53908024,1415808000 41 | 11/13/2014 16:00:00,119.3,120,114.55,114.84,62162512,1415894400 42 | 11/14/2014 16:00:00,115.06,115.39,113.35,115.1,29848790,1415980800 43 | 11/17/2014 16:00:00,115.44,115.63,113.13,114.25,22573052,1416240000 44 | 11/18/2014 16:00:00,114.33,114.38,110.41,110.81,41097971,1416326400 45 | 11/19/2014 16:00:00,109.83,110.68,107.22,108.82,46840584,1416412800 46 | 11/20/2014 16:00:00,107.81,112.44,107.26,109.82,36489321,1416499200 47 | 11/21/2014 16:00:00,113.21,113.5,110.44,110.73,27432207,1416585600 48 | 11/24/2014 16:00:00,112,113.93,111.55,113.92,20645684,1416844800 49 | 11/25/2014 16:00:00,114.94,115.17,112.33,113.47,23484800,1416931200 50 | 11/26/2014 16:00:00,113.33,113.74,112.33,112.67,11832909,1417017600 51 | 11/28/2014 16:00:00,113.14,113.23,111.11,111.64,8077842,1417190400 52 | 12/1/2014 16:00:00,110.02,110.05,103.9,105.99,38464170,1417449600 53 | 12/2/2014 16:00:00,107.35,110,106.61,109.89,18785046,1417536000 54 | 12/3/2014 16:00:00,110.4,111.68,108.8,110.64,16221061,1417622400 55 | 12/4/2014 16:00:00,110.1,110.5,108.91,109.17,10860303,1417708800 56 | 12/5/2014 16:00:00,109.6,110.35,107.76,107.9,12148064,1417795200 57 | 12/8/2014 16:00:00,105.97,107.4,104.21,105.07,19217254,1418054400 58 | 12/9/2014 16:00:00,102.27,107.95,101.2,107.48,24866811,1418140800 59 | 12/10/2014 16:00:00,107.09,107.38,103.51,103.88,18466661,1418227200 60 | 12/11/2014 16:00:00,104.44,106.84,104.29,104.97,15684278,1418313600 61 | 12/12/2014 16:00:00,104.7,107.45,104.18,105.11,14537588,1418400000 62 | 12/15/2014 16:00:00,106.39,107.77,103.7,104.7,16521759,1418659200 63 | 12/16/2014 16:00:00,103.75,107.68,103.7,105.77,21700589,1418745600 64 | 12/17/2014 16:00:00,107.11,109.19,106.28,109.02,17311145,1418832000 65 | 12/18/2014 16:00:00,110.58,111.2,108.26,109.25,22788099,1418918400 66 | 12/19/2014 16:00:00,109.93,110.65,108.04,110.65,14857753,1419004800 67 | 12/22/2014 16:00:00,110.63,110.98,108.53,108.77,13041238,1419264000 68 | 12/23/2014 16:00:00,108.3,108.47,103.88,105.52,19096295,1419350400 69 | 12/24/2014 16:00:00,105.68,107.21,105.6,105.95,5870358,1419436800 70 | 12/26/2014 16:00:00,105.99,106.94,105.5,105.95,6529104,1419609600 71 | 12/29/2014 16:00:00,105.95,107.66,105.64,105.98,8068606,1419868800 72 | 12/30/2014 16:00:00,105.64,106.71,105.13,105.75,10205745,1419955200 73 | 12/31/2014 16:00:00,106.46,106.47,103.69,103.94,10283426,1420041600 74 | 1/2/2015 16:00:00,104.24,104.72,102.52,103.6,12303388,1420214400 75 | 1/5/2015 16:00:00,102.76,103.02,99.9,101,18337015,1420473600 76 | 1/6/2015 16:00:00,101.25,103.85,100.11,103.32,15720408,1420560000 77 | 1/7/2015 16:00:00,104.59,104.74,102.03,102.13,11052156,1420646400 78 | 1/8/2015 16:00:00,102.95,105.34,102.68,105.03,12942054,1420732800 79 | 1/9/2015 16:00:00,105.24,105.3,102.89,103.02,10222235,1420819200 80 | 1/12/2015 16:00:00,103.2,103.36,101.21,101.62,7997243,1421078400 81 | 1/13/2015 16:00:00,102.59,102.85,100.01,100.77,11294447,1421164800 82 | 1/14/2015 16:00:00,99.28,100.18,98.06,99.58,17807989,1421251200 83 | 1/15/2015 16:00:00,99.67,100.14,96.02,96.31,18260075,1421337600 84 | 1/16/2015 16:00:00,96.09,97.8,95.52,96.89,13327946,1421424000 85 | 1/20/2015 16:00:00,98.3,100.21,97.59,100.04,12105566,1421769600 86 | 1/21/2015 16:00:00,100.75,103.86,100.32,103.29,15186903,1421856000 87 | 1/22/2015 16:00:00,104.6,104.92,103.1,104,11432954,1421942400 88 | 1/23/2015 16:00:00,104.02,105.2,103.02,103.11,9873817,1422028800 89 | 1/26/2015 16:00:00,104.4,105.13,103.33,103.99,10664933,1422288000 90 | 1/27/2015 16:00:00,102.89,103.57,100.58,102.94,15659923,1422374400 91 | 1/28/2015 16:00:00,100.3,101.49,97.79,98.45,42144722,1422460800 92 | 1/29/2015 16:00:00,90.53,90.74,87.36,89.81,76561394,1422547200 93 | 1/30/2015 16:00:00,89.6,92,88.11,89.08,36806855,1422633600 94 | 2/2/2015 16:00:00,91.13,91.66,88.61,90.13,18865339,1422892800 95 | 2/3/2015 16:00:00,91.65,91.65,89.9,90.61,13512263,1422979200 96 | 2/4/2015 16:00:00,90.99,91.88,89.48,90,14643641,1423065600 97 | 2/5/2015 16:00:00,89.58,89.84,86.1,87,28926155,1423152000 98 | 2/6/2015 16:00:00,87.11,87.4,85.42,85.68,17632088,1423238400 99 | 2/9/2015 16:00:00,85.83,86.75,85.47,86,12109549,1423497600 100 | 2/10/2015 16:00:00,87.01,87.47,86.52,87.26,12043343,1423584000 101 | 2/11/2015 16:00:00,87.58,87.7,85.82,86,12391883,1423670400 102 | 2/12/2015 16:00:00,85.6,88.3,85.55,87.1,15177782,1423756800 103 | 2/13/2015 16:00:00,88.2,89.3,87.65,89.05,14665220,1423843200 104 | 2/17/2015 16:00:00,88.78,88.99,86.7,86.85,15191655,1424188800 105 | 2/18/2015 16:00:00,87.1,87.43,86.5,86.74,7422267,1424275200 106 | 2/19/2015 16:00:00,86.81,87.87,86.71,86.89,7604050,1424361600 107 | 2/20/2015 16:00:00,87.25,87.29,86.38,86.64,7821725,1424448000 108 | 2/23/2015 16:00:00,86.51,86.68,85.25,85.47,9367921,1424707200 109 | 2/24/2015 16:00:00,85.53,85.53,83.88,84.69,15846433,1424793600 110 | 2/25/2015 16:00:00,84.38,86.83,84.36,86.19,13645741,1424880000 111 | 2/26/2015 16:00:00,86.92,87.16,85.2,85.37,8763283,1424966400 112 | 2/27/2015 16:00:00,85.95,86.56,85,85.12,8377156,1425052800 113 | 3/2/2015 16:00:00,85,85.02,83.75,84,11213400,1425312000 114 | 3/3/2015 16:00:00,82.95,83.25,80.03,81.58,39246079,1425398400 115 | 3/4/2015 16:00:00,80.27,85.83,80.17,85.49,36607207,1425484800 116 | 3/5/2015 16:00:00,85.75,86.27,84.01,86.1,18514791,1425571200 117 | 3/6/2015 16:00:00,85.74,86,84.05,84.4,10673713,1425657600 118 | 3/9/2015 16:00:00,84.35,84.35,81.48,82.53,17609246,1425916800 119 | 3/10/2015 16:00:00,81.09,83.15,80.65,82.97,13804848,1426003200 120 | 3/11/2015 16:00:00,83,83.38,81.19,81.99,12765558,1426089600 121 | 3/12/2015 16:00:00,82.1,82.9,81.53,81.92,11229263,1426176000 122 | 3/13/2015 16:00:00,81.8,81.92,80.77,81.86,12659615,1426262400 123 | 3/16/2015 16:00:00,82.01,85.2,81.94,84,16903700,1426521600 124 | 3/17/2015 16:00:00,84.01,85.1,83.51,84.5,17616665,1426608000 125 | 3/18/2015 16:00:00,83.87,85.95,83.3,84.59,35652144,1426694400 126 | 3/19/2015 16:00:00,85.11,87.04,85,85.74,30452838,1426780800 127 | 3/20/2015 16:00:00,86.33,86.8,85.09,85.2,21177585,1426867200 128 | 3/23/2015 16:00:00,85.25,85.53,84.21,84.25,11177574,1427126400 129 | 3/24/2015 16:00:00,84.35,84.5,82.39,83.63,14539272,1427212800 130 | 3/25/2015 16:00:00,83.94,84.48,82.67,83.75,13504201,1427299200 131 | 3/26/2015 16:00:00,83.2,85,82.96,84.17,12202458,1427385600 132 | 3/27/2015 16:00:00,84.78,85.15,83.34,84.58,9700837,1427472000 133 | 3/30/2015 16:00:00,84.87,85.15,83.75,83.9,10017292,1427731200 134 | 3/31/2015 16:00:00,83.64,84.45,83.2,83.24,11810261,1427817600 135 | 4/1/2015 16:00:00,83.37,83.72,82.18,82.36,14895750,1427904000 136 | 4/2/2015 16:00:00,82.88,83,81.25,82.28,19865973,1427990400 137 | 4/6/2015 16:00:00,82.05,82.59,81.61,81.82,12806282,1428336000 138 | 4/7/2015 16:00:00,81.94,82.95,81.88,82.21,9437842,1428422400 139 | 4/8/2015 16:00:00,83.3,85.54,83.07,85.39,26151641,1428508800 140 | 4/9/2015 16:00:00,87.03,87.69,85.2,86.14,27797554,1428595200 141 | 4/10/2015 16:00:00,86.68,86.69,84.15,84.58,18295725,1428681600 142 | 4/13/2015 16:00:00,85.16,85.71,83.82,84.28,15795443,1428940800 143 | 4/14/2015 16:00:00,84.63,85.13,83.53,85,11813637,1429027200 144 | 4/15/2015 16:00:00,85.08,85.36,84.16,84.67,12223923,1429113600 145 | 4/16/2015 16:00:00,85.15,85.4,83.89,84.06,12042048,1429200000 146 | 4/17/2015 16:00:00,83.08,83.25,81.61,81.9,22784114,1429286400 147 | 4/20/2015 16:00:00,82.25,82.69,81.52,82.2,13469770,1429545600 148 | 4/21/2015 16:00:00,82.86,82.92,82.14,82.42,10051731,1429632000 149 | 4/22/2015 16:00:00,82.78,82.84,81.52,82.05,13309754,1429718400 150 | 4/23/2015 16:00:00,81.88,82.75,81.62,82.28,11473229,1429804800 151 | 4/24/2015 16:00:00,82.88,84.99,82.8,84.57,21056475,1429891200 152 | 4/27/2015 16:00:00,85.53,86.27,84.65,84.9,17428252,1430150400 153 | 4/28/2015 16:00:00,85.54,85.57,83.82,85.08,11105419,1430236800 154 | 4/29/2015 16:00:00,84.06,84.4,81.64,82.45,21092473,1430323200 155 | 4/30/2015 16:00:00,82.22,82.65,80.44,81.29,14204716,1430409600 156 | 5/1/2015 16:00:00,81.03,82.25,80.11,81.17,17907774,1430496000 157 | 5/4/2015 16:00:00,81.17,81.56,80.12,80.59,21537799,1430755200 158 | 5/5/2015 16:00:00,80.44,80.9,77.77,79.54,32649819,1430841600 159 | 5/6/2015 16:00:00,79.65,80.85,79.51,80,24933611,1430928000 160 | 5/7/2015 16:00:00,88.83,89.29,84.91,86,69425825,1431014400 161 | 5/8/2015 16:00:00,87.82,88.27,86.89,87.06,30136017,1431100800 162 | 5/11/2015 16:00:00,86.7,87.67,86.06,86.72,19775461,1431360000 163 | 5/12/2015 16:00:00,87.05,87.5,86.14,86.77,16072489,1431446400 164 | 5/13/2015 16:00:00,87.08,88.47,87,87.53,19010374,1431532800 165 | 5/14/2015 16:00:00,87.74,88.48,87.53,88.4,12082135,1431619200 166 | 5/15/2015 16:00:00,88.51,88.96,88.05,88.46,13422362,1431705600 167 | 5/18/2015 16:00:00,87.61,87.93,86.61,87.11,13487586,1431964800 168 | 5/19/2015 16:00:00,86.99,88.8,86.47,88.21,20716303,1432051200 169 | 5/20/2015 16:00:00,88.14,90.8,87.3,90.7,29801701,1432137600 170 | 5/21/2015 16:00:00,91.35,94.77,90.92,93.88,40702107,1432224000 171 | 5/22/2015 16:00:00,94.28,95.06,93.19,93.27,22176060,1432310400 172 | 5/26/2015 16:00:00,93.65,93.92,91.55,92.52,15670677,1432656000 173 | 5/27/2015 16:00:00,92.22,92.99,91.6,92.6,9505333,1432742400 174 | 5/28/2015 16:00:00,91.69,91.93,90.58,90.95,14208633,1432828800 175 | 5/29/2015 16:00:00,91.35,91.5,89.32,89.32,13888066,1432915200 176 | 6/1/2015 16:00:00,90.09,90.99,89.49,90.78,9903610,1433174400 177 | 6/2/2015 16:00:00,90.55,91.54,90.19,90.51,9863293,1433260800 178 | 6/3/2015 16:00:00,90.73,91.04,89.9,90.79,9421776,1433347200 179 | 6/4/2015 16:00:00,90.71,91.41,90.27,90.59,8682641,1433433600 180 | 6/5/2015 16:00:00,90.46,91.6,90.46,90.71,11351204,1433520000 181 | 6/8/2015 16:00:00,90.65,91.6,88.24,88.29,15690252,1433779200 182 | 6/9/2015 16:00:00,88.04,88.18,86.12,87.58,16078009,1433865600 183 | 6/10/2015 16:00:00,87.7,88.99,87.2,88.9,12549424,1433952000 184 | 6/11/2015 16:00:00,89.03,89.48,87.1,87.21,13709684,1434038400 185 | 6/12/2015 16:00:00,87.42,87.79,86.48,86.63,9972368,1434124800 186 | 6/15/2015 16:00:00,86.3,87.17,86.05,86.12,10213275,1434384000 187 | 6/16/2015 16:00:00,86,86.7,85.61,86.09,10973315,1434470400 188 | 6/17/2015 16:00:00,86.58,87.8,86.48,86.8,10238999,1434556800 189 | 6/18/2015 16:00:00,86.97,87.59,86.32,86.75,11731827,1434643200 190 | 6/19/2015 16:00:00,86.51,86.6,85.17,85.74,10287124,1434729600 191 | 6/22/2015 16:00:00,86.07,86.4,85.58,85.68,7145191,1434988800 192 | 6/23/2015 16:00:00,85.98,86.34,84.83,85.08,11407507,1435075200 193 | 6/24/2015 16:00:00,85.16,85.81,84.85,85.17,9433644,1435161600 194 | 6/25/2015 16:00:00,85.47,85.6,84.9,85.24,8921481,1435248000 195 | 6/26/2015 16:00:00,84.63,84.65,82.82,83.28,12665629,1435334400 196 | 6/29/2015 16:00:00,81.64,82.88,80.8,81.07,15196308,1435593600 197 | 6/30/2015 16:00:00,82.58,83.69,81.96,82.27,12624410,1435680000 198 | 7/1/2015 16:00:00,82.6,83,81.99,82.46,5945338,1435766400 199 | 7/2/2015 16:00:00,82.12,82.32,81.78,82.07,6759495,1435852800 200 | 7/6/2015 16:00:00,80.56,81.5,80.12,80.23,11859683,1436198400 201 | 7/7/2015 16:00:00,79.45,79.79,76.21,79.62,34219149,1436284800 202 | 7/8/2015 16:00:00,76.58,78.79,76.22,77.94,22698611,1436371200 203 | 7/9/2015 16:00:00,80.93,81.19,79.04,79.04,19775093,1436457600 204 | 7/10/2015 16:00:00,81.13,81.2,79.84,80.3,11221859,1436544000 205 | 7/13/2015 16:00:00,80.92,82.2,80.7,81.86,10346278,1436803200 206 | 7/14/2015 16:00:00,81.58,82.02,81.13,81.5,7517161,1436889600 207 | 7/15/2015 16:00:00,80.9,81.5,80.21,80.73,9511813,1436976000 208 | 7/16/2015 16:00:00,81.39,82,80.9,81.53,8591570,1437062400 209 | 7/17/2015 16:00:00,81.99,83.7,81.58,83.36,14499602,1437148800 210 | 7/20/2015 16:00:00,83.56,83.68,82.05,82.67,8123121,1437408000 211 | 7/21/2015 16:00:00,83.11,83.25,82.22,82.54,5750138,1437494400 212 | 7/22/2015 16:00:00,82.16,84.75,82,84.15,11207318,1437580800 213 | 7/23/2015 16:00:00,84.66,84.97,83.25,83.88,7443289,1437667200 214 | 7/24/2015 16:00:00,85.17,85.38,82.65,83.02,8759200,1437753600 215 | 7/27/2015 16:00:00,80.85,81.7,79.68,81.4,12178161,1438012800 216 | 7/28/2015 16:00:00,80.67,80.8,79.25,80.56,12119416,1438099200 217 | 7/29/2015 16:00:00,80.98,81.37,80.01,80.26,7175830,1438185600 218 | 7/30/2015 16:00:00,80.11,80.64,79.45,79.96,6934278,1438272000 219 | 7/31/2015 16:00:00,79.85,79.91,78.2,78.34,12685153,1438358400 220 | 8/3/2015 16:00:00,78.2,78.5,77.11,77.99,9271488,1438617600 221 | 8/4/2015 16:00:00,78.07,79.35,77.8,78.87,8499174,1438704000 222 | 8/5/2015 16:00:00,79.59,80.42,79.48,79.82,7502200,1438790400 223 | 8/6/2015 16:00:00,79.85,80.75,78.64,78.96,9296087,1438876800 224 | 8/7/2015 16:00:00,79.65,80.2,78.66,78.82,8737916,1438963200 225 | 8/10/2015 16:00:00,79.86,80.99,79.5,80.47,11272562,1439222400 226 | 8/11/2015 16:00:00,79.48,80,76.15,77.34,22958112,1439308800 227 | 8/12/2015 16:00:00,72.32,73.85,71.03,73.38,41176655,1439395200 228 | 8/13/2015 16:00:00,74,76.73,73.66,75.11,23226118,1439481600 229 | 8/14/2015 16:00:00,74.53,75.49,74.46,74.76,12364791,1439568000 230 | 8/17/2015 16:00:00,74.85,75.24,74.16,75.19,12675436,1439827200 231 | 8/18/2015 16:00:00,74.05,75.13,73.73,73.88,11151792,1439913600 232 | 8/19/2015 16:00:00,73.15,73.56,72.81,73.12,18174173,1440000000 233 | 8/20/2015 16:00:00,71.98,72.78,70.03,70.32,20993569,1440086400 234 | 8/21/2015 16:00:00,69.32,70.66,68.18,68.18,29124133,1440172800 235 | 8/24/2015 16:00:00,58.16,67.48,58,65.8,31370443,1440432000 236 | 8/25/2015 16:00:00,68.84,70.33,67.49,68.57,29931626,1440518400 237 | 8/26/2015 16:00:00,68.95,69.45,65.75,68.66,26384090,1440604800 238 | 8/27/2015 16:00:00,70.84,71.59,70.02,70.84,18121837,1440691200 239 | 8/28/2015 16:00:00,69.68,70.5,69.05,70.07,10604388,1440777600 240 | 8/31/2015 16:00:00,69.18,69.3,66.02,66.12,18468552,1441036800 241 | 9/1/2015 16:00:00,64.38,66.84,64.05,64.83,23461130,1441123200 242 | 9/2/2015 16:00:00,65.69,66,64.97,65.54,13374519,1441209600 243 | 9/3/2015 16:00:00,65.82,66.89,65.41,66.47,15800816,1441296000 244 | 9/4/2015 16:00:00,65.41,65.57,63.34,63.91,18182729,1441382400 245 | 9/8/2015 16:00:00,65.78,66.81,60.25,60.91,50306731,1441728000 246 | 9/9/2015 16:00:00,62.73,64.67,62.53,64.04,33145635,1441814400 247 | 9/10/2015 16:00:00,63.52,64.25,63.34,63.83,13280177,1441900800 248 | 9/11/2015 16:00:00,63.37,64.79,62.7,64.63,17739310,1441987200 249 | 9/14/2015 16:00:00,62.55,63.26,61.48,62.6,26757603,1442246400 250 | 9/15/2015 16:00:00,61.45,65.36,61.11,64.85,29032080,1442332800 251 | 9/16/2015 16:00:00,65.61,68.08,65.26,67.23,25798387,1442419200 252 | 9/17/2015 16:00:00,66.41,66.65,65.6,66,16594076,1442505600 253 | 9/18/2015 16:00:00,65.4,65.75,64.01,65.75,20117918,1442592000 254 | 9/21/2015 16:00:00,65.38,66.4,62.96,63.9,22351152,1442851200 255 | 9/22/2015 16:00:00,62.94,63.27,61.58,61.9,14895600,1442937600 256 | 9/23/2015 16:00:00,61.96,62.3,59.68,60,22679848,1443024000 257 | 9/24/2015 16:00:00,59.42,60.34,58.21,59.92,20638841,1443110400 258 | 9/25/2015 16:00:00,60.63,60.84,58.92,59.24,17002977,1443196800 259 | 9/28/2015 16:00:00,58.81,60.12,57.32,57.39,20657342,1443456000 260 | 9/29/2015 16:00:00,57.3,58.65,57.2,57.82,16769820,1443542400 261 | 9/30/2015 16:00:00,58.87,60.08,58.35,58.97,16765709,1443628800 262 | 10/1/2015 16:00:00,59.5,59.83,58.23,58.87,8147124,1443715200 263 | 10/2/2015 16:00:00,58.36,63.24,58.2,63.2,22352151,1443801600 264 | 10/5/2015 16:00:00,63.47,64.78,62.2,63.93,13582918,1444060800 265 | 10/6/2015 16:00:00,63.72,64.73,63.28,63.92,9617369,1444147200 266 | 10/7/2015 16:00:00,64.84,66.66,64.38,66.28,15797378,1444233600 267 | 10/8/2015 16:00:00,66.04,68.41,65.96,67.7,18665045,1444320000 268 | 10/9/2015 16:00:00,68.2,69.45,67.31,68.71,14758656,1444406400 269 | 10/12/2015 16:00:00,69.64,70.47,69,70.3,15544796,1444665600 270 | 10/13/2015 16:00:00,69.49,70.32,68.38,69.68,13051831,1444752000 271 | 10/14/2015 16:00:00,69.5,69.7,67.43,68.54,12283917,1444838400 272 | 10/15/2015 16:00:00,69.34,72.44,69.26,71.78,18199651,1444924800 273 | 10/16/2015 16:00:00,72.5,73.64,71.21,71.99,15950205,1445011200 274 | 10/19/2015 16:00:00,71.8,73,71.52,72.65,10885831,1445270400 275 | 10/20/2015 16:00:00,72.99,73,71.55,71.79,11089813,1445356800 276 | 10/21/2015 16:00:00,71.66,71.79,68.89,69.48,16859702,1445443200 277 | 10/22/2015 16:00:00,70.16,71.63,70.07,70.99,10804891,1445529600 278 | 10/23/2015 16:00:00,73.98,75.76,72.84,75.62,22508967,1445616000 279 | 10/26/2015 16:00:00,75.44,77.42,75.13,76.35,24784055,1445875200 280 | 10/27/2015 16:00:00,82.11,82.79,78.25,79.44,50801808,1445961600 281 | 10/28/2015 16:00:00,79.48,82.55,79.2,82.35,25018757,1446048000 282 | 10/29/2015 16:00:00,81.97,82.53,80.82,82.22,16423146,1446134400 283 | 10/30/2015 16:00:00,82.7,84.44,82.6,83.83,20733797,1446220800 284 | 11/2/2015 16:00:00,83.52,84.83,82.75,84.35,13825598,1446480000 285 | 11/3/2015 16:00:00,84,84.59,83.13,83.44,11640502,1446566400 286 | 11/4/2015 16:00:00,84.45,85.6,84.03,85.4,23717360,1446652800 287 | 11/5/2015 16:00:00,85.22,86.42,84.2,85.38,20640685,1446739200 288 | 11/6/2015 16:00:00,85.53,86.35,80.77,83.61,38526480,1446825600 289 | 11/9/2015 16:00:00,82.42,83.47,80.22,81.38,19084860,1447084800 290 | 11/10/2015 16:00:00,81.1,82.43,79.62,81.43,21989844,1447171200 291 | 11/11/2015 16:00:00,82.28,82.49,78.12,79.85,29623835,1447257600 292 | 11/12/2015 16:00:00,78.99,80.5,78.45,78.76,18833597,1447344000 293 | 11/13/2015 16:00:00,77.15,78,75.64,75.85,24225785,1447430400 294 | 11/16/2015 16:00:00,75.83,78.75,75.77,78.3,17041841,1447689600 295 | 11/17/2015 16:00:00,78.9,79.14,77.47,78.13,12470586,1447776000 296 | 11/18/2015 16:00:00,78.25,78.31,76.15,77.69,16734514,1447862400 297 | 11/19/2015 16:00:00,78.06,79.15,77.4,77.87,15689560,1447948800 298 | 11/20/2015 16:00:00,78.44,80.79,78.4,79.95,21024028,1448035200 299 | 11/23/2015 16:00:00,80.45,82.19,79.97,81.31,18763944,1448294400 300 | 11/24/2015 16:00:00,80.85,81.11,79.27,80.86,15280532,1448380800 301 | 11/25/2015 16:00:00,80.91,82.68,80.82,81.71,16329910,1448467200 302 | 11/27/2015 16:00:00,80.57,81.41,79.28,81.38,12600339,1448640000 303 | 11/30/2015 16:00:00,81.5,84.47,81.38,84.08,97884086,1448899200 304 | 12/1/2015 16:00:00,83.77,84.39,83.5,84,26215997,1448985600 305 | 12/2/2015 16:00:00,84.27,85.82,84.25,85,36609078,1449072000 306 | 12/3/2015 16:00:00,85.05,85.1,82.1,82.59,23022687,1449158400 307 | 12/4/2015 16:00:00,82.58,85,82.42,84.85,15552723,1449244800 308 | 12/7/2015 16:00:00,84.8,85.13,84.2,84.76,11874979,1449504000 309 | 12/8/2015 16:00:00,82.77,84.67,82.61,84.38,14661649,1449590400 310 | 12/9/2015 16:00:00,84.37,85.2,82.97,83.42,21912042,1449676800 311 | 12/10/2015 16:00:00,83.34,84.34,82.85,84.33,10464228,1449763200 312 | 12/11/2015 16:00:00,82.85,83.05,79.42,79.74,20789918,1449849600 313 | 12/14/2015 16:00:00,80.15,80.76,78.99,80.57,12074881,1450108800 314 | 12/15/2015 16:00:00,81.06,83.39,80.9,82.49,13052529,1450195200 315 | 12/16/2015 16:00:00,83.3,85.05,83,84.63,16573779,1450281600 316 | 12/17/2015 16:00:00,85,85.32,82.85,83.56,12998985,1450368000 317 | 12/18/2015 16:00:00,83.2,83.75,82.03,82.65,12168392,1450454400 318 | 12/21/2015 16:00:00,83.15,83.73,82.43,82.87,8093551,1450713600 319 | 12/22/2015 16:00:00,82.89,85.1,82.89,84.84,12777796,1450800000 320 | 12/23/2015 16:00:00,85.05,85.09,83.72,84.8,11238023,1450886400 321 | 12/24/2015 16:00:00,84.56,84.8,83.41,83.71,3775327,1450972800 322 | 12/28/2015 16:00:00,82.56,82.75,81.52,82.14,9318765,1451318400 323 | 12/29/2015 16:00:00,82.5,83.51,82.41,83.26,6942446,1451404800 324 | 12/30/2015 16:00:00,82.95,83.11,81.5,81.68,6982019,1451491200 325 | 12/31/2015 16:00:00,81.48,82.17,81.25,81.27,6744307,1451577600 326 | 1/4/2016 16:00:00,78.18,78.31,75.18,76.69,23057981,1451923200 327 | 1/5/2016 16:00:00,77.92,78.68,77.26,78.63,14256391,1452009600 328 | 1/6/2016 16:00:00,77.12,78.49,76.97,77.33,11565711,1452096000 329 | 1/7/2016 16:00:00,73.29,75.5,71.54,72.72,27282890,1452182400 330 | 1/8/2016 16:00:00,74.33,74.66,70.67,70.8,20813177,1452268800 331 | 1/11/2016 16:00:00,71.29,71.73,69.02,69.92,16959689,1452528000 332 | 1/12/2016 16:00:00,71.45,72.77,71,72.68,13451976,1452614400 333 | 1/13/2016 16:00:00,72.77,73.24,70.22,70.29,12467328,1452700800 334 | 1/14/2016 16:00:00,70.29,72.72,68.27,72.25,17718647,1452787200 335 | 1/15/2016 16:00:00,68.7,71,67.54,69.59,20719795,1452873600 336 | 1/19/2016 16:00:00,71.94,72.31,69.81,70.13,17417779,1453219200 337 | 1/20/2016 16:00:00,68.03,69.11,65.34,68.71,19451536,1453305600 338 | 1/21/2016 16:00:00,68.78,71.65,67.14,70.72,16563667,1453392000 339 | 1/22/2016 16:00:00,72.51,73.34,69.89,70.37,15831052,1453478400 340 | 1/25/2016 16:00:00,70.8,70.8,69.02,69.72,14782202,1453737600 341 | 1/26/2016 16:00:00,69.01,70.19,68.88,69.77,11468135,1453824000 342 | 1/27/2016 16:00:00,69.96,71.42,68.75,69.54,18235002,1453910400 343 | 1/28/2016 16:00:00,72.55,73.15,66.67,66.92,33155477,1453996800 344 | 1/29/2016 16:00:00,67.98,68.93,65.4,67.03,25587578,1454083200 345 | 2/1/2016 16:00:00,66.5,67.7,65.35,67.03,16212602,1454342400 346 | 2/2/2016 16:00:00,67.05,67.74,64.66,65.09,19148876,1454428800 347 | 2/3/2016 16:00:00,65.6,65.73,60.87,63.44,31916760,1454515200 348 | 2/4/2016 16:00:00,64.33,65.72,63.1,64.86,22910795,1454601600 349 | 2/5/2016 16:00:00,64.71,64.86,62.18,62.64,12841443,1454688000 350 | 2/8/2016 16:00:00,60.9,62.05,60.45,61.1,16155286,1454947200 351 | 2/9/2016 16:00:00,60.11,62.22,59.25,61.39,12737867,1455033600 352 | 2/10/2016 16:00:00,61.9,63.09,60.87,61.78,8997243,1455120000 353 | 2/11/2016 16:00:00,60.25,61.63,59.85,60.57,15007002,1455206400 354 | 2/12/2016 16:00:00,61.27,62.78,60.28,60.89,13666786,1455292800 355 | 2/16/2016 16:00:00,64.42,66.89,64.04,66.29,21725913,1455638400 356 | 2/17/2016 16:00:00,67.17,67.39,65.68,66.38,14455065,1455724800 357 | 2/18/2016 16:00:00,67,68.5,66.23,66.52,14546878,1455811200 358 | 2/19/2016 16:00:00,66.8,67.75,66.09,67.28,12333347,1455897600 359 | 2/22/2016 16:00:00,68.3,69.53,67.98,68.84,13404963,1456156800 360 | 2/23/2016 16:00:00,68.5,68.66,66.47,66.97,12929767,1456243200 361 | 2/24/2016 16:00:00,66.17,67.69,65.21,67.23,10775775,1456329600 362 | 2/25/2016 16:00:00,65.67,66.72,64.66,66.66,14678010,1456416000 363 | 2/26/2016 16:00:00,68.09,68.83,66.86,66.91,12079803,1456502400 364 | 2/29/2016 16:00:00,67.64,70.58,67.56,68.81,17983242,1456761600 365 | 3/1/2016 16:00:00,70.02,71.84,69.86,70.86,14005120,1456848000 366 | 3/2/2016 16:00:00,72.04,72.04,70.75,71.25,10501057,1456934400 367 | 3/3/2016 16:00:00,71.31,72.59,70.46,71.02,11595213,1457020800 368 | 3/4/2016 16:00:00,70.96,72.96,70.72,72.22,10762945,1457107200 369 | 3/7/2016 16:00:00,72.2,73.98,72,72.89,11243277,1457366400 370 | 3/8/2016 16:00:00,72.4,72.65,70.96,71.07,8669134,1457452800 371 | 3/9/2016 16:00:00,71.59,72.61,70.68,72.43,7282257,1457539200 372 | 3/10/2016 16:00:00,72.5,73.05,70.61,71.97,11247668,1457625600 373 | 3/11/2016 16:00:00,72.58,74.01,72.22,74.01,11217531,1457712000 374 | 3/14/2016 16:00:00,74.01,74.42,72.89,73.35,11069651,1457971200 375 | 3/15/2016 16:00:00,72.62,72.84,71.75,72.23,8373021,1458057600 376 | 3/16/2016 16:00:00,72.01,73.66,71.86,73.5,7700551,1458144000 377 | 3/17/2016 16:00:00,73.76,74.37,73.51,74.25,3160249,1458230400 378 | 3/18/2016 16:00:00,74.97,76.3,74.71,76.25,13350092,1458316800 379 | 3/21/2016 16:00:00,77.09,79.68,76.94,78.11,15492140,1458576000 380 | 3/22/2016 16:00:00,77,78.55,76.91,78.18,9146958,1458662400 381 | 3/23/2016 16:00:00,78.16,78.98,76.15,76.56,10806239,1458748800 382 | 3/24/2016 16:00:00,75.15,76.15,73.53,75.86,8833087,1458835200 383 | 3/28/2016 16:00:00,76.45,76.89,74.9,76.48,6081751,1459180800 384 | 3/29/2016 16:00:00,75.6,78.24,75.57,78.08,12533633,1459267200 385 | 3/30/2016 16:00:00,79.01,79.55,78.54,78.86,10695134,1459353600 386 | 3/31/2016 16:00:00,78.5,79.84,78.41,79.03,11318226,1459440000 387 | 4/1/2016 16:00:00,78.24,79.02,78.2,78.73,9261414,1459526400 388 | 4/4/2016 16:00:00,78.33,79.55,78.32,79.08,9816080,1459785600 389 | 4/5/2016 16:00:00,78.2,78.3,76.91,77.32,9601972,1459872000 390 | 4/6/2016 16:00:00,77.3,79.15,77.19,78.68,9066283,1459958400 391 | 4/7/2016 16:00:00,77.6,78.6,77.18,77.61,10937309,1460044800 392 | 4/8/2016 16:00:00,78.27,78.76,76.62,77.47,8400433,1460131200 393 | 4/11/2016 16:00:00,78.07,78.59,77.43,77.71,7896352,1460390400 394 | 4/12/2016 16:00:00,78,78.24,76.87,77.86,7113401,1460476800 395 | 4/13/2016 16:00:00,78.74,79.72,78.5,79.64,14147655,1460563200 396 | 4/14/2016 16:00:00,79.31,79.86,78.36,79.61,12610954,1460649600 397 | 4/15/2016 16:00:00,79.45,79.75,78.46,78.97,11707500,1460736000 398 | 4/18/2016 16:00:00,78.52,79.12,77.71,79.01,7765640,1460995200 399 | 4/19/2016 16:00:00,79.2,80.48,78.47,79.46,14741162,1461081600 400 | 4/20/2016 16:00:00,79,81.74,78.99,81.21,14911832,1461168000 401 | 4/21/2016 16:00:00,81.08,81.78,80.2,80.78,8817608,1461254400 402 | 4/22/2016 16:00:00,80.12,85.89,79.16,79.89,8648189,1461340800 403 | 4/25/2016 16:00:00,79.8,79.84,78.68,78.84,9205564,1461600000 404 | 4/26/2016 16:00:00,78.85,79.56,77.8,78.61,9631578,1461686400 405 | 4/27/2016 16:00:00,78.3,78.62,76.57,77.65,11490555,1461772800 406 | 4/28/2016 16:00:00,77.65,77.9,76.09,76.4,9958400,1461859200 407 | 4/29/2016 16:00:00,76.81,77.28,75.66,76.94,10124220,1461945600 408 | 5/2/2016 16:00:00,76.89,77,75.94,76.61,7716288,1462204800 409 | 5/3/2016 16:00:00,75.96,76.27,75.43,75.91,8018160,1462291200 410 | 5/4/2016 16:00:00,75.64,75.91,75.01,75.82,14315359,1462377600 411 | 5/5/2016 16:00:00,79.52,79.94,78.1,78.83,27950651,1462464000 412 | 5/6/2016 16:00:00,78.35,79.72,78.25,79.2,12858454,1462550400 413 | 5/9/2016 16:00:00,78.94,79.98,78.89,79.41,11795308,1462809600 414 | 5/10/2016 16:00:00,79.79,79.98,79.15,79.72,9318849,1462896000 415 | 5/11/2016 16:00:00,79.43,80.49,79.41,79.8,11071496,1462982400 416 | 5/12/2016 16:00:00,80.01,80.45,78.32,79.16,8791051,1463068800 417 | 5/13/2016 16:00:00,78.83,79.16,76.97,77.16,10074849,1463155200 418 | 5/16/2016 16:00:00,77.86,79.93,77.59,79.29,11660032,1463414400 419 | 5/17/2016 16:00:00,79.83,80.2,79.31,79.35,10970576,1463500800 420 | 5/18/2016 16:00:00,78.71,80,78.47,79.03,9084812,1463587200 421 | 5/19/2016 16:00:00,78.65,79.26,77.6,78.32,8317350,1463673600 422 | 5/20/2016 16:00:00,79.07,79.45,78.35,78.79,11043622,1463760000 423 | 5/23/2016 16:00:00,78.95,79.5,78.6,79,7187006,1464019200 424 | 5/24/2016 16:00:00,79.17,81.31,79.07,81.12,16702130,1464105600 425 | 5/25/2016 16:00:00,78.53,79.2,74.12,75.59,49666287,1464192000 426 | 5/26/2016 16:00:00,76.99,78.86,76.8,78.35,26964310,1464278400 427 | 5/27/2016 16:00:00,78.49,81,78.39,80.97,24549599,1464364800 428 | 5/31/2016 16:00:00,81,82.03,80.2,82,78831973,1464710400 429 | 6/1/2016 16:00:00,79.15,80.14,76.55,76.69,62511763,1464796800 430 | 6/2/2016 16:00:00,76.65,77.75,76.56,77.3,45377289,1464883200 431 | 6/3/2016 16:00:00,77.24,77.8,75.71,76.62,23683856,1464969600 432 | 6/6/2016 16:00:00,77.11,78.33,76.7,78.06,19165856,1465228800 433 | 6/7/2016 16:00:00,78.19,78.37,77.32,77.84,12876692,1465315200 434 | 6/8/2016 16:00:00,78,78.53,77.38,77.64,11610545,1465401600 435 | 6/9/2016 16:00:00,77.39,78.07,76.78,77.56,8993749,1465488000 436 | 6/10/2016 16:00:00,76.43,77.05,75.76,75.92,10420194,1465574400 437 | 6/13/2016 16:00:00,75.25,76.46,74.85,75.45,11296597,1465833600 438 | 6/14/2016 16:00:00,76.89,78.45,76.75,77.77,22356092,1465920000 439 | 6/15/2016 16:00:00,78.31,78.77,77.51,78.39,14732924,1466006400 440 | 6/16/2016 16:00:00,77.84,78.4,76.2,78.27,13569178,1466092800 441 | 6/17/2016 16:00:00,78.45,78.45,76.48,77,15581950,1466179200 442 | 6/20/2016 16:00:00,77.9,78.79,77.84,78.15,9621248,1466438400 443 | 6/21/2016 16:00:00,78.75,79.08,78.4,78.62,8880760,1466524800 444 | 6/22/2016 16:00:00,79.04,79.12,78.21,78.73,8170465,1466611200 445 | 6/23/2016 16:00:00,79.16,79.46,78.55,79.14,8271728,1466697600 446 | 6/24/2016 16:00:00,76.83,77.5,75.43,76.29,18223939,1466784000 447 | 6/27/2016 16:00:00,75.8,76.29,73.3,74.23,15240323,1467043200 448 | 6/28/2016 16:00:00,75.5,76.6,75.5,76.28,11263981,1467129600 449 | 6/29/2016 16:00:00,76.98,78.48,76.9,78.04,11458248,1467216000 450 | 6/30/2016 16:00:00,78.31,79.76,78.28,79.53,12484688,1467302400 451 | 7/1/2016 16:00:00,79.12,80.05,79.12,79.65,7270759,1467388800 452 | 7/5/2016 16:00:00,79.04,79.55,78.37,78.97,6843947,1467734400 453 | 7/6/2016 16:00:00,78.47,78.82,77.68,78.64,7737637,1467820800 454 | 7/7/2016 16:00:00,79,79.49,78.71,79.35,6817894,1467907200 455 | 7/8/2016 16:00:00,78.44,79.35,77.8,78.99,14028975,1467993600 456 | 7/11/2016 16:00:00,79.33,81.9,79.24,81.46,17416125,1468252800 457 | 7/12/2016 16:00:00,81.79,82.88,81.51,81.74,15293895,1468339200 458 | 7/13/2016 16:00:00,81.83,81.88,80.37,80.57,10733263,1468425600 459 | 7/14/2016 16:00:00,81.18,82.24,80.86,81.74,9357817,1468512000 460 | 7/15/2016 16:00:00,81.78,82.49,80.97,81.25,8918328,1468598400 461 | 7/18/2016 16:00:00,80.6,82.79,80.6,82.65,12107716,1468857600 462 | 7/19/2016 16:00:00,82.48,83.69,82.05,82.77,9793568,1468944000 463 | 7/20/2016 16:00:00,83.27,84.7,83.23,84.42,13981317,1469030400 464 | 7/21/2016 16:00:00,84.71,85,83.66,84.18,10191960,1469116800 465 | 7/22/2016 16:00:00,84,84.5,83.81,84.49,5988370,1469203200 466 | 7/25/2016 16:00:00,84.47,84.79,82.61,83.19,13183766,1469462400 467 | 7/26/2016 16:00:00,82.86,83.63,82.63,83.59,7713434,1469548800 468 | 7/27/2016 16:00:00,83.6,83.64,83,83.1,11621959,1469635200 469 | 7/28/2016 16:00:00,83.46,83.49,82.12,83.12,7475926,1469721600 470 | 7/29/2016 16:00:00,83.37,83.42,81.95,82.48,8709259,1469808000 471 | 8/1/2016 16:00:00,82.79,84.8,82.59,84.34,13398443,1470067200 472 | 8/2/2016 16:00:00,84.34,84.34,82.91,83.8,7690180,1470153600 473 | 8/3/2016 16:00:00,83.3,83.84,83.17,83.67,5363908,1470240000 474 | 8/4/2016 16:00:00,83.75,84.98,83.69,84.75,10731563,1470326400 475 | 8/5/2016 16:00:00,85.01,85.08,84.44,84.59,9401038,1470412800 476 | 8/8/2016 16:00:00,84.99,85.02,84.3,85,11524103,1470672000 477 | 8/9/2016 16:00:00,85.05,85.63,84.8,85.24,15340759,1470758400 478 | 8/10/2016 16:00:00,86.01,87.73,86.01,87.33,28167392,1470844800 479 | 8/11/2016 16:00:00,92.14,92.8,91.26,91.77,54164984,1470931200 480 | 8/12/2016 16:00:00,92.98,98.35,92.91,98.25,71948520,1471017600 481 | 8/15/2016 16:00:00,98.28,98.86,96.82,97.17,33799357,1471276800 482 | 8/16/2016 16:00:00,96.15,97.15,95.05,96.66,27510222,1471363200 483 | 8/17/2016 16:00:00,96.17,97.25,96.05,97,14977171,1471449600 484 | 8/18/2016 16:00:00,97.25,97.94,96.62,97,15007911,1471536000 485 | 8/19/2016 16:00:00,96.91,97.24,96.34,96.86,14265149,1471622400 486 | 8/22/2016 16:00:00,96.47,96.63,94.75,95.65,16222785,1471881600 487 | 8/23/2016 16:00:00,95.59,96.48,95.41,95.79,9645970,1471968000 488 | 8/24/2016 16:00:00,95.68,96.3,93.56,93.88,12722727,1472054400 489 | 8/25/2016 16:00:00,93.75,94.69,93.12,93.94,13034568,1472140800 490 | 8/26/2016 16:00:00,94.15,95.45,94.08,95.06,14127930,1472227200 491 | 8/29/2016 16:00:00,94.6,95.16,94.21,94.88,8816199,1472486400 492 | 8/30/2016 16:00:00,95.35,96.68,95.17,96,13990664,1472572800 493 | 8/31/2016 16:00:00,96.14,97.2,96.01,97.19,28610395,1472659200 494 | 9/1/2016 16:00:00,97.3,98,97.01,97.42,13386396,1472745600 495 | 9/2/2016 16:00:00,97.97,99.67,97.97,99.25,17479022,1472832000 496 | 9/6/2016 16:00:00,100.45,104.3,100.45,103.78,32799414,1473177600 497 | 9/7/2016 16:00:00,103.84,104,102.26,102.32,15756126,1473264000 498 | 9/8/2016 16:00:00,101.93,103.78,101.63,102.57,15474346,1473350400 499 | 9/9/2016 16:00:00,101.8,102.21,99.05,99.62,21247442,1473436800 500 | 9/12/2016 16:00:00,97.38,101.38,97,100.8,17315884,1473696000 501 | 9/13/2016 16:00:00,100.38,101.49,98.84,100.28,20003490,1473782400 502 | 9/14/2016 16:00:00,100.08,102.59,100.02,102.4,19599431,1473868800 503 | 9/15/2016 16:00:00,102.62,104.48,102.53,104.45,20834576,1473955200 504 | 9/16/2016 16:00:00,104,105.39,103.86,104.64,20361766,1474041600 505 | 9/19/2016 16:00:00,105.16,105.5,102.2,103.03,15228110,1474300800 506 | 9/20/2016 16:00:00,102.94,103.73,100.93,101.45,12861426,1474387200 507 | 9/21/2016 16:00:00,102.46,106.19,102.21,106,22994913,1474473600 508 | 9/22/2016 16:00:00,107.57,109.76,107.48,109.36,35623748,1474560000 509 | 9/23/2016 16:00:00,108.25,108.4,106.71,107.71,23082726,1474646400 510 | 9/26/2016 16:00:00,106.52,107.06,105.3,105.89,16801803,1474905600 511 | 9/27/2016 16:00:00,106.52,108.49,106.37,108.26,17547900,1474992000 512 | 9/28/2016 16:00:00,108.44,109.87,107.16,108.75,16339488,1475078400 513 | 9/29/2016 16:00:00,106.51,106.69,104.57,105.55,30231368,1475164800 514 | 9/30/2016 16:00:00,106.5,107.1,105.79,105.79,15575017,1475251200 515 | 10/3/2016 16:00:00,105.45,106.29,104.98,105.38,10846647,1475510400 516 | 10/4/2016 16:00:00,105.93,106.23,105.05,105.45,11067366,1475596800 517 | 10/5/2016 16:00:00,105.87,107.45,105.66,106.96,13173956,1475683200 518 | 10/6/2016 16:00:00,107.3,107.51,106.19,107.08,9884558,1475769600 519 | 10/7/2016 16:00:00,106.89,107.55,105.56,106,8952564,1475856000 520 | 10/10/2016 16:00:00,106.79,109,106.56,108.41,11516078,1476115200 521 | 10/11/2016 16:00:00,107.89,107.97,104.75,105.23,14905888,1476201600 522 | 10/12/2016 16:00:00,105.05,105.11,101.82,103.62,18434183,1476288000 523 | 10/13/2016 16:00:00,102.06,102.55,99,102.15,22387487,1476374400 524 | 10/14/2016 16:00:00,104.27,104.7,101.03,101.85,12785695,1476460800 525 | 10/17/2016 16:00:00,101.5,103.47,101.27,102.84,10350118,1476720000 526 | 10/18/2016 16:00:00,104.47,104.99,103.31,103.34,11087853,1476806400 527 | 10/19/2016 16:00:00,104.33,104.8,103.65,103.93,8912399,1476892800 528 | 10/20/2016 16:00:00,104.2,104.74,103.57,103.85,7104482,1476979200 529 | 10/21/2016 16:00:00,103.7,103.94,102.75,103.94,8069429,1477065600 530 | 10/24/2016 16:00:00,104.98,105.3,103.55,104.5,10896748,1477324800 531 | 10/25/2016 16:00:00,104.86,105.2,104.02,104.22,8984158,1477411200 532 | 10/26/2016 16:00:00,103.68,104,102.7,102.78,7579156,1477497600 533 | 10/27/2016 16:00:00,103.38,104.11,101.85,102.38,8805942,1477584000 534 | 10/28/2016 16:00:00,102.35,103.05,101.55,101.93,8477541,1477670400 535 | 10/31/2016 16:00:00,102.65,103.21,101.42,101.69,15836933,1477929600 536 | 11/1/2016 16:00:00,100.43,101.24,99.21,101.15,21268929,1478016000 537 | 11/2/2016 16:00:00,103.85,104.1,97.3,98.51,37054067,1478102400 538 | 11/3/2016 16:00:00,98.04,99.3,96.46,97.75,17410292,1478188800 539 | 11/4/2016 16:00:00,96.9,98.79,96.67,97.57,9046829,1478275200 540 | 11/7/2016 16:00:00,100.07,100.62,99.16,99.35,11196183,1478534400 541 | 11/8/2016 16:00:00,99.39,99.99,98.36,99.85,8080970,1478620800 542 | 11/9/2016 16:00:00,97.38,98.58,95.8,96.67,20937303,1478707200 543 | 11/10/2016 16:00:00,98.34,98.5,92.22,94.34,27341227,1478793600 544 | 11/11/2016 16:00:00,93.86,94.09,91.1,92.99,23716977,1478880000 545 | 11/14/2016 16:00:00,92.45,92.54,87.88,89.77,27346246,1479139200 546 | 11/15/2016 16:00:00,91,93.49,90.75,91,16720543,1479225600 547 | 11/16/2016 16:00:00,91.39,93.68,91.33,92.86,14077985,1479312000 548 | 11/17/2016 16:00:00,94.71,94.98,93.64,94.07,10379424,1479398400 549 | 11/18/2016 16:00:00,94.85,95.3,92.67,93.39,10031921,1479484800 550 | 11/21/2016 16:00:00,94.05,94.66,93,93.41,8958460,1479744000 551 | 11/22/2016 16:00:00,94.24,94.42,93.16,93.21,10403494,1479830400 552 | 11/23/2016 16:00:00,92.53,93.4,91.45,93.03,11741987,1479916800 553 | 11/25/2016 16:00:00,93.55,93.75,92.77,93.01,4868511,1480089600 554 | 11/28/2016 16:00:00,93.02,95.74,93,93.76,14336925,1480348800 555 | 11/29/2016 16:00:00,93.67,96.06,93.39,94.99,14143845,1480435200 556 | 11/30/2016 16:00:00,95.28,95.48,93.3,94.02,11447142,1480521600 557 | 12/1/2016 16:00:00,94,94.06,89.18,89.86,24029255,1480608000 558 | 12/2/2016 16:00:00,90.38,91.74,89.95,90.48,11712327,1480694400 559 | 12/5/2016 16:00:00,90.05,91.4,89.57,90.99,8900846,1480953600 560 | 12/6/2016 16:00:00,91.56,91.93,89.96,90.4,7787214,1481040000 561 | 12/7/2016 16:00:00,90.52,91.65,89.5,91.07,13237657,1481126400 562 | 12/8/2016 16:00:00,91.8,93.08,91.03,92.31,10918549,1481212800 563 | 12/9/2016 16:00:00,92.51,93.64,92.28,93.28,9176649,1481299200 564 | 12/12/2016 16:00:00,92.05,92.89,91.7,92.47,9355056,1481558400 565 | 12/13/2016 16:00:00,92.8,93.73,91.87,92.16,10486934,1481644800 566 | 12/14/2016 16:00:00,91.83,92.26,90.83,91.19,9152831,1481731200 567 | 12/15/2016 16:00:00,90,90.6,88.74,88.85,19197250,1481817600 568 | 12/16/2016 16:00:00,89,90.1,88.56,88.67,11340700,1481904000 569 | 12/19/2016 16:00:00,88.61,89.82,88.41,88.93,10220670,1482163200 570 | 12/20/2016 16:00:00,89.19,90.31,88.94,89.84,8434149,1482249600 571 | 12/21/2016 16:00:00,89.96,90.43,89.25,89.25,9035260,1482336000 572 | 12/22/2016 16:00:00,87.89,88.26,86.01,86.8,14402019,1482422400 573 | 12/23/2016 16:00:00,86.62,87.68,86.62,86.79,6359213,1482508800 574 | 12/27/2016 16:00:00,86.72,87.94,86.71,87.54,5227540,1482854400 575 | 12/28/2016 16:00:00,88.3,88.75,87.22,87.37,6420059,1482940800 576 | 12/29/2016 16:00:00,87.82,88.2,87.16,87.33,5465901,1483027200 577 | 12/30/2016 16:00:00,87.57,88.1,87.2,87.81,7210118,1483113600 578 | 1/3/2017 16:00:00,89,89,88.08,88.6,8789013,1483459200 579 | 1/4/2017 16:00:00,88.99,90.89,88.58,90.51,11489724,1483545600 580 | 1/5/2017 16:00:00,91.91,94.81,91.64,94.37,16816988,1483632000 581 | 1/6/2017 16:00:00,94.4,94.5,93,93.89,7638216,1483718400 582 | 1/9/2017 16:00:00,94.16,95.65,93.31,94.72,10825717,1483977600 583 | 1/10/2017 16:00:00,96.4,97.9,95.55,96.75,14776962,1484064000 584 | 1/11/2017 16:00:00,96.92,97.45,95.6,96.94,8730238,1484150400 585 | 1/12/2017 16:00:00,96.85,96.85,94.8,95.9,8421616,1484236800 586 | 1/13/2017 16:00:00,95.95,97.38,95.76,96.27,10699709,1484323200 587 | 1/17/2017 16:00:00,96.32,96.59,95,96.12,6341944,1484668800 588 | 1/18/2017 16:00:00,96.27,96.27,95.26,96,6607125,1484755200 589 | 1/19/2017 16:00:00,96.42,96.7,95.58,96.17,7087780,1484841600 590 | 1/20/2017 16:00:00,96.45,97.15,95.67,96.06,9678904,1484928000 591 | 1/23/2017 16:00:00,96.48,98.67,96.26,98.41,14072077,1485187200 592 | 1/24/2017 16:00:00,103.15,103.19,99.94,101.43,37173723,1485273600 593 | 1/25/2017 16:00:00,102.46,104.27,101.9,104.06,23316527,1485360000 594 | 1/26/2017 16:00:00,103.92,104.57,102.17,102.75,12502173,1485446400 595 | 1/27/2017 16:00:00,102.25,102.7,101.29,102.07,8029740,1485532800 596 | 1/30/2017 16:00:00,101.2,101.46,100.09,101.02,8618627,1485792000 597 | 1/31/2017 16:00:00,100.24,102.09,100.06,101.31,7529383,1485878400 598 | 2/1/2017 16:00:00,102.07,102.38,100.87,101.57,5735378,1485964800 599 | 2/2/2017 16:00:00,101.28,101.47,100.56,100.84,5369995,1486051200 600 | 2/3/2017 16:00:00,101.5,101.56,100.3,100.39,6196352,1486137600 601 | 2/6/2017 16:00:00,100.17,101.71,100.02,100.9,6865582,1486396800 602 | 2/7/2017 16:00:00,101.04,101.6,100.5,100.83,5655088,1486483200 603 | 2/8/2017 16:00:00,101.55,103.99,101.16,103.57,10176865,1486569600 604 | 2/9/2017 16:00:00,103.33,104.18,102.56,103.34,8428702,1486656000 605 | 2/10/2017 16:00:00,103.88,103.94,102.31,102.36,7680112,1486742400 606 | 2/13/2017 16:00:00,102.82,104.44,102.62,103.1,9724181,1487001600 607 | 2/14/2017 16:00:00,103.14,103.6,100.9,101.59,10239860,1487088000 608 | 2/15/2017 16:00:00,102.06,102.13,100.11,101.55,12381790,1487174400 609 | 2/16/2017 16:00:00,101.86,102.1,100.5,100.82,7462539,1487260800 610 | 2/17/2017 16:00:00,100.69,101.73,100.3,100.52,8256514,1487347200 611 | 2/21/2017 16:00:00,101.03,102.54,100.91,102.12,8187899,1487692800 612 | 2/22/2017 16:00:00,102.48,105.2,102.42,104.2,15778842,1487779200 613 | 2/23/2017 16:00:00,104.72,104.86,101.82,102.46,10095258,1487865600 614 | 2/24/2017 16:00:00,101.39,103,101.3,102.95,7356392,1487952000 615 | 2/27/2017 16:00:00,102.5,103.83,102.22,103.6,6865650,1488211200 616 | 2/28/2017 16:00:00,103.89,103.99,102.03,102.9,8014728,1488297600 617 | 3/1/2017 16:00:00,103.68,104.99,103.21,104.04,10331088,1488384000 618 | 3/2/2017 16:00:00,103.8,104.58,102.77,103.19,7981506,1488470400 619 | 3/3/2017 16:00:00,102.99,103.42,102.44,103.31,6320211,1488556800 620 | 3/6/2017 16:00:00,102.76,103.25,102.1,102.31,6289255,1488816000 621 | 3/7/2017 16:00:00,102.3,103.31,102.11,102.63,4984972,1488902400 622 | 3/8/2017 16:00:00,102.63,104.29,102.54,103.22,7065357,1488988800 623 | 3/9/2017 16:00:00,102.97,103.75,102.76,103.24,4522629,1489075200 624 | 3/10/2017 16:00:00,103.43,103.7,102.63,103.39,4119480,1489161600 625 | 3/13/2017 16:00:00,103.52,106.25,103.47,105.18,16113249,1489420800 626 | 3/14/2017 16:00:00,104.61,106,103.82,104.25,7747469,1489507200 627 | 3/15/2017 16:00:00,104.37,104.49,102.6,103.69,11694769,1489593600 628 | 3/16/2017 16:00:00,105.25,105.65,104.3,105.63,12442677,1489680000 629 | 3/17/2017 16:00:00,105.17,106.5,104.86,105.61,8776535,1489766400 630 | 3/20/2017 16:00:00,106.23,108.2,105.94,107.25,12447321,1490025600 631 | 3/21/2017 16:00:00,108.46,108.7,104.7,105.09,13874580,1490112000 632 | 3/22/2017 16:00:00,104.64,106.12,103.98,106.09,7151985,1490198400 633 | 3/23/2017 16:00:00,106.95,108.83,106.44,108.25,13410143,1490284800 634 | 3/24/2017 16:00:00,108.4,109.13,107.23,108.04,7577404,1490371200 635 | 3/27/2017 16:00:00,106.65,108.19,106.51,108.08,7700626,1490630400 636 | 3/28/2017 16:00:00,108.23,108.95,107.46,107.8,6469277,1490716800 637 | 3/29/2017 16:00:00,107.97,109.74,107.69,109.51,8786726,1490803200 638 | 3/30/2017 16:00:00,109.73,110.45,108.66,108.85,10590201,1490889600 639 | 3/31/2017 16:00:00,108.5,109.12,107.78,107.83,9001134,1490976000 640 | 4/3/2017 16:00:00,108.85,109.47,107.52,108.09,8390061,1491235200 641 | 4/4/2017 16:00:00,107.87,108.26,106.88,107.52,6479163,1491321600 642 | 4/5/2017 16:00:00,108.36,108.82,107.32,107.44,8199647,1491408000 643 | 4/6/2017 16:00:00,107.59,108.42,107.15,108.04,5210843,1491494400 644 | 4/7/2017 16:00:00,107.88,109.07,106.76,108.99,8352139,1491580800 645 | 4/10/2017 16:00:00,109,111.88,108.84,111.7,14797779,1491840000 646 | 4/11/2017 16:00:00,111.4,111.79,109.46,110.44,10011311,1491926400 647 | 4/12/2017 16:00:00,110.5,111.7,110.31,110.63,8098670,1492012800 648 | 4/13/2017 16:00:00,110.72,111.45,109.82,110.21,6856018,1492099200 649 | 4/17/2017 16:00:00,110.91,111.87,110.3,111.76,7124816,1492444800 650 | 4/18/2017 16:00:00,111.2,112.2,110.87,111.23,8304258,1492531200 651 | 4/19/2017 16:00:00,111.99,112.2,110.57,110.76,9603207,1492617600 652 | 4/20/2017 16:00:00,111.53,113.6,111.48,112.96,13773102,1492704000 653 | 4/21/2017 16:00:00,112.8,113.17,112.3,113.11,8965358,1492790400 654 | 4/24/2017 16:00:00,114.04,115.16,114.02,114.86,13382336,1493049600 655 | 4/25/2017 16:00:00,115.54,115.82,114.8,115.48,11333042,1493136000 656 | 4/26/2017 16:00:00,115.37,115.75,114.62,114.97,6675632,1493222400 657 | 4/27/2017 16:00:00,115,115.96,114.83,115.43,9439595,1493308800 658 | 4/28/2017 16:00:00,115.9,115.99,115,115.5,6984673,1493395200 659 | 5/1/2017 16:00:00,115.63,117.24,115.5,116.68,7331383,1493654400 660 | 5/2/2017 16:00:00,117.07,118.69,117,118.09,10047756,1493740800 661 | 5/3/2017 16:00:00,117.95,118,115.12,116.57,10590212,1493827200 662 | 5/4/2017 16:00:00,115.94,116.41,115.15,115.86,6977804,1493913600 663 | 5/5/2017 16:00:00,116.05,116.15,114.8,116.04,7097296,1494000000 664 | 5/8/2017 16:00:00,116.9,117.51,116.2,116.86,6461326,1494259200 665 | 5/9/2017 16:00:00,118.62,120,118.07,120,15209986,1494345600 666 | 5/10/2017 16:00:00,120.01,120.33,119.1,119.98,9344548,1494432000 667 | 5/11/2017 16:00:00,120.13,120.5,118.25,120.16,11372828,1494518400 668 | 5/12/2017 16:00:00,120.37,120.47,119.51,120.34,9820882,1494604800 669 | 5/15/2017 16:00:00,121.03,121.49,120.03,121.4,11121635,1494864000 670 | 5/16/2017 16:00:00,121.98,124.34,121.74,124.02,18193323,1494950400 671 | 5/17/2017 16:00:00,123.25,123.89,120.5,120.72,19808839,1495036800 672 | 5/18/2017 16:00:00,116.31,122.63,114,121.27,37111914,1495123200 673 | 5/19/2017 16:00:00,123.96,126.4,123.07,123.22,21096408,1495209600 674 | 5/22/2017 16:00:00,124.98,125.59,123.56,124.75,13487139,1495468800 675 | 5/23/2017 16:00:00,124.67,125.68,122.85,122.93,14365717,1495555200 676 | 5/24/2017 16:00:00,123.07,123.68,121.95,122.81,8375984,1495641600 677 | 5/25/2017 16:00:00,123.74,124.45,122.31,123.63,12482993,1495728000 678 | 5/26/2017 16:00:00,123.93,124.65,123.1,123.99,7557446,1495814400 679 | 5/30/2017 16:00:00,124.08,124.88,123.53,123.91,8342615,1496160000 680 | 5/31/2017 16:00:00,123.64,124.18,122,122.46,11580584,1496246400 681 | 6/1/2017 16:00:00,122.82,124,122.26,123.97,8898143,1496332800 682 | 6/2/2017 16:00:00,123.72,124.53,123.24,124.13,7341859,1496419200 683 | 6/5/2017 16:00:00,124.02,125.56,123.87,125.37,10029921,1496678400 684 | 6/6/2017 16:00:00,125.61,126.2,124.27,124.62,9256151,1496764800 685 | 6/7/2017 16:00:00,125.08,125.91,124.11,125.64,9430262,1496851200 686 | 6/8/2017 16:00:00,142.51,143.7,135.21,142.34,81347278,1496937600 687 | 6/9/2017 16:00:00,144.57,148.29,137.01,139.44,54358697,1497024000 688 | 6/12/2017 16:00:00,139.17,142.2,136.05,139.08,32173265,1497283200 689 | 6/13/2017 16:00:00,141.88,142.24,135.9,136.6,40867992,1497369600 690 | 6/14/2017 16:00:00,137.8,139.25,135.26,136.67,32852482,1497456000 691 | 6/15/2017 16:00:00,135.64,135.67,133.1,135.08,30504654,1497542400 692 | 6/16/2017 16:00:00,136.28,136.5,133.55,134.87,36428033,1497628800 693 | 6/19/2017 16:00:00,137.81,140.4,137.4,139.47,24940028,1497888000 694 | 6/20/2017 16:00:00,140.08,140.63,137.93,138.38,20570029,1497974400 695 | 6/21/2017 16:00:00,138.82,143.5,138.02,143.29,30900055,1498060800 696 | 6/22/2017 16:00:00,142.05,144.68,140.88,142.27,21890559,1498147200 697 | 6/23/2017 16:00:00,142.1,143.34,141.6,143.01,11751376,1498233600 698 | 6/26/2017 16:00:00,144.03,145.36,141.27,142.73,17826640,1498492800 699 | 6/27/2017 16:00:00,143.9,144.38,141.1,141.53,17370584,1498579200 700 | 6/28/2017 16:00:00,142.65,144.37,141.48,143.95,17751451,1498665600 701 | 6/29/2017 16:00:00,143.16,143.56,137.52,140.81,24124653,1498752000 702 | 6/30/2017 16:00:00,141.03,142.38,139.92,140.9,12273637,1498838400 703 | 7/3/2017 16:00:00,141.75,142.49,139.5,140.99,6975712,1499097600 704 | 7/5/2017 16:00:00,141.16,145,140.33,144.87,16988319,1499270400 705 | 7/6/2017 16:00:00,143.01,143.62,141.83,142.2,11928789,1499356800 706 | 7/7/2017 16:00:00,142.65,143.38,141.83,142.43,8038291,1499443200 707 | 7/10/2017 16:00:00,143,144.16,142.25,143.81,10345440,1499702400 708 | 7/11/2017 16:00:00,144.29,145.87,143.26,145.81,13512396,1499788800 709 | 7/12/2017 16:00:00,147.38,149.3,146.85,149,14944503,1499875200 710 | 7/13/2017 16:00:00,149.52,150,148,149.52,11676344,1499961600 711 | 7/14/2017 16:00:00,150.12,152.25,149.69,151.83,11462883,1500048000 712 | 7/17/2017 16:00:00,153.53,153.7,150.42,151.23,15333382,1500307200 713 | 7/18/2017 16:00:00,151.08,154.6,150.48,153.75,15306833,1500393600 714 | 7/19/2017 16:00:00,155.14,156.41,152.64,153.15,16890718,1500480000 715 | 7/20/2017 16:00:00,153.96,154.12,151.84,152.11,16728453,1500566400 716 | 7/21/2017 16:00:00,151.79,152.15,150.31,151.89,11447927,1500652800 717 | 7/24/2017 16:00:00,152.77,153.23,151.6,152.26,10646137,1500912000 718 | 7/25/2017 16:00:00,152.36,152.75,150.85,152.44,8455352,1500998400 719 | 7/26/2017 16:00:00,152.53,156,152.36,155.79,14440368,1501084800 720 | 7/27/2017 16:00:00,157.85,160.39,151.33,154.15,26048621,1501171200 721 | 7/28/2017 16:00:00,153.96,158.96,152.82,157.56,14442501,1501257600 722 | 7/31/2017 16:00:00,158.9,159.39,153.5,154.95,17774668,1501516800 723 | 8/1/2017 16:00:00,156.25,156.61,153.8,154.73,12018647,1501603200 724 | 8/2/2017 16:00:00,155.47,155.75,149.1,151.91,19522100,1501689600 725 | 8/3/2017 16:00:00,152.1,153.8,149.6,153.32,12420551,1501776000 726 | 8/4/2017 16:00:00,154.32,154.32,152.16,153.33,10031255,1501862400 727 | 8/7/2017 16:00:00,154.83,158.99,154.37,158.84,15893533,1502121600 728 | 8/8/2017 16:00:00,158.56,159.84,156.8,157.5,15430432,1502208000 729 | 8/9/2017 16:00:00,156.05,157.71,155.2,157.49,11014424,1502294400 730 | 8/10/2017 16:00:00,156.2,156.5,151.25,151.77,19296148,1502380800 731 | 8/11/2017 16:00:00,150.51,152.57,147.5,151.7,22303760,1502467200 732 | 8/14/2017 16:00:00,154.77,155.08,153.1,154.61,14579228,1502726400 733 | 8/15/2017 16:00:00,155.74,158.32,154,157.75,18625250,1502812800 734 | 8/16/2017 16:00:00,160,160.35,158.54,159.5,21268925,1502899200 735 | 8/17/2017 16:00:00,166.12,168,163.51,163.92,56805678,1502985600 736 | 8/18/2017 16:00:00,165.36,169.5,164.1,167.5,31479115,1503072000 737 | 8/21/2017 16:00:00,168.29,170.6,166.98,169.25,22334169,1503331200 738 | 8/22/2017 16:00:00,170.02,174.77,169.64,174.46,24463401,1503417600 739 | 8/23/2017 16:00:00,172.9,176.23,172.75,175.8,21927498,1503504000 740 | 8/24/2017 16:00:00,177,177,174.3,175,20781228,1503590400 741 | 8/25/2017 16:00:00,174.8,174.94,171.11,171.74,24168074,1503676800 742 | 8/28/2017 16:00:00,171.15,171.34,167.06,168.3,24588200,1503936000 743 | 8/29/2017 16:00:00,165.15,169.23,164.35,167.41,19576998,1504022400 744 | 8/30/2017 16:00:00,169.15,172.39,169.15,171.25,17756617,1504108800 745 | 8/31/2017 16:00:00,172.54,172.9,170.25,171.74,16478570,1504195200 746 | 9/1/2017 16:00:00,171.99,172.39,170.65,171.04,11163539,1504281600 747 | 9/5/2017 16:00:00,169.47,171.93,168.74,169.92,15019626,1504627200 748 | 9/6/2017 16:00:00,170.17,171.11,167,168.14,19982147,1504713600 749 | 9/7/2017 16:00:00,169.26,170.97,168,170.48,15101028,1504800000 750 | 9/8/2017 16:00:00,169.99,171.22,168.92,169,12341834,1504886400 751 | 9/11/2017 16:00:00,171.5,174.2,171.5,174.06,18238506,1505145600 752 | 9/12/2017 16:00:00,174.89,175.62,173.37,175.31,15622529,1505232000 753 | 9/13/2017 16:00:00,175.75,179.1,175.56,178.97,22029865,1505318400 754 | 9/14/2017 16:00:00,177.54,179.93,176.02,177.1,22809005,1505404800 755 | 9/15/2017 16:00:00,177.9,179.75,176.7,176.7,26560724,1505491200 756 | 9/18/2017 16:00:00,178.89,180.29,177.75,179.98,22913339,1505750400 757 | 9/19/2017 16:00:00,180.69,180.87,179.25,180.07,14743409,1505836800 758 | 9/20/2017 16:00:00,180.02,180.5,176.15,177.95,15391326,1505923200 759 | 9/21/2017 16:00:00,178.05,178.86,175.3,177.39,14576290,1506009600 760 | 9/22/2017 16:00:00,176.2,178.42,175.68,178.14,12743378,1506096000 761 | 9/25/2017 16:00:00,176.48,177,167.5,169.59,34024307,1506355200 762 | 9/26/2017 16:00:00,170.01,171.9,166.79,167.02,23690854,1506441600 763 | 9/27/2017 16:00:00,169.84,171.95,169.45,170.99,19436338,1506528000 764 | 9/28/2017 16:00:00,170.91,171.88,169.57,170.24,13948637,1506614400 765 | 9/29/2017 16:00:00,171.11,173.54,170.74,172.71,13397934,1506700800 766 | 10/2/2017 16:00:00,174.57,175.13,172.57,173.61,12557248,1506960000 767 | 10/3/2017 16:00:00,176.06,178.78,173.61,178.56,16709711,1507046400 768 | 10/4/2017 16:00:00,178.06,180,177.3,178.71,11415485,1507132800 769 | 10/5/2017 16:00:00,179,179.73,176.03,178.89,11888554,1507219200 770 | 10/6/2017 16:00:00,177.85,179.87,177.61,179.2,8743732,1507305600 771 | 10/9/2017 16:00:00,178.97,183.13,178.75,182.09,15011614,1507564800 772 | 10/10/2017 16:00:00,181.65,184.46,181.36,183.12,13201284,1507651200 773 | 10/11/2017 16:00:00,183,184.7,182.6,184.69,11974445,1507737600 774 | 10/12/2017 16:00:00,184.04,184.39,180.35,180.53,15441222,1507824000 775 | 10/13/2017 16:00:00,180.96,181.4,177.97,178.45,18107742,1507910400 776 | 10/16/2017 16:00:00,180,180.05,178.51,179.56,12855874,1508169600 777 | 10/17/2017 16:00:00,179.58,180.12,175.3,175.32,20132223,1508256000 778 | 10/18/2017 16:00:00,177.09,180,176.28,179.61,21766267,1508342400 779 | 10/19/2017 16:00:00,177,179.61,175.45,177.93,13538966,1508428800 780 | 10/20/2017 16:00:00,179.02,179.52,177.08,177.32,11953220,1508515200 781 | 10/23/2017 16:00:00,177.8,178.01,173.05,173.13,17610931,1508774400 782 | 10/24/2017 16:00:00,174,175.98,173.26,173.7,11945951,1508860800 783 | 10/25/2017 16:00:00,174.69,175.44,169.3,170.22,18109375,1508947200 784 | 10/26/2017 16:00:00,170.62,171.45,168.58,170.32,13527415,1509033600 785 | 10/27/2017 16:00:00,173.19,177,171.11,176.15,19712550,1509120000 786 | 10/30/2017 16:00:00,178.43,181.9,177.59,181.58,20219707,1509379200 787 | 10/31/2017 16:00:00,183.57,185.12,181.81,184.89,21256673,1509465600 788 | 11/1/2017 16:00:00,187.88,188.88,183.58,186.08,28594733,1509552000 789 | 11/2/2017 16:00:00,190.99,191.22,183.31,184.81,41239871,1509638400 790 | 11/3/2017 16:00:00,186.51,186.93,182.06,183.21,19697343,1509724800 791 | 11/6/2017 16:00:00,184.07,188.25,184,187.84,19873148,1509984000 792 | 11/7/2017 16:00:00,189.58,189.86,187,188.51,17780967,1510070400 793 | 11/8/2017 16:00:00,187.98,188.15,185.1,185.9,13944586,1510156800 794 | 11/9/2017 16:00:00,184.21,185.13,181.05,185.13,19755550,1510243200 795 | 11/10/2017 16:00:00,187.03,187.17,185.4,186.41,15030991,1510329600 796 | 11/13/2017 16:00:00,186.77,187.88,184,184.54,17185607,1510588800 797 | 11/14/2017 16:00:00,184.3,184.38,181.15,181.79,14475342,1510675200 798 | 11/15/2017 16:00:00,179.37,181.88,176.74,181.48,16566977,1510761600 799 | 11/16/2017 16:00:00,183.31,186.27,183.12,185.43,18389473,1510848000 800 | 11/17/2017 16:00:00,185.92,186.5,184.67,185.13,13422728,1510934400 801 | 11/20/2017 16:00:00,187.6,190,186.61,188,25992271,1511193600 802 | 11/21/2017 16:00:00,190.35,191.56,188.8,190.9,19639467,1511280000 803 | 11/22/2017 16:00:00,191.54,191.75,189.37,189.84,14417615,1511366400 804 | 11/24/2017 13:00:00,189.39,191.7,188.7,191.19,9887763,1511528400 805 | 11/27/2017 16:00:00,190.49,191.45,187.55,188.03,14952763,1511798400 806 | 11/28/2017 16:00:00,188.83,189.1,186.5,186.69,13378145,1511884800 807 | 11/29/2017 16:00:00,185.25,185.41,173.62,179.91,40204058,1511971200 808 | 11/30/2017 16:00:00,179.53,179.8,176.32,177.08,25851122,1512057600 809 | 12/1/2017 16:00:00,175.27,179.8,173.8,174.61,26782304,1512144000 810 | 12/4/2017 16:00:00,177.2,177.58,168.26,169.58,35895142,1512403200 811 | 12/5/2017 16:00:00,165.28,172.96,164.25,168.96,31609904,1512489600 812 | 12/6/2017 16:00:00,168.3,173.23,167.87,172.63,23897802,1512576000 813 | 12/7/2017 16:00:00,173.76,175.82,172.26,174.47,15697869,1512662400 814 | 12/8/2017 16:00:00,177.72,178.96,176.37,177.62,23543371,1512748800 815 | 12/11/2017 16:00:00,179.19,180.68,178.15,179.29,15626196,1513008000 816 | 12/12/2017 16:00:00,178,178.16,173.77,174.64,22656450,1513094400 817 | 12/13/2017 16:00:00,175.19,177.7,174.3,176.47,18653366,1513180800 818 | 12/14/2017 16:00:00,173.11,173.39,169.61,171.75,32830024,1513267200 819 | 12/15/2017 16:00:00,172.89,173.55,170,173.55,41356671,1513353600 820 | 12/18/2017 16:00:00,174.6,174.7,172.37,173.37,17023342,1513612800 821 | 12/19/2017 16:00:00,171.97,173,170.51,171.28,23936180,1513699200 822 | 12/20/2017 16:00:00,171.79,172.9,170.8,172.64,17121392,1513785600 823 | 12/21/2017 16:00:00,172.8,176.25,172.65,175.32,14812355,1513872000 824 | 12/22/2017 16:00:00,175.84,176.66,175.04,176.29,12524722,1513958400 825 | 12/26/2017 16:00:00,174.55,175.15,171.73,172.33,12913823,1514304000 826 | 12/27/2017 16:00:00,172.29,173.87,171.73,172.97,10152340,1514390400 827 | 12/28/2017 16:00:00,173.04,173.53,171.67,172.3,9508057,1514476800 828 | 12/29/2017 16:00:00,172.28,173.67,171.2,172.43,9704583,1514563200 829 | 1/2/2018 16:00:00,176.4,184.1,175.7,183.65,29916943,1514908800 830 | 1/3/2018 16:00:00,185.19,185.64,181.4,184,20121856,1514995200 831 | 1/4/2018 16:00:00,185.9,187.75,184.43,185.71,19473795,1515081600 832 | 1/5/2018 16:00:00,187.17,190.75,186.3,190.7,18168345,1515168000 833 | 1/8/2018 16:00:00,190.46,191.66,189.07,190.33,16230147,1515427200 834 | 1/9/2018 16:00:00,191.13,192.49,188,190.8,19495092,1515513600 835 | 1/10/2018 16:00:00,188.1,190.39,186.58,189.79,17943839,1515600000 836 | 1/11/2018 16:00:00,189.73,190.43,188.1,188.75,12400372,1515686400 837 | 1/12/2018 16:00:00,189.91,190.2,187.25,187.79,11789627,1515772800 838 | 1/16/2018 16:00:00,190.4,191.74,181.75,182.4,27428505,1516118400 839 | 1/17/2018 16:00:00,183.3,184.8,179.32,183.83,21346502,1516204800 840 | 1/18/2018 16:00:00,184.28,185.85,182.69,184.4,14190653,1516291200 841 | 1/19/2018 16:00:00,185.15,185.24,182.8,184.05,15349322,1516377600 842 | 1/22/2018 16:00:00,184.98,185.04,181.68,184.02,16016347,1516636800 843 | 1/23/2018 16:00:00,185.28,192.4,183.54,192.28,31305926,1516723200 844 | 1/24/2018 16:00:00,194.71,198.86,192.4,195.53,34497260,1516809600 845 | 1/25/2018 16:00:00,196.34,199.59,194.1,198.33,23421605,1516896000 846 | 1/26/2018 16:00:00,200.33,205.23,199.21,205.22,23768628,1516982400 847 | 1/29/2018 16:00:00,204.83,205.69,201.82,203.01,21908591,1517241600 848 | 1/30/2018 16:00:00,198.68,202.54,196.49,199.66,23377519,1517328000 849 | 1/31/2018 16:00:00,202.82,206.2,202.8,204.29,26982494,1517414400 850 | 2/1/2018 16:00:00,192.75,199.49,191.14,192.22,52628863,1517500800 851 | 2/2/2018 16:00:00,194.79,195.68,186.8,187.31,32233916,1517587200 852 | 2/5/2018 16:00:00,183.7,190.47,179.9,180.53,31083967,1517846400 853 | 2/6/2018 16:00:00,174.72,185.59,174.17,185.17,35804470,1517932800 854 | 2/7/2018 16:00:00,183.5,186.83,180.3,180.3,19672104,1518019200 855 | 2/8/2018 16:00:00,182.27,183.1,171.39,173.7,32051274,1518105600 856 | 2/9/2018 16:00:00,175.12,177.62,168.88,176.67,28049543,1518192000 857 | 2/12/2018 16:00:00,180.44,180.79,175.09,177.44,18280259,1518451200 858 | 2/13/2018 16:00:00,177.42,182.15,177,179.25,15506955,1518537600 859 | 2/14/2018 16:00:00,179.22,186.93,178.9,186.76,21047363,1518624000 860 | 2/15/2018 16:00:00,189.25,189.56,184.43,187.45,14361054,1518710400 861 | 2/16/2018 16:00:00,186.75,188.27,183.54,183.68,16114051,1518796800 862 | 2/20/2018 16:00:00,183.67,188.83,183,187.19,14854901,1519142400 863 | 2/21/2018 16:00:00,189.37,193.17,188.46,188.82,22071585,1519228800 864 | 2/22/2018 16:00:00,190.2,190.74,187.77,188.75,12282843,1519315200 865 | 2/23/2018 16:00:00,190.18,193.41,189.95,193.29,16937275,1519401600 866 | 2/26/2018 16:00:00,194.46,195.15,190.65,194.19,19463072,1519660800 867 | 2/27/2018 16:00:00,192.59,193.57,187.21,188.26,23218450,1519747200 868 | 2/28/2018 16:00:00,187.25,188.24,185,186.14,19367576,1519833600 869 | 3/1/2018 16:00:00,186.18,187.48,180.05,181.99,17286309,1519920000 870 | 3/2/2018 16:00:00,178.01,180.23,175.45,179.76,18909073,1520006400 871 | 3/5/2018 16:00:00,179.41,181.95,177.07,181.6,15656661,1520265600 872 | 3/6/2018 16:00:00,185.19,188.01,184.82,187.37,17856088,1520352000 873 | 3/7/2018 16:00:00,184.37,189.07,184.32,189.05,13728910,1520438400 874 | 3/8/2018 16:00:00,189.05,190.23,186.57,187.18,14331400,1520524800 875 | 3/9/2018 16:00:00,189.64,190.7,188.01,190.55,14208356,1520611200 876 | 3/12/2018 16:00:00,192.3,194.4,190.9,192.74,17826186,1520870400 877 | 3/13/2018 16:00:00,193.88,194.25,187.39,188.41,14826665,1520956800 878 | 3/14/2018 16:00:00,190.29,193.63,190.22,192.56,20032271,1521043200 879 | 3/15/2018 16:00:00,198.44,201.5,196.52,199.06,33626797,1521129600 880 | 3/16/2018 16:00:00,198.4,200.38,197.26,200.28,26948659,1521216000 881 | 3/19/2018 16:00:00,198,198.43,192.8,194.53,19681421,1521475200 882 | 3/20/2018 16:00:00,194.95,199.21,194.54,198.95,11952024,1521561600 883 | 3/21/2018 16:00:00,198.8,198.88,194.57,195.3,12047301,1521648000 884 | 3/22/2018 16:00:00,190.75,192.39,184.6,184.65,25355700,1521734400 885 | 3/23/2018 16:00:00,186.85,188.48,180.4,181.2,18714404,1521820800 886 | 3/26/2018 16:00:00,187.89,190.62,184.32,190.5,16758711,1522080000 887 | 3/27/2018 16:00:00,192.24,192.25,180.66,181.89,16627873,1522166400 888 | 3/28/2018 16:00:00,180.73,183.44,177.57,178.91,20081071,1522252800 889 | 3/29/2018 16:00:00,180.88,185.13,178.62,183.54,16378866,1522339200 890 | 4/2/2018 16:00:00,182.81,183.51,175.75,177.61,16028747,1522684800 891 | 4/3/2018 16:00:00,179.26,179.58,173,174.67,19975067,1522771200 892 | 4/4/2018 16:00:00,166.88,172.41,166.13,172.07,24573593,1522857600 893 | 4/5/2018 16:00:00,175.48,176.56,171.17,172.57,18250947,1522944000 894 | 4/6/2018 16:00:00,169.84,172.27,166.4,167.52,18209969,1523030400 895 | 4/9/2018 16:00:00,169.75,172.72,168.61,169.87,14717312,1523289600 896 | 4/10/2018 16:00:00,175.1,177.88,173.85,177.1,20596194,1523376000 897 | 4/11/2018 16:00:00,176.48,178.16,174.74,175.36,10170536,1523462400 898 | 4/12/2018 16:00:00,175.93,177.9,174.56,175.92,11133871,1523548800 899 | 4/13/2018 16:00:00,176.72,176.8,171.07,172.04,13526198,1523635200 900 | 4/16/2018 16:00:00,172.01,174.79,171.01,174.7,9876207,1523894400 901 | 4/17/2018 16:00:00,174.83,179.34,174.83,178.7,16285805,1523980800 902 | 4/18/2018 16:00:00,178.9,182.88,177.64,182.68,16972731,1524067200 903 | 4/19/2018 16:00:00,183.26,183.63,179.52,181.39,11988977,1524153600 904 | 4/20/2018 16:00:00,179.36,181.39,177.53,179.11,14473079,1524240000 905 | 4/23/2018 16:00:00,178.63,179.32,174.71,175.57,12033892,1524499200 906 | 4/24/2018 16:00:00,177.63,178,170.68,173.09,14567517,1524585600 907 | 4/25/2018 16:00:00,170.52,171.3,166.64,170.22,17132871,1524672000 908 | 4/26/2018 16:00:00,173.25,174.36,172.05,173.9,13398037,1524758400 909 | 4/27/2018 16:00:00,177.11,178.2,174.01,177.16,15062517,1524844800 910 | 4/30/2018 16:00:00,178.09,180.04,177.05,178.54,14653977,1525104000 911 | 5/1/2018 16:00:00,177.58,180.32,177.44,179.5,10787699,1525190400 912 | 5/2/2018 16:00:00,180.8,184.26,180.11,181.45,20681841,1525276800 913 | 5/3/2018 16:00:00,183.5,183.59,175.77,182.45,26257648,1525363200 914 | 5/4/2018 16:00:00,180.4,190.6,178.62,188.89,57788340,1525449600 915 | 5/7/2018 16:00:00,190.41,196.6,190.3,195.35,29862192,1525708800 916 | 5/8/2018 16:00:00,194.2,197.34,193.01,196.31,21856348,1525795200 917 | 5/9/2018 16:00:00,195.84,197.38,194.5,195.43,13780627,1525881600 918 | 5/10/2018 16:00:00,196.3,199.77,195.16,195.96,21295038,1525968000 919 | 5/11/2018 16:00:00,196.4,196.46,193.38,194.36,12741110,1526054400 920 | 5/14/2018 16:00:00,195.9,200,195.87,198.64,17627130,1526313600 921 | 5/15/2018 16:00:00,195.23,196.78,193.86,196.61,12694857,1526400000 922 | 5/16/2018 16:00:00,196.75,199.75,196.3,198.11,12887456,1526486400 923 | 5/17/2018 16:00:00,196,198.43,195.57,196.02,13470547,1526572800 924 | 5/18/2018 16:00:00,196.43,197.78,194.72,195,14242305,1526659200 925 | 5/21/2018 16:00:00,197.8,199.79,196.4,197.64,13830526,1526918400 926 | 5/22/2018 16:00:00,198.3,198.63,195.7,195.87,9700121,1527004800 927 | 5/23/2018 16:00:00,193.88,196.9,192.8,196.8,12807376,1527091200 928 | 5/24/2018 16:00:00,198.12,199.72,195.7,197.37,18527694,1527177600 929 | 5/25/2018 16:00:00,197.57,201.5,197.21,199.2,21269952,1527264000 930 | 5/29/2018 16:00:00,197.94,202.28,197,198,18768743,1527609600 931 | 5/30/2018 16:00:00,199.7,200.54,197.5,197.98,13930634,1527696000 932 | 5/31/2018 16:00:00,199.7,200.54,197.5,197.98,341342,1527782400 933 | 6/1/2018 16:00:00,199.5,204.99,199.45,204.34,23131917,1527868800 934 | 6/4/2018 16:00:00,205.12,209.75,204.73,208.95,19357012,1528128000 935 | 6/5/2018 16:00:00,209.95,211.7,207.13,208.37,17787704,1528214400 936 | 6/6/2018 16:00:00,209.86,210.46,207.29,208.3,13800519,1528300800 937 | 6/7/2018 16:00:00,207.46,209,200.88,203.62,26747768,1528387200 938 | 6/8/2018 16:00:00,201.11,206.23,200.43,205.07,17525218,1528473600 939 | 6/11/2018 16:00:00,206.5,207.6,205.01,205.7,12061370,1528732800 940 | 6/12/2018 16:00:00,206.95,209.8,206.9,209.08,15910860,1528819200 941 | 6/13/2018 16:00:00,209.44,209.65,206.6,206.62,13844190,1528905600 942 | 6/14/2018 16:00:00,207.72,211.12,207.51,210.86,18838274,1528992000 943 | 6/15/2018 16:00:00,207.49,210.08,206.01,208,28665573,1529078400 944 | 6/18/2018 16:00:00,205.16,208.6,203.88,208.57,14645182,1529337600 945 | 6/19/2018 16:00:00,203.53,204.51,199.5,204.43,24484164,1529424000 946 | 6/20/2018 16:00:00,205.05,207.23,205.02,206.23,15559583,1529510400 947 | 6/21/2018 16:00:00,205.84,206,201.04,202.21,13963829,1529596800 948 | 6/22/2018 16:00:00,203.38,203.8,200.25,202.01,9623582,1529683200 949 | 6/25/2018 16:00:00,197.85,198.1,187.86,191.25,32750867,1529942400 950 | 6/26/2018 16:00:00,193.34,193.66,188.42,191.42,20740355,1530028800 951 | 6/27/2018 16:00:00,193.46,193.6,184.89,185.02,23886981,1530115200 952 | 6/28/2018 16:00:00,183.2,188.96,182.04,188.38,19553796,1530201600 953 | 6/29/2018 16:00:00,185.36,188.97,184.26,185.53,26023406,1530288000 954 | 7/2/2018 16:00:00,181.66,186.36,181.06,186.36,17325917,1530547200 955 | 7/3/2018 13:00:00,187.88,188.5,184.36,184.75,11673699,1530622800 956 | 7/5/2018 16:00:00,187.17,187.44,182.9,186.88,18412131,1530806400 957 | 7/6/2018 16:00:00,186.01,192.49,185.54,192.27,17035621,1530892800 958 | 7/9/2018 16:00:00,194.45,194.69,190.87,192.75,15466403,1531152000 959 | 7/10/2018 16:00:00,192.89,195.13,191.48,192.55,12611428,1531238400 960 | 7/11/2018 16:00:00,188.6,190.05,187.42,187.42,15947024,1531324800 961 | 7/12/2018 16:00:00,190.77,192.58,189.79,190.17,17440353,1531411200 962 | 7/13/2018 16:00:00,191.61,192.12,189.3,190.04,12557906,1531497600 963 | 7/16/2018 16:00:00,189.57,191.37,189.15,190.35,12205645,1531756800 964 | 7/17/2018 16:00:00,188.65,192.95,187.9,192.66,13270692,1531843200 965 | 7/18/2018 16:00:00,192.45,193.23,189.91,190.79,10796602,1531929600 966 | 7/19/2018 16:00:00,188.68,189.68,186.87,187.34,13373064,1532016000 967 | 7/20/2018 16:00:00,189.49,189.5,186.61,187.25,12812654,1532102400 968 | 7/23/2018 16:00:00,187.18,187.81,184.8,187.04,10996150,1532361600 969 | 7/24/2018 16:00:00,190.19,193.07,188.35,189,18414763,1532448000 970 | 7/25/2018 16:00:00,190.61,198.35,190.14,197.98,20739329,1532534400 971 | 7/26/2018 16:00:00,193.21,196.12,192.62,194.18,13885520,1532620800 972 | 7/27/2018 16:00:00,196.1,196.27,186.93,189.42,19916587,1532707200 973 | 7/30/2018 16:00:00,190.22,190.59,182.06,184.82,19906278,1532966400 974 | 7/31/2018 16:00:00,186.4,188.95,183.99,187.23,17016639,1533052800 975 | 8/1/2018 16:00:00,186,189.06,183.96,185.27,14370748,1533139200 976 | 8/2/2018 16:00:00,181.54,182.9,179.78,182.6,20976524,1533225600 977 | 8/3/2018 16:00:00,184.15,184.5,180.08,180.84,18185065,1533312000 978 | 8/6/2018 16:00:00,180.7,180.86,177.49,178.62,35418962,1533571200 979 | 8/7/2018 16:00:00,180.29,183,179.74,179.92,20620300,1533657600 980 | 8/8/2018 16:00:00,180,180.18,176.55,177.52,21152413,1533744000 981 | 8/9/2018 16:00:00,179.31,180.63,176.76,177.19,35220934,1533830400 982 | 8/10/2018 16:00:00,175.57,180.45,174.75,180.01,22049178,1533916800 983 | 8/13/2018 16:00:00,179.65,180.65,177,177.68,14680647,1534176000 984 | 8/14/2018 16:00:00,175.14,176.2,170.77,172.53,38508592,1534262400 985 | 8/15/2018 16:00:00,167.11,169.85,165.39,169.83,41278613,1534348800 986 | 8/16/2018 16:00:00,172.33,175.7,171.57,171.99,34263288,1534435200 987 | 8/17/2018 16:00:00,172.52,174.2,168.38,172.78,24695359,1534521600 988 | 8/20/2018 16:00:00,175.22,178.86,174.36,176.29,25900658,1534780800 989 | 8/21/2018 16:00:00,177.63,179.67,176.97,177.92,20337389,1534867200 990 | 8/22/2018 16:00:00,178.15,179.74,175.5,177.85,27138492,1534953600 991 | 8/23/2018 16:00:00,184.97,186.5,171.91,172.23,78843385,1535040000 992 | 8/24/2018 16:00:00,175,176.37,172.45,174.23,30442809,1535126400 993 | 8/27/2018 16:00:00,177.1,180.88,176.22,180.65,23533814,1535385600 994 | 8/28/2018 16:00:00,182.15,182.38,177.5,178.19,15319030,1535472000 995 | 8/29/2018 16:00:00,179.35,179.66,176.83,178.5,11911063,1535558400 996 | 8/30/2018 16:00:00,177.33,178.1,174.12,174.6,17086172,1535644800 997 | 8/31/2018 16:00:00,173.11,176.68,172.76,175.01,13730845,1535731200 998 | 9/4/2018 16:00:00,173.5,173.95,169,170.44,23450454,1536076800 999 | 9/5/2018 16:00:00,167.48,168.28,162.03,164.23,35694744,1536163200 1000 | 9/6/2018 16:00:00,164.16,166.48,158.67,159.87,33051954,1536249600 1001 | 9/7/2018 16:00:00,159.95,164.61,159.51,162.37,19452377,1536336000 1002 | 9/10/2018 16:00:00,158.59,160.72,155,156.36,39092736,1536595200 1003 | 9/11/2018 16:00:00,153.18,158.45,152.85,157.46,25913010,1536681600 1004 | 9/12/2018 16:00:00,158.2,162.82,156.18,161.46,32490453,1536768000 1005 | 9/13/2018 16:00:00,165.41,167.22,164.01,165.53,25696478,1536854400 1006 | 9/14/2018 16:00:00,167.88,168,163.38,164.74,23417709,1536940800 1007 | 9/17/2018 16:00:00,161.5,161.65,158.29,158.89,20423197,1537200000 1008 | 9/18/2018 16:00:00,156.88,159.4,155.52,156.65,27240576,1537286400 1009 | 9/19/2018 16:00:00,158.82,163.13,158.82,162.63,23028307,1537372800 1010 | 9/20/2018 16:00:00,166.89,167.7,164.72,165.88,22818127,1537459200 1011 | 9/21/2018 16:00:00,169.46,169.84,164.5,164.63,22081900,1537545600 1012 | 9/24/2018 16:00:00,162.81,163.4,160.1,163.16,13123393,1537804800 1013 | 9/25/2018 16:00:00,164.05,165.44,162.83,164.25,9588722,1537891200 1014 | 9/26/2018 16:00:00,165.52,167.39,164.87,165.4,13592549,1537977600 1015 | 9/27/2018 16:00:00,166.39,167.05,164.92,166.32,12689166,1538064000 1016 | 9/28/2018 16:00:00,164.9,165.66,163.3,164.76,10486460,1538150400 1017 | 10/1/2018 16:00:00,165.92,165.95,161.56,162,10615171,1538409600 1018 | 10/2/2018 16:00:00,159.79,161.03,158.27,160.23,14730480,1538496000 1019 | 10/3/2018 16:00:00,163.15,164.54,161.93,162.37,13118816,1538582400 1020 | 10/4/2018 16:00:00,160.06,160.08,153.87,156.13,32176131,1538668800 1021 | 10/5/2018 16:00:00,156.14,157.12,152.25,154.63,20270970,1538755200 1022 | 10/8/2018 16:00:00,150.2,152.64,148.34,151.14,25060388,1539014400 1023 | 10/9/2018 16:00:00,147.97,150.59,146.47,146.94,31070230,1539100800 1024 | 10/10/2018 16:00:00,142.5,144,137.92,138.29,55828758,1539187200 1025 | 10/11/2018 16:00:00,135.53,142.91,135.14,141.9,43210320,1539273600 1026 | 10/12/2018 16:00:00,148.62,149,144.52,147.29,30764436,1539360000 1027 | 10/15/2018 16:00:00,144.77,145.69,142.3,144.16,18567106,1539619200 1028 | 10/16/2018 16:00:00,145.71,149.76,145.26,149.6,18365917,1539705600 1029 | 10/17/2018 16:00:00,150.68,150.68,146.37,148.14,16872420,1539792000 1030 | 10/18/2018 16:00:00,145.85,146.28,140.8,142.02,20618895,1539878400 1031 | 10/19/2018 16:00:00,145.34,146.77,142.61,142.93,14855111,1539964800 1032 | 10/22/2018 16:00:00,148.99,150.2,146.1,148.8,22589283,1540224000 1033 | 10/23/2018 16:00:00,143.22,147.51,142.62,146.65,19950477,1540310400 1034 | 10/24/2018 16:00:00,145.18,146.69,139.34,139.61,18512321,1540396800 1035 | 10/25/2018 16:00:00,142.5,144.91,141.01,144.6,13655058,1540483200 1036 | 10/26/2018 16:00:00,139,145.83,138.55,142.87,19476905,1540569600 1037 | 10/29/2018 16:00:00,142.42,144,131.36,133.38,35121699,1540828800 1038 | 10/30/2018 16:00:00,132.28,136.4,130.06,136.33,25230037,1540915200 1039 | 10/31/2018 16:00:00,141.35,142.65,139.14,142.28,23654569,1541001600 1040 | 11/1/2018 16:00:00,144.98,152.32,138.62,151.25,47039304,1541088000 1041 | 11/2/2018 16:00:00,152.56,154.36,146.28,147.59,45985757,1541174400 1042 | 11/5/2018 16:00:00,146.22,149.37,144.23,144.64,16197269,1541433600 1043 | 11/6/2018 16:00:00,145.87,149.96,145.32,147.44,17849812,1541520000 1044 | 11/7/2018 16:00:00,150.77,152.8,148.94,152.5,17884385,1541606400 1045 | 11/8/2018 16:00:00,150.99,151.88,146.69,148.99,17067089,1541692800 1046 | 11/9/2018 16:00:00,145.57,145.72,142.48,144.85,16220003,1541779200 1047 | 11/12/2018 16:00:00,145.01,146.41,139.97,142.82,16516466,1542038400 1048 | 11/13/2018 16:00:00,144.83,149.94,143.91,146.98,19575072,1542124800 1049 | 11/14/2018 16:00:00,150.21,152.15,148.44,150.44,21785982,1542211200 1050 | 11/15/2018 16:00:00,152.9,157.4,150.89,156.22,30083471,1542297600 1051 | 11/16/2018 16:00:00,155.04,155.8,152.14,154.1,20039383,1542384000 1052 | 11/19/2018 16:00:00,152.02,153.21,148.77,149.53,18087831,1542643200 1053 | 11/20/2018 16:00:00,144.48,148.07,142.82,145.98,19473181,1542729600 1054 | 11/21/2018 16:00:00,149.06,151.48,148.65,149.41,14718565,1542816000 1055 | 11/23/2018 13:00:00,147.3,151.17,147,150.33,7437479,1542978000 1056 | 11/26/2018 16:00:00,153.21,156.53,152.37,156.01,16152683,1543248000 1057 | 11/27/2018 16:00:00,154.64,157.94,153.58,156.46,17911799,1543334400 1058 | 11/28/2018 16:00:00,159.01,159.8,155.26,159.34,20767058,1543420800 1059 | 11/29/2018 16:00:00,158.08,159,153.54,156.28,20532236,1543507200 1060 | 11/30/2018 16:00:00,157.9,160.86,156.72,160.86,35071161,1543593600 1061 | 12/3/2018 16:00:00,168.64,168.8,163.51,163.74,31078508,1543852800 1062 | 12/4/2018 16:00:00,164.88,164.98,156.46,158.34,22198642,1543939200 1063 | 12/6/2018 16:00:00,153,155.87,150.51,155.83,25335464,1544112000 1064 | 12/7/2018 16:00:00,155.4,158.05,151.73,153.06,17447930,1544198400 1065 | 12/10/2018 16:00:00,150.39,152.81,147.48,151.43,15525490,1544457600 1066 | 12/11/2018 16:00:00,155.26,156.24,150.9,151.83,13651857,1544544000 1067 | 12/12/2018 16:00:00,155.24,156.17,151.43,151.5,16619239,1544630400 1068 | 12/13/2018 16:00:00,153.05,153.46,150.52,151.48,12255795,1544716800 1069 | 12/14/2018 16:00:00,147.71,150.7,145.72,149,15560693,1544803200 1070 | 12/17/2018 16:00:00,146.5,147.94,142.24,143.98,15788110,1545062400 1071 | 12/18/2018 16:00:00,144.28,144.75,140.11,140.82,17846648,1545148800 1072 | 12/19/2018 16:00:00,141.04,141.32,135.73,137.14,27657760,1545235200 1073 | 12/20/2018 16:00:00,135.83,137.76,132.91,135.11,24103820,1545321600 1074 | 12/21/2018 16:00:00,137.08,137.19,130.23,132,28790626,1545408000 1075 | 12/24/2018 13:00:00,130,134.57,129.77,131.89,11240722,1545656400 1076 | 12/26/2018 16:00:00,132.87,138.02,130.18,138,14862443,1545840000 1077 | 12/27/2018 16:00:00,135.05,138.45,133.89,138.45,11457388,1545926400 1078 | 12/28/2018 16:00:00,139.2,140.98,136.79,139.09,11955273,1546012800 1079 | 12/31/2018 16:00:00,141.83,142.02,136.04,137.07,11186358,1546272000 1080 | 1/2/2019 16:00:00,134.13,137.75,133.03,136.7,16708377,1546444800 1081 | 1/3/2019 16:00:00,134.27,134.87,129.83,130.6,19531256,1546531200 1082 | 1/4/2019 16:00:00,134.26,141.08,133.66,139.75,22845435,1546617600 1083 | 1/7/2019 16:00:00,140.55,144.08,139.01,143.1,17238999,1546876800 1084 | 1/8/2019 16:00:00,145,147.55,142.06,146.79,16487647,1546963200 1085 | 1/9/2019 16:00:00,149.89,153.35,148.5,151.92,20214074,1547049600 1086 | 1/10/2019 16:00:00,149.81,152.03,148.88,151.69,14221099,1547136000 1087 | 1/11/2019 16:00:00,151.83,153.38,150.14,151.32,9589415,1547222400 1088 | 1/14/2019 16:00:00,148.5,150.57,146.54,149.27,13356749,1547481600 1089 | 1/15/2019 16:00:00,150.68,154.17,149.96,150.88,15003064,1547568000 1090 | 1/16/2019 16:00:00,152.81,155.39,151.5,154.84,14810795,1547654400 1091 | 1/17/2019 16:00:00,152.11,158.55,151.9,155.97,16153189,1547740800 1092 | 1/18/2019 16:00:00,158.45,159.49,154.73,157.02,19611360,1547827200 1093 | 1/22/2019 16:00:00,154.4,155.44,150.21,152.15,21294975,1548172800 1094 | 1/23/2019 16:00:00,154.65,155.18,150.95,152.03,10195792,1548259200 1095 | 1/24/2019 16:00:00,151.47,156,151.21,155.86,10997894,1548345600 1096 | 1/25/2019 16:00:00,158.91,160.5,157.43,159.21,16459555,1548432000 1097 | 1/28/2019 16:00:00,157.8,159.69,155.3,158.92,10141096,1548691200 1098 | 1/29/2019 16:00:00,159.04,160.37,155.92,156.88,18348230,1548777600 1099 | 1/30/2019 16:00:00,161.29,167.84,160.5,166.82,36997728,1548864000 1100 | 1/31/2019 16:00:00,167.8,169.73,165.7,168.49,21219504,1548950400 1101 | 2/1/2019 16:00:00,168,169.4,167.63,167.97,10771453,1549036800 1102 | 2/4/2019 16:00:00,166.32,167.55,165.61,166.7,7380402,1549296000 1103 | 2/5/2019 16:00:00,168.55,171.95,168,171.83,12801793,1549382400 1104 | 2/6/2019 16:00:00,171.86,173.09,169.99,171.52,11267804,1549468800 1105 | 2/7/2019 16:00:00,169.16,169.61,164.34,166.96,11911130,1549555200 1106 | 2/8/2019 16:00:00,163.83,167.65,163.75,167.36,8331463,1549641600 1107 | 2/11/2019 16:00:00,168.85,170.33,167.45,167.45,7260318,1549900800 1108 | 2/12/2019 16:00:00,169.6,170.49,168.61,168.71,8594401,1549987200 1109 | 2/13/2019 16:00:00,169.91,171.05,168.99,169.4,8661819,1550073600 1110 | 2/14/2019 16:00:00,167.64,168.5,166.61,168.38,8722094,1550160000 1111 | 2/15/2019 16:00:00,168.61,168.77,165.41,166.15,12099523,1550246400 1112 | 2/19/2019 16:00:00,166.98,171.15,166.5,170.18,12982304,1550592000 1113 | 2/20/2019 16:00:00,171,172.68,170.61,170.71,12454903,1550678400 1114 | 2/21/2019 16:00:00,171,171.78,169.8,171.66,8434769,1550764800 1115 | 2/22/2019 16:00:00,172.8,177.02,172.52,176.92,16175610,1550851200 1116 | 2/25/2019 16:00:00,181.26,183.72,180.73,183.25,22831795,1551110400 1117 | 2/26/2019 16:00:00,179.79,184.35,179.37,183.54,13870985,1551196800 1118 | 2/27/2019 16:00:00,181.72,184.93,180.88,184.58,16741572,1551283200 1119 | 2/28/2019 16:00:00,183.01,184.3,181.47,183.03,12370403,1551369600 1120 | 3/1/2019 16:00:00,185.09,186.9,183.38,183.88,14348493,1551456000 1121 | 3/4/2019 16:00:00,186,187.34,184.46,187.25,14761686,1551715200 1122 | 3/5/2019 16:00:00,186.94,188.08,185,185,11513174,1551801600 1123 | 3/6/2019 16:00:00,184.38,185.59,183.02,184.17,10009110,1551888000 1124 | 3/7/2019 16:00:00,180.91,181.8,176.73,177.32,16488914,1551974400 1125 | 3/8/2019 16:00:00,171.57,175.35,171.57,175.03,14674221,1552060800 1126 | 3/11/2019 16:00:00,177.83,181.72,177.58,180.41,13764041,1552320000 1127 | 3/12/2019 16:00:00,182.04,182.18,179.51,180.63,8659992,1552406400 1128 | 3/13/2019 16:00:00,180.73,182.54,179.26,180.7,8868194,1552492800 1129 | 3/14/2019 16:00:00,179.06,180.82,178.01,180.36,9272010,1552579200 1130 | 3/15/2019 16:00:00,180.66,181.45,179.66,180.97,10844077,1552665600 1131 | 3/18/2019 16:00:00,181.93,182.89,180.76,181.83,7847801,1552924800 1132 | 3/19/2019 16:00:00,181.63,183.36,180.85,182.14,10238626,1553011200 1133 | 3/20/2019 16:00:00,180.94,181.95,178.43,181.28,15901452,1553097600 1134 | 3/21/2019 16:00:00,178.95,181.73,178.52,181.5,9754460,1553184000 1135 | 3/22/2019 16:00:00,179.77,180.48,175.34,176.26,11688442,1553270400 1136 | 3/25/2019 16:00:00,174.33,178.9,174.1,178.77,7511447,1553529600 1137 | 3/26/2019 16:00:00,179.7,180.65,177.1,178.08,7897854,1553616000 1138 | 3/27/2019 16:00:00,177.7,179.83,176.91,177.03,8370972,1553702400 1139 | 3/28/2019 16:00:00,177.47,178.53,175.97,177.73,7232992,1553788800 1140 | 3/29/2019 16:00:00,180.73,182.6,179,182.45,13850865,1553875200 1141 | 4/1/2019 16:00:00,185.09,185.56,180.89,180.89,12714767,1554134400 1142 | 4/2/2019 16:00:00,181.46,183.56,180.95,181.74,8021500,1554220800 1143 | 4/3/2019 16:00:00,179.51,180.7,176.76,178.32,26819027,1554307200 1144 | 4/4/2019 16:00:00,177.04,181.96,176.89,181.07,17002465,1554393600 1145 | 4/5/2019 16:00:00,182.51,185.5,182,185.35,18705035,1554480000 1146 | 4/8/2019 16:00:00,184.19,187.82,184.01,186.5,14725576,1554739200 1147 | 4/9/2019 16:00:00,186.49,187.89,186.16,187.19,11578209,1554825600 1148 | 4/10/2019 16:00:00,186.69,187.4,184,186.19,10655022,1554912000 1149 | 4/11/2019 16:00:00,185.15,186.06,183.75,184.98,8900299,1554998400 1150 | 4/12/2019 16:00:00,187.71,189.79,187.14,188.91,12600038,1555084800 1151 | 4/15/2019 16:00:00,188.06,188.17,182.56,183.07,14616599,1555344000 1152 | 4/16/2019 16:00:00,185.55,185.79,183.4,185.78,12195911,1555430400 1153 | 4/17/2019 16:00:00,187.34,188.2,185.78,187.55,11614169,1555516800 1154 | 4/18/2019 16:00:00,186.41,187.28,185.39,186.94,7882495,1555603200 1155 | 4/22/2019 16:00:00,184.5,186.47,183.61,185.38,8677765,1555948800 1156 | 4/23/2019 16:00:00,186,188.15,185.44,187.29,11410606,1556035200 1157 | 4/24/2019 16:00:00,186.76,186.9,184.58,185.67,9085262,1556121600 1158 | 4/25/2019 16:00:00,185.24,188.13,183.96,187.88,10328930,1556208000 1159 | 4/26/2019 16:00:00,187.88,188.74,185.51,187.09,9421120,1556294400 1160 | 4/29/2019 16:00:00,187.42,188,185.76,186.94,8660640,1556553600 1161 | 4/30/2019 16:00:00,186.3,188.25,183.82,185.57,15076485,1556640000 1162 | 5/1/2019 16:00:00,186.75,193.2,185.88,189.31,17405482,1556726400 1163 | 5/2/2019 16:00:00,189.42,192.7,186.65,190.39,11468106,1556812800 1164 | 5/3/2019 16:00:00,191.88,195.72,191.88,195.21,14521100,1556899200 1165 | 5/6/2019 16:00:00,185.17,189,184.83,188.24,23941223,1557158400 1166 | 5/7/2019 16:00:00,186.05,186.45,179.63,181.43,22663248,1557244800 1167 | 5/8/2019 16:00:00,180.95,183.2,178.58,179.59,16611096,1557331200 1168 | 5/9/2019 16:00:00,175.43,180.7,173.07,179.04,22727751,1557417600 1169 | 5/10/2019 16:00:00,180.18,180.79,174.1,178,18986985,1557504000 1170 | 5/13/2019 16:00:00,169.79,172.47,168.78,170.01,22330737,1557763200 1171 | 5/14/2019 16:00:00,172.75,175.15,171.48,174.84,17874110,1557849600 1172 | 5/15/2019 16:00:00,177.06,180.24,173.32,177.6,37610416,1557936000 1173 | 5/16/2019 16:00:00,178.18,178.25,174.75,175.57,20579209,1558022400 1174 | 5/17/2019 16:00:00,171.69,172.29,168.49,169.57,22539384,1558108800 1175 | 5/20/2019 16:00:00,164.44,164.57,160.02,160.65,33413826,1558368000 1176 | 5/21/2019 16:00:00,163.16,165.59,162.52,163.43,22006145,1558454400 1177 | 5/22/2019 16:00:00,162.41,162.82,158.07,158.83,25831223,1558540800 1178 | 5/23/2019 16:00:00,155.45,158.48,154.41,156,26891864,1558627200 1179 | 5/24/2019 16:00:00,157.62,158.43,154.9,155,21489717,1558713600 1180 | 5/28/2019 16:00:00,156.4,157.07,153.22,154.81,38602961,1559059200 1181 | 5/29/2019 16:00:00,153.58,154.39,150.71,152.48,30073136,1559145600 1182 | 5/30/2019 16:00:00,152.36,153.37,150.25,151.07,17344653,1559232000 1183 | 5/31/2019 16:00:00,149.63,150.68,147.95,149.26,26881219,1559318400 1184 | 6/3/2019 16:00:00,149.6,151.77,148.85,149.91,25254432,1559577600 1185 | 6/4/2019 16:00:00,151.56,155.2,150.64,154.15,27417246,1559664000 1186 | 6/5/2019 16:00:00,155.17,156.11,149.31,151.65,23208594,1559750400 1187 | 6/6/2019 16:00:00,152,152.7,150.57,151.5,15762951,1559836800 1188 | 6/7/2019 16:00:00,152.95,155.69,152.21,154.23,17817824,1559923200 1189 | 6/10/2019 16:00:00,158.78,161.98,157.4,159.85,36473289,1560182400 1190 | 6/11/2019 16:00:00,164.2,165.68,161.92,162.65,23408398,1560268800 1191 | 6/12/2019 16:00:00,160.47,161.7,158.81,160.04,16329285,1560355200 1192 | 6/13/2019 16:00:00,160.55,161.32,159.8,160.33,17571394,1560441600 1193 | 6/14/2019 16:00:00,158.37,158.71,157.23,158.1,14981551,1560528000 1194 | 6/17/2019 16:00:00,157.53,160.55,157.42,159.91,16079839,1560787200 1195 | 6/18/2019 16:00:00,162.89,169.11,161.95,165.51,35754830,1560873600 1196 | 6/19/2019 16:00:00,167.77,167.9,163.42,165.46,20798071,1560960000 1197 | 6/20/2019 16:00:00,170.19,170.48,166.28,168.25,24004749,1561046400 1198 | 6/21/2019 16:00:00,167.48,169.47,166.77,167.55,17415777,1561132800 1199 | 6/24/2019 16:00:00,168.4,168.88,165.78,168.1,18422558,1561392000 1200 | 6/25/2019 16:00:00,167.04,167.34,164.62,165.8,20447749,1561478400 1201 | 6/26/2019 16:00:00,168.28,171.24,168.15,168.99,22416435,1561564800 1202 | 6/27/2019 16:00:00,170.62,171.98,169.38,170.9,18349357,1561651200 1203 | 6/28/2019 16:00:00,170.2,170.89,167.96,169.45,19974264,1561737600 1204 | 7/1/2019 16:00:00,175.87,177.95,174.36,175.05,25911000,1561996800 1205 | 7/2/2019 16:00:00,175.13,175.55,174.25,175.45,14155171,1562083200 1206 | 7/3/2019 13:00:00,175.69,175.85,173.85,174.67,8532590,1562158800 1207 | 7/5/2019 16:00:00,173.75,173.82,172.82,173.3,12618589,1562342400 1208 | 7/8/2019 16:00:00,170.09,170.28,168.35,168.45,16531017,1562601600 1209 | 7/9/2019 16:00:00,167.09,168.98,166.5,168.8,15782800,1562688000 1210 | 7/10/2019 16:00:00,171.24,171.37,166.86,166.93,16675575,1562774400 1211 | 7/11/2019 16:00:00,167.56,168.42,165,166.55,14796404,1562860800 1212 | 7/12/2019 16:00:00,168,170.2,167.65,169.07,18103648,1562947200 1213 | 7/15/2019 16:00:00,171.5,173.75,170.42,173.5,22199049,1563206400 1214 | 7/16/2019 16:00:00,174.2,175.52,173.46,174.19,19039650,1563292800 1215 | 7/17/2019 16:00:00,172.75,176.22,172.49,174.82,15031587,1563379200 1216 | 7/18/2019 16:00:00,173.41,174.4,172.06,172.8,15613202,1563465600 1217 | 7/19/2019 16:00:00,174.87,175.15,172.99,172.99,13647241,1563552000 1218 | 7/22/2019 16:00:00,173.5,174.28,171.44,174,18497918,1563811200 1219 | 7/23/2019 16:00:00,175.39,178.64,174.85,178.09,20881546,1563897600 1220 | 7/24/2019 16:00:00,178,178.96,176.94,178.67,14933112,1563984000 1221 | 7/25/2019 16:00:00,178.49,179.15,175.37,177.29,14048992,1564070400 1222 | 7/26/2019 16:00:00,178.25,179.4,176.88,178.74,15281019,1564156800 1223 | 7/29/2019 16:00:00,178.43,179.88,175.35,177.02,15130314,1564416000 1224 | 7/30/2019 16:00:00,174.25,175.71,172.89,174.1,14300635,1564502400 1225 | 7/31/2019 16:00:00,173.71,174.89,170.09,173.11,14628866,1564588800 1226 | 8/1/2019 16:00:00,174.54,175.71,162.1,165.65,32728170,1564675200 1227 | 8/2/2019 16:00:00,162.56,163.85,160.35,161,27104672,1564761600 1228 | 8/5/2019 16:00:00,155.03,157.23,151.85,153.67,28912590,1565020800 1229 | 8/6/2019 16:00:00,158.48,158.73,156.11,157.43,24996283,1565107200 1230 | 8/7/2019 16:00:00,155.73,159.48,155.3,159.17,17917383,1565193600 1231 | 8/8/2019 16:00:00,161.71,162.3,159.12,162.22,19267699,1565280000 1232 | 8/9/2019 16:00:00,160.98,161.99,159.11,159.12,11894293,1565366400 1233 | 8/12/2019 16:00:00,157.5,159.38,155.54,159.31,14424359,1565625600 1234 | 8/13/2019 16:00:00,160.64,167.36,159.57,164.03,23247913,1565712000 1235 | 8/14/2019 16:00:00,161.34,163,159.21,162.06,20803677,1565798400 1236 | 8/15/2019 16:00:00,170.11,171,164.36,166.97,36343492,1565884800 1237 | 8/16/2019 16:00:00,170,177.55,168.57,174.6,25952537,1565971200 1238 | 8/19/2019 16:00:00,177.43,178.8,175.59,178.28,16012796,1566230400 1239 | 8/20/2019 16:00:00,175.91,177.99,175.62,177.21,10339621,1566316800 1240 | 8/21/2019 16:00:00,177.22,178.5,174.89,175.24,10627504,1566403200 1241 | 8/22/2019 16:00:00,174.1,174.98,170.5,171.91,11578161,1566489600 1242 | 8/23/2019 16:00:00,169.69,171.49,163.83,164.54,20909801,1566576000 1243 | 8/26/2019 16:00:00,166.49,167.45,165.53,165.9,8648151,1566835200 1244 | 8/27/2019 16:00:00,167.2,168.19,165.19,166.2,12783690,1566921600 1245 | 8/28/2019 16:00:00,164.64,168,164.2,167.48,9510283,1567008000 1246 | 8/29/2019 16:00:00,171,173.96,170.95,172.81,11577243,1567094400 1247 | 8/30/2019 16:00:00,174.35,175.25,172.66,175.03,10304874,1567180800 1248 | 9/3/2019 16:00:00,173,174.72,172.15,172.41,8509527,1567526400 1249 | 9/4/2019 16:00:00,176.26,176.55,173.99,174.33,7215487,1567612800 1250 | 9/5/2019 16:00:00,176.88,178.95,176.52,178.94,11168482,1567699200 1251 | 9/6/2019 16:00:00,179.01,179.22,176.21,176.69,8303976,1567785600 1252 | 9/9/2019 16:00:00,177.88,177.99,175.86,177.78,6931743,1568044800 1253 | 9/10/2019 16:00:00,176.28,176.3,172.22,174.99,9834972,1568131200 1254 | 9/11/2019 16:00:00,176,176.66,174.15,176.09,7039290,1568217600 1255 | 9/12/2019 16:00:00,177.89,180.5,177,178.24,12509426,1568304000 1256 | 9/13/2019 16:00:00,179.74,180.18,178.61,179.17,9479740,1568390400 1257 | 9/16/2019 16:00:00,177.75,179.17,175.37,177.07,10725137,1568649600 1258 | 9/17/2019 16:00:00,176.85,179.12,176.05,179,7573188,1568736000 1259 | 9/18/2019 16:00:00,179.15,180.17,177.58,180,9288193,1568822400 1260 | 9/19/2019 16:00:00,180.9,184.13,180.43,180.46,15160788,1568908800 1261 | 9/20/2019 16:00:00,182.31,183.82,178.84,182.51,24822055,1568995200 1262 | 9/23/2019 16:00:00,181.25,181.33,176.8,176.98,14146710,1569254400 1263 | 9/24/2019 16:00:00,179.17,179.49,171.3,171.55,14549173,1569340800 1264 | 9/25/2019 16:00:00,172.3,176.99,171.72,176.66,11842493,1569427200 1265 | 9/26/2019 16:00:00,177,178.23,174.83,175,10004675,1569513600 1266 | 9/27/2019 16:00:00,176,176.5,163.15,165.98,33312607,1569600000 1267 | 9/30/2019 16:00:00,169.89,170.2,166.45,167.23,14945171,1569859200 1268 | 10/1/2019 16:00:00,168.01,168.23,163.64,165.15,14194192,1569945600 1269 | 10/2/2019 16:00:00,162.82,166.88,161.9,165.77,11595463,1570032000 1270 | 10/3/2019 16:00:00,166.65,170.18,165,169.48,10391648,1570118400 1271 | 10/4/2019 16:00:00,169.6,170.7,167.56,170.34,8856039,1570204800 1272 | 10/7/2019 16:00:00,168.83,172.3,167.21,168.32,12034720,1570464000 1273 | 10/8/2019 16:00:00,164.3,165.22,161.68,161.93,15936337,1570550400 1274 | 10/9/2019 16:00:00,165.5,166.58,163.42,165.19,11189394,1570636800 1275 | 10/10/2019 16:00:00,165.96,168.57,164.09,166.07,11537756,1570723200 1276 | 10/11/2019 16:00:00,170.77,174.88,169.57,172.94,19369497,1570809600 1277 | 10/14/2019 16:00:00,172.84,173.34,170.79,171.16,7859737,1571068800 1278 | 10/15/2019 16:00:00,172.91,176.75,172.69,175.29,13814343,1571155200 1279 | 10/16/2019 16:00:00,175.8,177.35,174.12,177.12,10903835,1571241600 1280 | 10/17/2019 16:00:00,178,178.59,175.23,176.85,8032763,1571328000 1281 | 10/18/2019 16:00:00,176,176.23,169,169.13,14585653,1571414400 1282 | 10/21/2019 16:00:00,172.64,173.91,170.87,173.52,9055175,1571673600 1283 | 10/22/2019 16:00:00,174.53,175.36,169.26,169.89,10917326,1571760000 1284 | 10/23/2019 16:00:00,170.45,171.04,168.12,169.92,8906763,1571846400 1285 | 10/24/2019 16:00:00,171.28,172.75,170.21,172.55,7443497,1571932800 1286 | 10/25/2019 16:00:00,171.56,175.81,170.88,174.31,9891760,1572019200 1287 | 10/28/2019 16:00:00,176.5,179.64,176.41,178.68,11739624,1572278400 1288 | 10/29/2019 16:00:00,177.06,177.74,175.44,176.89,8026377,1572364800 1289 | 10/30/2019 16:00:00,175.42,177.88,173.94,177.53,10213241,1572451200 1290 | 10/31/2019 16:00:00,179.16,179.24,175.5,176.67,15119035,1572537600 1291 | 11/1/2019 16:00:00,179.01,182.12,176.06,176.46,28924118,1572624000 1292 | 11/4/2019 16:00:00,180.66,182.4,178.02,179.69,44541236,1572883200 1293 | 11/5/2019 16:00:00,181.42,183.2,180.31,182,23690167,1572969600 1294 | 11/6/2019 16:00:00,183.61,185,182.2,184.16,14834855,1573056000 1295 | 11/7/2019 16:00:00,183.61,185,182.2,184.16,533716,1573142400 1296 | 11/8/2019 16:00:00,187.9,188.28,185.15,187.16,19737271,1573228800 1297 | 11/11/2019 16:00:00,184.82,187.2,181.37,186.71,20572434,1573488000 1298 | 11/12/2019 16:00:00,185.91,187.65,185.14,186.97,11797649,1573574400 1299 | 11/13/2019 16:00:00,185.47,185.67,181,182.48,15428495,1573660800 1300 | 11/14/2019 16:00:00,182.87,184.5,181.32,182.8,12750091,1573747200 1301 | 11/15/2019 16:00:00,184,185.6,183.71,185.49,11312539,1573833600 1302 | 11/18/2019 16:00:00,186.98,186.98,184.16,184.61,11830906,1574092800 1303 | 11/19/2019 16:00:00,186.31,186.71,183.87,185.25,13457361,1574179200 1304 | 11/20/2019 16:00:00,183.67,183.7,181.06,182.35,16694397,1574265600 1305 | 11/21/2019 16:00:00,181.77,184.89,181.6,184.86,10254735,1574352000 1306 | 11/22/2019 16:00:00,185.8,186.78,183.94,186.78,10541033,1574438400 1307 | 11/25/2019 16:00:00,188.32,190.72,187.88,190.45,19193455,1574697600 1308 | 11/26/2019 16:00:00,190.39,195,189.04,194.7,51885411,1574784000 1309 | 11/27/2019 16:00:00,197.24,200.98,197,200.82,33129383,1574870400 1310 | 11/29/2019 13:00:00,199.81,200.43,198.35,200,18593114,1575032400 1311 | 12/2/2019 16:00:00,198.58,198.67,193.51,196.31,19414420,1575302400 1312 | 12/3/2019 16:00:00,190.97,195,189.85,194.9,18440368,1575388800 1313 | 12/4/2019 16:00:00,195.53,196.66,193.23,193.74,14862556,1575475200 1314 | 12/5/2019 16:00:00,196.93,200.94,196.43,200,22310247,1575561600 1315 | 12/6/2019 16:00:00,201.11,202,199.51,201.89,14095652,1575648000 1316 | 12/9/2019 16:00:00,200.32,203.43,198.55,198.74,14340916,1575907200 1317 | 12/10/2019 16:00:00,200.71,202.48,199.23,200.45,11635945,1575993600 1318 | 12/11/2019 16:00:00,201.1,204.8,200.72,204.64,11770951,1576080000 1319 | 12/12/2019 16:00:00,203.71,206,202,204.5,22494328,1576166400 1320 | 12/13/2019 16:00:00,205.76,207.1,203.77,204.91,19283797,1576252800 1321 | 12/16/2019 16:00:00,206.33,209.15,206.19,206.97,16744467,1576512000 1322 | 12/17/2019 16:00:00,208.69,208.87,206.82,208.18,11299099,1576598400 1323 | 12/18/2019 16:00:00,208.53,210.05,208.04,210,13497200,1576684800 1324 | 12/19/2019 16:00:00,209.61,211.37,209.23,210.13,12168467,1576771200 1325 | 12/20/2019 16:00:00,211.35,213.98,210.42,212.25,26672844,1576857600 1326 | 12/23/2019 16:00:00,213.25,215.05,212.91,214.83,12538763,1577116800 1327 | 12/24/2019 13:00:00,215.01,215.43,213.35,214.26,5522987,1577192400 1328 | 12/26/2019 16:00:00,214.65,216.99,214.33,216.38,6917445,1577376000 1329 | 12/27/2019 16:00:00,217.99,218.11,215.17,215.47,11678669,1577462400 1330 | 12/30/2019 16:00:00,215.78,215.78,211.76,212.91,8745942,1577721600 1331 | 12/31/2019 16:00:00,212,213.64,210.73,212.1,6776071,1577808000 1332 | 1/2/2020 16:00:00,216.6,219.98,216.54,219.77,15882903,1577980800 1333 | 1/3/2020 16:00:00,216.35,218.2,216.01,217,8608281,1578067200 1334 | 1/6/2020 16:00:00,214.89,217.16,214.09,216.64,11892484,1578326400 1335 | 1/7/2020 16:00:00,217.64,218.94,216.69,217.63,9539012,1578412800 1336 | 1/8/2020 16:00:00,216.6,220.65,216.32,218,11983091,1578499200 1337 | 1/9/2020 16:00:00,221.5,223.08,220.82,221.78,13143886,1578585600 1338 | 1/10/2020 16:00:00,223.9,225.96,222.06,223.83,12302125,1578672000 1339 | 1/13/2020 16:00:00,228.81,231.14,227.04,230.48,17571892,1578931200 1340 | 1/14/2020 16:00:00,230.05,230.18,224.88,226.49,17302163,1579017600 1341 | 1/15/2020 16:00:00,226.65,227.82,224.39,225.06,10743368,1579104000 1342 | 1/16/2020 16:00:00,226.3,226.33,222.73,223.94,13712552,1579190400 1343 | 1/17/2020 16:00:00,225.9,228,225.35,227.43,12956200,1579276800 1344 | 1/21/2020 16:00:00,222.45,222.6,220.73,222.26,15831087,1579622400 1345 | 1/22/2020 16:00:00,224.69,225.58,222,222.37,10059579,1579708800 1346 | 1/23/2020 16:00:00,217.93,220.13,216.77,219.13,18519886,1579795200 1347 | 1/24/2020 16:00:00,218.49,219.83,211.33,213.75,18143867,1579881600 1348 | 1/27/2020 16:00:00,201.22,208.02,199.5,205.47,24574680,1580140800 1349 | 1/28/2020 16:00:00,209.74,210.91,207.17,210.23,16196716,1580227200 1350 | 1/29/2020 16:00:00,212.56,213.98,209.52,212.02,12896298,1580313600 1351 | 1/30/2020 16:00:00,207.88,209.86,205.03,208.58,14375995,1580400000 1352 | 1/31/2020 16:00:00,206.5,207.93,204.73,206.59,18181413,1580486400 1353 | 2/3/2020 16:00:00,208.67,215.02,208.67,213.1,14131887,1580745600 1354 | 2/4/2020 16:00:00,221.35,224.38,220.49,222.88,16695141,1580832000 1355 | 2/5/2020 16:00:00,226.52,226.7,217.54,220.22,15766067,1580918400 1356 | 2/6/2020 16:00:00,223.13,223.65,219.78,220.9,10790820,1581004800 1357 | 2/7/2020 16:00:00,217.46,217.84,214.88,216.53,13790255,1581091200 1358 | 2/10/2020 16:00:00,213.5,215.77,212.2,215.77,17420303,1581350400 1359 | 2/11/2020 16:00:00,219.91,220.01,215.29,217.21,16073464,1581436800 1360 | 2/12/2020 16:00:00,221.13,225.52,220.21,224.31,18671906,1581523200 1361 | 2/13/2020 16:00:00,220,225,218.99,220.36,28069666,1581609600 1362 | 2/14/2020 16:00:00,221.1,221.64,218.23,219.63,10689950,1581696000 1363 | 2/18/2020 16:00:00,218.55,220.85,217.51,220.52,13024897,1582041600 1364 | 2/19/2020 16:00:00,221.52,223.56,220.75,222.14,10798108,1582128000 1365 | 2/20/2020 16:00:00,222.5,222.5,214.22,218.04,14950089,1582214400 1366 | 2/21/2020 16:00:00,217.54,217.6,211.56,212.59,17700801,1582300800 1367 | 2/24/2020 16:00:00,203.55,207.28,202.51,206.16,19380226,1582560000 1368 | 2/25/2020 16:00:00,208.51,209.95,204.1,205.61,18132378,1582646400 1369 | 2/26/2020 16:00:00,206.8,213.08,206.79,208.74,19544272,1582732800 1370 | 2/27/2020 16:00:00,205.01,209.97,201.86,205.03,22741180,1582819200 1371 | 2/28/2020 16:00:00,198.98,208.92,198.56,208,31276197,1582905600 1372 | 3/2/2020 16:00:00,208.59,211.11,203.76,210.98,21542239,1583164800 1373 | 3/3/2020 16:00:00,211.08,211.39,202.24,207.41,20813800,1583251200 1374 | 3/4/2020 16:00:00,209.49,212.7,208.85,211.96,12474381,1583337600 1375 | 3/5/2020 16:00:00,210,215.15,209.14,211.46,13462891,1583424000 1376 | 3/6/2020 16:00:00,206.7,207,201.1,204.64,21700510,1583510400 1377 | 3/9/2020 16:00:00,195.62,199.89,193.93,197.66,25502567,1583769600 1378 | 3/10/2020 16:00:00,205.53,207.45,200.8,206.39,19022622,1583856000 1379 | 3/11/2020 16:00:00,201.65,203.1,196.11,198.91,18931796,1583942400 1380 | 3/12/2020 16:00:00,186.5,190.49,183.93,185.1,30247100,1584028800 1381 | 3/13/2020 16:00:00,194.9,195.99,187.81,194,23650504,1584115200 1382 | 3/16/2020 16:00:00,176.15,188,174.5,178.85,26628481,1584374400 1383 | 3/17/2020 16:00:00,181.26,189.39,179.69,184.81,19276543,1584460800 1384 | 3/18/2020 16:00:00,176,182.41,170,180,22054204,1584547200 1385 | 3/19/2020 16:00:00,179.26,187.25,177.39,180.88,20905687,1584633600 1386 | 3/20/2020 16:00:00,187.74,188.3,180,181.3,21006082,1584720000 1387 | 3/23/2020 16:00:00,175.27,178.5,169.95,176.34,22554715,1584979200 1388 | 3/24/2020 16:00:00,183.09,188.8,181.18,185.75,20801494,1585065600 1389 | 3/25/2020 16:00:00,185.82,195.19,184.52,188.56,19605247,1585152000 1390 | 3/26/2020 16:00:00,188.64,196.32,187.6,195.32,15426104,1585238400 1391 | 3/27/2020 16:00:00,189.97,192.74,188,188.59,13376354,1585324800 1392 | 3/30/2020 16:00:00,187.48,191.48,187.01,191.27,12254427,1585584000 1393 | 3/31/2020 16:00:00,192,196.79,190.6,194.48,19084779,1585670400 1394 | 4/1/2020 16:00:00,189.5,192.87,185.04,187.56,17948559,1585756800 1395 | 4/2/2020 16:00:00,186.08,191.3,185.69,188.9,13412061,1585843200 1396 | 4/3/2020 16:00:00,190.12,190.55,185.41,187.11,9483140,1585929600 1397 | 4/6/2020 16:00:00,194.74,196.88,192.7,196.45,13248684,1586188800 1398 | 4/7/2020 16:00:00,200.05,201.45,197.05,198,14934472,1586275200 1399 | 4/8/2020 16:00:00,198.34,198.86,193.88,195.98,13607953,1586361600 1400 | 4/9/2020 16:00:00,198.65,200.35,193.4,196.37,17821332,1586448000 1401 | 4/13/2020 16:00:00,197.4,200.33,195.53,199.44,16117865,1586793600 1402 | 4/14/2020 16:00:00,204.95,207.97,204.25,204.78,16757147,1586880000 1403 | 4/15/2020 16:00:00,204.77,209.15,201.31,208.17,10768071,1586966400 1404 | 4/16/2020 16:00:00,210.53,213.25,209.12,212.66,16353815,1587052800 1405 | 4/17/2020 16:00:00,214.98,214.98,208.85,209.5,13558473,1587139200 1406 | 4/20/2020 16:00:00,209.87,216.1,209.36,212.13,19295401,1587398400 1407 | 4/21/2020 16:00:00,209.9,212.13,205.03,207.34,14107607,1587484800 1408 | 4/22/2020 16:00:00,212,212,209.21,209.96,13486061,1587571200 1409 | 4/23/2020 16:00:00,210.24,210.56,203.46,205.24,20424045,1587657600 1410 | 4/24/2020 16:00:00,205.89,206.5,202.82,204.36,14682374,1587744000 1411 | 4/27/2020 16:00:00,207.55,207.78,202.03,203.69,17286823,1588003200 1412 | 4/28/2020 16:00:00,204.81,205.19,199.41,201.15,17203784,1588089600 1413 | 4/29/2020 16:00:00,202.93,207.08,202.51,206.7,19117823,1588176000 1414 | 4/30/2020 16:00:00,206.25,206.7,199.29,202.67,20107378,1588262400 1415 | 5/1/2020 16:00:00,195.75,197.38,192.86,194.48,22276194,1588348800 1416 | 5/4/2020 16:00:00,194.76,195,189.53,191.15,25709379,1588608000 1417 | 5/5/2020 16:00:00,196.38,198.27,194.2,195.02,22957246,1588694400 1418 | 5/6/2020 16:00:00,197.67,198.91,194.93,195.17,18598890,1588780800 1419 | 5/7/2020 16:00:00,198,198.09,194.78,196.49,16164639,1588867200 1420 | 5/8/2020 16:00:00,199.8,203.02,198.68,201.19,23830133,1588953600 1421 | 5/11/2020 16:00:00,202.78,206.64,202.38,205.4,17920673,1589212800 1422 | 5/12/2020 16:00:00,206.95,208.05,200.02,200.31,17826809,1589299200 1423 | 5/13/2020 16:00:00,203.62,204.68,197.98,199.46,22429701,1589385600 1424 | 5/14/2020 16:00:00,195.5,201.77,194.03,201.3,20025896,1589472000 1425 | 5/15/2020 16:00:00,200.7,204.49,200.1,203.68,17209463,1589558400 1426 | 5/18/2020 16:00:00,212.5,215.47,210.37,215.28,23646772,1589817600 1427 | 5/19/2020 16:00:00,216.73,220.59,215.19,217.2,21438090,1589904000 1428 | 5/20/2020 16:00:00,220,221.16,210.58,216.79,38324065,1589990400 1429 | 5/21/2020 16:00:00,211.29,214.58,209.53,212.16,29850683,1590076800 1430 | 5/22/2020 16:00:00,203.23,204.88,198.99,199.7,51979253,1590163200 1431 | 5/26/2020 16:00:00,205.94,206.8,201,201.72,28683234,1590508800 1432 | 5/27/2020 16:00:00,202.99,202.99,196.75,201.18,23605372,1590595200 1433 | 5/28/2020 16:00:00,199,202.37,197.62,199.49,18787183,1590681600 1434 | 5/29/2020 16:00:00,200,207.88,196.7,207.39,43211476,1590768000 --------------------------------------------------------------------------------