├── .gitignore ├── .jazzy.yaml ├── Changelog.md ├── LICENSE ├── Package.swift ├── README.md ├── Sources ├── libindicators │ ├── include │ │ ├── indicators-wrapping.h │ │ └── indicators.h │ ├── module.modulemap │ ├── tiamalgamation.c │ └── wrapping.c └── tulipindicators │ ├── Function.swift │ ├── Info.plist │ ├── Quotable.swift │ ├── Tulip.swift │ └── tulipindicators.h ├── Tests ├── Info.plist ├── LinuxMain.swift └── tulipindicatorsTests │ ├── AssertHelper.swift │ ├── FunctionTests.swift │ └── XCTestManifests.swift ├── docs ├── Enums.html ├── Enums │ └── IndicatorKind.html ├── Functions.html ├── Protocols.html ├── Protocols │ └── Quotable.html ├── Structs.html ├── Structs │ ├── ArroonResult.html │ ├── BBandResult.html │ ├── Bindings.html │ ├── Direction.html │ ├── FisherResult.html │ ├── IndicatorInfo.html │ ├── MACDResult.html │ ├── MSWResult.html │ ├── StochResult.html │ └── Tulip.html ├── badge.svg ├── css │ ├── highlight.css │ └── jazzy.css ├── docsets │ ├── tulipindicators.docset │ │ └── Contents │ │ │ ├── Info.plist │ │ │ └── Resources │ │ │ ├── Documents │ │ │ ├── Enums.html │ │ │ ├── Enums │ │ │ │ └── IndicatorKind.html │ │ │ ├── Functions.html │ │ │ ├── Protocols.html │ │ │ ├── Protocols │ │ │ │ └── Quotable.html │ │ │ ├── Structs.html │ │ │ ├── Structs │ │ │ │ ├── ArroonResult.html │ │ │ │ ├── BBandResult.html │ │ │ │ ├── Bindings.html │ │ │ │ ├── Direction.html │ │ │ │ ├── FisherResult.html │ │ │ │ ├── IndicatorInfo.html │ │ │ │ ├── MACDResult.html │ │ │ │ ├── MSWResult.html │ │ │ │ ├── StochResult.html │ │ │ │ └── Tulip.html │ │ │ ├── badge.svg │ │ │ ├── css │ │ │ │ ├── highlight.css │ │ │ │ └── jazzy.css │ │ │ ├── img │ │ │ │ ├── carat.png │ │ │ │ ├── dash.png │ │ │ │ ├── gh.png │ │ │ │ └── spinner.gif │ │ │ ├── index.html │ │ │ ├── js │ │ │ │ ├── jazzy.js │ │ │ │ ├── jazzy.search.js │ │ │ │ ├── jquery.min.js │ │ │ │ ├── lunr.min.js │ │ │ │ └── typeahead.jquery.js │ │ │ ├── search.json │ │ │ └── undocumented.json │ │ │ └── docSet.dsidx │ ├── tulipindicators.tgz │ └── tulipindicators.xml ├── img │ ├── carat.png │ ├── dash.png │ ├── gh.png │ └── spinner.gif ├── index.html ├── js │ ├── jazzy.js │ ├── jazzy.search.js │ ├── jquery.min.js │ ├── lunr.min.js │ └── typeahead.jquery.js ├── search.json └── undocumented.json ├── tulipindicators-swift.podspec └── tulipindicators-swift.xcodeproj ├── project.pbxproj ├── project.xcworkspace └── contents.xcworkspacedata └── xcshareddata └── xcschemes ├── tulipindicators-iOS.xcscheme ├── tulipindicators-macOS.xcscheme ├── tulipindicators-tvOS.xcscheme └── tulipindicators-watchOS.xcscheme /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | /.build 3 | /Packages 4 | .swiftpm/* 5 | .vscode/* 6 | Carthage/* 7 | -------------------------------------------------------------------------------- /.jazzy.yaml: -------------------------------------------------------------------------------- 1 | author: Yannick Heinrich 2 | author_url: https://blog.yageek.net 3 | github_url: https://github.com/yageek/tulipindicators-swift 4 | root_url: https://yageek.github.io/tulipindicators-swift/ 5 | module_version: 1.0.0 6 | module: tulipindicators 7 | framework_root: . 8 | xcodebuild_arguments: ["-scheme", "tulipindicators-macOS"] 9 | theme: apple 10 | -------------------------------------------------------------------------------- /Changelog.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | ## 1.0.1 4 | 5 | - Fix crash on using the `stoch` indicator (#4) 6 | 7 | ## 1.0.0 8 | 9 | Initial release. Based on tulip 0.8.0 10 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU LESSER GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | 9 | This version of the GNU Lesser General Public License incorporates 10 | the terms and conditions of version 3 of the GNU General Public 11 | License, supplemented by the additional permissions listed below. 12 | 13 | 0. Additional Definitions. 14 | 15 | As used herein, "this License" refers to version 3 of the GNU Lesser 16 | General Public License, and the "GNU GPL" refers to version 3 of the GNU 17 | General Public License. 18 | 19 | "The Library" refers to a covered work governed by this License, 20 | other than an Application or a Combined Work as defined below. 21 | 22 | An "Application" is any work that makes use of an interface provided 23 | by the Library, but which is not otherwise based on the Library. 24 | Defining a subclass of a class defined by the Library is deemed a mode 25 | of using an interface provided by the Library. 26 | 27 | A "Combined Work" is a work produced by combining or linking an 28 | Application with the Library. The particular version of the Library 29 | with which the Combined Work was made is also called the "Linked 30 | Version". 31 | 32 | The "Minimal Corresponding Source" for a Combined Work means the 33 | Corresponding Source for the Combined Work, excluding any source code 34 | for portions of the Combined Work that, considered in isolation, are 35 | based on the Application, and not on the Linked Version. 36 | 37 | The "Corresponding Application Code" for a Combined Work means the 38 | object code and/or source code for the Application, including any data 39 | and utility programs needed for reproducing the Combined Work from the 40 | Application, but excluding the System Libraries of the Combined Work. 41 | 42 | 1. Exception to Section 3 of the GNU GPL. 43 | 44 | You may convey a covered work under sections 3 and 4 of this License 45 | without being bound by section 3 of the GNU GPL. 46 | 47 | 2. Conveying Modified Versions. 48 | 49 | If you modify a copy of the Library, and, in your modifications, a 50 | facility refers to a function or data to be supplied by an Application 51 | that uses the facility (other than as an argument passed when the 52 | facility is invoked), then you may convey a copy of the modified 53 | version: 54 | 55 | a) under this License, provided that you make a good faith effort to 56 | ensure that, in the event an Application does not supply the 57 | function or data, the facility still operates, and performs 58 | whatever part of its purpose remains meaningful, or 59 | 60 | b) under the GNU GPL, with none of the additional permissions of 61 | this License applicable to that copy. 62 | 63 | 3. Object Code Incorporating Material from Library Header Files. 64 | 65 | The object code form of an Application may incorporate material from 66 | a header file that is part of the Library. You may convey such object 67 | code under terms of your choice, provided that, if the incorporated 68 | material is not limited to numerical parameters, data structure 69 | layouts and accessors, or small macros, inline functions and templates 70 | (ten or fewer lines in length), you do both of the following: 71 | 72 | a) Give prominent notice with each copy of the object code that the 73 | Library is used in it and that the Library and its use are 74 | covered by this License. 75 | 76 | b) Accompany the object code with a copy of the GNU GPL and this license 77 | document. 78 | 79 | 4. Combined Works. 80 | 81 | You may convey a Combined Work under terms of your choice that, 82 | taken together, effectively do not restrict modification of the 83 | portions of the Library contained in the Combined Work and reverse 84 | engineering for debugging such modifications, if you also do each of 85 | the following: 86 | 87 | a) Give prominent notice with each copy of the Combined Work that 88 | the Library is used in it and that the Library and its use are 89 | covered by this License. 90 | 91 | b) Accompany the Combined Work with a copy of the GNU GPL and this license 92 | document. 93 | 94 | c) For a Combined Work that displays copyright notices during 95 | execution, include the copyright notice for the Library among 96 | these notices, as well as a reference directing the user to the 97 | copies of the GNU GPL and this license document. 98 | 99 | d) Do one of the following: 100 | 101 | 0) Convey the Minimal Corresponding Source under the terms of this 102 | License, and the Corresponding Application Code in a form 103 | suitable for, and under terms that permit, the user to 104 | recombine or relink the Application with a modified version of 105 | the Linked Version to produce a modified Combined Work, in the 106 | manner specified by section 6 of the GNU GPL for conveying 107 | Corresponding Source. 108 | 109 | 1) Use a suitable shared library mechanism for linking with the 110 | Library. A suitable mechanism is one that (a) uses at run time 111 | a copy of the Library already present on the user's computer 112 | system, and (b) will operate properly with a modified version 113 | of the Library that is interface-compatible with the Linked 114 | Version. 115 | 116 | e) Provide Installation Information, but only if you would otherwise 117 | be required to provide such information under section 6 of the 118 | GNU GPL, and only to the extent that such information is 119 | necessary to install and execute a modified version of the 120 | Combined Work produced by recombining or relinking the 121 | Application with a modified version of the Linked Version. (If 122 | you use option 4d0, the Installation Information must accompany 123 | the Minimal Corresponding Source and Corresponding Application 124 | Code. If you use option 4d1, you must provide the Installation 125 | Information in the manner specified by section 6 of the GNU GPL 126 | for conveying Corresponding Source.) 127 | 128 | 5. Combined Libraries. 129 | 130 | You may place library facilities that are a work based on the 131 | Library side by side in a single library together with other library 132 | facilities that are not Applications and are not covered by this 133 | License, and convey such a combined library under terms of your 134 | choice, if you do both of the following: 135 | 136 | a) Accompany the combined library with a copy of the same work based 137 | on the Library, uncombined with any other library facilities, 138 | conveyed under the terms of this License. 139 | 140 | b) Give prominent notice with the combined library that part of it 141 | is a work based on the Library, and explaining where to find the 142 | accompanying uncombined form of the same work. 143 | 144 | 6. Revised Versions of the GNU Lesser General Public License. 145 | 146 | The Free Software Foundation may publish revised and/or new versions 147 | of the GNU Lesser General Public License from time to time. Such new 148 | versions will be similar in spirit to the present version, but may 149 | differ in detail to address new problems or concerns. 150 | 151 | Each version is given a distinguishing version number. If the 152 | Library as you received it specifies that a certain numbered version 153 | of the GNU Lesser General Public License "or any later version" 154 | applies to it, you have the option of following the terms and 155 | conditions either of that published version or of any later version 156 | published by the Free Software Foundation. If the Library as you 157 | received it does not specify a version number of the GNU Lesser 158 | General Public License, you may choose any version of the GNU Lesser 159 | General Public License ever published by the Free Software Foundation. 160 | 161 | If the Library as you received it specifies that a proxy can decide 162 | whether future versions of the GNU Lesser General Public License shall 163 | apply, that proxy's public statement of acceptance of any version is 164 | permanent authorization for you to choose that version for the 165 | Library. 166 | -------------------------------------------------------------------------------- /Package.swift: -------------------------------------------------------------------------------- 1 | // swift-tools-version:4.2 2 | import PackageDescription 3 | 4 | let package = Package( 5 | name: "tulipindicators", 6 | products: [ 7 | .library( 8 | name: "tulipindicators", 9 | targets: ["tulipindicators"]), 10 | ], 11 | targets: [ 12 | .target( 13 | name: "tulipindicators", 14 | dependencies: ["libindicators"]), 15 | .target( 16 | name: "libindicators", 17 | dependencies: []), 18 | .testTarget( 19 | name: "tulipindicatorsTests", 20 | dependencies: ["tulipindicators"]), 21 | ] 22 | ) 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # tulipindicators-swift 2 | 3 | [![License](https://img.shields.io/github/license/yageek/tulipindicators-swift.svg)](LICENSE) 4 | [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) 5 | [![Cocoapods](https://img.shields.io/cocoapods/v/tulipindicators-swift.svg)](https://img.shields.io/cocoapods/v/tulipindicators-swift.svg) 6 | 7 | This swift package offers a technical analysis function by wrapping the [tulipindicators C library](https://tulipindicators.org) 8 | 9 | ## Installation 10 | 11 | You can access the documentation [here](https://yageek.github.io/tulipindicators-swift/) 12 | 13 | ### Swift package manager 14 | 15 | ```swift 16 | import PackageDescription 17 | 18 | let package = Package( 19 | dependencies: [ 20 | .package(url: "https://github.com/yageek/tulipindicators-swift.git", from: "1.0.1"), 21 | ] 22 | ) 23 | ``` 24 | 25 | ### Carthage 26 | 27 | ``` 28 | github "yageek/tulipindicators-swift" ~> 1.0.1 29 | ``` 30 | 31 | ### Cocoapods 32 | 33 | ``` 34 | pod 'tulipindicators-swift' ~> 1.0.1 35 | ``` 36 | 37 | ## Usage 38 | 39 | ```swift 40 | import tulipindicators 41 | 42 | let inputs: [Double] = [81.59, 81.06, 82.87, 83.00, 83.61, 83.15, 82.84, 83.99, 84.55, 84.36, 85.53, 86.54, 86.89, 87.77, 87.29] 43 | let (beginIdx, outputs) = msw(inputs, period: 5) 44 | 45 | print("Relative Input offset: \(beginIdx)") 46 | print("MSW values: \(outputs)") 47 | ``` 48 | -------------------------------------------------------------------------------- /Sources/libindicators/include/indicators-wrapping.h: -------------------------------------------------------------------------------- 1 | /* 2 | * tulipindicators-swfit 3 | * https://tulipindicators.org/ 4 | * Copyright (c) 2019 Yannick Heinrich 5 | * Yannick Heinrich (me@yageek.net) 6 | * 7 | * This file is part of tulipindicators-swfit. 8 | * 9 | * Tulip Indicators is free software: you can redistribute it and/or modify it 10 | * under the terms of the GNU Lesser General Public License as published by the 11 | * Free Software Foundation, either version 3 of the License, or (at your 12 | * option) any later version. 13 | * 14 | * Tulip Indicators is distributed in the hope that it will be useful, but 15 | * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 16 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License 17 | * for more details. 18 | * 19 | * You should have received a copy of the GNU Lesser General Public License 20 | * along with Tulip Indicators. If not, see . 21 | * 22 | */ 23 | 24 | #ifndef __TULIP_WRAPPING 25 | #define __TULIP_WRAPPING 26 | 27 | struct ti_indicator_info; 28 | extern struct ti_indicator_info *ti_indicators_ptr; 29 | 30 | char **ti_indicator_info_get_input_names(struct ti_indicator_info *info); 31 | char **ti_indicator_info_get_option_names(struct ti_indicator_info *info); 32 | char **ti_indicator_info_get_output_names(struct ti_indicator_info *info); 33 | #endif 34 | -------------------------------------------------------------------------------- /Sources/libindicators/module.modulemap: -------------------------------------------------------------------------------- 1 | module libindicators { 2 | header "include/indicators.h" 3 | header "include/indicators-wrapping.h" 4 | export * 5 | } 6 | -------------------------------------------------------------------------------- /Sources/libindicators/wrapping.c: -------------------------------------------------------------------------------- 1 | /* 2 | * tulipindicators-swfit 3 | * https://tulipindicators.org/ 4 | * Copyright (c) 2019 Yannick Heinrich 5 | * Yannick Heinrich (me@yageek.net) 6 | * 7 | * This file is part of tulipindicators-swfit. 8 | * 9 | * Tulip Indicators is free software: you can redistribute it and/or modify it 10 | * under the terms of the GNU Lesser General Public License as published by the 11 | * Free Software Foundation, either version 3 of the License, or (at your 12 | * option) any later version. 13 | * 14 | * Tulip Indicators is distributed in the hope that it will be useful, but 15 | * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 16 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License 17 | * for more details. 18 | * 19 | * You should have received a copy of the GNU Lesser General Public License 20 | * along with Tulip Indicators. If not, see . 21 | * 22 | */ 23 | 24 | #include "indicators.h" 25 | 26 | struct ti_indicator_info *ti_indicators_ptr = &ti_indicators[0]; 27 | 28 | char **ti_indicator_info_get_input_names(struct ti_indicator_info *info) { 29 | return &info->input_names[0]; 30 | } 31 | 32 | char **ti_indicator_info_get_option_names(struct ti_indicator_info *info){ 33 | return &info->option_names[0]; 34 | } 35 | 36 | char **ti_indicator_info_get_output_names(struct ti_indicator_info *info){ 37 | return &info->output_names[0]; 38 | } 39 | -------------------------------------------------------------------------------- /Sources/tulipindicators/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 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | 22 | 23 | -------------------------------------------------------------------------------- /Sources/tulipindicators/Quotable.swift: -------------------------------------------------------------------------------- 1 | /* 2 | * tulipindicators-swfit 3 | * https://tulipindicators.org/ 4 | * Copyright (c) 2019 Yannick Heinrich 5 | * Yannick Heinrich (me@yageek.net) 6 | * 7 | * This file is part of tulipindicators-swfit. 8 | * 9 | * Tulip Indicators is free software: you can redistribute it and/or modify it 10 | * under the terms of the GNU Lesser General Public License as published by the 11 | * Free Software Foundation, either version 3 of the License, or (at your 12 | * option) any later version. 13 | * 14 | * Tulip Indicators is distributed in the hope that it will be useful, but 15 | * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 16 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License 17 | * for more details. 18 | * 19 | * You should have received a copy of the GNU Lesser General Public License 20 | * along with Tulip Indicators. If not, see . 21 | * 22 | */ 23 | 24 | import Foundation 25 | 26 | /// An element representing a Quote 27 | /// 28 | /// For the sake of convenience, the protocol provides 29 | /// default implementation for all values that equal zero. 30 | public protocol Quotable { 31 | 32 | /// The high value 33 | var high: Double { get } 34 | 35 | /// The low value 36 | var low: Double { get } 37 | 38 | /// The open value 39 | var open: Double { get } 40 | 41 | /// The close value 42 | var close: Double { get } 43 | 44 | /// The volume value 45 | var volume: Int { get } 46 | } 47 | 48 | public extension Quotable { 49 | var high: Double { return 0.0 } 50 | var low: Double { return 0.0 } 51 | var open: Double { return 0.0 } 52 | var close: Double { return 0.0 } 53 | var volume: Int { return 0 } 54 | } 55 | 56 | func HL(_ inputs: [T]) -> [Double] { 57 | var raw_inputs = [Double](repeating: 0.0, count: inputs.count*2) 58 | 59 | for i in 0..(_ inputs: [T]) -> [Double] { 67 | var raw_inputs = [Double](repeating: 0.0, count: inputs.count*2) 68 | 69 | for i in 0..(_ inputs: [T]) -> [Double] { 77 | var raw_inputs = [Double](repeating: 0.0, count: inputs.count*2) 78 | 79 | for i in 0..(_ inputs: [T]) -> [Double] { 87 | var raw_inputs = [Double](repeating: 0.0, count: inputs.count*3) 88 | for i in 0..(_ inputs: [T]) -> [Double] { 97 | var raw_inputs = [Double](repeating: 0.0, count: inputs.count*3) 98 | for i in 0..(_ inputs: [T]) -> [Double] { 107 | var raw_inputs = [Double](repeating: 0.0, count: inputs.count*4) 108 | for i in 0..(_ inputs: [T]) -> [Double] { 118 | var raw_inputs = [Double](repeating: 0.0, count: inputs.count*4) 119 | for i in 0... 21 | * 22 | */ 23 | 24 | import libindicators 25 | 26 | /// The kind of the indicator 27 | public enum IndicatorKind { 28 | /// The indicator is an overlay 29 | case overlay 30 | /// The indicator is simple math 31 | case math 32 | /// The indicator is a simple indicator 33 | case simple 34 | /// The indicator is a comparative indicator 35 | case comparative 36 | } 37 | 38 | private func arguments(array: UnsafeMutablePointer?>?, count: Int32) -> [String] { 39 | 40 | var args: [String] = [String](repeating: "", count: Int(count)) 41 | for i in 0.. (Int, [Double]) { 119 | return Tulip.shared.call_indicator(name: name, inputs: inputs, options: options) 120 | } 121 | 122 | /// Get the information about one indicator 123 | /// - Parameter name: The name of the indicator 124 | public static func indicator_info(name: String) -> IndicatorInfo { 125 | let indicator = Tulip.shared.indicator_info(by: name) 126 | return IndicatorInfo(tulip_info: indicator) 127 | } 128 | 129 | static let shared = Tulip() 130 | 131 | private init() { } 132 | 133 | private static var list: [String: ti_indicator_info] = { 134 | var entry_ptr = ti_indicators_ptr 135 | var indicators = [String: ti_indicator_info]() 136 | while let info = entry_ptr?.pointee, info.name != nil { 137 | indicators[String(cString: info.name)] = info 138 | entry_ptr = entry_ptr?.advanced(by: 1) 139 | } 140 | return indicators 141 | }() 142 | 143 | func indicator_info(by name: String) -> ti_indicator_info { 144 | return Tulip.list[name]! 145 | } 146 | 147 | func call_indicator(name: String, inputs: [Double], options: [Double]) -> (Int, [Double]) { 148 | return call_indicator(indicator_info(by: name), inputs: inputs, options: options) 149 | } 150 | 151 | private func call_indicator(_ indicator: ti_indicator_info, inputs: [Double], options: [Double]) -> (Int, [Double]) { 152 | 153 | let in_size = inputs.count/Int(indicator.inputs) 154 | let beginIdx = Int(indicator.start(options)) 155 | let count = in_size - beginIdx 156 | var outputs = [Double](repeating: 0.0, count: Int(indicator.outputs) * count) 157 | 158 | var result: Int32 = TI_OKAY 159 | 160 | inputs.withUnsafeBufferPointer { (inputs_ptr) in 161 | outputs.withUnsafeMutableBufferPointer { (outputs_ptr) in 162 | 163 | let in_range = 0... 21 | * 22 | */ 23 | #import 24 | 25 | //! Project version number for tulipindicators. 26 | FOUNDATION_EXPORT double tulipindicatorsVersionNumber; 27 | 28 | //! Project version string for tulipindicators. 29 | FOUNDATION_EXPORT const unsigned char tulipindicatorsVersionString[]; 30 | 31 | // In this header, you should import all the public headers of your framework using statements like #import 32 | 33 | 34 | -------------------------------------------------------------------------------- /Tests/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 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /Tests/LinuxMain.swift: -------------------------------------------------------------------------------- 1 | /* 2 | * tulipindicators-swfit 3 | * https://tulipindicators.org/ 4 | * Copyright (c) 2019 Yannick Heinrich 5 | * Yannick Heinrich (me@yageek.net) 6 | * 7 | * This file is part of tulipindicators-swfit. 8 | * 9 | * Tulip Indicators is free software: you can redistribute it and/or modify it 10 | * under the terms of the GNU Lesser General Public License as published by the 11 | * Free Software Foundation, either version 3 of the License, or (at your 12 | * option) any later version. 13 | * 14 | * Tulip Indicators is distributed in the hope that it will be useful, but 15 | * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 16 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License 17 | * for more details. 18 | * 19 | * You should have received a copy of the GNU Lesser General Public License 20 | * along with Tulip Indicators. If not, see . 21 | * 22 | */ 23 | 24 | import XCTest 25 | 26 | import tulipindicatorsTests 27 | 28 | var tests = [XCTestCaseEntry]() 29 | tests += tulipindicatorsTests.allTests() 30 | XCTMain(tests) 31 | -------------------------------------------------------------------------------- /Tests/tulipindicatorsTests/AssertHelper.swift: -------------------------------------------------------------------------------- 1 | /* 2 | * tulipindicators-swfit 3 | * https://tulipindicators.org/ 4 | * Copyright (c) 2019 Yannick Heinrich 5 | * Yannick Heinrich (me@yageek.net) 6 | * 7 | * This file is part of tulipindicators-swfit. 8 | * 9 | * Tulip Indicators is free software: you can redistribute it and/or modify it 10 | * under the terms of the GNU Lesser General Public License as published by the 11 | * Free Software Foundation, either version 3 of the License, or (at your 12 | * option) any later version. 13 | * 14 | * Tulip Indicators is distributed in the hope that it will be useful, but 15 | * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 16 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License 17 | * for more details. 18 | * 19 | * You should have received a copy of the GNU Lesser General Public License 20 | * along with Tulip Indicators. If not, see . 21 | * 22 | */ 23 | 24 | import XCTest 25 | 26 | func TIAssert(_ left: @autoclosure () -> [Double], _ right: @autoclosure () -> [Double], _ delta: Double, file: StaticString = #file, line: UInt = #line) { 27 | 28 | let lhs = left() 29 | let rhs = right() 30 | 31 | XCTAssertEqual(lhs.count, rhs.count, "Both elements should have the same length", file: file, line: line) 32 | 33 | for i in 0.. delta => abs(\(lhs[i]) - \(rhs[i])) = \(abs(lhs[i] - rhs[i]))> \(delta)", file: file, line: line) 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /Tests/tulipindicatorsTests/FunctionTests.swift: -------------------------------------------------------------------------------- 1 | /* 2 | * tulipindicators-swfit 3 | * https://tulipindicators.org/ 4 | * Copyright (c) 2019 Yannick Heinrich 5 | * Yannick Heinrich (me@yageek.net) 6 | * 7 | * This file is part of tulipindicators-swfit. 8 | * 9 | * Tulip Indicators is free software: you can redistribute it and/or modify it 10 | * under the terms of the GNU Lesser General Public License as published by the 11 | * Free Software Foundation, either version 3 of the License, or (at your 12 | * option) any later version. 13 | * 14 | * Tulip Indicators is distributed in the hope that it will be useful, but 15 | * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 16 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License 17 | * for more details. 18 | * 19 | * You should have received a copy of the GNU Lesser General Public License 20 | * along with Tulip Indicators. If not, see . 21 | * 22 | */ 23 | 24 | import XCTest 25 | @testable import tulipindicators 26 | 27 | final class FunctionTests: XCTestCase { 28 | 29 | private struct Quote: Quotable { 30 | let high: Double 31 | let low: Double 32 | let open: Double 33 | let close: Double 34 | let volume: Int 35 | 36 | init(high: Double = 0.0, low: Double = 0.0, open: Double = 0.0, close: Double = 0.0, volume: Int = 0) { 37 | self.high = high 38 | self.low = low 39 | self.open = open 40 | self.close = close 41 | self.volume = volume 42 | } 43 | } 44 | 45 | 46 | // MARK: - Moving Average 47 | private let inputs: [Double] = [81.59,81.06,82.87,83.00,83.61,83.15,82.84,83.99,84.55,84.36,85.53,86.54,86.89,87.77,87.29] 48 | private let period = 5 49 | private let delta: Double = 1e-3 50 | 51 | func runAVGTest(_ fn: (_ inputs: [Double], _ period: Int) -> (Int, [Double]), _ expected: [Double], file: StaticString = #file, line: UInt = #line) { 52 | let (_, res) = fn(inputs, period) 53 | TIAssert(expected, res, delta, file: file, line: line) 54 | } 55 | 56 | func testSMA() { 57 | let expected: [Double] = [82.426,82.738,83.094,83.318,83.628,83.778,84.254,84.994,85.574,86.218,86.804] 58 | runAVGTest(sma, expected) 59 | } 60 | 61 | func testWMA() { 62 | let expected: [Double] = [82.825,83.066,83.100,83.399,83.809,84.053,84.637,85.399,86.031,86.763,87.121] 63 | runAVGTest(wma, expected) 64 | } 65 | 66 | func testEMA() { 67 | let expected: [Double] = [81.590,81.413,81.899,82.266,82.714,82.859,82.853,83.232,83.671,83.901,84.444,85.143,85.725,86.407,86.701] 68 | runAVGTest(ema, expected) 69 | } 70 | 71 | func testDEMA() { 72 | let expected: [Double] = [84.159,84.379,85.125,86.062,86.727,87.529,87.646] 73 | runAVGTest(dema, expected) 74 | } 75 | 76 | func testTEMA() { 77 | let expected: [Double] = [87.042,87.819,87.721] 78 | runAVGTest(tema, expected) 79 | } 80 | 81 | func testTRIMA() { 82 | let expected: [Double] = [82.437,82.908,83.204,83.260,83.440,83.807,84.302,84.863,85.537,86.288,86.901] 83 | runAVGTest(trima, expected) 84 | } 85 | 86 | func testKAMA() { 87 | let expected: [Double] = [83.610,83.560,83.452,83.506,83.647,83.686,84.126,85.026,85.690,86.447,86.673] 88 | runAVGTest(kama, expected) 89 | } 90 | 91 | func testBBANDS() { 92 | let inputs: [Double] = [81.59,81.06,82.87,83.00,83.61,83.15,82.84,83.99,84.55,84.36,85.53,86.54,86.89,87.77,87.29] 93 | let exp_lower: [Double] = [80.530,80.987,82.533,82.472,82.418,82.435,82.511,83.143,83.536,83.870,85.289] 94 | let exp_middle: [Double] = [82.426,82.738,83.094,83.318,83.628,83.778,84.254,84.994,85.574,86.218,86.804] 95 | let exp_upper: [Double] = [84.322,84.489,83.655,84.164,84.838,85.121,85.997,86.845,87.612,88.566,88.319] 96 | 97 | 98 | let stddev: Double = 2 99 | let delta: Double = 1e-3 100 | let (_,res) = bbands(inputs, period: period, stddev: stddev); 101 | TIAssert(res.lower, exp_lower, delta); 102 | TIAssert(res.middle, exp_middle, delta); 103 | TIAssert(res.upper, exp_upper, delta); 104 | } 105 | 106 | func testFisher() { 107 | let high: [Double] = [82.15, 81.89, 83.03, 83.30, 83.85, 83.90, 83.33, 84.30, 84.84, 85.00, 85.90, 86.58, 86.98, 88.00, 87.87] 108 | let low: [Double] = [81.29, 80.64, 81.31, 82.65, 83.07, 83.11, 82.49, 82.30, 84.15, 84.11, 84.03, 85.39, 85.76, 87.17, 87.01] 109 | let exp_fisher = [0.34, 0.79, 0.83, 0.81, 1.07, 1.44, 1.85, 2.28, 2.70, 3.12, 3.19] 110 | let exp_signal = [0.00, 0.34, 0.79, 0.83, 0.81, 1.07, 1.44, 1.85, 2.28, 2.70, 3.12] 111 | 112 | let delta: Double = 1e-2 113 | let period: Int = 5 114 | let quotes = zip(high, low).map { Quote(high: $0.0, low: $0.1) } 115 | 116 | let (_, res) = fisher(quotes, period: period) 117 | TIAssert(res.fisher, exp_fisher, delta) 118 | TIAssert(res.signal, exp_signal, delta) 119 | } 120 | 121 | func testMSW() { 122 | let inputs: [Double] = [81.59, 81.06, 82.87, 83.00, 83.61, 83.15, 82.84, 83.99, 84.55, 84.36, 85.53, 86.54, 86.89, 87.77, 87.29] 123 | let exp_sine: [Double] = [-0.06, -0.72, 0.61, 1.00, 0.52, 0.43, 0.86, 0.67, 0.44, 0.22] 124 | let exp_lead: [Double] = [-0.75, -1.00, 0.99, 0.64, -0.24, -0.33, 0.25, -0.05, -0.32, -0.53] 125 | 126 | let delta: Double = 1e-2 127 | let period: Int = 5 128 | let (_, res) = msw(inputs, period: period) 129 | TIAssert(res.sine, exp_sine, delta) 130 | TIAssert(res.lead, exp_lead, delta) 131 | } 132 | 133 | func testStochCrash() { 134 | let inputs: [Quote] = [ 135 | Quote(high: 0, low: 0, open: 0, close: 0, volume: 0), 136 | Quote(high: 0, low: 0, open: 0, close: 0, volume: 0), 137 | Quote(high: 0, low: 0, open: 0, close: 0, volume: 0), 138 | Quote(high: 0, low: 0, open: 0, close: 0, volume: 0), 139 | Quote(high: 0, low: 0, open: 0, close: 0, volume: 0), 140 | Quote(high: 0, low: 0, open: 0, close: 0, volume: 0), 141 | Quote(high: 0, low: 0, open: 0, close: 0, volume: 0), 142 | Quote(high: 0, low: 0, open: 0, close: 0, volume: 0), 143 | Quote(high: 0, low: 0, open: 0, close: 0, volume: 0), 144 | ] 145 | let _ = stoch(inputs, kPeriod: 2, kSlowingPeriod: 2, dPeriod: 2) 146 | } 147 | 148 | // MARK: - Info 149 | func testInfo() { 150 | let info = Tulip.indicator_info(name: "sma") 151 | XCTAssertEqual("sma", info.name) 152 | XCTAssertEqual("Simple Moving Average", info.fullName) 153 | XCTAssertEqual(.overlay, info.kind) 154 | XCTAssertEqual(["period"], info.options) 155 | XCTAssertEqual(["sma"], info.outputs) 156 | XCTAssertEqual(["real"], info.inputs) 157 | } 158 | 159 | // MARK: - All tests 160 | static var allTests = [ 161 | ("testSMA", testSMA), 162 | ("testWMA", testWMA), 163 | ("testEMA", testEMA), 164 | ("testDEMA", testDEMA), 165 | ("testTEMA", testTEMA), 166 | ("testTRIMA", testTRIMA), 167 | ("testTRIMA", testKAMA), 168 | ("testBollinger", testBBANDS), 169 | ("testInfo", testInfo) 170 | ] 171 | } 172 | -------------------------------------------------------------------------------- /Tests/tulipindicatorsTests/XCTestManifests.swift: -------------------------------------------------------------------------------- 1 | /* 2 | * tulipindicators-swfit 3 | * https://tulipindicators.org/ 4 | * Copyright (c) 2019 Yannick Heinrich 5 | * Yannick Heinrich (me@yageek.net) 6 | * 7 | * This file is part of tulipindicators-swfit. 8 | * 9 | * Tulip Indicators is free software: you can redistribute it and/or modify it 10 | * under the terms of the GNU Lesser General Public License as published by the 11 | * Free Software Foundation, either version 3 of the License, or (at your 12 | * option) any later version. 13 | * 14 | * Tulip Indicators is distributed in the hope that it will be useful, but 15 | * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 16 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License 17 | * for more details. 18 | * 19 | * You should have received a copy of the GNU Lesser General Public License 20 | * along with Tulip Indicators. If not, see . 21 | * 22 | */ 23 | 24 | import XCTest 25 | 26 | #if !os(macOS) && !os(iOS) && !os(tvOS) && !os(watchOS) 27 | public func allTests() -> [XCTestCaseEntry] { 28 | return [ 29 | testCase(FunctionTests.allTests) 30 | ] 31 | } 32 | #endif 33 | -------------------------------------------------------------------------------- /docs/Enums.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Enumerations Reference 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 |
17 |

tulipindicators Docs (100% documented)

18 |

View on GitHub

19 |

Install in Dash

20 |
21 |
22 |
23 | 28 |
29 |
30 | 396 |
397 |
398 |
399 |

Enumerations

400 |

The following enumerations are available globally.

401 | 402 |
403 |
404 |
405 |
    406 |
  • 407 |
    408 | 409 | 410 | 411 | IndicatorKind 412 | 413 |
    414 |
    415 |
    416 |
    417 |
    418 |
    419 |

    The kind of the indicator

    420 | 421 | See more 422 |
    423 |
    424 |

    Declaration

    425 |
    426 |

    Swift

    427 |
    public enum IndicatorKind
    428 | 429 |
    430 |
    431 |
    432 |
    433 |
  • 434 |
435 |
436 |
437 |
438 | 442 |
443 |
444 | 445 | 446 | 447 | -------------------------------------------------------------------------------- /docs/Protocols.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Protocols Reference 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 |
17 |

tulipindicators Docs (100% documented)

18 |

View on GitHub

19 |

Install in Dash

20 |
21 |
22 |
23 | 28 |
29 |
30 | 396 |
397 |
398 |
399 |

Protocols

400 |

The following protocols are available globally.

401 | 402 |
403 |
404 |
405 |
    406 |
  • 407 |
    408 | 409 | 410 | 411 | Quotable 412 | 413 |
    414 |
    415 |
    416 |
    417 |
    418 |
    419 |

    An element representing a Quote

    420 | 421 |

    For the sake of convenience, the protocol provides 422 | default implementation for all values that equal zero.

    423 | 424 | See more 425 |
    426 |
    427 |

    Declaration

    428 |
    429 |

    Swift

    430 |
    public protocol Quotable
    431 | 432 |
    433 |
    434 |
    435 |
    436 |
  • 437 |
438 |
439 |
440 |
441 | 445 |
446 |
447 | 448 | 449 | 450 | -------------------------------------------------------------------------------- /docs/badge.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | documentation 17 | 18 | 19 | documentation 20 | 21 | 22 | 100% 23 | 24 | 25 | 100% 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /docs/css/highlight.css: -------------------------------------------------------------------------------- 1 | /* Credit to https://gist.github.com/wataru420/2048287 */ 2 | .highlight { 3 | /* Comment */ 4 | /* Error */ 5 | /* Keyword */ 6 | /* Operator */ 7 | /* Comment.Multiline */ 8 | /* Comment.Preproc */ 9 | /* Comment.Single */ 10 | /* Comment.Special */ 11 | /* Generic.Deleted */ 12 | /* Generic.Deleted.Specific */ 13 | /* Generic.Emph */ 14 | /* Generic.Error */ 15 | /* Generic.Heading */ 16 | /* Generic.Inserted */ 17 | /* Generic.Inserted.Specific */ 18 | /* Generic.Output */ 19 | /* Generic.Prompt */ 20 | /* Generic.Strong */ 21 | /* Generic.Subheading */ 22 | /* Generic.Traceback */ 23 | /* Keyword.Constant */ 24 | /* Keyword.Declaration */ 25 | /* Keyword.Pseudo */ 26 | /* Keyword.Reserved */ 27 | /* Keyword.Type */ 28 | /* Literal.Number */ 29 | /* Literal.String */ 30 | /* Name.Attribute */ 31 | /* Name.Builtin */ 32 | /* Name.Class */ 33 | /* Name.Constant */ 34 | /* Name.Entity */ 35 | /* Name.Exception */ 36 | /* Name.Function */ 37 | /* Name.Namespace */ 38 | /* Name.Tag */ 39 | /* Name.Variable */ 40 | /* Operator.Word */ 41 | /* Text.Whitespace */ 42 | /* Literal.Number.Float */ 43 | /* Literal.Number.Hex */ 44 | /* Literal.Number.Integer */ 45 | /* Literal.Number.Oct */ 46 | /* Literal.String.Backtick */ 47 | /* Literal.String.Char */ 48 | /* Literal.String.Doc */ 49 | /* Literal.String.Double */ 50 | /* Literal.String.Escape */ 51 | /* Literal.String.Heredoc */ 52 | /* Literal.String.Interpol */ 53 | /* Literal.String.Other */ 54 | /* Literal.String.Regex */ 55 | /* Literal.String.Single */ 56 | /* Literal.String.Symbol */ 57 | /* Name.Builtin.Pseudo */ 58 | /* Name.Variable.Class */ 59 | /* Name.Variable.Global */ 60 | /* Name.Variable.Instance */ 61 | /* Literal.Number.Integer.Long */ } 62 | .highlight .c { 63 | color: #999988; 64 | font-style: italic; } 65 | .highlight .err { 66 | color: #a61717; 67 | background-color: #e3d2d2; } 68 | .highlight .k { 69 | color: #000000; 70 | font-weight: bold; } 71 | .highlight .o { 72 | color: #000000; 73 | font-weight: bold; } 74 | .highlight .cm { 75 | color: #999988; 76 | font-style: italic; } 77 | .highlight .cp { 78 | color: #999999; 79 | font-weight: bold; } 80 | .highlight .c1 { 81 | color: #999988; 82 | font-style: italic; } 83 | .highlight .cs { 84 | color: #999999; 85 | font-weight: bold; 86 | font-style: italic; } 87 | .highlight .gd { 88 | color: #000000; 89 | background-color: #ffdddd; } 90 | .highlight .gd .x { 91 | color: #000000; 92 | background-color: #ffaaaa; } 93 | .highlight .ge { 94 | color: #000000; 95 | font-style: italic; } 96 | .highlight .gr { 97 | color: #aa0000; } 98 | .highlight .gh { 99 | color: #999999; } 100 | .highlight .gi { 101 | color: #000000; 102 | background-color: #ddffdd; } 103 | .highlight .gi .x { 104 | color: #000000; 105 | background-color: #aaffaa; } 106 | .highlight .go { 107 | color: #888888; } 108 | .highlight .gp { 109 | color: #555555; } 110 | .highlight .gs { 111 | font-weight: bold; } 112 | .highlight .gu { 113 | color: #aaaaaa; } 114 | .highlight .gt { 115 | color: #aa0000; } 116 | .highlight .kc { 117 | color: #000000; 118 | font-weight: bold; } 119 | .highlight .kd { 120 | color: #000000; 121 | font-weight: bold; } 122 | .highlight .kp { 123 | color: #000000; 124 | font-weight: bold; } 125 | .highlight .kr { 126 | color: #000000; 127 | font-weight: bold; } 128 | .highlight .kt { 129 | color: #445588; } 130 | .highlight .m { 131 | color: #009999; } 132 | .highlight .s { 133 | color: #d14; } 134 | .highlight .na { 135 | color: #008080; } 136 | .highlight .nb { 137 | color: #0086B3; } 138 | .highlight .nc { 139 | color: #445588; 140 | font-weight: bold; } 141 | .highlight .no { 142 | color: #008080; } 143 | .highlight .ni { 144 | color: #800080; } 145 | .highlight .ne { 146 | color: #990000; 147 | font-weight: bold; } 148 | .highlight .nf { 149 | color: #990000; } 150 | .highlight .nn { 151 | color: #555555; } 152 | .highlight .nt { 153 | color: #000080; } 154 | .highlight .nv { 155 | color: #008080; } 156 | .highlight .ow { 157 | color: #000000; 158 | font-weight: bold; } 159 | .highlight .w { 160 | color: #bbbbbb; } 161 | .highlight .mf { 162 | color: #009999; } 163 | .highlight .mh { 164 | color: #009999; } 165 | .highlight .mi { 166 | color: #009999; } 167 | .highlight .mo { 168 | color: #009999; } 169 | .highlight .sb { 170 | color: #d14; } 171 | .highlight .sc { 172 | color: #d14; } 173 | .highlight .sd { 174 | color: #d14; } 175 | .highlight .s2 { 176 | color: #d14; } 177 | .highlight .se { 178 | color: #d14; } 179 | .highlight .sh { 180 | color: #d14; } 181 | .highlight .si { 182 | color: #d14; } 183 | .highlight .sx { 184 | color: #d14; } 185 | .highlight .sr { 186 | color: #009926; } 187 | .highlight .s1 { 188 | color: #d14; } 189 | .highlight .ss { 190 | color: #990073; } 191 | .highlight .bp { 192 | color: #999999; } 193 | .highlight .vc { 194 | color: #008080; } 195 | .highlight .vg { 196 | color: #008080; } 197 | .highlight .vi { 198 | color: #008080; } 199 | .highlight .il { 200 | color: #009999; } 201 | -------------------------------------------------------------------------------- /docs/css/jazzy.css: -------------------------------------------------------------------------------- 1 | html, body, div, span, h1, h3, h4, p, a, code, em, img, ul, li, table, tbody, tr, td { 2 | background: transparent; 3 | border: 0; 4 | margin: 0; 5 | outline: 0; 6 | padding: 0; 7 | vertical-align: baseline; } 8 | 9 | body { 10 | background-color: #f2f2f2; 11 | font-family: Helvetica, freesans, Arial, sans-serif; 12 | font-size: 14px; 13 | -webkit-font-smoothing: subpixel-antialiased; 14 | word-wrap: break-word; } 15 | 16 | h1, h2, h3 { 17 | margin-top: 0.8em; 18 | margin-bottom: 0.3em; 19 | font-weight: 100; 20 | color: black; } 21 | 22 | h1 { 23 | font-size: 2.5em; } 24 | 25 | h2 { 26 | font-size: 2em; 27 | border-bottom: 1px solid #e2e2e2; } 28 | 29 | h4 { 30 | font-size: 13px; 31 | line-height: 1.5; 32 | margin-top: 21px; } 33 | 34 | h5 { 35 | font-size: 1.1em; } 36 | 37 | h6 { 38 | font-size: 1.1em; 39 | color: #777; } 40 | 41 | .section-name { 42 | color: gray; 43 | display: block; 44 | font-family: Helvetica; 45 | font-size: 22px; 46 | font-weight: 100; 47 | margin-bottom: 15px; } 48 | 49 | pre, code { 50 | font: 0.95em Menlo, monospace; 51 | color: #777; 52 | word-wrap: normal; } 53 | 54 | p code, li code { 55 | background-color: #eee; 56 | padding: 2px 4px; 57 | border-radius: 4px; } 58 | 59 | a { 60 | color: #0088cc; 61 | text-decoration: none; } 62 | 63 | ul { 64 | padding-left: 15px; } 65 | 66 | li { 67 | line-height: 1.8em; } 68 | 69 | img { 70 | max-width: 100%; } 71 | 72 | blockquote { 73 | margin-left: 0; 74 | padding: 0 10px; 75 | border-left: 4px solid #ccc; } 76 | 77 | .content-wrapper { 78 | margin: 0 auto; 79 | width: 980px; } 80 | 81 | header { 82 | font-size: 0.85em; 83 | line-height: 26px; 84 | background-color: #414141; 85 | position: fixed; 86 | width: 100%; 87 | z-index: 1; } 88 | header img { 89 | padding-right: 6px; 90 | vertical-align: -4px; 91 | height: 16px; } 92 | header a { 93 | color: #fff; } 94 | header p { 95 | float: left; 96 | color: #999; } 97 | header .header-right { 98 | float: right; 99 | margin-left: 16px; } 100 | 101 | #breadcrumbs { 102 | background-color: #f2f2f2; 103 | height: 27px; 104 | padding-top: 17px; 105 | position: fixed; 106 | width: 100%; 107 | z-index: 1; 108 | margin-top: 26px; } 109 | #breadcrumbs #carat { 110 | height: 10px; 111 | margin: 0 5px; } 112 | 113 | .sidebar { 114 | background-color: #f9f9f9; 115 | border: 1px solid #e2e2e2; 116 | overflow-y: auto; 117 | overflow-x: hidden; 118 | position: fixed; 119 | top: 70px; 120 | bottom: 0; 121 | width: 230px; 122 | word-wrap: normal; } 123 | 124 | .nav-groups { 125 | list-style-type: none; 126 | background: #fff; 127 | padding-left: 0; } 128 | 129 | .nav-group-name { 130 | border-bottom: 1px solid #e2e2e2; 131 | font-size: 1.1em; 132 | font-weight: 100; 133 | padding: 15px 0 15px 20px; } 134 | .nav-group-name > a { 135 | color: #333; } 136 | 137 | .nav-group-tasks { 138 | margin-top: 5px; } 139 | 140 | .nav-group-task { 141 | font-size: 0.9em; 142 | list-style-type: none; 143 | white-space: nowrap; } 144 | .nav-group-task a { 145 | color: #888; } 146 | 147 | .main-content { 148 | background-color: #fff; 149 | border: 1px solid #e2e2e2; 150 | margin-left: 246px; 151 | position: absolute; 152 | overflow: hidden; 153 | padding-bottom: 20px; 154 | top: 70px; 155 | width: 734px; } 156 | .main-content p, .main-content a, .main-content code, .main-content em, .main-content ul, .main-content table, .main-content blockquote { 157 | margin-bottom: 1em; } 158 | .main-content p { 159 | line-height: 1.8em; } 160 | .main-content section .section:first-child { 161 | margin-top: 0; 162 | padding-top: 0; } 163 | .main-content section .task-group-section .task-group:first-of-type { 164 | padding-top: 10px; } 165 | .main-content section .task-group-section .task-group:first-of-type .section-name { 166 | padding-top: 15px; } 167 | .main-content section .heading:before { 168 | content: ""; 169 | display: block; 170 | padding-top: 70px; 171 | margin: -70px 0 0; } 172 | 173 | .section { 174 | padding: 0 25px; } 175 | 176 | .highlight { 177 | background-color: #eee; 178 | padding: 10px 12px; 179 | border: 1px solid #e2e2e2; 180 | border-radius: 4px; 181 | overflow-x: auto; } 182 | 183 | .declaration .highlight { 184 | overflow-x: initial; 185 | padding: 0 40px 40px 0; 186 | margin-bottom: -25px; 187 | background-color: transparent; 188 | border: none; } 189 | 190 | .section-name { 191 | margin: 0; 192 | margin-left: 18px; } 193 | 194 | .task-group-section { 195 | padding-left: 6px; 196 | border-top: 1px solid #e2e2e2; } 197 | 198 | .task-group { 199 | padding-top: 0px; } 200 | 201 | .task-name-container a[name]:before { 202 | content: ""; 203 | display: block; 204 | padding-top: 70px; 205 | margin: -70px 0 0; } 206 | 207 | .item { 208 | padding-top: 8px; 209 | width: 100%; 210 | list-style-type: none; } 211 | .item a[name]:before { 212 | content: ""; 213 | display: block; 214 | padding-top: 70px; 215 | margin: -70px 0 0; } 216 | .item code { 217 | background-color: transparent; 218 | padding: 0; } 219 | .item .token, .item .direct-link { 220 | padding-left: 3px; 221 | margin-left: 15px; 222 | font-size: 11.9px; } 223 | .item .discouraged { 224 | text-decoration: line-through; } 225 | .item .declaration-note { 226 | font-size: .85em; 227 | color: gray; 228 | font-style: italic; } 229 | 230 | .pointer-container { 231 | border-bottom: 1px solid #e2e2e2; 232 | left: -23px; 233 | padding-bottom: 13px; 234 | position: relative; 235 | width: 110%; } 236 | 237 | .pointer { 238 | background: #f9f9f9; 239 | border-left: 1px solid #e2e2e2; 240 | border-top: 1px solid #e2e2e2; 241 | height: 12px; 242 | left: 21px; 243 | top: -7px; 244 | -webkit-transform: rotate(45deg); 245 | -moz-transform: rotate(45deg); 246 | -o-transform: rotate(45deg); 247 | transform: rotate(45deg); 248 | position: absolute; 249 | width: 12px; } 250 | 251 | .height-container { 252 | display: none; 253 | left: -25px; 254 | padding: 0 25px; 255 | position: relative; 256 | width: 100%; 257 | overflow: hidden; } 258 | .height-container .section { 259 | background: #f9f9f9; 260 | border-bottom: 1px solid #e2e2e2; 261 | left: -25px; 262 | position: relative; 263 | width: 100%; 264 | padding-top: 10px; 265 | padding-bottom: 5px; } 266 | 267 | .aside, .language { 268 | padding: 6px 12px; 269 | margin: 12px 0; 270 | border-left: 5px solid #dddddd; 271 | overflow-y: hidden; } 272 | .aside .aside-title, .language .aside-title { 273 | font-size: 9px; 274 | letter-spacing: 2px; 275 | text-transform: uppercase; 276 | padding-bottom: 0; 277 | margin: 0; 278 | color: #aaa; 279 | -webkit-user-select: none; } 280 | .aside p:last-child, .language p:last-child { 281 | margin-bottom: 0; } 282 | 283 | .language { 284 | border-left: 5px solid #cde9f4; } 285 | .language .aside-title { 286 | color: #4b8afb; } 287 | 288 | .aside-warning, .aside-deprecated, .aside-unavailable { 289 | border-left: 5px solid #ff6666; } 290 | .aside-warning .aside-title, .aside-deprecated .aside-title, .aside-unavailable .aside-title { 291 | color: #ff0000; } 292 | 293 | .graybox { 294 | border-collapse: collapse; 295 | width: 100%; } 296 | .graybox p { 297 | margin: 0; 298 | word-break: break-word; 299 | min-width: 50px; } 300 | .graybox td { 301 | border: 1px solid #e2e2e2; 302 | padding: 5px 25px 5px 10px; 303 | vertical-align: middle; } 304 | .graybox tr td:first-of-type { 305 | text-align: right; 306 | padding: 7px; 307 | vertical-align: top; 308 | word-break: normal; 309 | width: 40px; } 310 | 311 | .slightly-smaller { 312 | font-size: 0.9em; } 313 | 314 | #footer { 315 | position: relative; 316 | top: 10px; 317 | bottom: 0px; 318 | margin-left: 25px; } 319 | #footer p { 320 | margin: 0; 321 | color: #aaa; 322 | font-size: 0.8em; } 323 | 324 | html.dash header, html.dash #breadcrumbs, html.dash .sidebar { 325 | display: none; } 326 | html.dash .main-content { 327 | width: 980px; 328 | margin-left: 0; 329 | border: none; 330 | width: 100%; 331 | top: 0; 332 | padding-bottom: 0; } 333 | html.dash .height-container { 334 | display: block; } 335 | html.dash .item .token { 336 | margin-left: 0; } 337 | html.dash .content-wrapper { 338 | width: auto; } 339 | html.dash #footer { 340 | position: static; } 341 | -------------------------------------------------------------------------------- /docs/docsets/tulipindicators.docset/Contents/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleIdentifier 6 | com.jazzy.tulipindicators 7 | CFBundleName 8 | tulipindicators 9 | DocSetPlatformFamily 10 | tulipindicators 11 | isDashDocset 12 | 13 | dashIndexFilePath 14 | index.html 15 | isJavaScriptEnabled 16 | 17 | DashDocSetFamily 18 | dashtoc 19 | 20 | 21 | -------------------------------------------------------------------------------- /docs/docsets/tulipindicators.docset/Contents/Resources/Documents/Enums.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Enumerations Reference 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 |
17 |

tulipindicators Docs (100% documented)

18 |

View on GitHub

19 |

Install in Dash

20 |
21 |
22 |
23 | 28 |
29 |
30 | 396 |
397 |
398 |
399 |

Enumerations

400 |

The following enumerations are available globally.

401 | 402 |
403 |
404 |
405 |
    406 |
  • 407 |
    408 | 409 | 410 | 411 | IndicatorKind 412 | 413 |
    414 |
    415 |
    416 |
    417 |
    418 |
    419 |

    The kind of the indicator

    420 | 421 | See more 422 |
    423 |
    424 |

    Declaration

    425 |
    426 |

    Swift

    427 |
    public enum IndicatorKind
    428 | 429 |
    430 |
    431 |
    432 |
    433 |
  • 434 |
435 |
436 |
437 |
438 | 442 |
443 |
444 | 445 | 446 | 447 | -------------------------------------------------------------------------------- /docs/docsets/tulipindicators.docset/Contents/Resources/Documents/badge.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | documentation 17 | 18 | 19 | documentation 20 | 21 | 22 | 100% 23 | 24 | 25 | 100% 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /docs/docsets/tulipindicators.docset/Contents/Resources/Documents/css/highlight.css: -------------------------------------------------------------------------------- 1 | /* Credit to https://gist.github.com/wataru420/2048287 */ 2 | .highlight { 3 | /* Comment */ 4 | /* Error */ 5 | /* Keyword */ 6 | /* Operator */ 7 | /* Comment.Multiline */ 8 | /* Comment.Preproc */ 9 | /* Comment.Single */ 10 | /* Comment.Special */ 11 | /* Generic.Deleted */ 12 | /* Generic.Deleted.Specific */ 13 | /* Generic.Emph */ 14 | /* Generic.Error */ 15 | /* Generic.Heading */ 16 | /* Generic.Inserted */ 17 | /* Generic.Inserted.Specific */ 18 | /* Generic.Output */ 19 | /* Generic.Prompt */ 20 | /* Generic.Strong */ 21 | /* Generic.Subheading */ 22 | /* Generic.Traceback */ 23 | /* Keyword.Constant */ 24 | /* Keyword.Declaration */ 25 | /* Keyword.Pseudo */ 26 | /* Keyword.Reserved */ 27 | /* Keyword.Type */ 28 | /* Literal.Number */ 29 | /* Literal.String */ 30 | /* Name.Attribute */ 31 | /* Name.Builtin */ 32 | /* Name.Class */ 33 | /* Name.Constant */ 34 | /* Name.Entity */ 35 | /* Name.Exception */ 36 | /* Name.Function */ 37 | /* Name.Namespace */ 38 | /* Name.Tag */ 39 | /* Name.Variable */ 40 | /* Operator.Word */ 41 | /* Text.Whitespace */ 42 | /* Literal.Number.Float */ 43 | /* Literal.Number.Hex */ 44 | /* Literal.Number.Integer */ 45 | /* Literal.Number.Oct */ 46 | /* Literal.String.Backtick */ 47 | /* Literal.String.Char */ 48 | /* Literal.String.Doc */ 49 | /* Literal.String.Double */ 50 | /* Literal.String.Escape */ 51 | /* Literal.String.Heredoc */ 52 | /* Literal.String.Interpol */ 53 | /* Literal.String.Other */ 54 | /* Literal.String.Regex */ 55 | /* Literal.String.Single */ 56 | /* Literal.String.Symbol */ 57 | /* Name.Builtin.Pseudo */ 58 | /* Name.Variable.Class */ 59 | /* Name.Variable.Global */ 60 | /* Name.Variable.Instance */ 61 | /* Literal.Number.Integer.Long */ } 62 | .highlight .c { 63 | color: #999988; 64 | font-style: italic; } 65 | .highlight .err { 66 | color: #a61717; 67 | background-color: #e3d2d2; } 68 | .highlight .k { 69 | color: #000000; 70 | font-weight: bold; } 71 | .highlight .o { 72 | color: #000000; 73 | font-weight: bold; } 74 | .highlight .cm { 75 | color: #999988; 76 | font-style: italic; } 77 | .highlight .cp { 78 | color: #999999; 79 | font-weight: bold; } 80 | .highlight .c1 { 81 | color: #999988; 82 | font-style: italic; } 83 | .highlight .cs { 84 | color: #999999; 85 | font-weight: bold; 86 | font-style: italic; } 87 | .highlight .gd { 88 | color: #000000; 89 | background-color: #ffdddd; } 90 | .highlight .gd .x { 91 | color: #000000; 92 | background-color: #ffaaaa; } 93 | .highlight .ge { 94 | color: #000000; 95 | font-style: italic; } 96 | .highlight .gr { 97 | color: #aa0000; } 98 | .highlight .gh { 99 | color: #999999; } 100 | .highlight .gi { 101 | color: #000000; 102 | background-color: #ddffdd; } 103 | .highlight .gi .x { 104 | color: #000000; 105 | background-color: #aaffaa; } 106 | .highlight .go { 107 | color: #888888; } 108 | .highlight .gp { 109 | color: #555555; } 110 | .highlight .gs { 111 | font-weight: bold; } 112 | .highlight .gu { 113 | color: #aaaaaa; } 114 | .highlight .gt { 115 | color: #aa0000; } 116 | .highlight .kc { 117 | color: #000000; 118 | font-weight: bold; } 119 | .highlight .kd { 120 | color: #000000; 121 | font-weight: bold; } 122 | .highlight .kp { 123 | color: #000000; 124 | font-weight: bold; } 125 | .highlight .kr { 126 | color: #000000; 127 | font-weight: bold; } 128 | .highlight .kt { 129 | color: #445588; } 130 | .highlight .m { 131 | color: #009999; } 132 | .highlight .s { 133 | color: #d14; } 134 | .highlight .na { 135 | color: #008080; } 136 | .highlight .nb { 137 | color: #0086B3; } 138 | .highlight .nc { 139 | color: #445588; 140 | font-weight: bold; } 141 | .highlight .no { 142 | color: #008080; } 143 | .highlight .ni { 144 | color: #800080; } 145 | .highlight .ne { 146 | color: #990000; 147 | font-weight: bold; } 148 | .highlight .nf { 149 | color: #990000; } 150 | .highlight .nn { 151 | color: #555555; } 152 | .highlight .nt { 153 | color: #000080; } 154 | .highlight .nv { 155 | color: #008080; } 156 | .highlight .ow { 157 | color: #000000; 158 | font-weight: bold; } 159 | .highlight .w { 160 | color: #bbbbbb; } 161 | .highlight .mf { 162 | color: #009999; } 163 | .highlight .mh { 164 | color: #009999; } 165 | .highlight .mi { 166 | color: #009999; } 167 | .highlight .mo { 168 | color: #009999; } 169 | .highlight .sb { 170 | color: #d14; } 171 | .highlight .sc { 172 | color: #d14; } 173 | .highlight .sd { 174 | color: #d14; } 175 | .highlight .s2 { 176 | color: #d14; } 177 | .highlight .se { 178 | color: #d14; } 179 | .highlight .sh { 180 | color: #d14; } 181 | .highlight .si { 182 | color: #d14; } 183 | .highlight .sx { 184 | color: #d14; } 185 | .highlight .sr { 186 | color: #009926; } 187 | .highlight .s1 { 188 | color: #d14; } 189 | .highlight .ss { 190 | color: #990073; } 191 | .highlight .bp { 192 | color: #999999; } 193 | .highlight .vc { 194 | color: #008080; } 195 | .highlight .vg { 196 | color: #008080; } 197 | .highlight .vi { 198 | color: #008080; } 199 | .highlight .il { 200 | color: #009999; } 201 | -------------------------------------------------------------------------------- /docs/docsets/tulipindicators.docset/Contents/Resources/Documents/css/jazzy.css: -------------------------------------------------------------------------------- 1 | html, body, div, span, h1, h3, h4, p, a, code, em, img, ul, li, table, tbody, tr, td { 2 | background: transparent; 3 | border: 0; 4 | margin: 0; 5 | outline: 0; 6 | padding: 0; 7 | vertical-align: baseline; } 8 | 9 | body { 10 | background-color: #f2f2f2; 11 | font-family: Helvetica, freesans, Arial, sans-serif; 12 | font-size: 14px; 13 | -webkit-font-smoothing: subpixel-antialiased; 14 | word-wrap: break-word; } 15 | 16 | h1, h2, h3 { 17 | margin-top: 0.8em; 18 | margin-bottom: 0.3em; 19 | font-weight: 100; 20 | color: black; } 21 | 22 | h1 { 23 | font-size: 2.5em; } 24 | 25 | h2 { 26 | font-size: 2em; 27 | border-bottom: 1px solid #e2e2e2; } 28 | 29 | h4 { 30 | font-size: 13px; 31 | line-height: 1.5; 32 | margin-top: 21px; } 33 | 34 | h5 { 35 | font-size: 1.1em; } 36 | 37 | h6 { 38 | font-size: 1.1em; 39 | color: #777; } 40 | 41 | .section-name { 42 | color: gray; 43 | display: block; 44 | font-family: Helvetica; 45 | font-size: 22px; 46 | font-weight: 100; 47 | margin-bottom: 15px; } 48 | 49 | pre, code { 50 | font: 0.95em Menlo, monospace; 51 | color: #777; 52 | word-wrap: normal; } 53 | 54 | p code, li code { 55 | background-color: #eee; 56 | padding: 2px 4px; 57 | border-radius: 4px; } 58 | 59 | a { 60 | color: #0088cc; 61 | text-decoration: none; } 62 | 63 | ul { 64 | padding-left: 15px; } 65 | 66 | li { 67 | line-height: 1.8em; } 68 | 69 | img { 70 | max-width: 100%; } 71 | 72 | blockquote { 73 | margin-left: 0; 74 | padding: 0 10px; 75 | border-left: 4px solid #ccc; } 76 | 77 | .content-wrapper { 78 | margin: 0 auto; 79 | width: 980px; } 80 | 81 | header { 82 | font-size: 0.85em; 83 | line-height: 26px; 84 | background-color: #414141; 85 | position: fixed; 86 | width: 100%; 87 | z-index: 1; } 88 | header img { 89 | padding-right: 6px; 90 | vertical-align: -4px; 91 | height: 16px; } 92 | header a { 93 | color: #fff; } 94 | header p { 95 | float: left; 96 | color: #999; } 97 | header .header-right { 98 | float: right; 99 | margin-left: 16px; } 100 | 101 | #breadcrumbs { 102 | background-color: #f2f2f2; 103 | height: 27px; 104 | padding-top: 17px; 105 | position: fixed; 106 | width: 100%; 107 | z-index: 1; 108 | margin-top: 26px; } 109 | #breadcrumbs #carat { 110 | height: 10px; 111 | margin: 0 5px; } 112 | 113 | .sidebar { 114 | background-color: #f9f9f9; 115 | border: 1px solid #e2e2e2; 116 | overflow-y: auto; 117 | overflow-x: hidden; 118 | position: fixed; 119 | top: 70px; 120 | bottom: 0; 121 | width: 230px; 122 | word-wrap: normal; } 123 | 124 | .nav-groups { 125 | list-style-type: none; 126 | background: #fff; 127 | padding-left: 0; } 128 | 129 | .nav-group-name { 130 | border-bottom: 1px solid #e2e2e2; 131 | font-size: 1.1em; 132 | font-weight: 100; 133 | padding: 15px 0 15px 20px; } 134 | .nav-group-name > a { 135 | color: #333; } 136 | 137 | .nav-group-tasks { 138 | margin-top: 5px; } 139 | 140 | .nav-group-task { 141 | font-size: 0.9em; 142 | list-style-type: none; 143 | white-space: nowrap; } 144 | .nav-group-task a { 145 | color: #888; } 146 | 147 | .main-content { 148 | background-color: #fff; 149 | border: 1px solid #e2e2e2; 150 | margin-left: 246px; 151 | position: absolute; 152 | overflow: hidden; 153 | padding-bottom: 20px; 154 | top: 70px; 155 | width: 734px; } 156 | .main-content p, .main-content a, .main-content code, .main-content em, .main-content ul, .main-content table, .main-content blockquote { 157 | margin-bottom: 1em; } 158 | .main-content p { 159 | line-height: 1.8em; } 160 | .main-content section .section:first-child { 161 | margin-top: 0; 162 | padding-top: 0; } 163 | .main-content section .task-group-section .task-group:first-of-type { 164 | padding-top: 10px; } 165 | .main-content section .task-group-section .task-group:first-of-type .section-name { 166 | padding-top: 15px; } 167 | .main-content section .heading:before { 168 | content: ""; 169 | display: block; 170 | padding-top: 70px; 171 | margin: -70px 0 0; } 172 | 173 | .section { 174 | padding: 0 25px; } 175 | 176 | .highlight { 177 | background-color: #eee; 178 | padding: 10px 12px; 179 | border: 1px solid #e2e2e2; 180 | border-radius: 4px; 181 | overflow-x: auto; } 182 | 183 | .declaration .highlight { 184 | overflow-x: initial; 185 | padding: 0 40px 40px 0; 186 | margin-bottom: -25px; 187 | background-color: transparent; 188 | border: none; } 189 | 190 | .section-name { 191 | margin: 0; 192 | margin-left: 18px; } 193 | 194 | .task-group-section { 195 | padding-left: 6px; 196 | border-top: 1px solid #e2e2e2; } 197 | 198 | .task-group { 199 | padding-top: 0px; } 200 | 201 | .task-name-container a[name]:before { 202 | content: ""; 203 | display: block; 204 | padding-top: 70px; 205 | margin: -70px 0 0; } 206 | 207 | .item { 208 | padding-top: 8px; 209 | width: 100%; 210 | list-style-type: none; } 211 | .item a[name]:before { 212 | content: ""; 213 | display: block; 214 | padding-top: 70px; 215 | margin: -70px 0 0; } 216 | .item code { 217 | background-color: transparent; 218 | padding: 0; } 219 | .item .token, .item .direct-link { 220 | padding-left: 3px; 221 | margin-left: 15px; 222 | font-size: 11.9px; } 223 | .item .discouraged { 224 | text-decoration: line-through; } 225 | .item .declaration-note { 226 | font-size: .85em; 227 | color: gray; 228 | font-style: italic; } 229 | 230 | .pointer-container { 231 | border-bottom: 1px solid #e2e2e2; 232 | left: -23px; 233 | padding-bottom: 13px; 234 | position: relative; 235 | width: 110%; } 236 | 237 | .pointer { 238 | background: #f9f9f9; 239 | border-left: 1px solid #e2e2e2; 240 | border-top: 1px solid #e2e2e2; 241 | height: 12px; 242 | left: 21px; 243 | top: -7px; 244 | -webkit-transform: rotate(45deg); 245 | -moz-transform: rotate(45deg); 246 | -o-transform: rotate(45deg); 247 | transform: rotate(45deg); 248 | position: absolute; 249 | width: 12px; } 250 | 251 | .height-container { 252 | display: none; 253 | left: -25px; 254 | padding: 0 25px; 255 | position: relative; 256 | width: 100%; 257 | overflow: hidden; } 258 | .height-container .section { 259 | background: #f9f9f9; 260 | border-bottom: 1px solid #e2e2e2; 261 | left: -25px; 262 | position: relative; 263 | width: 100%; 264 | padding-top: 10px; 265 | padding-bottom: 5px; } 266 | 267 | .aside, .language { 268 | padding: 6px 12px; 269 | margin: 12px 0; 270 | border-left: 5px solid #dddddd; 271 | overflow-y: hidden; } 272 | .aside .aside-title, .language .aside-title { 273 | font-size: 9px; 274 | letter-spacing: 2px; 275 | text-transform: uppercase; 276 | padding-bottom: 0; 277 | margin: 0; 278 | color: #aaa; 279 | -webkit-user-select: none; } 280 | .aside p:last-child, .language p:last-child { 281 | margin-bottom: 0; } 282 | 283 | .language { 284 | border-left: 5px solid #cde9f4; } 285 | .language .aside-title { 286 | color: #4b8afb; } 287 | 288 | .aside-warning, .aside-deprecated, .aside-unavailable { 289 | border-left: 5px solid #ff6666; } 290 | .aside-warning .aside-title, .aside-deprecated .aside-title, .aside-unavailable .aside-title { 291 | color: #ff0000; } 292 | 293 | .graybox { 294 | border-collapse: collapse; 295 | width: 100%; } 296 | .graybox p { 297 | margin: 0; 298 | word-break: break-word; 299 | min-width: 50px; } 300 | .graybox td { 301 | border: 1px solid #e2e2e2; 302 | padding: 5px 25px 5px 10px; 303 | vertical-align: middle; } 304 | .graybox tr td:first-of-type { 305 | text-align: right; 306 | padding: 7px; 307 | vertical-align: top; 308 | word-break: normal; 309 | width: 40px; } 310 | 311 | .slightly-smaller { 312 | font-size: 0.9em; } 313 | 314 | #footer { 315 | position: relative; 316 | top: 10px; 317 | bottom: 0px; 318 | margin-left: 25px; } 319 | #footer p { 320 | margin: 0; 321 | color: #aaa; 322 | font-size: 0.8em; } 323 | 324 | html.dash header, html.dash #breadcrumbs, html.dash .sidebar { 325 | display: none; } 326 | html.dash .main-content { 327 | width: 980px; 328 | margin-left: 0; 329 | border: none; 330 | width: 100%; 331 | top: 0; 332 | padding-bottom: 0; } 333 | html.dash .height-container { 334 | display: block; } 335 | html.dash .item .token { 336 | margin-left: 0; } 337 | html.dash .content-wrapper { 338 | width: auto; } 339 | html.dash #footer { 340 | position: static; } 341 | -------------------------------------------------------------------------------- /docs/docsets/tulipindicators.docset/Contents/Resources/Documents/img/carat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yageek/tulipindicators-swift/4e9d3ab54ddad790d47e47254e80aa0c88954716/docs/docsets/tulipindicators.docset/Contents/Resources/Documents/img/carat.png -------------------------------------------------------------------------------- /docs/docsets/tulipindicators.docset/Contents/Resources/Documents/img/dash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yageek/tulipindicators-swift/4e9d3ab54ddad790d47e47254e80aa0c88954716/docs/docsets/tulipindicators.docset/Contents/Resources/Documents/img/dash.png -------------------------------------------------------------------------------- /docs/docsets/tulipindicators.docset/Contents/Resources/Documents/img/gh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yageek/tulipindicators-swift/4e9d3ab54ddad790d47e47254e80aa0c88954716/docs/docsets/tulipindicators.docset/Contents/Resources/Documents/img/gh.png -------------------------------------------------------------------------------- /docs/docsets/tulipindicators.docset/Contents/Resources/Documents/img/spinner.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yageek/tulipindicators-swift/4e9d3ab54ddad790d47e47254e80aa0c88954716/docs/docsets/tulipindicators.docset/Contents/Resources/Documents/img/spinner.gif -------------------------------------------------------------------------------- /docs/docsets/tulipindicators.docset/Contents/Resources/Documents/js/jazzy.js: -------------------------------------------------------------------------------- 1 | window.jazzy = {'docset': false} 2 | if (typeof window.dash != 'undefined') { 3 | document.documentElement.className += ' dash' 4 | window.jazzy.docset = true 5 | } 6 | if (navigator.userAgent.match(/xcode/i)) { 7 | document.documentElement.className += ' xcode' 8 | window.jazzy.docset = true 9 | } 10 | 11 | // On doc load, toggle the URL hash discussion if present 12 | $(document).ready(function() { 13 | if (!window.jazzy.docset) { 14 | var linkToHash = $('a[href="' + window.location.hash +'"]'); 15 | linkToHash.trigger("click"); 16 | } 17 | }); 18 | 19 | // On token click, toggle its discussion and animate token.marginLeft 20 | $(".token").click(function(event) { 21 | if (window.jazzy.docset) { 22 | return; 23 | } 24 | var link = $(this); 25 | var animationDuration = 300; 26 | var tokenOffset = "15px"; 27 | var original = link.css('marginLeft') == tokenOffset; 28 | link.animate({'margin-left':original ? "0px" : tokenOffset}, animationDuration); 29 | $content = link.parent().parent().next(); 30 | $content.slideToggle(animationDuration); 31 | 32 | // Keeps the document from jumping to the hash. 33 | var href = $(this).attr('href'); 34 | if (history.pushState) { 35 | history.pushState({}, '', href); 36 | } else { 37 | location.hash = href; 38 | } 39 | event.preventDefault(); 40 | }); 41 | -------------------------------------------------------------------------------- /docs/docsets/tulipindicators.docset/Contents/Resources/Documents/js/jazzy.search.js: -------------------------------------------------------------------------------- 1 | $(function(){ 2 | var $typeahead = $('[data-typeahead]'); 3 | var $form = $typeahead.parents('form'); 4 | var searchURL = $form.attr('action'); 5 | 6 | function displayTemplate(result) { 7 | return result.name; 8 | } 9 | 10 | function suggestionTemplate(result) { 11 | var t = '
'; 12 | t += '' + result.name + ''; 13 | if (result.parent_name) { 14 | t += '' + result.parent_name + ''; 15 | } 16 | t += '
'; 17 | return t; 18 | } 19 | 20 | $typeahead.one('focus', function() { 21 | $form.addClass('loading'); 22 | 23 | $.getJSON(searchURL).then(function(searchData) { 24 | const searchIndex = lunr(function() { 25 | this.ref('url'); 26 | this.field('name'); 27 | this.field('abstract'); 28 | for (const [url, doc] of Object.entries(searchData)) { 29 | this.add({url: url, name: doc.name, abstract: doc.abstract}); 30 | } 31 | }); 32 | 33 | $typeahead.typeahead( 34 | { 35 | highlight: true, 36 | minLength: 3, 37 | autoselect: true 38 | }, 39 | { 40 | limit: 10, 41 | display: displayTemplate, 42 | templates: { suggestion: suggestionTemplate }, 43 | source: function(query, sync) { 44 | const lcSearch = query.toLowerCase(); 45 | const results = searchIndex.query(function(q) { 46 | q.term(lcSearch, { boost: 100 }); 47 | q.term(lcSearch, { 48 | boost: 10, 49 | wildcard: lunr.Query.wildcard.TRAILING 50 | }); 51 | }).map(function(result) { 52 | var doc = searchData[result.ref]; 53 | doc.url = result.ref; 54 | return doc; 55 | }); 56 | sync(results); 57 | } 58 | } 59 | ); 60 | $form.removeClass('loading'); 61 | $typeahead.trigger('focus'); 62 | }); 63 | }); 64 | 65 | var baseURL = searchURL.slice(0, -"search.json".length); 66 | 67 | $typeahead.on('typeahead:select', function(e, result) { 68 | window.location = baseURL + result.url; 69 | }); 70 | }); 71 | -------------------------------------------------------------------------------- /docs/docsets/tulipindicators.docset/Contents/Resources/Documents/search.json: -------------------------------------------------------------------------------- 1 | {"Structs/Tulip.html#/s:15tulipindicators5TulipV14call_indicator4name6inputs7optionsSi_SaySdGtSS_A2HtFZ":{"name":"call_indicator(name:inputs:options:)","abstract":"

Call the tulip library directly. See the tulip indicator list","parent_name":"Tulip"},"Structs/Tulip.html#/s:15tulipindicators5TulipV14indicator_info4nameAA13IndicatorInfoVSS_tFZ":{"name":"indicator_info(name:)","abstract":"

Get the information about one indicator

","parent_name":"Tulip"},"Structs/IndicatorInfo.html#/s:15tulipindicators13IndicatorInfoV4nameSSvp":{"name":"name","abstract":"

The name of the indicator

","parent_name":"IndicatorInfo"},"Structs/IndicatorInfo.html#/s:15tulipindicators13IndicatorInfoV8fullNameSSvp":{"name":"fullName","abstract":"

A desriptive name of the indicator

","parent_name":"IndicatorInfo"},"Structs/IndicatorInfo.html#/s:15tulipindicators13IndicatorInfoV6inputsSaySSGvp":{"name":"inputs","abstract":"

The names of the required inputs

","parent_name":"IndicatorInfo"},"Structs/IndicatorInfo.html#/s:15tulipindicators13IndicatorInfoV7optionsSaySSGvp":{"name":"options","abstract":"

The names of the required options

","parent_name":"IndicatorInfo"},"Structs/IndicatorInfo.html#/s:15tulipindicators13IndicatorInfoV7outputsSaySSGvp":{"name":"outputs","abstract":"

The names of the geneated outputs

","parent_name":"IndicatorInfo"},"Structs/IndicatorInfo.html#/s:15tulipindicators13IndicatorInfoV4kindAA0B4KindOvp":{"name":"kind","abstract":"

The kind of the indicator

","parent_name":"IndicatorInfo"},"Structs/StochResult.html#/s:15tulipindicators11StochResultV1KSaySdGvp":{"name":"K","abstract":"

The stoch K values

","parent_name":"StochResult"},"Structs/StochResult.html#/s:15tulipindicators11StochResultV1DSaySdGvp":{"name":"D","abstract":"

The stoch D values

","parent_name":"StochResult"},"Structs/MSWResult.html#/s:15tulipindicators9MSWResultV4sineSaySdGvp":{"name":"sine","abstract":"

The sine values

","parent_name":"MSWResult"},"Structs/MSWResult.html#/s:15tulipindicators9MSWResultV4leadSaySdGvp":{"name":"lead","abstract":"

The lead values

","parent_name":"MSWResult"},"Structs/MACDResult.html#/s:15tulipindicators10MACDResultV4macdSaySdGvp":{"name":"macd","abstract":"

The macd values

","parent_name":"MACDResult"},"Structs/MACDResult.html#/s:15tulipindicators10MACDResultV6signalSaySdGvp":{"name":"signal","abstract":"

The signal values

","parent_name":"MACDResult"},"Structs/MACDResult.html#/s:15tulipindicators10MACDResultV9histogramSaySdGvp":{"name":"histogram","abstract":"

The histogram values

","parent_name":"MACDResult"},"Structs/FisherResult.html#/s:15tulipindicators12FisherResultV6fisherSaySdGvp":{"name":"fisher","abstract":"

The fisher values

","parent_name":"FisherResult"},"Structs/FisherResult.html#/s:15tulipindicators12FisherResultV6signalSaySdGvp":{"name":"signal","abstract":"

The signal values

","parent_name":"FisherResult"},"Structs/Direction.html#/s:15tulipindicators9DirectionV4plusSaySdGvp":{"name":"plus","abstract":"

The plus values

","parent_name":"Direction"},"Structs/Direction.html#/s:15tulipindicators9DirectionV5minusSaySdGvp":{"name":"minus","abstract":"

The minus values

","parent_name":"Direction"},"Structs/ArroonResult.html#/s:15tulipindicators12ArroonResultV4downSaySdGvp":{"name":"down","abstract":"

The down values

","parent_name":"ArroonResult"},"Structs/ArroonResult.html#/s:15tulipindicators12ArroonResultV2upSaySdGvp":{"name":"up","abstract":"

The up values

","parent_name":"ArroonResult"},"Structs/BBandResult.html#/s:15tulipindicators11BBandResultV5lowerSaySdGvp":{"name":"lower","abstract":"

The lower values

","parent_name":"BBandResult"},"Structs/BBandResult.html#/s:15tulipindicators11BBandResultV6middleSaySdGvp":{"name":"middle","abstract":"

The middle values

","parent_name":"BBandResult"},"Structs/BBandResult.html#/s:15tulipindicators11BBandResultV5upperSaySdGvp":{"name":"upper","abstract":"

The upper values

","parent_name":"BBandResult"},"Structs/BBandResult.html":{"name":"BBandResult","abstract":"

Struct holding the bbands result

"},"Structs/ArroonResult.html":{"name":"ArroonResult","abstract":"

Struct holding arroon result

"},"Structs/Direction.html":{"name":"Direction","abstract":"

Struct holding di and dm results

"},"Structs/FisherResult.html":{"name":"FisherResult","abstract":"

Struct holding fischer result

"},"Structs/MACDResult.html":{"name":"MACDResult","abstract":"

Struct holding the result of macd.

"},"Structs/MSWResult.html":{"name":"MSWResult","abstract":"

Struct holding msw result

"},"Structs/StochResult.html":{"name":"StochResult","abstract":"

Struct holding stoch result

"},"Structs/IndicatorInfo.html":{"name":"IndicatorInfo","abstract":"

A struct holding the information about an indicator

"},"Structs/Tulip.html":{"name":"Tulip","abstract":"

Low level struct to be able to call tulip library directly

"},"Protocols/Quotable.html#/s:15tulipindicators8QuotableP4highSdvp":{"name":"high","abstract":"

The high value

","parent_name":"Quotable"},"Protocols/Quotable.html#/s:15tulipindicators8QuotableP3lowSdvp":{"name":"low","abstract":"

The low value

","parent_name":"Quotable"},"Protocols/Quotable.html#/s:15tulipindicators8QuotableP4openSdvp":{"name":"open","abstract":"

The open value

","parent_name":"Quotable"},"Protocols/Quotable.html#/s:15tulipindicators8QuotableP5closeSdvp":{"name":"close","abstract":"

The close value

","parent_name":"Quotable"},"Protocols/Quotable.html#/s:15tulipindicators8QuotableP6volumeSivp":{"name":"volume","abstract":"

The volume value

","parent_name":"Quotable"},"Protocols/Quotable.html":{"name":"Quotable","abstract":"

An element representing a Quote

"},"Functions.html#/s:15tulipindicators3sma_6periodSi_SaySdGtAD_SitF":{"name":"sma(_:period:)","abstract":"

Simple moving average

"},"Functions.html#/s:15tulipindicators3wma_6periodSi_SaySdGtAD_SitF":{"name":"wma(_:period:)","abstract":"

Weighted moving average

"},"Functions.html#/s:15tulipindicators3ema_6periodSi_SaySdGtAD_SitF":{"name":"ema(_:period:)","abstract":"

Exponential moving average

"},"Functions.html#/s:15tulipindicators4dema_6periodSi_SaySdGtAD_SitF":{"name":"dema(_:period:)","abstract":"

Double exponential moving average

"},"Functions.html#/s:15tulipindicators4tema_6periodSi_SaySdGtAD_SitF":{"name":"tema(_:period:)","abstract":"

Triple exponential moving average

"},"Functions.html#/s:15tulipindicators5trima_6periodSi_SaySdGtAD_SitF":{"name":"trima(_:period:)","abstract":"

Triangular Moving Average

"},"Functions.html#/s:15tulipindicators4kama_6periodSi_SaySdGtAD_SitF":{"name":"kama(_:period:)","abstract":"

Kaufman Adaptive Moving Average"},"Functions.html#/s:15tulipindicators6bbands_6period6stddevSi_AA11BBandResultVtSaySdG_SiSdtF":{"name":"bbands(_:period:stddev:)","abstract":"

Compute the values of the three components"},"Functions.html#/s:15tulipindicators3absySi_SaySdGtACF":{"name":"abs(_:)","abstract":"

Vector Absolute Value

"},"Functions.html#/s:15tulipindicators4acosySi_SaySdGtACF":{"name":"acos(_:)"},"Functions.html#/s:15tulipindicators2adySi_SaySdGtSayxGAA8QuotableRzlF":{"name":"ad(_:)","abstract":"

Accumulation/Distribution Line

"},"Functions.html#/s:15tulipindicators3add1a1bSi_SaySdGtAE_AEtF":{"name":"add(a:b:)","abstract":"

Vector addition

"},"Functions.html#/s:15tulipindicators5adosc_12short_period05long_D0Si_SaySdGtSayxG_S2dtAA8QuotableRzlF":{"name":"adosc(_:short_period:long_period:)","abstract":"

Accumulation/Distribution Oscillator

"},"Functions.html#/s:15tulipindicators3adx_6periodSi_SaySdGtSayxG_SitAA8QuotableRzlF":{"name":"adx(_:period:)","abstract":"

Average Directional Movement Index

"},"Functions.html#/s:15tulipindicators4adxr_6periodSi_SaySdGtSayxG_SitAA8QuotableRzlF":{"name":"adxr(_:period:)","abstract":"

Average Directional Movement Rating

"},"Functions.html#/s:15tulipindicators2aoySi_SaySdGtSayxGAA8QuotableRzlF":{"name":"ao(_:)","abstract":"

Aweosome Oscillator

"},"Functions.html#/s:15tulipindicators3apoySi_SaySdGtACF":{"name":"apo(_:)","abstract":"

Absolute Price Oscillator

"},"Functions.html#/s:15tulipindicators6arroon_6periodSi_AA12ArroonResultVtSayxG_SitAA8QuotableRzlF":{"name":"arroon(_:period:)","abstract":"

Aroon

"},"Functions.html#/s:15tulipindicators8aroonosc_6periodSi_SaySdGtSayxG_SitAA8QuotableRzlF":{"name":"aroonosc(_:period:)","abstract":"

Aroon Oscillator

"},"Functions.html#/s:15tulipindicators4asinySi_SaySdGtACF":{"name":"asin(_:)","abstract":"

Vector Arcsine

"},"Functions.html#/s:15tulipindicators4atanySi_SaySdGtACF":{"name":"atan(_:)","abstract":"

Vector Arctangent

"},"Functions.html#/s:15tulipindicators3atr_6periodSi_SaySdGtSayxG_SitAA8QuotableRzlF":{"name":"atr(_:period:)","abstract":"

Average True Range

"},"Functions.html#/s:15tulipindicators8avgpriceySi_SaySdGtSayxGAA8QuotableRzlF":{"name":"avgprice(_:)","abstract":"

Average Price

"},"Functions.html#/s:15tulipindicators3bopySi_SaySdGtSayxGAA8QuotableRzlF":{"name":"bop(_:)","abstract":"

Balance of Power

"},"Functions.html#/s:15tulipindicators3cci_6periodSi_SaySdGtSayxG_SitAA8QuotableRzlF":{"name":"cci(_:period:)","abstract":"

Commodity Channel Index

"},"Functions.html#/s:15tulipindicators4ceilySi_SaySdGtACF":{"name":"ceil(_:)","abstract":"

Vector Ceiling

"},"Functions.html#/s:15tulipindicators3cmo_6periodSi_SaySdGtAD_SitF":{"name":"cmo(_:period:)","abstract":"

Chande Momentum Oscillator

"},"Functions.html#/s:15tulipindicators3cosySi_SaySdGtACF":{"name":"cos(_:)","abstract":"

Vector Cosine

"},"Functions.html#/s:15tulipindicators4coshySi_SaySdGtACF":{"name":"cosh(_:)","abstract":"

Vector Hyperbolic Cosine

"},"Functions.html#/s:15tulipindicators8crossany1a1bSi_SaySdGtAE_AEtF":{"name":"crossany(a:b:)","abstract":"

Crossany

"},"Functions.html#/s:15tulipindicators9crossover1a1bSi_SaySdGtAE_AEtF":{"name":"crossover(a:b:)","abstract":"

Crossover

"},"Functions.html#/s:15tulipindicators3cvi_6periodSi_SaySdGtSayxG_SitAA8QuotableRzlF":{"name":"cvi(_:period:)","abstract":"

Chaikins Volatility

"},"Functions.html#/s:15tulipindicators5decay_6periodSi_SaySdGtAD_SitF":{"name":"decay(_:period:)","abstract":"

Linear Decay

"},"Functions.html#/s:15tulipindicators2di_6periodSi_AA9DirectionVtSayxG_SitAA8QuotableRzlF":{"name":"di(_:period:)","abstract":"

Directional indicator

"},"Functions.html#/s:15tulipindicators3divySi_SaySdGtACF":{"name":"div(_:)","abstract":"

Vector division

"},"Functions.html#/s:15tulipindicators2dm_6periodSi_AA9DirectionVtSayxG_SitAA8QuotableRzlF":{"name":"dm(_:period:)","abstract":"

Directional Movement

"},"Functions.html#/s:15tulipindicators3dpo_6periodSi_SaySdGtAD_SitF":{"name":"dpo(_:period:)","abstract":"

Detrended Price Oscillator

"},"Functions.html#/s:15tulipindicators2dx_6periodSi_SaySdGtSayxG_SitAA8QuotableRzlF":{"name":"dx(_:period:)","abstract":"

Directional Movement Index

"},"Functions.html#/s:15tulipindicators6edecay_6periodSi_SaySdGtAD_SitF":{"name":"edecay(_:period:)","abstract":"

Exponential Decay

"},"Functions.html#/s:15tulipindicators3emvySi_SaySdGtSayxGAA8QuotableRzlF":{"name":"emv(_:)","abstract":"

Ease of Movement

"},"Functions.html#/s:15tulipindicators3expySi_SaySdGtACF":{"name":"exp(_:)","abstract":"

Vector Exponential

"},"Functions.html#/s:15tulipindicators6fisher_6periodSi_AA12FisherResultVtSayxG_SitAA8QuotableRzlF":{"name":"fisher(_:period:)","abstract":"

Fisher Transform

"},"Functions.html#/s:15tulipindicators5floorySi_SaySdGtACF":{"name":"floor(_:)","abstract":"

Vector Floor

"},"Functions.html#/s:15tulipindicators4fosc_6periodSi_SaySdGtAD_SitF":{"name":"fosc(_:period:)","abstract":"

Forecast Oscillator

"},"Functions.html#/s:15tulipindicators3hma_6periodSi_SaySdGtAD_SitF":{"name":"hma(_:period:)","abstract":"

Hull Moving Average

"},"Functions.html#/s:15tulipindicators3kvo_5short4longSi_SaySdGtSayxG_S2itAA8QuotableRzlF":{"name":"kvo(_:short:long:)","abstract":"

Klinger Volume Oscillator

"},"Functions.html#/s:15tulipindicators3lag_6periodSi_SaySdGtAD_SitF":{"name":"lag(_:period:)","abstract":"

Lag

"},"Functions.html#/s:15tulipindicators6linreg_6periodSi_SaySdGtAD_SitF":{"name":"linreg(_:period:)","abstract":"

Linear Regression

"},"Functions.html#/s:15tulipindicators15linregintercept_6periodSi_SaySdGtAD_SitF":{"name":"linregintercept(_:period:)","abstract":"

Linear Regression Intercept

"},"Functions.html#/s:15tulipindicators11linregslope_6periodSi_SaySdGtAD_SitF":{"name":"linregslope(_:period:)","abstract":"

Linear Regression Slope

"},"Functions.html#/s:15tulipindicators2lnySi_SaySdGtACF":{"name":"ln(_:)","abstract":"

Vector Natural Log

"},"Functions.html#/s:15tulipindicators5log10ySi_SaySdGtACF":{"name":"log10(_:)","abstract":"

Vector Base-10 Log

"},"Functions.html#/s:15tulipindicators4macd_5short4long6signalSi_AA10MACDResultVtSaySdG_S3itF":{"name":"macd(_:short:long:signal:)","abstract":"

Moving Average Convergence/Divergence

"},"Functions.html#/s:15tulipindicators8marketfiySi_SaySdGtSayxGAA8QuotableRzlF":{"name":"marketfi(_:)","abstract":"

Market Facilitation Index

"},"Functions.html#/s:15tulipindicators4mass_6periodSi_SaySdGtSayxG_SitAA8QuotableRzlF":{"name":"mass(_:period:)","abstract":"

Mass Index

"},"Functions.html#/s:15tulipindicators3max_6periodSi_SaySdGtAD_SitF":{"name":"max(_:period:)","abstract":"

Maximum In Period

"},"Functions.html#/s:15tulipindicators2md_6periodSi_SaySdGtAD_SitF":{"name":"md(_:period:)","abstract":"

Mean Deviation Over Period

"},"Functions.html#/s:15tulipindicators8medpriceySi_SaySdGtSayxGAA8QuotableRzlF":{"name":"medprice(_:)","abstract":"

Median Price

"},"Functions.html#/s:15tulipindicators3mfi_6periodSi_SaySdGtSayxG_SitAA8QuotableRzlF":{"name":"mfi(_:period:)","abstract":"

Money Flow Index

"},"Functions.html#/s:15tulipindicators3mom_6periodSi_SaySdGtAD_SitF":{"name":"mom(_:period:)","abstract":"

Momentum

"},"Functions.html#/s:15tulipindicators3msw_6periodSi_AA9MSWResultVtSaySdG_SitF":{"name":"msw(_:period:)","abstract":"

Mesa Sine Wave

"},"Functions.html#/s:15tulipindicators3mulySi_SaySdGtACF":{"name":"mul(_:)","abstract":"

Vector Multiplication

"},"Functions.html#/s:15tulipindicators4natr_6periodSi_SaySdGtSayxG_SitAA8QuotableRzlF":{"name":"natr(_:period:)","abstract":"

Normalized Average True Range

"},"Functions.html#/s:15tulipindicators3nvi_6periodSi_SaySdGtSayxG_SitAA8QuotableRzlF":{"name":"nvi(_:period:)","abstract":"

Normalized Average True Range

"},"Functions.html#/s:15tulipindicators3obvySi_SaySdGtSayxGAA8QuotableRzlF":{"name":"obv(_:)","abstract":"

On Balance Volume

"},"Functions.html#/s:15tulipindicators3ppo_5short4longSi_SaySdGtAE_S2itF":{"name":"ppo(_:short:long:)","abstract":"

Percentage Price Oscillator

"},"Functions.html#/s:15tulipindicators4psar_12acceleration0C3MaxSi_SaySdGtSayxG_S2dtAA8QuotableRzlF":{"name":"psar(_:acceleration:accelerationMax:)","abstract":"

Parabolic SAR

"},"Functions.html#/s:15tulipindicators3pviySi_SaySdGtSayxGAA8QuotableRzlF":{"name":"pvi(_:)","abstract":"

Positive Volume Index

"},"Functions.html#/s:15tulipindicators6qstick_6periodSi_SaySdGtSayxG_SitAA8QuotableRzlF":{"name":"qstick(_:period:)","abstract":"

Qstick

"},"Functions.html#/s:15tulipindicators3roc_6periodSi_SaySdGtAD_SitF":{"name":"roc(_:period:)","abstract":"

Rate of Change

"},"Functions.html#/s:15tulipindicators4rocr_6periodSi_SaySdGtAD_SitF":{"name":"rocr(_:period:)","abstract":"

Rate of Change Ratio

"},"Functions.html#/s:15tulipindicators5roundySi_SaySdGtACF":{"name":"round(_:)","abstract":"

Vector Round

"},"Functions.html#/s:15tulipindicators3rsi_6periodSi_SaySdGtAD_SitF":{"name":"rsi(_:period:)","abstract":"

Relative Strength Index

"},"Functions.html#/s:15tulipindicators3sinySi_SaySdGtACF":{"name":"sin(_:)","abstract":"

Vector Sine

"},"Functions.html#/s:15tulipindicators4sinhySi_SaySdGtACF":{"name":"sinh(_:)","abstract":"

Vector Hyperbolic Sine

"},"Functions.html#/s:15tulipindicators4sqrtySi_SaySdGtACF":{"name":"sqrt(_:)","abstract":"

Vector Sqrt

"},"Functions.html#/s:15tulipindicators6stddev_6periodSi_SaySdGtAD_SitF":{"name":"stddev(_:period:)","abstract":"

Standard Deviation Over Period

"},"Functions.html#/s:15tulipindicators6stderr_6periodSi_SaySdGtAD_SitF":{"name":"stderr(_:period:)","abstract":"

Standard Error Over Period

"},"Functions.html#/s:15tulipindicators5stoch_7kPeriod08kSlowingC001dC0Si_AA11StochResultVtSayxG_S3itAA8QuotableRzlF":{"name":"stoch(_:kPeriod:kSlowingPeriod:dPeriod:)","abstract":"

Stochastic Oscillator

"},"Functions.html#/s:15tulipindicators8stochrsi_6periodSi_SaySdGtAD_SitF":{"name":"stochrsi(_:period:)","abstract":"

Stochastic RSI

"},"Functions.html#/s:15tulipindicators3sub1a1bSi_SaySdGtAE_AEtF":{"name":"sub(a:b:)","abstract":"

Vector Substraction

"},"Functions.html#/s:15tulipindicators3sum_6periodSi_SaySdGtAD_SitF":{"name":"sum(_:period:)","abstract":"

Sum Over Period

"},"Functions.html#/s:15tulipindicators3tanySi_SaySdGtACF":{"name":"tan(_:)","abstract":"

Vector Tangent

"},"Functions.html#/s:15tulipindicators4tanhySi_SaySdGtACF":{"name":"tanh(_:)","abstract":"

Vector Hyperbolic Tangent

"},"Functions.html#/s:15tulipindicators5todegySi_SaySdGtACF":{"name":"todeg(_:)","abstract":"

Vector Degree Conversion

"},"Functions.html#/s:15tulipindicators5toradySi_SaySdGtACF":{"name":"torad(_:)","abstract":"

Vector Radian Conversion

"},"Functions.html#/s:15tulipindicators2trySi_SaySdGtSayxGAA8QuotableRzlF":{"name":"tr(_:)","abstract":"

True Range

"},"Functions.html#/s:15tulipindicators4trix_6periodSi_SaySdGtAD_SitF":{"name":"trix(_:period:)","abstract":"

Trix

"},"Functions.html#/s:15tulipindicators5truncySi_SaySdGtACF":{"name":"trunc(_:)","abstract":"

Vector Truncate

"},"Functions.html#/s:15tulipindicators3tsf_6periodSi_SaySdGtAD_SitF":{"name":"tsf(_:period:)","abstract":"

Time Series Forecast

"},"Functions.html#/s:15tulipindicators8typpriceySi_SaySdGtSayxGAA8QuotableRzlF":{"name":"typprice(_:)","abstract":"

Typical Price

"},"Functions.html#/s:15tulipindicators6ultosc_5short6medium4longSi_SaySdGtSayxG_S3itAA8QuotableRzlF":{"name":"ultosc(_:short:medium:long:)","abstract":"

Ultimate Oscillator

"},"Functions.html#/s:15tulipindicators8variance_6periodSi_SaySdGtAD_SitF":{"name":"variance(_:period:)","abstract":"

Variance Over Period

"},"Functions.html#/s:15tulipindicators3vhf_6periodSi_SaySdGtAD_SitF":{"name":"vhf(_:period:)","abstract":"

Vertical Horizontal Filter

"},"Functions.html#/s:15tulipindicators5vidya_5short4long5alphaSi_SaySdGtAF_S2iSdtF":{"name":"vidya(_:short:long:alpha:)","abstract":"

Variable Index Dynamic Average

"},"Functions.html#/s:15tulipindicators10volatility_6periodSi_SaySdGtAD_SitF":{"name":"volatility(_:period:)","abstract":"

Annualized Historical Volatility

"},"Functions.html#/s:15tulipindicators4vosc_5short4longSi_SaySdGtSayxG_S2itAA8QuotableRzlF":{"name":"vosc(_:short:long:)","abstract":"

Volume Oscillator

"},"Functions.html#/s:15tulipindicators4vwma_6periodSi_SaySdGtSayxG_SitAA8QuotableRzlF":{"name":"vwma(_:period:)","abstract":"

Volume Weighted Moving Average

"},"Functions.html#/s:15tulipindicators3wadySi_SaySdGtSayxGAA8QuotableRzlF":{"name":"wad(_:)","abstract":"

Williams Accumulation/Distribution

"},"Functions.html#/s:15tulipindicators7wcpriceySi_SaySdGtSayxGAA8QuotableRzlF":{"name":"wcprice(_:)","abstract":"

Weighted Close Price

"},"Functions.html#/s:15tulipindicators7wilders_6periodSi_SaySdGtAD_SitF":{"name":"wilders(_:period:)","abstract":"

Wilders Smoothing

"},"Functions.html#/s:15tulipindicators5willr_6periodSi_SaySdGtSayxG_SitAA8QuotableRzlF":{"name":"willr(_:period:)","abstract":"

Weighted Close Price

"},"Functions.html#/s:15tulipindicators5zlema_6periodSi_SaySdGtAD_SitF":{"name":"zlema(_:period:)","abstract":"

Zero-Lag Exponential Moving Average

"},"Enums/IndicatorKind.html#/s:15tulipindicators13IndicatorKindO7overlayyA2CmF":{"name":"overlay","abstract":"

The indicator is an overlay

","parent_name":"IndicatorKind"},"Enums/IndicatorKind.html#/s:15tulipindicators13IndicatorKindO4mathyA2CmF":{"name":"math","abstract":"

The indicator is simple math

","parent_name":"IndicatorKind"},"Enums/IndicatorKind.html#/s:15tulipindicators13IndicatorKindO6simpleyA2CmF":{"name":"simple","abstract":"

The indicator is a simple indicator

","parent_name":"IndicatorKind"},"Enums/IndicatorKind.html#/s:15tulipindicators13IndicatorKindO11comparativeyA2CmF":{"name":"comparative","abstract":"

The indicator is a comparative indicator

","parent_name":"IndicatorKind"},"Enums/IndicatorKind.html#/s:SY8rawValue03RawB0Qzvp":{"name":"rawValue","parent_name":"IndicatorKind"},"Enums/IndicatorKind.html#/s:SY8rawValuexSg03RawB0Qz_tcfc":{"name":"init(rawValue:)","parent_name":"IndicatorKind"},"Enums/IndicatorKind.html":{"name":"IndicatorKind","abstract":"

The kind of the indicator

"},"Enums.html":{"name":"Enumerations","abstract":"

The following enumerations are available globally.

"},"Functions.html":{"name":"Functions","abstract":"

The following functions are available globally.

"},"Protocols.html":{"name":"Protocols","abstract":"

The following protocols are available globally.

"},"Structs.html":{"name":"Structures","abstract":"

The following structures are available globally.

"}} -------------------------------------------------------------------------------- /docs/docsets/tulipindicators.docset/Contents/Resources/Documents/undocumented.json: -------------------------------------------------------------------------------- 1 | { 2 | "warnings": [ 3 | 4 | ], 5 | "source_directory": "/Users/yheinric/dev/github/tulipindicators-swift" 6 | } -------------------------------------------------------------------------------- /docs/docsets/tulipindicators.docset/Contents/Resources/docSet.dsidx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yageek/tulipindicators-swift/4e9d3ab54ddad790d47e47254e80aa0c88954716/docs/docsets/tulipindicators.docset/Contents/Resources/docSet.dsidx -------------------------------------------------------------------------------- /docs/docsets/tulipindicators.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yageek/tulipindicators-swift/4e9d3ab54ddad790d47e47254e80aa0c88954716/docs/docsets/tulipindicators.tgz -------------------------------------------------------------------------------- /docs/docsets/tulipindicators.xml: -------------------------------------------------------------------------------- 1 | 1.0.0https://yageek.github.io/tulipindicators-swift/docsets/tulipindicators.tgz 2 | -------------------------------------------------------------------------------- /docs/img/carat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yageek/tulipindicators-swift/4e9d3ab54ddad790d47e47254e80aa0c88954716/docs/img/carat.png -------------------------------------------------------------------------------- /docs/img/dash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yageek/tulipindicators-swift/4e9d3ab54ddad790d47e47254e80aa0c88954716/docs/img/dash.png -------------------------------------------------------------------------------- /docs/img/gh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yageek/tulipindicators-swift/4e9d3ab54ddad790d47e47254e80aa0c88954716/docs/img/gh.png -------------------------------------------------------------------------------- /docs/img/spinner.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yageek/tulipindicators-swift/4e9d3ab54ddad790d47e47254e80aa0c88954716/docs/img/spinner.gif -------------------------------------------------------------------------------- /docs/js/jazzy.js: -------------------------------------------------------------------------------- 1 | window.jazzy = {'docset': false} 2 | if (typeof window.dash != 'undefined') { 3 | document.documentElement.className += ' dash' 4 | window.jazzy.docset = true 5 | } 6 | if (navigator.userAgent.match(/xcode/i)) { 7 | document.documentElement.className += ' xcode' 8 | window.jazzy.docset = true 9 | } 10 | 11 | // On doc load, toggle the URL hash discussion if present 12 | $(document).ready(function() { 13 | if (!window.jazzy.docset) { 14 | var linkToHash = $('a[href="' + window.location.hash +'"]'); 15 | linkToHash.trigger("click"); 16 | } 17 | }); 18 | 19 | // On token click, toggle its discussion and animate token.marginLeft 20 | $(".token").click(function(event) { 21 | if (window.jazzy.docset) { 22 | return; 23 | } 24 | var link = $(this); 25 | var animationDuration = 300; 26 | var tokenOffset = "15px"; 27 | var original = link.css('marginLeft') == tokenOffset; 28 | link.animate({'margin-left':original ? "0px" : tokenOffset}, animationDuration); 29 | $content = link.parent().parent().next(); 30 | $content.slideToggle(animationDuration); 31 | 32 | // Keeps the document from jumping to the hash. 33 | var href = $(this).attr('href'); 34 | if (history.pushState) { 35 | history.pushState({}, '', href); 36 | } else { 37 | location.hash = href; 38 | } 39 | event.preventDefault(); 40 | }); 41 | -------------------------------------------------------------------------------- /docs/js/jazzy.search.js: -------------------------------------------------------------------------------- 1 | $(function(){ 2 | var $typeahead = $('[data-typeahead]'); 3 | var $form = $typeahead.parents('form'); 4 | var searchURL = $form.attr('action'); 5 | 6 | function displayTemplate(result) { 7 | return result.name; 8 | } 9 | 10 | function suggestionTemplate(result) { 11 | var t = '
'; 12 | t += '' + result.name + ''; 13 | if (result.parent_name) { 14 | t += '' + result.parent_name + ''; 15 | } 16 | t += '
'; 17 | return t; 18 | } 19 | 20 | $typeahead.one('focus', function() { 21 | $form.addClass('loading'); 22 | 23 | $.getJSON(searchURL).then(function(searchData) { 24 | const searchIndex = lunr(function() { 25 | this.ref('url'); 26 | this.field('name'); 27 | this.field('abstract'); 28 | for (const [url, doc] of Object.entries(searchData)) { 29 | this.add({url: url, name: doc.name, abstract: doc.abstract}); 30 | } 31 | }); 32 | 33 | $typeahead.typeahead( 34 | { 35 | highlight: true, 36 | minLength: 3, 37 | autoselect: true 38 | }, 39 | { 40 | limit: 10, 41 | display: displayTemplate, 42 | templates: { suggestion: suggestionTemplate }, 43 | source: function(query, sync) { 44 | const lcSearch = query.toLowerCase(); 45 | const results = searchIndex.query(function(q) { 46 | q.term(lcSearch, { boost: 100 }); 47 | q.term(lcSearch, { 48 | boost: 10, 49 | wildcard: lunr.Query.wildcard.TRAILING 50 | }); 51 | }).map(function(result) { 52 | var doc = searchData[result.ref]; 53 | doc.url = result.ref; 54 | return doc; 55 | }); 56 | sync(results); 57 | } 58 | } 59 | ); 60 | $form.removeClass('loading'); 61 | $typeahead.trigger('focus'); 62 | }); 63 | }); 64 | 65 | var baseURL = searchURL.slice(0, -"search.json".length); 66 | 67 | $typeahead.on('typeahead:select', function(e, result) { 68 | window.location = baseURL + result.url; 69 | }); 70 | }); 71 | -------------------------------------------------------------------------------- /docs/search.json: -------------------------------------------------------------------------------- 1 | {"Structs/Tulip.html#/s:15tulipindicators5TulipV14call_indicator4name6inputs7optionsSi_SaySdGtSS_A2HtFZ":{"name":"call_indicator(name:inputs:options:)","abstract":"

Call the tulip library directly. See the tulip indicator list","parent_name":"Tulip"},"Structs/Tulip.html#/s:15tulipindicators5TulipV14indicator_info4nameAA13IndicatorInfoVSS_tFZ":{"name":"indicator_info(name:)","abstract":"

Get the information about one indicator

","parent_name":"Tulip"},"Structs/IndicatorInfo.html#/s:15tulipindicators13IndicatorInfoV4nameSSvp":{"name":"name","abstract":"

The name of the indicator

","parent_name":"IndicatorInfo"},"Structs/IndicatorInfo.html#/s:15tulipindicators13IndicatorInfoV8fullNameSSvp":{"name":"fullName","abstract":"

A desriptive name of the indicator

","parent_name":"IndicatorInfo"},"Structs/IndicatorInfo.html#/s:15tulipindicators13IndicatorInfoV6inputsSaySSGvp":{"name":"inputs","abstract":"

The names of the required inputs

","parent_name":"IndicatorInfo"},"Structs/IndicatorInfo.html#/s:15tulipindicators13IndicatorInfoV7optionsSaySSGvp":{"name":"options","abstract":"

The names of the required options

","parent_name":"IndicatorInfo"},"Structs/IndicatorInfo.html#/s:15tulipindicators13IndicatorInfoV7outputsSaySSGvp":{"name":"outputs","abstract":"

The names of the geneated outputs

","parent_name":"IndicatorInfo"},"Structs/IndicatorInfo.html#/s:15tulipindicators13IndicatorInfoV4kindAA0B4KindOvp":{"name":"kind","abstract":"

The kind of the indicator

","parent_name":"IndicatorInfo"},"Structs/StochResult.html#/s:15tulipindicators11StochResultV1KSaySdGvp":{"name":"K","abstract":"

The stoch K values

","parent_name":"StochResult"},"Structs/StochResult.html#/s:15tulipindicators11StochResultV1DSaySdGvp":{"name":"D","abstract":"

The stoch D values

","parent_name":"StochResult"},"Structs/MSWResult.html#/s:15tulipindicators9MSWResultV4sineSaySdGvp":{"name":"sine","abstract":"

The sine values

","parent_name":"MSWResult"},"Structs/MSWResult.html#/s:15tulipindicators9MSWResultV4leadSaySdGvp":{"name":"lead","abstract":"

The lead values

","parent_name":"MSWResult"},"Structs/MACDResult.html#/s:15tulipindicators10MACDResultV4macdSaySdGvp":{"name":"macd","abstract":"

The macd values

","parent_name":"MACDResult"},"Structs/MACDResult.html#/s:15tulipindicators10MACDResultV6signalSaySdGvp":{"name":"signal","abstract":"

The signal values

","parent_name":"MACDResult"},"Structs/MACDResult.html#/s:15tulipindicators10MACDResultV9histogramSaySdGvp":{"name":"histogram","abstract":"

The histogram values

","parent_name":"MACDResult"},"Structs/FisherResult.html#/s:15tulipindicators12FisherResultV6fisherSaySdGvp":{"name":"fisher","abstract":"

The fisher values

","parent_name":"FisherResult"},"Structs/FisherResult.html#/s:15tulipindicators12FisherResultV6signalSaySdGvp":{"name":"signal","abstract":"

The signal values

","parent_name":"FisherResult"},"Structs/Direction.html#/s:15tulipindicators9DirectionV4plusSaySdGvp":{"name":"plus","abstract":"

The plus values

","parent_name":"Direction"},"Structs/Direction.html#/s:15tulipindicators9DirectionV5minusSaySdGvp":{"name":"minus","abstract":"

The minus values

","parent_name":"Direction"},"Structs/ArroonResult.html#/s:15tulipindicators12ArroonResultV4downSaySdGvp":{"name":"down","abstract":"

The down values

","parent_name":"ArroonResult"},"Structs/ArroonResult.html#/s:15tulipindicators12ArroonResultV2upSaySdGvp":{"name":"up","abstract":"

The up values

","parent_name":"ArroonResult"},"Structs/BBandResult.html#/s:15tulipindicators11BBandResultV5lowerSaySdGvp":{"name":"lower","abstract":"

The lower values

","parent_name":"BBandResult"},"Structs/BBandResult.html#/s:15tulipindicators11BBandResultV6middleSaySdGvp":{"name":"middle","abstract":"

The middle values

","parent_name":"BBandResult"},"Structs/BBandResult.html#/s:15tulipindicators11BBandResultV5upperSaySdGvp":{"name":"upper","abstract":"

The upper values

","parent_name":"BBandResult"},"Structs/BBandResult.html":{"name":"BBandResult","abstract":"

Struct holding the bbands result

"},"Structs/ArroonResult.html":{"name":"ArroonResult","abstract":"

Struct holding arroon result

"},"Structs/Direction.html":{"name":"Direction","abstract":"

Struct holding di and dm results

"},"Structs/FisherResult.html":{"name":"FisherResult","abstract":"

Struct holding fischer result

"},"Structs/MACDResult.html":{"name":"MACDResult","abstract":"

Struct holding the result of macd.

"},"Structs/MSWResult.html":{"name":"MSWResult","abstract":"

Struct holding msw result

"},"Structs/StochResult.html":{"name":"StochResult","abstract":"

Struct holding stoch result

"},"Structs/IndicatorInfo.html":{"name":"IndicatorInfo","abstract":"

A struct holding the information about an indicator

"},"Structs/Tulip.html":{"name":"Tulip","abstract":"

Low level struct to be able to call tulip library directly

"},"Protocols/Quotable.html#/s:15tulipindicators8QuotableP4highSdvp":{"name":"high","abstract":"

The high value

","parent_name":"Quotable"},"Protocols/Quotable.html#/s:15tulipindicators8QuotableP3lowSdvp":{"name":"low","abstract":"

The low value

","parent_name":"Quotable"},"Protocols/Quotable.html#/s:15tulipindicators8QuotableP4openSdvp":{"name":"open","abstract":"

The open value

","parent_name":"Quotable"},"Protocols/Quotable.html#/s:15tulipindicators8QuotableP5closeSdvp":{"name":"close","abstract":"

The close value

","parent_name":"Quotable"},"Protocols/Quotable.html#/s:15tulipindicators8QuotableP6volumeSivp":{"name":"volume","abstract":"

The volume value

","parent_name":"Quotable"},"Protocols/Quotable.html":{"name":"Quotable","abstract":"

An element representing a Quote

"},"Functions.html#/s:15tulipindicators3sma_6periodSi_SaySdGtAD_SitF":{"name":"sma(_:period:)","abstract":"

Simple moving average

"},"Functions.html#/s:15tulipindicators3wma_6periodSi_SaySdGtAD_SitF":{"name":"wma(_:period:)","abstract":"

Weighted moving average

"},"Functions.html#/s:15tulipindicators3ema_6periodSi_SaySdGtAD_SitF":{"name":"ema(_:period:)","abstract":"

Exponential moving average

"},"Functions.html#/s:15tulipindicators4dema_6periodSi_SaySdGtAD_SitF":{"name":"dema(_:period:)","abstract":"

Double exponential moving average

"},"Functions.html#/s:15tulipindicators4tema_6periodSi_SaySdGtAD_SitF":{"name":"tema(_:period:)","abstract":"

Triple exponential moving average

"},"Functions.html#/s:15tulipindicators5trima_6periodSi_SaySdGtAD_SitF":{"name":"trima(_:period:)","abstract":"

Triangular Moving Average

"},"Functions.html#/s:15tulipindicators4kama_6periodSi_SaySdGtAD_SitF":{"name":"kama(_:period:)","abstract":"

Kaufman Adaptive Moving Average"},"Functions.html#/s:15tulipindicators6bbands_6period6stddevSi_AA11BBandResultVtSaySdG_SiSdtF":{"name":"bbands(_:period:stddev:)","abstract":"

Compute the values of the three components"},"Functions.html#/s:15tulipindicators3absySi_SaySdGtACF":{"name":"abs(_:)","abstract":"

Vector Absolute Value

"},"Functions.html#/s:15tulipindicators4acosySi_SaySdGtACF":{"name":"acos(_:)"},"Functions.html#/s:15tulipindicators2adySi_SaySdGtSayxGAA8QuotableRzlF":{"name":"ad(_:)","abstract":"

Accumulation/Distribution Line

"},"Functions.html#/s:15tulipindicators3add1a1bSi_SaySdGtAE_AEtF":{"name":"add(a:b:)","abstract":"

Vector addition

"},"Functions.html#/s:15tulipindicators5adosc_12short_period05long_D0Si_SaySdGtSayxG_S2dtAA8QuotableRzlF":{"name":"adosc(_:short_period:long_period:)","abstract":"

Accumulation/Distribution Oscillator

"},"Functions.html#/s:15tulipindicators3adx_6periodSi_SaySdGtSayxG_SitAA8QuotableRzlF":{"name":"adx(_:period:)","abstract":"

Average Directional Movement Index

"},"Functions.html#/s:15tulipindicators4adxr_6periodSi_SaySdGtSayxG_SitAA8QuotableRzlF":{"name":"adxr(_:period:)","abstract":"

Average Directional Movement Rating

"},"Functions.html#/s:15tulipindicators2aoySi_SaySdGtSayxGAA8QuotableRzlF":{"name":"ao(_:)","abstract":"

Aweosome Oscillator

"},"Functions.html#/s:15tulipindicators3apoySi_SaySdGtACF":{"name":"apo(_:)","abstract":"

Absolute Price Oscillator

"},"Functions.html#/s:15tulipindicators6arroon_6periodSi_AA12ArroonResultVtSayxG_SitAA8QuotableRzlF":{"name":"arroon(_:period:)","abstract":"

Aroon

"},"Functions.html#/s:15tulipindicators8aroonosc_6periodSi_SaySdGtSayxG_SitAA8QuotableRzlF":{"name":"aroonosc(_:period:)","abstract":"

Aroon Oscillator

"},"Functions.html#/s:15tulipindicators4asinySi_SaySdGtACF":{"name":"asin(_:)","abstract":"

Vector Arcsine

"},"Functions.html#/s:15tulipindicators4atanySi_SaySdGtACF":{"name":"atan(_:)","abstract":"

Vector Arctangent

"},"Functions.html#/s:15tulipindicators3atr_6periodSi_SaySdGtSayxG_SitAA8QuotableRzlF":{"name":"atr(_:period:)","abstract":"

Average True Range

"},"Functions.html#/s:15tulipindicators8avgpriceySi_SaySdGtSayxGAA8QuotableRzlF":{"name":"avgprice(_:)","abstract":"

Average Price

"},"Functions.html#/s:15tulipindicators3bopySi_SaySdGtSayxGAA8QuotableRzlF":{"name":"bop(_:)","abstract":"

Balance of Power

"},"Functions.html#/s:15tulipindicators3cci_6periodSi_SaySdGtSayxG_SitAA8QuotableRzlF":{"name":"cci(_:period:)","abstract":"

Commodity Channel Index

"},"Functions.html#/s:15tulipindicators4ceilySi_SaySdGtACF":{"name":"ceil(_:)","abstract":"

Vector Ceiling

"},"Functions.html#/s:15tulipindicators3cmo_6periodSi_SaySdGtAD_SitF":{"name":"cmo(_:period:)","abstract":"

Chande Momentum Oscillator

"},"Functions.html#/s:15tulipindicators3cosySi_SaySdGtACF":{"name":"cos(_:)","abstract":"

Vector Cosine

"},"Functions.html#/s:15tulipindicators4coshySi_SaySdGtACF":{"name":"cosh(_:)","abstract":"

Vector Hyperbolic Cosine

"},"Functions.html#/s:15tulipindicators8crossany1a1bSi_SaySdGtAE_AEtF":{"name":"crossany(a:b:)","abstract":"

Crossany

"},"Functions.html#/s:15tulipindicators9crossover1a1bSi_SaySdGtAE_AEtF":{"name":"crossover(a:b:)","abstract":"

Crossover

"},"Functions.html#/s:15tulipindicators3cvi_6periodSi_SaySdGtSayxG_SitAA8QuotableRzlF":{"name":"cvi(_:period:)","abstract":"

Chaikins Volatility

"},"Functions.html#/s:15tulipindicators5decay_6periodSi_SaySdGtAD_SitF":{"name":"decay(_:period:)","abstract":"

Linear Decay

"},"Functions.html#/s:15tulipindicators2di_6periodSi_AA9DirectionVtSayxG_SitAA8QuotableRzlF":{"name":"di(_:period:)","abstract":"

Directional indicator

"},"Functions.html#/s:15tulipindicators3divySi_SaySdGtACF":{"name":"div(_:)","abstract":"

Vector division

"},"Functions.html#/s:15tulipindicators2dm_6periodSi_AA9DirectionVtSayxG_SitAA8QuotableRzlF":{"name":"dm(_:period:)","abstract":"

Directional Movement

"},"Functions.html#/s:15tulipindicators3dpo_6periodSi_SaySdGtAD_SitF":{"name":"dpo(_:period:)","abstract":"

Detrended Price Oscillator

"},"Functions.html#/s:15tulipindicators2dx_6periodSi_SaySdGtSayxG_SitAA8QuotableRzlF":{"name":"dx(_:period:)","abstract":"

Directional Movement Index

"},"Functions.html#/s:15tulipindicators6edecay_6periodSi_SaySdGtAD_SitF":{"name":"edecay(_:period:)","abstract":"

Exponential Decay

"},"Functions.html#/s:15tulipindicators3emvySi_SaySdGtSayxGAA8QuotableRzlF":{"name":"emv(_:)","abstract":"

Ease of Movement

"},"Functions.html#/s:15tulipindicators3expySi_SaySdGtACF":{"name":"exp(_:)","abstract":"

Vector Exponential

"},"Functions.html#/s:15tulipindicators6fisher_6periodSi_AA12FisherResultVtSayxG_SitAA8QuotableRzlF":{"name":"fisher(_:period:)","abstract":"

Fisher Transform

"},"Functions.html#/s:15tulipindicators5floorySi_SaySdGtACF":{"name":"floor(_:)","abstract":"

Vector Floor

"},"Functions.html#/s:15tulipindicators4fosc_6periodSi_SaySdGtAD_SitF":{"name":"fosc(_:period:)","abstract":"

Forecast Oscillator

"},"Functions.html#/s:15tulipindicators3hma_6periodSi_SaySdGtAD_SitF":{"name":"hma(_:period:)","abstract":"

Hull Moving Average

"},"Functions.html#/s:15tulipindicators3kvo_5short4longSi_SaySdGtSayxG_S2itAA8QuotableRzlF":{"name":"kvo(_:short:long:)","abstract":"

Klinger Volume Oscillator

"},"Functions.html#/s:15tulipindicators3lag_6periodSi_SaySdGtAD_SitF":{"name":"lag(_:period:)","abstract":"

Lag

"},"Functions.html#/s:15tulipindicators6linreg_6periodSi_SaySdGtAD_SitF":{"name":"linreg(_:period:)","abstract":"

Linear Regression

"},"Functions.html#/s:15tulipindicators15linregintercept_6periodSi_SaySdGtAD_SitF":{"name":"linregintercept(_:period:)","abstract":"

Linear Regression Intercept

"},"Functions.html#/s:15tulipindicators11linregslope_6periodSi_SaySdGtAD_SitF":{"name":"linregslope(_:period:)","abstract":"

Linear Regression Slope

"},"Functions.html#/s:15tulipindicators2lnySi_SaySdGtACF":{"name":"ln(_:)","abstract":"

Vector Natural Log

"},"Functions.html#/s:15tulipindicators5log10ySi_SaySdGtACF":{"name":"log10(_:)","abstract":"

Vector Base-10 Log

"},"Functions.html#/s:15tulipindicators4macd_5short4long6signalSi_AA10MACDResultVtSaySdG_S3itF":{"name":"macd(_:short:long:signal:)","abstract":"

Moving Average Convergence/Divergence

"},"Functions.html#/s:15tulipindicators8marketfiySi_SaySdGtSayxGAA8QuotableRzlF":{"name":"marketfi(_:)","abstract":"

Market Facilitation Index

"},"Functions.html#/s:15tulipindicators4mass_6periodSi_SaySdGtSayxG_SitAA8QuotableRzlF":{"name":"mass(_:period:)","abstract":"

Mass Index

"},"Functions.html#/s:15tulipindicators3max_6periodSi_SaySdGtAD_SitF":{"name":"max(_:period:)","abstract":"

Maximum In Period

"},"Functions.html#/s:15tulipindicators2md_6periodSi_SaySdGtAD_SitF":{"name":"md(_:period:)","abstract":"

Mean Deviation Over Period

"},"Functions.html#/s:15tulipindicators8medpriceySi_SaySdGtSayxGAA8QuotableRzlF":{"name":"medprice(_:)","abstract":"

Median Price

"},"Functions.html#/s:15tulipindicators3mfi_6periodSi_SaySdGtSayxG_SitAA8QuotableRzlF":{"name":"mfi(_:period:)","abstract":"

Money Flow Index

"},"Functions.html#/s:15tulipindicators3mom_6periodSi_SaySdGtAD_SitF":{"name":"mom(_:period:)","abstract":"

Momentum

"},"Functions.html#/s:15tulipindicators3msw_6periodSi_AA9MSWResultVtSaySdG_SitF":{"name":"msw(_:period:)","abstract":"

Mesa Sine Wave

"},"Functions.html#/s:15tulipindicators3mulySi_SaySdGtACF":{"name":"mul(_:)","abstract":"

Vector Multiplication

"},"Functions.html#/s:15tulipindicators4natr_6periodSi_SaySdGtSayxG_SitAA8QuotableRzlF":{"name":"natr(_:period:)","abstract":"

Normalized Average True Range

"},"Functions.html#/s:15tulipindicators3nvi_6periodSi_SaySdGtSayxG_SitAA8QuotableRzlF":{"name":"nvi(_:period:)","abstract":"

Normalized Average True Range

"},"Functions.html#/s:15tulipindicators3obvySi_SaySdGtSayxGAA8QuotableRzlF":{"name":"obv(_:)","abstract":"

On Balance Volume

"},"Functions.html#/s:15tulipindicators3ppo_5short4longSi_SaySdGtAE_S2itF":{"name":"ppo(_:short:long:)","abstract":"

Percentage Price Oscillator

"},"Functions.html#/s:15tulipindicators4psar_12acceleration0C3MaxSi_SaySdGtSayxG_S2dtAA8QuotableRzlF":{"name":"psar(_:acceleration:accelerationMax:)","abstract":"

Parabolic SAR

"},"Functions.html#/s:15tulipindicators3pviySi_SaySdGtSayxGAA8QuotableRzlF":{"name":"pvi(_:)","abstract":"

Positive Volume Index

"},"Functions.html#/s:15tulipindicators6qstick_6periodSi_SaySdGtSayxG_SitAA8QuotableRzlF":{"name":"qstick(_:period:)","abstract":"

Qstick

"},"Functions.html#/s:15tulipindicators3roc_6periodSi_SaySdGtAD_SitF":{"name":"roc(_:period:)","abstract":"

Rate of Change

"},"Functions.html#/s:15tulipindicators4rocr_6periodSi_SaySdGtAD_SitF":{"name":"rocr(_:period:)","abstract":"

Rate of Change Ratio

"},"Functions.html#/s:15tulipindicators5roundySi_SaySdGtACF":{"name":"round(_:)","abstract":"

Vector Round

"},"Functions.html#/s:15tulipindicators3rsi_6periodSi_SaySdGtAD_SitF":{"name":"rsi(_:period:)","abstract":"

Relative Strength Index

"},"Functions.html#/s:15tulipindicators3sinySi_SaySdGtACF":{"name":"sin(_:)","abstract":"

Vector Sine

"},"Functions.html#/s:15tulipindicators4sinhySi_SaySdGtACF":{"name":"sinh(_:)","abstract":"

Vector Hyperbolic Sine

"},"Functions.html#/s:15tulipindicators4sqrtySi_SaySdGtACF":{"name":"sqrt(_:)","abstract":"

Vector Sqrt

"},"Functions.html#/s:15tulipindicators6stddev_6periodSi_SaySdGtAD_SitF":{"name":"stddev(_:period:)","abstract":"

Standard Deviation Over Period

"},"Functions.html#/s:15tulipindicators6stderr_6periodSi_SaySdGtAD_SitF":{"name":"stderr(_:period:)","abstract":"

Standard Error Over Period

"},"Functions.html#/s:15tulipindicators5stoch_7kPeriod08kSlowingC001dC0Si_AA11StochResultVtSayxG_S3itAA8QuotableRzlF":{"name":"stoch(_:kPeriod:kSlowingPeriod:dPeriod:)","abstract":"

Stochastic Oscillator

"},"Functions.html#/s:15tulipindicators8stochrsi_6periodSi_SaySdGtAD_SitF":{"name":"stochrsi(_:period:)","abstract":"

Stochastic RSI

"},"Functions.html#/s:15tulipindicators3sub1a1bSi_SaySdGtAE_AEtF":{"name":"sub(a:b:)","abstract":"

Vector Substraction

"},"Functions.html#/s:15tulipindicators3sum_6periodSi_SaySdGtAD_SitF":{"name":"sum(_:period:)","abstract":"

Sum Over Period

"},"Functions.html#/s:15tulipindicators3tanySi_SaySdGtACF":{"name":"tan(_:)","abstract":"

Vector Tangent

"},"Functions.html#/s:15tulipindicators4tanhySi_SaySdGtACF":{"name":"tanh(_:)","abstract":"

Vector Hyperbolic Tangent

"},"Functions.html#/s:15tulipindicators5todegySi_SaySdGtACF":{"name":"todeg(_:)","abstract":"

Vector Degree Conversion

"},"Functions.html#/s:15tulipindicators5toradySi_SaySdGtACF":{"name":"torad(_:)","abstract":"

Vector Radian Conversion

"},"Functions.html#/s:15tulipindicators2trySi_SaySdGtSayxGAA8QuotableRzlF":{"name":"tr(_:)","abstract":"

True Range

"},"Functions.html#/s:15tulipindicators4trix_6periodSi_SaySdGtAD_SitF":{"name":"trix(_:period:)","abstract":"

Trix

"},"Functions.html#/s:15tulipindicators5truncySi_SaySdGtACF":{"name":"trunc(_:)","abstract":"

Vector Truncate

"},"Functions.html#/s:15tulipindicators3tsf_6periodSi_SaySdGtAD_SitF":{"name":"tsf(_:period:)","abstract":"

Time Series Forecast

"},"Functions.html#/s:15tulipindicators8typpriceySi_SaySdGtSayxGAA8QuotableRzlF":{"name":"typprice(_:)","abstract":"

Typical Price

"},"Functions.html#/s:15tulipindicators6ultosc_5short6medium4longSi_SaySdGtSayxG_S3itAA8QuotableRzlF":{"name":"ultosc(_:short:medium:long:)","abstract":"

Ultimate Oscillator

"},"Functions.html#/s:15tulipindicators8variance_6periodSi_SaySdGtAD_SitF":{"name":"variance(_:period:)","abstract":"

Variance Over Period

"},"Functions.html#/s:15tulipindicators3vhf_6periodSi_SaySdGtAD_SitF":{"name":"vhf(_:period:)","abstract":"

Vertical Horizontal Filter

"},"Functions.html#/s:15tulipindicators5vidya_5short4long5alphaSi_SaySdGtAF_S2iSdtF":{"name":"vidya(_:short:long:alpha:)","abstract":"

Variable Index Dynamic Average

"},"Functions.html#/s:15tulipindicators10volatility_6periodSi_SaySdGtAD_SitF":{"name":"volatility(_:period:)","abstract":"

Annualized Historical Volatility

"},"Functions.html#/s:15tulipindicators4vosc_5short4longSi_SaySdGtSayxG_S2itAA8QuotableRzlF":{"name":"vosc(_:short:long:)","abstract":"

Volume Oscillator

"},"Functions.html#/s:15tulipindicators4vwma_6periodSi_SaySdGtSayxG_SitAA8QuotableRzlF":{"name":"vwma(_:period:)","abstract":"

Volume Weighted Moving Average

"},"Functions.html#/s:15tulipindicators3wadySi_SaySdGtSayxGAA8QuotableRzlF":{"name":"wad(_:)","abstract":"

Williams Accumulation/Distribution

"},"Functions.html#/s:15tulipindicators7wcpriceySi_SaySdGtSayxGAA8QuotableRzlF":{"name":"wcprice(_:)","abstract":"

Weighted Close Price

"},"Functions.html#/s:15tulipindicators7wilders_6periodSi_SaySdGtAD_SitF":{"name":"wilders(_:period:)","abstract":"

Wilders Smoothing

"},"Functions.html#/s:15tulipindicators5willr_6periodSi_SaySdGtSayxG_SitAA8QuotableRzlF":{"name":"willr(_:period:)","abstract":"

Weighted Close Price

"},"Functions.html#/s:15tulipindicators5zlema_6periodSi_SaySdGtAD_SitF":{"name":"zlema(_:period:)","abstract":"

Zero-Lag Exponential Moving Average

"},"Enums/IndicatorKind.html#/s:15tulipindicators13IndicatorKindO7overlayyA2CmF":{"name":"overlay","abstract":"

The indicator is an overlay

","parent_name":"IndicatorKind"},"Enums/IndicatorKind.html#/s:15tulipindicators13IndicatorKindO4mathyA2CmF":{"name":"math","abstract":"

The indicator is simple math

","parent_name":"IndicatorKind"},"Enums/IndicatorKind.html#/s:15tulipindicators13IndicatorKindO6simpleyA2CmF":{"name":"simple","abstract":"

The indicator is a simple indicator

","parent_name":"IndicatorKind"},"Enums/IndicatorKind.html#/s:15tulipindicators13IndicatorKindO11comparativeyA2CmF":{"name":"comparative","abstract":"

The indicator is a comparative indicator

","parent_name":"IndicatorKind"},"Enums/IndicatorKind.html#/s:SY8rawValue03RawB0Qzvp":{"name":"rawValue","parent_name":"IndicatorKind"},"Enums/IndicatorKind.html#/s:SY8rawValuexSg03RawB0Qz_tcfc":{"name":"init(rawValue:)","parent_name":"IndicatorKind"},"Enums/IndicatorKind.html":{"name":"IndicatorKind","abstract":"

The kind of the indicator

"},"Enums.html":{"name":"Enumerations","abstract":"

The following enumerations are available globally.

"},"Functions.html":{"name":"Functions","abstract":"

The following functions are available globally.

"},"Protocols.html":{"name":"Protocols","abstract":"

The following protocols are available globally.

"},"Structs.html":{"name":"Structures","abstract":"

The following structures are available globally.

"}} -------------------------------------------------------------------------------- /docs/undocumented.json: -------------------------------------------------------------------------------- 1 | { 2 | "warnings": [ 3 | 4 | ], 5 | "source_directory": "/Users/yheinric/dev/github/tulipindicators-swift" 6 | } -------------------------------------------------------------------------------- /tulipindicators-swift.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |spec| 2 | spec.name = "tulipindicators-swift" 3 | spec.version = "1.0.1" 4 | spec.summary = "A technical analysis library around tulip" 5 | spec.description = <<-DESC 6 | This swift package offers a technical analysis 7 | function by wrapping the tulip C library. 8 | DESC 9 | spec.homepage = "https://github.com/yageek/tulipindicators-swift" 10 | spec.license = "LGPLv3" 11 | spec.author = { "Yannick Heinrich" => "yannick.heinrich@gmail.com" } 12 | spec.social_media_url = "https://twitter.com/yageek" 13 | spec.source = { :git => "https://github.com/yageek/tulipindicators-swift.git", :tag => "#{spec.version}" } 14 | spec.source_files = "Sources/**/*.{h,m,c}" 15 | spec.ios.deployment_target = '8.0' 16 | spec.osx.deployment_target = '10.8' 17 | spec.tvos.deployment_target = '9.0' 18 | spec.watchos.deployment_target = '2.0' 19 | end 20 | -------------------------------------------------------------------------------- /tulipindicators-swift.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /tulipindicators-swift.xcodeproj/xcshareddata/xcschemes/tulipindicators-iOS.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 33 | 39 | 40 | 41 | 42 | 43 | 49 | 50 | 51 | 52 | 53 | 54 | 64 | 65 | 71 | 72 | 73 | 74 | 75 | 76 | 82 | 83 | 89 | 90 | 91 | 92 | 94 | 95 | 98 | 99 | 100 | -------------------------------------------------------------------------------- /tulipindicators-swift.xcodeproj/xcshareddata/xcschemes/tulipindicators-macOS.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 33 | 39 | 40 | 41 | 42 | 43 | 49 | 50 | 51 | 52 | 53 | 54 | 64 | 65 | 71 | 72 | 73 | 74 | 75 | 76 | 82 | 83 | 89 | 90 | 91 | 92 | 94 | 95 | 98 | 99 | 100 | -------------------------------------------------------------------------------- /tulipindicators-swift.xcodeproj/xcshareddata/xcschemes/tulipindicators-tvOS.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 33 | 39 | 40 | 41 | 42 | 43 | 49 | 50 | 51 | 52 | 53 | 54 | 64 | 65 | 71 | 72 | 73 | 74 | 75 | 76 | 82 | 83 | 89 | 90 | 91 | 92 | 94 | 95 | 98 | 99 | 100 | -------------------------------------------------------------------------------- /tulipindicators-swift.xcodeproj/xcshareddata/xcschemes/tulipindicators-watchOS.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 34 | 35 | 45 | 46 | 52 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 70 | 71 | 72 | 73 | 75 | 76 | 79 | 80 | 81 | --------------------------------------------------------------------------------