ig_markets 0.26 → 0.27
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 +4 -4
- data/CHANGELOG.md +5 -0
- data/lib/ig_markets/cli/commands/console_command.rb +1 -1
- data/lib/ig_markets/cli/commands/orders_command.rb +1 -1
- data/lib/ig_markets/cli/commands/performance_command.rb +1 -1
- data/lib/ig_markets/cli/commands/positions_command.rb +4 -4
- data/lib/ig_markets/cli/main.rb +3 -5
- data/lib/ig_markets/dealing_platform.rb +11 -11
- data/lib/ig_markets/format.rb +20 -5
- data/lib/ig_markets/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 38e42f2852c1b0b82d37dcd2268baeea8fe96285
|
|
4
|
+
data.tar.gz: 785316d7a75af12c80128175e93a8130e38a0182
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 3513fd82d3776331f049479a649206b47803047645ec2a51695dde2492ebdfeaed15678da1ce32f9fca8ecdb5bfa91644f1a6619dbd7b1919a2555791a7382af
|
|
7
|
+
data.tar.gz: b0408775065f32ac25fe8e0e867ca011eb07e85a91be8508ac41a000a792bffed42fbcf2e38835a667b1f59e76186cd6014e22cb885fffac38c8382c7917512b
|
data/CHANGELOG.md
CHANGED
|
@@ -2,7 +2,7 @@ module IGMarkets
|
|
|
2
2
|
module CLI
|
|
3
3
|
# Implements the `ig_markets console` command.
|
|
4
4
|
class Main < Thor
|
|
5
|
-
desc 'console',
|
|
5
|
+
desc 'console', "Logs in and opens a live Ruby console, the IGMarkets::DealingPlatform instance is named 'ig'"
|
|
6
6
|
|
|
7
7
|
def console
|
|
8
8
|
self.class.begin_session(options) do |dealing_platform|
|
|
@@ -18,7 +18,7 @@ module IGMarkets
|
|
|
18
18
|
|
|
19
19
|
desc 'create', 'Creates a new working order'
|
|
20
20
|
|
|
21
|
-
option :currency_code, required: true, desc:
|
|
21
|
+
option :currency_code, required: true, desc: "The 3 character currency code, must be one of the instrument's " \
|
|
22
22
|
'currencies'
|
|
23
23
|
option :direction, enum: %w(buy sell), required: true, desc: 'The trade direction'
|
|
24
24
|
option :epic, required: true, desc: 'The EPIC of the market to trade'
|
|
@@ -65,7 +65,7 @@ module IGMarkets
|
|
|
65
65
|
Note: this table only shows the profit/loss made from dealing, it does not include interest payments,
|
|
66
66
|
dividends, or other adjustments that may have occurred over this period.
|
|
67
67
|
|
|
68
|
-
Total: #{Format.
|
|
68
|
+
Total: #{Format.colored_currency profit_loss, currency}
|
|
69
69
|
END
|
|
70
70
|
end
|
|
71
71
|
end
|
|
@@ -24,14 +24,14 @@ module IGMarkets
|
|
|
24
24
|
|
|
25
25
|
desc 'create', 'Creates a new position'
|
|
26
26
|
|
|
27
|
-
option :currency_code, required: true, desc:
|
|
27
|
+
option :currency_code, required: true, desc: "The 3 character currency code, must be one of the instrument's " \
|
|
28
28
|
'currencies'
|
|
29
29
|
option :direction, required: true, enum: %w(buy sell), desc: 'The trade direction'
|
|
30
30
|
option :epic, required: true, desc: 'The EPIC of the market to trade'
|
|
31
31
|
option :expiry, desc: 'The expiry date of the instrument (if applicable), format: yyyy-mm-dd'
|
|
32
32
|
option :force_open, type: :boolean, default: false, desc: 'Whether a force open is required'
|
|
33
33
|
option :guaranteed_stop, type: :boolean, default: false, desc: 'Whether a guaranteed stop is required'
|
|
34
|
-
option :level, type: :numeric, desc:
|
|
34
|
+
option :level, type: :numeric, desc: "Required if and only if --order-type is 'limit' or 'quote'"
|
|
35
35
|
option :limit_distance, type: :numeric, desc: 'The distance away in pips to place the limit, if set then ' \
|
|
36
36
|
'--limit-level must not be used'
|
|
37
37
|
option :limit_level, type: :numeric, desc: 'The limit level, if set then --limit-distance must not be used'
|
|
@@ -70,7 +70,7 @@ module IGMarkets
|
|
|
70
70
|
|
|
71
71
|
desc 'close DEAL-ID', 'Closes or partially closes a position'
|
|
72
72
|
|
|
73
|
-
option :level, type: :numeric, desc:
|
|
73
|
+
option :level, type: :numeric, desc: "Required if and only if --order-type is 'limit' or 'quote'"
|
|
74
74
|
option :order_type, enum: %w(limit market quote), default: 'market', desc: 'The order type'
|
|
75
75
|
option :quote_id, desc: 'The Lightstreamer quote ID, required when using --order-type=quote'
|
|
76
76
|
option :size, type: :numeric, desc: 'The size of the position to close, if not specified then the entire ' \
|
|
@@ -130,7 +130,7 @@ module IGMarkets
|
|
|
130
130
|
currency_totals = positions.group_by(&:currency).map do |currency, subset|
|
|
131
131
|
total = subset.map(&:profit_loss).reduce :+
|
|
132
132
|
|
|
133
|
-
Format.
|
|
133
|
+
Format.colored_currency total, currency
|
|
134
134
|
end
|
|
135
135
|
|
|
136
136
|
puts "\nTotal profit/loss: #{currency_totals.join ', '}"
|
data/lib/ig_markets/cli/main.rb
CHANGED
|
@@ -46,7 +46,7 @@ module IGMarkets
|
|
|
46
46
|
#
|
|
47
47
|
# @param [Array<String>] argv The array of command-line arguments.
|
|
48
48
|
def bootstrap(argv)
|
|
49
|
-
config_file.prepend_profile_arguments_to_argv argv
|
|
49
|
+
config_file.prepend_profile_arguments_to_argv argv unless argv.first == 'help'
|
|
50
50
|
|
|
51
51
|
if argv.index('--version') || argv.index('-v')
|
|
52
52
|
puts VERSION
|
|
@@ -110,7 +110,7 @@ module IGMarkets
|
|
|
110
110
|
begin
|
|
111
111
|
attributes[attribute] = klass.strptime attributes[attribute], format
|
|
112
112
|
rescue ArgumentError
|
|
113
|
-
raise ArgumentError,
|
|
113
|
+
raise ArgumentError, %(invalid #{attribute}, use format "#{display_format}")
|
|
114
114
|
end
|
|
115
115
|
else
|
|
116
116
|
attributes[attribute] = nil
|
|
@@ -170,9 +170,7 @@ END
|
|
|
170
170
|
def print_deal_confirmation_profit_loss(deal_confirmation)
|
|
171
171
|
return unless deal_confirmation.profit
|
|
172
172
|
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
puts "Profit/loss: #{profit.colorize(deal_confirmation.profit < 0 ? :red : :green)}"
|
|
173
|
+
puts "Profit/loss: #{Format.colored_currency deal_confirmation.profit, deal_confirmation.profit_currency}"
|
|
176
174
|
end
|
|
177
175
|
end
|
|
178
176
|
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
module IGMarkets
|
|
2
2
|
# This is the primary class for interacting with the IG Markets API. After signing in using {#sign_in} most
|
|
3
|
-
# functionality
|
|
3
|
+
# functionality can be accessed using the following methods:
|
|
4
4
|
#
|
|
5
5
|
# - {#account}
|
|
6
6
|
# - {#client_sentiment}
|
|
@@ -11,9 +11,9 @@ module IGMarkets
|
|
|
11
11
|
# - {#working_orders}
|
|
12
12
|
# - {#streaming}
|
|
13
13
|
#
|
|
14
|
-
# See `README.md` for examples.
|
|
14
|
+
# See `README.md` for code examples.
|
|
15
15
|
#
|
|
16
|
-
# If any errors occur while executing requests to the IG Markets API then an {IGMarketsError} will be raised.
|
|
16
|
+
# If any errors occur while executing requests to the IG Markets API then an {IGMarketsError} subclass will be raised.
|
|
17
17
|
class DealingPlatform
|
|
18
18
|
# The session used by this dealing platform.
|
|
19
19
|
#
|
|
@@ -25,7 +25,7 @@ module IGMarkets
|
|
|
25
25
|
# @return [ClientAccountSummary]
|
|
26
26
|
attr_reader :client_account_summary
|
|
27
27
|
|
|
28
|
-
# Methods for working with the logged in account.
|
|
28
|
+
# Methods for working with the balances and history of the logged in account.
|
|
29
29
|
#
|
|
30
30
|
# @return [AccountMethods]
|
|
31
31
|
attr_reader :account
|
|
@@ -80,13 +80,13 @@ module IGMarkets
|
|
|
80
80
|
|
|
81
81
|
# Signs in to the IG Markets Dealing Platform, either the live platform or the demo platform.
|
|
82
82
|
#
|
|
83
|
-
# @param [String] username The
|
|
84
|
-
# @param [String] password The
|
|
85
|
-
# @param [String] api_key The
|
|
83
|
+
# @param [String] username The IG Markets username.
|
|
84
|
+
# @param [String] password The IG Markets password.
|
|
85
|
+
# @param [String] api_key The IG Markets API key.
|
|
86
86
|
# @param [:live, :demo] platform The platform to use.
|
|
87
87
|
#
|
|
88
88
|
# @return [ClientAccountSummary] The client account summary returned by the sign in request. This result can also
|
|
89
|
-
# be accessed
|
|
89
|
+
# be accessed later using {#client_account_summary}.
|
|
90
90
|
def sign_in(username, password, api_key, platform)
|
|
91
91
|
session.username = username
|
|
92
92
|
session.password = password
|
|
@@ -118,9 +118,9 @@ module IGMarkets
|
|
|
118
118
|
instantiate_models Application, session.get('operations/application')
|
|
119
119
|
end
|
|
120
120
|
|
|
121
|
-
# Disables the API key currently
|
|
122
|
-
# Markets API with this key will
|
|
123
|
-
#
|
|
121
|
+
# Disables the API key currently being used by the logged in session. This means that any further requests to the IG
|
|
122
|
+
# Markets API with this key will raise {Errors::APIKeyDisabledError}. Disabled API keys can only be re-enabled
|
|
123
|
+
# through the web platform.
|
|
124
124
|
#
|
|
125
125
|
# @return [Application]
|
|
126
126
|
def disable_api_key
|
data/lib/ig_markets/format.rb
CHANGED
|
@@ -20,19 +20,34 @@ module IGMarkets
|
|
|
20
20
|
# currencies except the Japanese Yen.
|
|
21
21
|
#
|
|
22
22
|
# @param [Float, Integer] amount The currency amount to format.
|
|
23
|
-
# @param [String]
|
|
23
|
+
# @param [String] currency_name The name or symbol of the currency.
|
|
24
24
|
#
|
|
25
25
|
# @return [String] The formatted currency amount, e.g. `"USD -130.40"`, `"AUD 539.10"`, `"JPY 3560"`.
|
|
26
|
-
def currency(amount,
|
|
26
|
+
def currency(amount, currency_name)
|
|
27
27
|
return '' unless amount
|
|
28
28
|
|
|
29
|
-
if ['JPY', '¥'].include?
|
|
30
|
-
"#{
|
|
29
|
+
if ['JPY', '¥'].include? currency_name
|
|
30
|
+
"#{currency_name} #{format '%i', amount.to_i}"
|
|
31
31
|
else
|
|
32
|
-
"#{
|
|
32
|
+
"#{currency_name} #{format '%.2f', amount.to_f}"
|
|
33
33
|
end
|
|
34
34
|
end
|
|
35
35
|
|
|
36
|
+
# Returns a formatted string for the specified currency amount and currency, and colors it red for negative values
|
|
37
|
+
# and green for positive values. Two decimal places are used for all currencies except the Japanese Yen.
|
|
38
|
+
#
|
|
39
|
+
# @param [Float, Integer] amount The currency amount to format.
|
|
40
|
+
# @param [String] currency_name The currency.
|
|
41
|
+
#
|
|
42
|
+
# @return [String] The formatted and colored currency amount, e.g. `"USD -130.40"`, `"AUD 539.10"`, `"JPY 3560"`.
|
|
43
|
+
def colored_currency(amount, currency_name)
|
|
44
|
+
return '' unless amount
|
|
45
|
+
|
|
46
|
+
color = amount < 0 ? :red : :green
|
|
47
|
+
|
|
48
|
+
currency(amount, currency_name).send color
|
|
49
|
+
end
|
|
50
|
+
|
|
36
51
|
# Returns a formatted string for the specified number of seconds in the format `[<hours>:]<minutes>:<seconds>`.
|
|
37
52
|
#
|
|
38
53
|
# @param [Integer] value The number of seconds to format.
|
data/lib/ig_markets/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ig_markets
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: '0.
|
|
4
|
+
version: '0.27'
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Richard Viney
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2017-01-
|
|
11
|
+
date: 2017-01-18 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: colorize
|
|
@@ -184,14 +184,14 @@ dependencies:
|
|
|
184
184
|
requirements:
|
|
185
185
|
- - "~>"
|
|
186
186
|
- !ruby/object:Gem::Version
|
|
187
|
-
version: '0.
|
|
187
|
+
version: '0.47'
|
|
188
188
|
type: :development
|
|
189
189
|
prerelease: false
|
|
190
190
|
version_requirements: !ruby/object:Gem::Requirement
|
|
191
191
|
requirements:
|
|
192
192
|
- - "~>"
|
|
193
193
|
- !ruby/object:Gem::Version
|
|
194
|
-
version: '0.
|
|
194
|
+
version: '0.47'
|
|
195
195
|
- !ruby/object:Gem::Dependency
|
|
196
196
|
name: simplecov
|
|
197
197
|
requirement: !ruby/object:Gem::Requirement
|