questrade_client 0.0.1 → 0.0.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 366a59daa972a8ef598f95be3ef864df3e81526e
4
- data.tar.gz: 775d3d26147bf9e72c9c7655f6ee33ea707f6e69
3
+ metadata.gz: b18f7922f87c8f75bf1019fec336f92c0bd120eb
4
+ data.tar.gz: efb8e2b915e91ccb3b239133709f6cab4bc94f49
5
5
  SHA512:
6
- metadata.gz: 984ff575b495ea46f623f5054231a3ba94e8fd609db0d7b06b0803603c6ebe78c1932bea35cd977c61cc2f2f12e654fce29e0c639bdd089b8d09dd14d8a4bf58
7
- data.tar.gz: 8eec74ff12d70bee1a10cc20743e77a38a6e8c80307e85462e8177e0e6528f9c70f496c668f07fe168ef2f70eab3f7b61b76c254eb89c479263a35a3bd4ebb4f
6
+ metadata.gz: 3b14a49e7b136bf20303309f2946c1f9861d0dc4a99344d4aef418a04a5cd1e2ce5868ce00706345b8b573940a71571cf5f33d30d423b80eb6253292e7ae4b20
7
+ data.tar.gz: bc1c756e572bb1e88301708aed540c3c0a38229ba3d1832e64b40258cc0365c4919a3004f6c5f5339f374f11cb133bb3b146eab05b800af5a1ec96efd76d8d05
data/.gitignore CHANGED
@@ -7,3 +7,5 @@
7
7
  /pkg/
8
8
  /spec/reports/
9
9
  /tmp/
10
+ *.swp
11
+ *.swo
data/README.md CHANGED
@@ -1,3 +1,5 @@
1
+ [![Travis CI](https://travis-ci.org/dalehamel/questrade_client.svg)](https://travis-ci.org/dalehamel/questrade_client)
2
+
1
3
  # QuestradeClient
2
4
 
3
5
  Set up a practice account to play around:
@@ -1,5 +1,6 @@
1
1
  require 'questrade_client/version'
2
2
  require 'questrade_client/client'
3
+ require 'questrade_client/questrade'
3
4
 
4
5
  module QuestradeClient
5
6
  USER_AGENT = "questrade_client/#{QuestradeClient::VERSION}".freeze
@@ -1,5 +1,6 @@
1
1
  module QuestradeClient
2
2
  module Account
3
+
3
4
  # Retrieves current server time.
4
5
  #
5
6
  # Docs: http://www.questrade.com/api/documentation/rest-operations/account-calls/time
@@ -11,5 +12,82 @@ module QuestradeClient
11
12
  DateTime.parse(get('/time')['time'])
12
13
  end
13
14
 
15
+ # Retrieves the accounts associated with the user on behalf of which the API client is authorized.
16
+ #
17
+ # Docs: http://www.questrade.com/api/documentation/rest-operations/account-calls/accounts
18
+ #
19
+ # @return [Array[Hash]] List of accounts
20
+ # @example
21
+ # client.accounts
22
+ def accounts
23
+ get('/accounts')['accounts']
24
+ end
25
+
26
+ # Retrieves positions in a specified account.
27
+ #
28
+ # Docs: http://www.questrade.com/api/documentation/rest-operations/account-calls/accounts-id-positions
29
+ #
30
+ # @return [Array[Hash]] List of positions for the account
31
+ # @param id [String] The ID of the account
32
+ # @example
33
+ # client.positions(id)
34
+ def positions(id)
35
+ get("/accounts/#{id}/positions")['positions']
36
+ end
37
+
38
+ # Retrieves per-currency and combined balances for a specified account.
39
+ #
40
+ # Docs: http://www.questrade.com/api/documentation/rest-operations/account-calls/accounts-id-balances
41
+ #
42
+ # @return [Hash] Balance data for this account
43
+ # @param id [String] The ID of the account
44
+ # @example
45
+ # client.balances(id)
46
+ def balances(id)
47
+ get("/accounts/#{id}/balances")
48
+ end
49
+
50
+ # Retrieves executions for a specific account.
51
+ #
52
+ # Docs: http://www.questrade.com/api/documentation/rest-operations/account-calls/accounts-id-executions
53
+ #
54
+ # FIXME: Add support for start and end time
55
+ # @return [Array[Hash]] List of executions
56
+ # @param id [String] The ID of the account
57
+ # @example
58
+ # client.executions(id)
59
+ def executions(id)
60
+ get("/accounts/#{id}/executions")['executions']
61
+ end
62
+
63
+ # Retrieves orders for specified account
64
+ #
65
+ # Docs: http://www.questrade.com/api/documentation/rest-operations/account-calls/accounts-id-orders
66
+ #
67
+ # FIXME: Add support for start and end time
68
+ # FIXME: Add support for statefilter
69
+ # @return [Array[Hash]] List of orders
70
+ # @param id [String] The ID of the account
71
+ # @param orderid [String] Only retrieve the order matching the specified order ID (optional)
72
+ # @example
73
+ # client.orders(id)
74
+ def orders(id, orderid = nil)
75
+ get("/accounts/#{id}/orders#{orderid ? "/#{orderid}" : ''}")['orders']
76
+ end
77
+
78
+ # Retrieve account activities, including cash transactions, dividends, trades, etc.
79
+ #
80
+ # Docs: http://www.questrade.com/api/documentation/rest-operations/account-calls/accounts-id-activities
81
+ #
82
+ # FIXME: Add support for start and end time
83
+ # @return [Array[Hash]] List of orders
84
+ # @param id [String] The ID of the account
85
+ # @param orderid [String] Only retrieve the order matching the specified order ID (optional)
86
+ # @example
87
+ # client.activities(id)
88
+ def activities(id)
89
+ get("/accounts/#{id}/activities")['activities']
90
+ end
91
+
14
92
  end
15
93
  end
@@ -1,4 +1,6 @@
1
1
  require 'questrade_client/account'
2
+ require 'questrade_client/symbol'
3
+ require 'questrade_client/market'
2
4
  require 'faraday_middleware'
3
5
 
4
6
  module QuestradeClient
@@ -42,6 +44,8 @@ module QuestradeClient
42
44
  end
43
45
 
44
46
  include QuestradeClient::Account
47
+ include QuestradeClient::Symbol
48
+ include QuestradeClient::Market
45
49
 
46
50
  private
47
51
 
@@ -0,0 +1,87 @@
1
+ module QuestradeClient
2
+ module Market
3
+ CANDLESTICK_INTERVALS = {
4
+ oneminute: 'OneMinute', # one candlestick per 1 minute.
5
+ twominutes: 'TwoMinutes', # one candlestick per 2 minutes.
6
+ threeminutes: 'ThreeMinutes', # one candlestick per 3 minutes.
7
+ fourminutes: 'FourMinutes', # one candlestick per 4 minutes.
8
+ fiveminutes: 'FiveMinutes', # one candlestick per 5 minutes.
9
+ tenminutes: 'TenMinutes', # one candlestick per 10 minutes.
10
+ fifteenminutes: 'FifteenMinutes', # one candlestick per 15 minutes.
11
+ twentyminutes: 'TwentyMinutes', # one candlestick per 20 minutes.
12
+ halfhour: 'HalfHour', # one candlestick per 30 minutes.
13
+ onehour: 'OneHour', # one candlestick per 1 hour.
14
+ twohours: 'TwoHours', # one candlestick per 2 hours.
15
+ fourhours: 'FourHours', # one candlestick per 4 hours.
16
+ oneday: 'OneDay', # one candlestick per 1 day.
17
+ oneweek: 'OneWeek', # one candlestick per 1 week.
18
+ onemonth: 'OneMonth', # one candlestick per 1 month.
19
+ oneyear: 'OneYear' # one candlestick per 1 year.
20
+ }
21
+
22
+ # Retrieves information about supported markets.
23
+ #
24
+ # Docs: http://www.questrade.com/api/documentation/rest-operations/market-calls/markets
25
+ #
26
+ # @return [Array[Hash]] List of market data
27
+ # @example
28
+ # client.markets
29
+ def markets
30
+ get('/markets')['markets']
31
+ end
32
+
33
+ # Retrieves a single Level 1 market data quote for one or more symbols.
34
+ #
35
+ # Docs: http://www.questrade.com/api/documentation/rest-operations/market-calls/markets-quotes-id
36
+ #
37
+ # @return [Array[Hash]] List of market data
38
+ # @param args [Int|Array[Int]] The ID of the symbol, or a list of symbol ids
39
+ # @example
40
+ # client.quotes(9292)
41
+ # client.quotes([9292,8081])
42
+ def quotes(args)
43
+ if args.is_a?(Integer)
44
+ get("/markets/quotes/#{args}")['quotes']
45
+ elsif args.is_a?(Array)
46
+ get("/markets/quotes?ids=#{args.join(',')}")['quotes']
47
+ else
48
+ fail "Malformed argument: #{args}"
49
+ end
50
+ end
51
+
52
+ # Retrieves a single Level 1 market data quote and Greek data for one or more option symbols.
53
+ #
54
+ # Docs: http://www.questrade.com/api/documentation/rest-operations/market-calls/markets-quotes-options
55
+ #
56
+ # FIXME - implement (docs are WRONG, it's a POST, not a GET)
57
+ def quoteoptions()
58
+ fail "Not yet implemented"
59
+ end
60
+
61
+ # Retrieve a calculated L1 market data quote for a single or many multi-leg strategies
62
+ #
63
+ # Docs: http://www.questrade.com/api/documentation/rest-operations/market-calls/markets-quotes-strategies
64
+ #
65
+ # FIXME - implement (docs are WRONG, it's a POST, not a GET)
66
+ def quotestrategies()
67
+ fail "Not yet implemented"
68
+ end
69
+
70
+
71
+ # Retrieves historical market data in the form of OHLC candlesticks for a specified symbol.
72
+ # This call is limited to returning 2,000 candlesticks in a single response.
73
+ #
74
+ # Docs: http://www.questrade.com/api/documentation/rest-operations/market-calls/markets-candles-id
75
+ #
76
+ # @return [Array[Hash]] List of market data
77
+ # FIXME: REQUIRES start and end time
78
+ # @param id [Integer] the id of the symbol to retrieve candlestick data for
79
+ # @param interval [Symbol] the candlestick interval to use, see allowable values in CANDLESTICK_INTERVALS
80
+ # @example
81
+ # client.candles(9292, :oneday)
82
+ def candles(id, interval)
83
+ fail "Interval #{interval} is unsupported" unless CANDLESTICK_INTERVALS.includes?(interval)
84
+ get("/markets/candles/#{id}?interval=#{CANDLESTICK_INTERVALS[interval]}")['quotes']
85
+ end
86
+ end
87
+ end
@@ -0,0 +1 @@
1
+ require 'questrade_client/questrade/account'
@@ -0,0 +1,21 @@
1
+ require 'ostruct'
2
+ class JSONSerialized < OpenStruct
3
+ end
4
+
5
+ module QuestradeClient
6
+ class Questrade
7
+
8
+ def initialize(refresh_token, practice = false)
9
+ @client = QuestradeClient.login(refresh_token, practice)
10
+ end
11
+
12
+ def accounts
13
+ @client.accounts.map do |account_data|
14
+ Account.new(account_data)
15
+ end
16
+ end
17
+
18
+ class Account < JSONSerialized
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,53 @@
1
+ module QuestradeClient
2
+ module Symbol
3
+
4
+ # Retrieves the accounts associated with the user on behalf of which the API client is authorized.
5
+ #
6
+ # Docs: http://www.questrade.com/api/documentation/rest-operations/account-calls/accounts
7
+ #
8
+ # @return [Array[Hash]] List of symbol data
9
+ # @param args [Int|Array[Int|String]] The ID of the symbol, or a list of symbol ids or names
10
+ # @example
11
+ # client.symbols(9292)
12
+ # client.symbols(['BMO', 'SHOP', 'VTI'])
13
+ # client.symbols([9292, 8089])
14
+ def symbols(args)
15
+ if args.is_a?(Integer)
16
+ get("/symbols/#{args}")['symbols']
17
+ elsif args.length > 1 && args.first.is_a?(String)
18
+ get("/symbols?names=#{args.join(',')}")['symbols']
19
+ elsif args.length > 1 && args.first.is_a?(Integer)
20
+ get("/symbols?ids=#{args.join(',')}")['symbols']
21
+ else
22
+ fail "Malformed argument: #{args}"
23
+ end
24
+ end
25
+
26
+ # Retrieves symbol(s) using several search criteria.
27
+ #
28
+ # Docs: http://www.questrade.com/api/documentation/rest-operations/market-calls/symbols-search
29
+ #
30
+ # @return [Array[Hash]] List of symbol data
31
+ # FIXME: add offset
32
+ # @param prefix [String] Prefix to use in search
33
+ # @example
34
+ # client.symbolsearch('BMO')
35
+ def symbolsearch(prefix, offset=nil)
36
+ get("/symbols/search?prefix=#{prefix}")['symbols']
37
+ end
38
+
39
+ # Retrieves an option chain for a particular underlying symbol.
40
+ #
41
+ # Docs: http://www.questrade.com/api/documentation/rest-operations/market-calls/symbols-id-options
42
+ #
43
+ # @return [Array[Hash]] List of option chain data for symbol
44
+ # @param [Integer] Symbol id to find options for
45
+ # @example
46
+ # client.symboloptions(9292)
47
+ def symboloptions(symbolid)
48
+ get("/symbols/#{symbolid}/options")['optionChain']
49
+ end
50
+
51
+
52
+ end
53
+ end
@@ -1,3 +1,3 @@
1
1
  module QuestradeClient
2
- VERSION = '0.0.1'.freeze
2
+ VERSION = '0.0.2'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: questrade_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dale Hamel
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-09-25 00:00:00.000000000 Z
11
+ date: 2016-09-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -169,9 +169,12 @@ files:
169
169
  - bin/rubocop
170
170
  - bin/setup
171
171
  - lib/questrade_client.rb
172
- - lib/questrade_client/.client.rb.swp
173
172
  - lib/questrade_client/account.rb
174
173
  - lib/questrade_client/client.rb
174
+ - lib/questrade_client/market.rb
175
+ - lib/questrade_client/questrade.rb
176
+ - lib/questrade_client/questrade/account.rb
177
+ - lib/questrade_client/symbol.rb
175
178
  - lib/questrade_client/version.rb
176
179
  - questrade_client.gemspec
177
180
  homepage: https://github.com/dalehamel/questrade_client
Binary file