sqa 0.0.24 → 0.0.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (180) hide show
  1. checksums.yaml +4 -4
  2. data/.goose/memory/development.txt +3 -0
  3. data/.semver +6 -0
  4. data/ARCHITECTURE.md +648 -0
  5. data/CHANGELOG.md +82 -0
  6. data/CLAUDE.md +653 -0
  7. data/COMMITS.md +196 -0
  8. data/DATAFRAME_ARCHITECTURE_REVIEW.md +421 -0
  9. data/NEXT-STEPS.md +154 -0
  10. data/README.md +812 -262
  11. data/TASKS.md +358 -0
  12. data/TEST_RESULTS.md +140 -0
  13. data/TODO.md +42 -0
  14. data/_notes.txt +25 -0
  15. data/bin/sqa-console +11 -0
  16. data/data/talk_talk.json +103284 -0
  17. data/develop_summary.md +313 -0
  18. data/docs/advanced/backtesting.md +206 -0
  19. data/docs/advanced/ensemble.md +68 -0
  20. data/docs/advanced/fpop.md +153 -0
  21. data/docs/advanced/index.md +112 -0
  22. data/docs/advanced/multi-timeframe.md +67 -0
  23. data/docs/advanced/pattern-matcher.md +75 -0
  24. data/docs/advanced/portfolio-optimizer.md +79 -0
  25. data/docs/advanced/portfolio.md +166 -0
  26. data/docs/advanced/risk-management.md +210 -0
  27. data/docs/advanced/strategy-generator.md +158 -0
  28. data/docs/advanced/streaming.md +209 -0
  29. data/docs/ai_and_ml.md +80 -0
  30. data/docs/api/dataframe.md +1115 -0
  31. data/docs/api/index.md +126 -0
  32. data/docs/assets/css/custom.css +88 -0
  33. data/docs/assets/js/mathjax.js +18 -0
  34. data/docs/concepts/index.md +68 -0
  35. data/docs/contributing/index.md +60 -0
  36. data/docs/data-sources/index.md +66 -0
  37. data/docs/data_frame.md +317 -97
  38. data/docs/factors_that_impact_price.md +26 -0
  39. data/docs/finviz.md +11 -0
  40. data/docs/fx_pro_bit.md +25 -0
  41. data/docs/genetic_programming.md +104 -0
  42. data/docs/getting-started/index.md +123 -0
  43. data/docs/getting-started/installation.md +229 -0
  44. data/docs/getting-started/quick-start.md +244 -0
  45. data/docs/i_gotta_an_idea.md +22 -0
  46. data/docs/index.md +163 -0
  47. data/docs/indicators/index.md +97 -0
  48. data/docs/indicators.md +110 -24
  49. data/docs/options.md +8 -0
  50. data/docs/strategies/bollinger-bands.md +146 -0
  51. data/docs/strategies/consensus.md +64 -0
  52. data/docs/strategies/custom.md +310 -0
  53. data/docs/strategies/ema.md +53 -0
  54. data/docs/strategies/index.md +92 -0
  55. data/docs/strategies/kbs.md +164 -0
  56. data/docs/strategies/macd.md +96 -0
  57. data/docs/strategies/market-profile.md +54 -0
  58. data/docs/strategies/mean-reversion.md +58 -0
  59. data/docs/strategies/rsi.md +95 -0
  60. data/docs/strategies/sma.md +55 -0
  61. data/docs/strategies/stochastic.md +63 -0
  62. data/docs/strategies/volume-breakout.md +54 -0
  63. data/docs/tags.md +7 -0
  64. data/docs/true_strength_index.md +46 -0
  65. data/docs/weighted_moving_average.md +48 -0
  66. data/examples/README.md +354 -0
  67. data/examples/advanced_features_example.rb +350 -0
  68. data/examples/fpop_analysis_example.rb +191 -0
  69. data/examples/genetic_programming_example.rb +148 -0
  70. data/examples/kbs_strategy_example.rb +208 -0
  71. data/examples/pattern_context_example.rb +300 -0
  72. data/examples/rails_app/Gemfile +34 -0
  73. data/examples/rails_app/README.md +416 -0
  74. data/examples/rails_app/app/assets/javascripts/application.js +107 -0
  75. data/examples/rails_app/app/assets/stylesheets/application.css +659 -0
  76. data/examples/rails_app/app/controllers/analysis_controller.rb +11 -0
  77. data/examples/rails_app/app/controllers/api/v1/stocks_controller.rb +227 -0
  78. data/examples/rails_app/app/controllers/application_controller.rb +22 -0
  79. data/examples/rails_app/app/controllers/backtest_controller.rb +11 -0
  80. data/examples/rails_app/app/controllers/dashboard_controller.rb +21 -0
  81. data/examples/rails_app/app/controllers/portfolio_controller.rb +7 -0
  82. data/examples/rails_app/app/views/analysis/show.html.erb +209 -0
  83. data/examples/rails_app/app/views/backtest/show.html.erb +171 -0
  84. data/examples/rails_app/app/views/dashboard/index.html.erb +118 -0
  85. data/examples/rails_app/app/views/dashboard/show.html.erb +408 -0
  86. data/examples/rails_app/app/views/errors/show.html.erb +17 -0
  87. data/examples/rails_app/app/views/layouts/application.html.erb +60 -0
  88. data/examples/rails_app/app/views/portfolio/index.html.erb +33 -0
  89. data/examples/rails_app/bin/rails +6 -0
  90. data/examples/rails_app/config/application.rb +45 -0
  91. data/examples/rails_app/config/boot.rb +5 -0
  92. data/examples/rails_app/config/database.yml +18 -0
  93. data/examples/rails_app/config/environment.rb +11 -0
  94. data/examples/rails_app/config/routes.rb +26 -0
  95. data/examples/rails_app/config.ru +8 -0
  96. data/examples/realtime_stream_example.rb +274 -0
  97. data/examples/sinatra_app/Gemfile +22 -0
  98. data/examples/sinatra_app/QUICKSTART.md +159 -0
  99. data/examples/sinatra_app/README.md +461 -0
  100. data/examples/sinatra_app/app.rb +344 -0
  101. data/examples/sinatra_app/config.ru +5 -0
  102. data/examples/sinatra_app/public/css/style.css +659 -0
  103. data/examples/sinatra_app/public/js/app.js +107 -0
  104. data/examples/sinatra_app/views/analyze.erb +306 -0
  105. data/examples/sinatra_app/views/backtest.erb +325 -0
  106. data/examples/sinatra_app/views/dashboard.erb +419 -0
  107. data/examples/sinatra_app/views/error.erb +58 -0
  108. data/examples/sinatra_app/views/index.erb +118 -0
  109. data/examples/sinatra_app/views/layout.erb +61 -0
  110. data/examples/sinatra_app/views/portfolio.erb +43 -0
  111. data/examples/strategy_generator_example.rb +346 -0
  112. data/hsa_portfolio.csv +11 -0
  113. data/justfile +0 -0
  114. data/lib/api/alpha_vantage_api.rb +462 -0
  115. data/lib/sqa/backtest.rb +329 -0
  116. data/lib/sqa/data_frame/alpha_vantage.rb +43 -65
  117. data/lib/sqa/data_frame/data.rb +92 -0
  118. data/lib/sqa/data_frame/yahoo_finance.rb +35 -43
  119. data/lib/sqa/data_frame.rb +148 -243
  120. data/lib/sqa/ensemble.rb +359 -0
  121. data/lib/sqa/fpop.rb +199 -0
  122. data/lib/sqa/gp.rb +259 -0
  123. data/lib/sqa/indicator.rb +5 -8
  124. data/lib/sqa/init.rb +15 -8
  125. data/lib/sqa/market_regime.rb +240 -0
  126. data/lib/sqa/multi_timeframe.rb +379 -0
  127. data/lib/sqa/pattern_matcher.rb +497 -0
  128. data/lib/sqa/portfolio.rb +260 -6
  129. data/lib/sqa/portfolio_optimizer.rb +377 -0
  130. data/lib/sqa/risk_manager.rb +442 -0
  131. data/lib/sqa/seasonal_analyzer.rb +209 -0
  132. data/lib/sqa/sector_analyzer.rb +300 -0
  133. data/lib/sqa/stock.rb +67 -125
  134. data/lib/sqa/strategy/bollinger_bands.rb +42 -0
  135. data/lib/sqa/strategy/consensus.rb +5 -2
  136. data/lib/sqa/strategy/kbs_strategy.rb +470 -0
  137. data/lib/sqa/strategy/macd.rb +46 -0
  138. data/lib/sqa/strategy/mp.rb +1 -1
  139. data/lib/sqa/strategy/stochastic.rb +60 -0
  140. data/lib/sqa/strategy/volume_breakout.rb +57 -0
  141. data/lib/sqa/strategy.rb +5 -0
  142. data/lib/sqa/strategy_generator.rb +947 -0
  143. data/lib/sqa/stream.rb +361 -0
  144. data/lib/sqa/version.rb +1 -7
  145. data/lib/sqa.rb +23 -16
  146. data/main.just +81 -0
  147. data/mkdocs.yml +288 -0
  148. data/trace.log +0 -0
  149. metadata +261 -51
  150. data/bin/sqa +0 -6
  151. data/lib/patches/dry-cli.rb +0 -228
  152. data/lib/sqa/activity.rb +0 -10
  153. data/lib/sqa/cli.rb +0 -62
  154. data/lib/sqa/commands/analysis.rb +0 -309
  155. data/lib/sqa/commands/base.rb +0 -139
  156. data/lib/sqa/commands/web.rb +0 -199
  157. data/lib/sqa/commands.rb +0 -22
  158. data/lib/sqa/constants.rb +0 -23
  159. data/lib/sqa/indicator/average_true_range.rb +0 -33
  160. data/lib/sqa/indicator/bollinger_bands.rb +0 -28
  161. data/lib/sqa/indicator/candlestick_pattern_recognizer.rb +0 -60
  162. data/lib/sqa/indicator/donchian_channel.rb +0 -29
  163. data/lib/sqa/indicator/double_top_bottom_pattern.rb +0 -34
  164. data/lib/sqa/indicator/elliott_wave_theory.rb +0 -57
  165. data/lib/sqa/indicator/exponential_moving_average.rb +0 -25
  166. data/lib/sqa/indicator/exponential_moving_average_trend.rb +0 -36
  167. data/lib/sqa/indicator/fibonacci_retracement.rb +0 -23
  168. data/lib/sqa/indicator/head_and_shoulders_pattern.rb +0 -26
  169. data/lib/sqa/indicator/market_profile.rb +0 -32
  170. data/lib/sqa/indicator/mean_reversion.rb +0 -37
  171. data/lib/sqa/indicator/momentum.rb +0 -28
  172. data/lib/sqa/indicator/moving_average_convergence_divergence.rb +0 -29
  173. data/lib/sqa/indicator/peaks_and_valleys.rb +0 -29
  174. data/lib/sqa/indicator/predict_next_value.rb +0 -202
  175. data/lib/sqa/indicator/relative_strength_index.rb +0 -47
  176. data/lib/sqa/indicator/simple_moving_average.rb +0 -24
  177. data/lib/sqa/indicator/simple_moving_average_trend.rb +0 -32
  178. data/lib/sqa/indicator/stochastic_oscillator.rb +0 -68
  179. data/lib/sqa/indicator/true_range.rb +0 -39
  180. data/lib/sqa/trade.rb +0 -26
@@ -0,0 +1,462 @@
1
+ # alpha_vantage_api.rb
2
+
3
+ require 'faraday'
4
+ require 'json'
5
+
6
+ # TODO: Reorganize the methods by category
7
+ # Market Data
8
+ # Technical Indicators
9
+ # Trading
10
+ # Economic Indicators
11
+ # Digital and Forex
12
+ #
13
+
14
+
15
+ class AlphaVantageAPI
16
+ BASE_URL = 'https://www.alphavantage.co/query'.freeze
17
+
18
+ def initialize(api_key)
19
+ @api_key = api_key
20
+ @connection = Faraday.new(url: BASE_URL)
21
+ end
22
+
23
+ def query( function:,
24
+ symbol: nil,
25
+ interval: nil,
26
+ time_period: nil,
27
+ series_type: nil,
28
+ market: nil,
29
+ **extra
30
+ )
31
+
32
+ response = @connection.get do |req|
33
+ req.params['apikey'] = @api_key
34
+ req.params['function'] = function
35
+ req.params['symbol'] = symbol if symbol
36
+ req.params['interval'] = interval if interval
37
+ req.params['time_period'] = time_period if time_period
38
+ req.params['series_type'] = series_type if series_type
39
+ req.params['market'] = market if market
40
+
41
+ extra.each { |key, value| req.params[key.to_s] = value if value }
42
+ end
43
+
44
+ JSON.parse(response.body)
45
+ rescue Faraday::Error => e
46
+ { error: "Failed to retrieve data: #{e.message}" }
47
+ end
48
+
49
+ def ad(symbol:, interval:)
50
+ query(function: 'AD', symbol: symbol, interval: interval)
51
+ end
52
+
53
+ def adosc(symbol:, interval:, fastperiod:, slowperiod:)
54
+ query(function: 'ADOSC', symbol: symbol, interval: interval, fastperiod: fastperiod, slowperiod: slowperiod)
55
+ end
56
+
57
+ def adx(symbol:, interval:, time_period:)
58
+ query(function: 'ADX', symbol: symbol, interval: interval, time_period: time_period)
59
+ end
60
+
61
+ def all_commodities(interval:)
62
+ query(function: 'ALL_COMMODITIES', interval: interval)
63
+ end
64
+
65
+ def aluminum(interval:)
66
+ query(function: 'ALUMINUM', interval: interval)
67
+ end
68
+
69
+ def apo(symbol:, interval:, series_type:, fastperiod:, matype:)
70
+ query(function: 'APO', symbol: symbol, interval: interval, series_type: series_type, fastperiod: fastperiod, matype: matype)
71
+ end
72
+
73
+ def aroon(symbol:, interval:, time_period:)
74
+ query(function: 'AROON', symbol: symbol, interval: interval, time_period: time_period)
75
+ end
76
+
77
+ def balance_sheet(symbol:)
78
+ query(function: 'BALANCE_SHEET', symbol: symbol)
79
+ end
80
+
81
+ def crypto_intraday(symbol:, market:, interval:, outputsize: nil, datatype: nil)
82
+ query(function: 'CRYPTO_INTRADAY', symbol: symbol, market: market, interval: interval, outputsize: outputsize, datatype: datatype)
83
+ end
84
+
85
+ def currency_exchange_rate(from_currency:, to_currency:)
86
+ query(function: 'CURRENCY_EXCHANGE_RATE', from_currency: from_currency, to_currency: to_currency)
87
+ end
88
+
89
+ def earnings(symbol:)
90
+ query(function: 'EARNINGS', symbol: symbol)
91
+ end
92
+
93
+ def time_series_daily(symbol:, outputsize: nil, datatype: nil)
94
+ query(function: 'TIME_SERIES_DAILY', symbol: symbol, outputsize: outputsize, datatype: datatype)
95
+ end
96
+
97
+ def adxr(symbol:, interval:, time_period:)
98
+ query(function: 'ADXR', symbol: symbol, interval: interval, time_period: time_period)
99
+ end
100
+
101
+ def atr(symbol:, interval:, time_period:)
102
+ query(function: 'ATR', symbol: symbol, interval: interval, time_period: time_period)
103
+ end
104
+
105
+ def bbands(symbol:, interval:, time_period:, series_type:, nbdevup:, nbdevdn:, matype: nil)
106
+ query(function: 'BBANDS', symbol: symbol, interval: interval, time_period: time_period, series_type: series_type, nbdevup: nbdevup, nbdevdn: nbdevdn, matype: matype)
107
+ end
108
+
109
+ def bop(symbol:, interval:)
110
+ query(function: 'BOP', symbol: symbol, interval: interval)
111
+ end
112
+
113
+ def cash_flow(symbol:)
114
+ query(function: 'CASH_FLOW', symbol: symbol)
115
+ end
116
+
117
+ def cci(symbol:, interval:, time_period:)
118
+ query(function: 'CCI', symbol: symbol, interval: interval, time_period: time_period)
119
+ end
120
+
121
+ def cmo(symbol:, interval:, time_period:, series_type:)
122
+ query(function: 'CMO', symbol: symbol, interval: interval, time_period: time_period, series_type: series_type)
123
+ end
124
+
125
+ def dema(symbol:, interval:, time_period:, series_type:)
126
+ query(function: 'DEMA', symbol: symbol, interval: interval, time_period: time_period, series_type: series_type)
127
+ end
128
+
129
+ def dx(symbol:, interval:, time_period:)
130
+ query(function: 'DX', symbol: symbol, interval: interval, time_period: time_period)
131
+ end
132
+
133
+ def earnings_calendar(symbol: nil, horizon: nil)
134
+ query(function: 'EARNINGS_CALENDAR', symbol: symbol, horizon: horizon)
135
+ end
136
+
137
+ def ema(symbol:, interval:, time_period:, series_type:)
138
+ query(function: 'EMA', symbol: symbol, interval: interval, time_period: time_period, series_type: series_type)
139
+ end
140
+
141
+ def federal_funds_rate(interval:)
142
+ query(function: 'FEDERAL_FUNDS_RATE', interval: interval)
143
+ end
144
+
145
+ def ht_dcperiod(symbol:, interval:, series_type:)
146
+ query(function: 'HT_DCPERIOD', symbol: symbol, interval: interval, series_type: series_type)
147
+ end
148
+
149
+ def ht_dcphase(symbol:, interval:, series_type:)
150
+ query(function: 'HT_DCPHASE', symbol: symbol, interval: interval, series_type: series_type)
151
+ end
152
+
153
+ def ht_phasor(symbol:, interval:, series_type:)
154
+ query(function: 'HT_PHASOR', symbol: symbol, interval: interval, series_type: series_type)
155
+ end
156
+
157
+ def ht_sine(symbol:, interval:, series_type:)
158
+ query(function: 'HT_SINE', symbol: symbol, interval: interval, series_type: series_type)
159
+ end
160
+
161
+ def ht_trendline(symbol:, interval:, series_type:)
162
+ query(function: 'HT_TRENDLINE', symbol: symbol, interval: interval, series_type: series_type)
163
+ end
164
+
165
+ def ht_trendmode(symbol:, interval:, series_type:)
166
+ query(function: 'HT_TRENDMODE', symbol: symbol, interval: interval, series_type: series_type)
167
+ end
168
+
169
+ def income_statement(symbol:)
170
+ query(function: 'INCOME_STATEMENT', symbol: symbol)
171
+ end
172
+
173
+
174
+ def aronosc(symbol:, interval:, time_period:)
175
+ query(function: 'AROONOSC', symbol: symbol, interval: interval, time_period: time_period)
176
+ end
177
+
178
+ def brent(interval:)
179
+ query(function: 'BRENT', interval: interval)
180
+ end
181
+
182
+ def coffee(interval:)
183
+ query(function: 'COFFEE', interval: interval)
184
+ end
185
+
186
+ def copper(interval:)
187
+ query(function: 'COPPER', interval: interval)
188
+ end
189
+
190
+ def corn(interval:)
191
+ query(function: 'CORN', interval: interval)
192
+ end
193
+
194
+ def cotton(interval:)
195
+ query(function: 'COTTON', interval: interval)
196
+ end
197
+
198
+ def cpi(interval:)
199
+ query(function: 'CPI', interval: interval)
200
+ end
201
+
202
+ def durables
203
+ query(function: 'DURABLES')
204
+ end
205
+
206
+ def inflation
207
+ query(function: 'INFLATION')
208
+ end
209
+
210
+ def ipo_calendar
211
+ query(function: 'IPO_CALENDAR')
212
+ end
213
+
214
+ def kama(symbol:, interval:, time_period:, series_type:)
215
+ query(function: 'KAMA', symbol: symbol, interval: interval, time_period: time_period, series_type: series_type)
216
+ end
217
+
218
+ def listing_status(date: nil, state: nil)
219
+ query(function: 'LISTING_STATUS', date: date, state: state)
220
+ end
221
+
222
+ def market_status
223
+ query(function: 'MARKET_STATUS')
224
+ end
225
+
226
+ def natural_gas(interval:)
227
+ query(function: 'NATURAL_GAS', interval: interval)
228
+ end
229
+
230
+ def news_sentiment(tickers:, time_from: nil, limit: nil)
231
+ query(function: 'NEWS_SENTIMENT', tickers: tickers, time_from: time_from, limit: limit)
232
+ end
233
+
234
+ def nonfarm_payroll
235
+ query(function: 'NONFARM_PAYROLL')
236
+ end
237
+
238
+ def real_gdp(interval:)
239
+ query(function: 'REAL_GDP', interval: interval)
240
+ end
241
+
242
+ def real_gdp_per_capita
243
+ query(function: 'REAL_GDP_PER_CAPITA')
244
+ end
245
+
246
+ def retail_sales
247
+ query(function: 'RETAIL_SALES')
248
+ end
249
+
250
+ def sugar(interval:)
251
+ query(function: 'SUGAR', interval: interval)
252
+ end
253
+
254
+ def symbol_search(keywords:, datatype: nil)
255
+ query(function: 'SYMBOL_SEARCH', keywords: keywords, datatype: datatype)
256
+ end
257
+
258
+ def top_gainers_losers
259
+ query(function: 'TOP_GAINERS_LOSERS')
260
+ end
261
+
262
+ def treasury_yield(interval:, maturity:)
263
+ query(function: 'TREASURY_YIELD', interval: interval, maturity: maturity)
264
+ end
265
+
266
+ def unemployment
267
+ query(function: 'UNEMPLOYMENT')
268
+ end
269
+
270
+ def wheat(interval:)
271
+ query(function: 'WHEAT', interval: interval)
272
+ end
273
+
274
+ def wti(interval:)
275
+ query(function: 'WTI', interval: interval)
276
+ end
277
+
278
+ def digital_currency_daily(symbol:, market:, datatype: 'json')
279
+ query(function: 'DIGITAL_CURRENCY_DAILY', symbol: symbol, market: market, datatype: datatype)
280
+ end
281
+
282
+ def fx_daily(from_symbol:, to_symbol:, outputsize: nil, datatype: 'json')
283
+ query(function: 'FX_DAILY', from_symbol: from_symbol, to_symbol: to_symbol, outputsize: outputsize, datatype: datatype)
284
+ end
285
+
286
+ def global_quote(symbol:, datatype: 'json')
287
+ query(function: 'GLOBAL_QUOTE', symbol: symbol, datatype: datatype)
288
+ end
289
+
290
+ def time_series_daily_adjusted(symbol:, outputsize: nil, datatype: 'json')
291
+ query(function: 'TIME_SERIES_DAILY_ADJUSTED', symbol: symbol, outputsize: outputsize, datatype: datatype)
292
+ end
293
+
294
+ def macd(symbol:, interval:, series_type:, fastperiod: nil, slowperiod: nil, signalperiod: nil, datatype: 'json')
295
+ query(function: 'MACD', symbol: symbol, interval: interval, series_type: series_type, fastperiod: fastperiod, slowperiod: slowperiod, signalperiod: signalperiod, datatype: datatype)
296
+ end
297
+
298
+
299
+ def fx_intraday(from_symbol:, to_symbol:, interval:, outputsize: nil, datatype: 'json')
300
+ query(function: 'FX_INTRADAY', from_symbol: from_symbol, to_symbol: to_symbol, interval: interval, outputsize: outputsize, datatype: datatype)
301
+ end
302
+
303
+ def digital_currency_monthly(symbol:, market:, datatype: 'json')
304
+ query(function: 'DIGITAL_CURRENCY_MONTHLY', symbol: symbol, market: market, datatype: datatype)
305
+ end
306
+
307
+ def digital_currency_weekly(symbol:, market:, datatype: 'json')
308
+ query(function: 'DIGITAL_CURRENCY_WEEKLY', symbol: symbol, market: market, datatype: datatype)
309
+ end
310
+
311
+ def time_series_intraday(symbol:, interval:, outputsize: nil, datatype: 'json')
312
+ query(function: 'TIME_SERIES_INTRADAY', symbol: symbol, interval: interval, outputsize: outputsize, datatype: datatype)
313
+ end
314
+
315
+ def time_series_monthly(symbol:, datatype: 'json')
316
+ query(function: 'TIME_SERIES_MONTHLY', symbol: symbol, datatype: datatype)
317
+ end
318
+
319
+ def time_series_weekly(symbol:, datatype: 'json')
320
+ query(function: 'TIME_SERIES_WEEKLY', symbol: symbol, datatype: datatype)
321
+ end
322
+
323
+ def macd_ext(symbol:, interval:, series_type:, fastperiod: nil, slowperiod: nil, signalperiod: nil, matype: nil, datatype: 'json')
324
+ query(function: 'MACDEXT', symbol: symbol, interval: interval, series_type: series_type, fastperiod: fastperiod, slowperiod: slowperiod, signalperiod: signalperiod, matype: matype, datatype: datatype)
325
+ end
326
+
327
+ def macd(symbol:, interval:, series_type:, time_period:, datatype: 'json')
328
+ query(function: 'MACD', symbol: symbol, interval: interval, series_type: series_type, time_period: time_period, datatype: datatype)
329
+ end
330
+
331
+ def rsi(symbol:, interval:, time_period:, series_type:, datatype: 'json')
332
+ query(function: 'RSI', symbol: symbol, interval: interval, time_period: time_period, series_type: series_type, datatype: datatype)
333
+ end
334
+
335
+ def fx_monthly(from_symbol:, to_symbol:, datatype: 'json')
336
+ query(function: 'FX_MONTHLY', from_symbol: from_symbol, to_symbol: to_symbol, datatype: datatype)
337
+ end
338
+
339
+ def fx_weekly(from_symbol:, to_symbol:, datatype: 'json')
340
+ query(function: 'FX_WEEKLY', from_symbol: from_symbol, to_symbol: to_symbol, datatype: datatype)
341
+ end
342
+
343
+ def mama(symbol:, interval:, series_type:, fastlimit:, slowlimit:, datatype: 'json')
344
+ query(function: 'MAMA', symbol: symbol, interval: interval, series_type: series_type, fastlimit: fastlimit, slowlimit: slowlimit, datatype: datatype)
345
+ end
346
+
347
+ def mfi(symbol:, interval:, time_period:, datatype: 'json')
348
+ query(function: 'MFI', symbol: symbol, interval: interval, time_period: time_period, datatype: datatype)
349
+ end
350
+
351
+ def midpoint(symbol:, interval:, time_period:, series_type:, datatype: 'json')
352
+ query(function: 'MIDPOINT', symbol: symbol, interval: interval, time_period: time_period, series_type: series_type, datatype: datatype)
353
+ end
354
+
355
+ def midprice(symbol:, interval:, time_period:, datatype: 'json')
356
+ query(function: 'MIDPRICE', symbol: symbol, interval: interval, time_period: time_period, datatype: datatype)
357
+ end
358
+
359
+ def minus_di(symbol:, interval:, time_period:, datatype: 'json')
360
+ query(function: 'MINUS_DI', symbol: symbol, interval: interval, time_period: time_period, datatype: datatype)
361
+ end
362
+
363
+ def minus_dm(symbol:, interval:, time_period:, datatype: 'json')
364
+ query(function: 'MINUS_DM', symbol: symbol, interval: interval, time_period: time_period, datatype: datatype)
365
+ end
366
+
367
+ def mom(symbol:, interval:, time_period:, series_type:, datatype: 'json')
368
+ query(function: 'MOM', symbol: symbol, interval: interval, time_period: time_period, series_type: series_type, datatype: datatype)
369
+ end
370
+
371
+ def natr(symbol:, interval:, time_period:, datatype: 'json')
372
+ query(function: 'NATR', symbol: symbol, interval: interval, time_period: time_period, datatype: datatype)
373
+ end
374
+
375
+ def obv(symbol:, interval:, datatype: 'json')
376
+ query(function: 'OBV', symbol: symbol, interval: interval, datatype: datatype)
377
+ end
378
+
379
+ def overview(symbol:, datatype: 'json')
380
+ query(function: 'OVERVIEW', symbol: symbol, datatype: datatype)
381
+ end
382
+
383
+ def plus_di(symbol:, interval:, time_period:, datatype: 'json')
384
+ query(function: 'PLUS_DI', symbol: symbol, interval: interval, time_period: time_period, datatype: datatype)
385
+ end
386
+
387
+ def plus_dm(symbol:, interval:, time_period:, datatype: 'json')
388
+ query(function: 'PLUS_DM', symbol: symbol, interval: interval, time_period: time_period, datatype: datatype)
389
+ end
390
+
391
+ def ppo(symbol:, interval:, series_type:, fastperiod:, slowperiod: nil, matype: nil, datatype: 'json')
392
+ query(function: 'PPO', symbol: symbol, interval: interval, series_type: series_type, fastperiod: fastperiod, slowperiod: slowperiod, matype: matype, datatype: datatype)
393
+ end
394
+
395
+ def roc(symbol:, interval:, time_period:, series_type:, datatype: 'json')
396
+ query(function: 'ROC', symbol: symbol, interval: interval, time_period: time_period, series_type: series_type, datatype: datatype)
397
+ end
398
+
399
+ def rocr(symbol:, interval:, time_period:, series_type:, datatype: 'json')
400
+ query(function: 'ROCR', symbol: symbol, interval: interval, time_period: time_period, series_type: series_type, datatype: datatype)
401
+ end
402
+
403
+ def stoch(symbol:, interval:, fastkperiod: nil, slowkperiod: nil, slowdperiod: nil, slowkmatype: nil, slowdmatype: nil, datatype: 'json')
404
+ query(function: 'STOCH', symbol: symbol, interval: interval, fastkperiod: fastkperiod, slowkperiod: slowkperiod, slowdperiod: slowdperiod, slowkmatype: slowkmatype, slowdmatype: slowdmatype, datatype: datatype)
405
+ end
406
+
407
+ def sar(symbol:, interval:, acceleration:, maximum:, datatype: 'json')
408
+ query(function: 'SAR', symbol: symbol, interval: interval, acceleration: acceleration, maximum: maximum, datatype: datatype)
409
+ end
410
+
411
+ def sma(symbol:, interval:, time_period:, series_type:, datatype: 'json')
412
+ query(function: 'SMA', symbol: symbol, interval: interval, time_period: time_period, series_type: series_type, datatype: datatype)
413
+ end
414
+
415
+ def stochf(symbol:, interval:, fastkperiod: nil, fastdperiod: nil, fastdmatype: nil, datatype: 'json')
416
+ query(function: 'STOCHF', symbol: symbol, interval: interval, fastkperiod: fastkperiod, fastdperiod: fastdperiod, fastdmatype: fastdmatype, datatype: datatype)
417
+ end
418
+
419
+ def t3(symbol:, interval:, time_period:, series_type:, datatype: 'json')
420
+ query(function: 'T3', symbol: symbol, interval: interval, time_period: time_period, series_type: series_type, datatype: datatype)
421
+ end
422
+
423
+ def tema(symbol:, interval:, time_period:, series_type:, datatype: 'json')
424
+ query(function: 'TEMA', symbol: symbol, interval: interval, time_period: time_period, series_type: series_type, datatype: datatype)
425
+ end
426
+
427
+ def time_series_monthly_adjusted(symbol:, datatype: 'json')
428
+ query(function: 'TIME_SERIES_MONTHLY_ADJUSTED', symbol: symbol, datatype: datatype)
429
+ end
430
+
431
+ def time_series_weekly_adjusted(symbol:, datatype: 'json')
432
+ query(function: 'TIME_SERIES_WEEKLY_ADJUSTED', symbol: symbol, datatype: datatype)
433
+ end
434
+
435
+ def trange(symbol:, interval:, datatype: 'json')
436
+ query(function: 'TRANGE', symbol: symbol, interval: interval, datatype: datatype)
437
+ end
438
+
439
+ def trima(symbol:, interval:, time_period:, series_type:, datatype: 'json')
440
+ query(function: 'TRIMA', symbol: symbol, interval: interval, time_period: time_period, series_type: series_type, datatype: datatype)
441
+ end
442
+
443
+ def trix(symbol:, interval:, time_period:, series_type:, datatype: 'json')
444
+ query(function: 'TRIX', symbol: symbol, interval: interval, time_period: time_period, series_type: series_type, datatype: datatype)
445
+ end
446
+
447
+ def ultosc(symbol:, interval:, timeperiod1: nil, timeperiod2: nil, timeperiod3: nil, datatype: 'json')
448
+ query(function: 'ULTOSC', symbol: symbol, interval: interval, timeperiod1: timeperiod1, timeperiod2: timeperiod2, timeperiod3: timeperiod3, datatype: datatype)
449
+ end
450
+
451
+ def vwap(symbol:, interval:, datatype: 'json')
452
+ query(function: 'VWAP', symbol: symbol, interval: interval, datatype: datatype)
453
+ end
454
+
455
+ def willr(symbol:, interval:, time_period:, datatype: 'json')
456
+ query(function: 'WILLR', symbol: symbol, interval: interval, time_period: time_period, datatype: datatype)
457
+ end
458
+
459
+ def wma(symbol:, interval:, time_period:, series_type:, datatype: 'json')
460
+ query(function: 'WMA', symbol: symbol, interval: interval, time_period: time_period, series_type: series_type, datatype: datatype)
461
+ end
462
+ end