Class: BitexBot::SellOpeningFlow
- Inherits:
-
OpeningFlow
- Object
- ActiveRecord::Base
- OpeningFlow
- BitexBot::SellOpeningFlow
- Defined in:
- lib/bitex_bot/models/sell_opening_flow.rb
Overview
A workflow for selling bitcoin in Bitex and buying on another exchange. The SellOpeningFlow factory function estimates how much you could buy on the other exchange and calculates a reasonable price taking into account the remote order book and the recent operated volume.
When created, a SellOpeningFlow places an Ask on Bitex for the calculated quantity and price, when the Ask is matched on Bitex an OpenSell is created to buy the same quantity for a lower price on the other exchange.
A SellOpeningFlow can be cancelled at any point, which will cancel the Bitex order and any orders on the remote exchange created from its OpenSell’s
Instance Attribute Summary collapse
-
#order_id ⇒ Object
The first thing a SellOpeningFlow does is placing an Ask on Bitex, this is its unique id.
Class Method Summary collapse
-
.create_for_market(taker_fiat_balance, taker_asks, taker_transactions, maker_fee, taker_fee, store) ⇒ SellOpeningFlow
Start a workflow for selling bitcoin on bitex and buying on the other exchange.
-
.fx_rate ⇒ Object
end: create_for_market helpers.
-
.maker_price(fiat_to_spend_re_buying) ⇒ Object
create_for_market helpers.
- .maker_specie_to_obtain ⇒ Object
- .maker_specie_to_spend ⇒ Object
- .open_position_class ⇒ Object
- .order_class ⇒ Object
- .order_type ⇒ Object
- .profit ⇒ Object
- .remote_value_to_use(value_to_use_needed, safest_price) ⇒ Object
- .safest_price(transactions, taker_asks, bitcoins_to_use) ⇒ Object
- .taker_specie_to_obtain ⇒ Object
- .taker_specie_to_spend ⇒ Object
-
.transaction_class ⇒ Object
sought_transaction helpers.
-
.transaction_order_id(transaction) ⇒ Object
sync_open_positions helpers.
- .value_per_order ⇒ Object
- .value_to_use ⇒ Object
Methods inherited from OpeningFlow
active, active_transaction?, calc_remote_value, create_open_position!, create_order!, enough_funds?, enough_remote_funds?, expected_kind_transaction?, expected_order_book?, #finalise!, maker_plus, old_active, open_position?, sought_transaction?, #statuses, sync_open_positions
Instance Attribute Details
#order_id ⇒ Object
The first thing a SellOpeningFlow does is placing an Ask on Bitex, this is its unique id.
13 14 15 |
# File 'lib/bitex_bot/models/sell_opening_flow.rb', line 13 def order_id @order_id end |
Class Method Details
.create_for_market(taker_fiat_balance, taker_asks, taker_transactions, maker_fee, taker_fee, store) ⇒ SellOpeningFlow
Start a workflow for selling bitcoin on bitex and buying on the other exchange. The quantity to be sold on bitex is retrieved from Settings, if there is not enough BTC on bitex or USD on the other exchange then no order will be placed and an exception will be raised instead.
The amount a SellOpeningFlow will try to sell and the price it will try to charge are derived from these parameters:
of USD on the other exchange.
31 32 33 |
# File 'lib/bitex_bot/models/sell_opening_flow.rb', line 31 def self.create_for_market(taker_fiat_balance, taker_asks, taker_transactions, maker_fee, taker_fee, store) super end |
.fx_rate ⇒ Object
end: create_for_market helpers
82 83 84 |
# File 'lib/bitex_bot/models/sell_opening_flow.rb', line 82 def self.fx_rate Settings.selling_fx_rate end |
.maker_price(fiat_to_spend_re_buying) ⇒ Object
create_for_market helpers
52 53 54 |
# File 'lib/bitex_bot/models/sell_opening_flow.rb', line 52 def self.maker_price() * fx_rate / value_to_use * (1 + profit / 100) end |
.maker_specie_to_obtain ⇒ Object
94 95 96 |
# File 'lib/bitex_bot/models/sell_opening_flow.rb', line 94 def self.maker_specie_to_obtain Robot.maker.quote.upcase end |
.maker_specie_to_spend ⇒ Object
90 91 92 |
# File 'lib/bitex_bot/models/sell_opening_flow.rb', line 90 def self.maker_specie_to_spend Robot.maker.base.upcase end |
.open_position_class ⇒ Object
40 41 42 |
# File 'lib/bitex_bot/models/sell_opening_flow.rb', line 40 def self.open_position_class OpenSell end |
.order_class ⇒ Object
56 57 58 |
# File 'lib/bitex_bot/models/sell_opening_flow.rb', line 56 def self.order_class Bitex::Ask end |
.order_type ⇒ Object
61 62 63 |
# File 'lib/bitex_bot/models/sell_opening_flow.rb', line 61 def self.order_type :sell end |
.profit ⇒ Object
65 66 67 |
# File 'lib/bitex_bot/models/sell_opening_flow.rb', line 65 def self.profit store.selling_profit || Settings.selling.profit end |
.remote_value_to_use(value_to_use_needed, safest_price) ⇒ Object
69 70 71 |
# File 'lib/bitex_bot/models/sell_opening_flow.rb', line 69 def self.remote_value_to_use(value_to_use_needed, safest_price) value_to_use_needed * safest_price end |
.safest_price(transactions, taker_asks, bitcoins_to_use) ⇒ Object
73 74 75 |
# File 'lib/bitex_bot/models/sell_opening_flow.rb', line 73 def self.safest_price(transactions, taker_asks, bitcoins_to_use) OrderBookSimulator.run(Settings.time_to_live, transactions, taker_asks, nil, bitcoins_to_use, nil) end |
.taker_specie_to_obtain ⇒ Object
102 103 104 |
# File 'lib/bitex_bot/models/sell_opening_flow.rb', line 102 def self.taker_specie_to_obtain Robot.taker.base.upcase end |
.taker_specie_to_spend ⇒ Object
98 99 100 |
# File 'lib/bitex_bot/models/sell_opening_flow.rb', line 98 def self.taker_specie_to_spend Robot.taker.quote.upcase end |
.transaction_class ⇒ Object
sought_transaction helpers
46 47 48 |
# File 'lib/bitex_bot/models/sell_opening_flow.rb', line 46 def self.transaction_class Bitex::Sell end |
.transaction_order_id(transaction) ⇒ Object
sync_open_positions helpers
36 37 38 |
# File 'lib/bitex_bot/models/sell_opening_flow.rb', line 36 def self.transaction_order_id(transaction) transaction.raw.ask_id end |
.value_per_order ⇒ Object
86 87 88 |
# File 'lib/bitex_bot/models/sell_opening_flow.rb', line 86 def self.value_per_order value_to_use end |
.value_to_use ⇒ Object
77 78 79 |
# File 'lib/bitex_bot/models/sell_opening_flow.rb', line 77 def self.value_to_use store.selling_quantity_to_sell_per_order || Settings.selling.quantity_to_sell_per_order end |