trade-o-matic 0.5.4 → 0.5.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d7c7a1d55b67326622eea9562e032ea26f85e528
4
- data.tar.gz: 123d8eb84dc23191288c8fdf9d391317f1fed0f1
3
+ metadata.gz: 3c8e57cc6c5822197a3b218e068d87d2d1ba55df
4
+ data.tar.gz: 0594847f9a29e7a4564128086fb43f3b6dd1e91c
5
5
  SHA512:
6
- metadata.gz: 0db96eff0a3dddabf187d6ee54528707c020c3656efbf7fb3ccedb4a02eac98f239ecadd190033226c78dead74e13b764ecabd69690171b1adc2b65a84064955
7
- data.tar.gz: 60c2d37e546ffaaf67d1d411067ec13b8f704addafc812e4601edccdbe6e7abd187901c552a9437aac947e1607872cca86d00ea10cc3fac14b9e4a28efcbebd7
6
+ metadata.gz: 38466835f0e006294b427e223ee4ab54c3915804037e66cc754043669f048a6b94a005f7a9649b4815c52191bb4044fe4d61e8719736db7d46ee0e1a0d0c1714
7
+ data.tar.gz: a1c6761fb607e23a291eecbb6e1e089d43d03b90fc115881800711e156157f84222b9dff831daa3cd086c46db60de93a517b0e061e82eb105403ab01d34c71e5
@@ -16,10 +16,7 @@ module Trader
16
16
  attr_mapped(:executed_volume, :traded_volume)
17
17
  attr_mapped(:instruction, :instruction)
18
18
  attr_mapped(:status, :status)
19
-
20
- def limit?
21
- true
22
- end
19
+ attr_mapped(:limit?) { |r| !r[:price].nil? }
23
20
  end
24
21
 
25
22
  attr_reader :pair, :asks, :bids, :verbose
@@ -80,6 +77,7 @@ module Trader
80
77
  @pair = CurrencyPair.for_code(_config[:base], _config[:quote])
81
78
  @base_balance = _config[:base_balance]
82
79
  @quote_balance = _config[:quote_balance]
80
+ @market_price = _config[:market_price]
83
81
  @verbose = !!_config[:verbose]
84
82
  @config = _config
85
83
  @bids = []
@@ -108,15 +106,17 @@ module Trader
108
106
  end
109
107
 
110
108
  def create_order(_session, _pair, _volume, _price, _instruction)
111
- raise 'market not supported' unless _pair == pair
112
- raise 'market orders not supported' if _price.nil?
109
+ not_supported 'market' unless _pair == pair
110
+ not_supported 'market order' if _price.nil? && @market_price.nil?
113
111
 
114
- if _instruction == Order::ASK
115
- raise 'Not enough funds' if _volume > @base_balance
116
- @base_balance -= _volume
117
- else
118
- raise 'Not enough funds' if _volume * _price > @quote_balance
119
- @quote_balance -= _volume * _price
112
+ unless _price.nil?
113
+ if _instruction == Order::ASK
114
+ raise 'Not enough funds' if _volume > @base_balance
115
+ @base_balance -= _volume
116
+ else
117
+ raise 'Not enough funds' if _volume * _price > @quote_balance
118
+ @quote_balance -= _volume * _price
119
+ end
120
120
  end
121
121
 
122
122
  info "Creating #{_instruction} order for #{_volume} #{pair.base} @ #{_price} #{pair.quote}", :green
@@ -131,6 +131,8 @@ module Trader
131
131
  traded_volume: 0.0
132
132
  }
133
133
 
134
+ execute_fake_market_order raw_order if _price.nil?
135
+
134
136
  @id += 1
135
137
  (_instruction == Order::ASK ? @asks : @bids) << raw_order
136
138
 
@@ -161,7 +163,7 @@ module Trader
161
163
  def simulate_buy(_price, _volume)
162
164
  ordered_asks = @asks.sort { |b| b[:price] * -1 }
163
165
  ordered_asks.each do |order|
164
- if order[:status] == AccountOrder::OPEN and order[:price] <= _price and _volume > 0
166
+ if order[:status] == AccountOrder::OPEN && order[:price] <= _price && _volume > 0
165
167
  if order[:pend_volume] > _volume
166
168
  @quote_balance += _volume * order[:price]
167
169
  order[:pend_volume] -= _volume
@@ -184,7 +186,7 @@ module Trader
184
186
  def simulate_sell(_price, _volume)
185
187
  ordered_bids = @bids.sort { |b| b[:price] }
186
188
  ordered_bids.each do |order|
187
- if order[:status] == AccountOrder::OPEN and order[:price] >= _price and _volume > 0
189
+ if order[:status] == AccountOrder::OPEN && order[:price] >= _price && _volume > 0
188
190
  if order[:pend_volume] > _volume
189
191
  @base_balance += _volume
190
192
  order[:pend_volume] -= _volume
@@ -231,5 +233,22 @@ module Trader
231
233
  order = @asks.find { |o| o[:id] == _id } if order.nil?
232
234
  order
233
235
  end
236
+
237
+ def execute_fake_market_order(_raw)
238
+ traded_volume = 0.0
239
+ if _raw[:instruction] == Order::ASK
240
+ traded_volume = [ @base_balance, _raw[:pend_volume] ].min
241
+ @base_balance -= traded_volume
242
+ @quote_balance += @market_price * traded_volume
243
+ else
244
+ traded_volume = [ @quote_balance/@market_price, _raw[:pend_volume] ].min
245
+ @base_balance += traded_volume
246
+ @quote_balance -= @market_price * traded_volume
247
+ end
248
+
249
+ _raw[:traded_volume] = traded_volume
250
+ _raw[:pend_volume] -= traded_volume
251
+ _raw[:status] = AccountOrder::CLOSED
252
+ end
234
253
  end
235
254
  end
@@ -1,3 +1,3 @@
1
1
  module Trader
2
- VERSION = "0.5.4"
2
+ VERSION = "0.5.5"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trade-o-matic
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.4
4
+ version: 0.5.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ignacio Baixas
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-05-13 00:00:00.000000000 Z
11
+ date: 2016-05-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client