abot-info 0.1.0 → 0.2.4
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/lib/abot/info.rb +4 -0
- data/lib/abot/info/binance_account.rb +27 -0
- data/lib/abot/info/coin.rb +14 -2
- data/lib/abot/info/database_table.rb +1 -1
- data/lib/abot/info/decorators/coin_decorator.rb +24 -6
- data/lib/abot/info/helpers.rb +12 -3
- data/lib/abot/info/table.rb +7 -4
- data/lib/abot/info/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7d58b0e5421210e4d455de713e558820168d1a1ad094e203bdf69fe3244a7dbe
|
4
|
+
data.tar.gz: 4a61b59b59a4ff4fbed7219c44b1063bcd14d7f46d4ea43cb930b3b4820d7313
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 96859eb095d54fe84a84f506c8356a9f7bf44b0a0ee80dd3f9e54a947390c18e3d7ebf21f39ea24cee7f105d407fa3f2b8efac62534280bdd9023bd63ce79927
|
7
|
+
data.tar.gz: af692d94de52095dcaa092b7829e817d60bad1f65ef9826a1843a46d4ccde0415ef3213003e165b92afd64c8ff29e9dd33fede1a0f5e460485edcafacb50e886
|
data/lib/abot/info.rb
CHANGED
@@ -43,6 +43,8 @@ module Abot
|
|
43
43
|
" timer: Время с покупки\n" \
|
44
44
|
" current_profit: Текущая прибыль\n" \
|
45
45
|
" potential_profit: Потенциальная прибыль\n",
|
46
|
+
" current_price_perc_of_order: Текущая цена (подсчет процента от ордера за продажу)\n" \
|
47
|
+
" max_price_perc_of_order: Максимальная цена за 24ч (подсчет процента от ордера за продажу)\n" \
|
46
48
|
)
|
47
49
|
parser.add_option(
|
48
50
|
:del, '--del=COLUMN1,COLUMN2,COLUMN3',
|
@@ -60,6 +62,8 @@ module Abot
|
|
60
62
|
" timer: Время с покупки\n" \
|
61
63
|
" current_profit: Текущая прибыль\n" \
|
62
64
|
" potential_profit: Потенциальная прибыль\n",
|
65
|
+
" current_price_perc_of_order: Текущая цена (подсчет процента от ордера за продажу)\n" \
|
66
|
+
" max_price_perc_of_order: Максимальная цена за 24ч (подсчет процента от ордера за продажу)\n"
|
63
67
|
)
|
64
68
|
parser.add_option(
|
65
69
|
:db_path, '--db_path=DB_PATH',
|
@@ -79,6 +79,33 @@ module Abot
|
|
79
79
|
symbol_info(symbol).try(:[], :highPrice).to_f
|
80
80
|
end
|
81
81
|
|
82
|
+
def coins_without_order(quote_assets)
|
83
|
+
exception_coins = quote_assets + ['BNB'] + Coin::FIAT
|
84
|
+
balances = account_info[:balances]
|
85
|
+
result = balances.select do |s|
|
86
|
+
s[:free].to_f != 0 &&
|
87
|
+
!exception_coins.include?(s[:asset]) &&
|
88
|
+
symbol_info(s[:asset] + 'USDT').try(:[], :askPrice).to_f * s[:free].to_f > 5 &&
|
89
|
+
(
|
90
|
+
begin
|
91
|
+
btcusdt = get_symbols.find { |f| f[:symbol] == 'BTCUSDT' }[:askPrice].to_f
|
92
|
+
if s[:asset] == 'BTC'
|
93
|
+
symbol_info("#{s[:asset]}USDT").try(:[], :askPrice).to_f * s[:free].to_f > 5
|
94
|
+
elsif get_symbols.find { |f| f[:symbol] == "#{s[:asset]}USDT" }.nil?
|
95
|
+
coin = get_symbols.find { |f| f[:symbol] == "#{name}BTC" }
|
96
|
+
coin[:askPrice].to_f * s[:free].to_f * btcusdt > 5
|
97
|
+
else
|
98
|
+
coin = get_symbols.find { |f| f[:symbol] == "#{s[:asset]}USDT" }
|
99
|
+
coin[:askPrice].to_f * s[:free].to_f > 5
|
100
|
+
end
|
101
|
+
rescue StandardError
|
102
|
+
false
|
103
|
+
end
|
104
|
+
)
|
105
|
+
end
|
106
|
+
result.pluck(:asset)
|
107
|
+
end
|
108
|
+
|
82
109
|
private
|
83
110
|
|
84
111
|
def calculation_current_balance_btc
|
data/lib/abot/info/coin.rb
CHANGED
@@ -8,9 +8,11 @@ module Abot
|
|
8
8
|
include Abot::Info::Coin::CoinDecorator
|
9
9
|
|
10
10
|
attr_reader :base_asset, :quote_asset, :average_price, :current_price, :sell_price, :volume, :num_averaging,
|
11
|
-
:total_quote, :buy_price, :step_averaging, :tick_size, :account, :timer, :trade_params
|
11
|
+
:total_quote, :buy_price, :step_averaging, :tick_size, :account, :timer, :trade_params,
|
12
|
+
:pump_detector
|
13
|
+
|
14
|
+
FIAT = %w[USDT BUSD AUD BIDR BRL EUR GBR RUB TRY TUSD USDC DAI IDRT PAX UAH NGN VAI BVND]
|
12
15
|
|
13
|
-
FIAT = ['USDT', 'BUSD', 'AUD', 'BIDR', 'BRL', 'EUR', 'GBR', 'RUB', 'TRY', 'TUSD', 'USDC', 'DAI', 'IDRT', 'PAX', 'UAH', 'NGN', 'VAI', 'BVND']
|
14
16
|
|
15
17
|
def initialize(options = {})
|
16
18
|
@trade_params = options[:trade_params]
|
@@ -27,6 +29,7 @@ module Abot
|
|
27
29
|
@step_averaging = options[:step_averaging]
|
28
30
|
@tick_size = options[:tick_size]
|
29
31
|
@timer = options[:timer]
|
32
|
+
@pump_detector = options[:pump_detector]
|
30
33
|
end
|
31
34
|
|
32
35
|
def self.current_coins(account, trade_params)
|
@@ -46,6 +49,7 @@ module Abot
|
|
46
49
|
step_averaging: coin['stepAveraging'].to_f,
|
47
50
|
tick_size: coin['tickSize'],
|
48
51
|
timer: coin['timer'].to_s[0..9],
|
52
|
+
pump_detector: coin['pumpDetector'],
|
49
53
|
)
|
50
54
|
end
|
51
55
|
end
|
@@ -74,6 +78,10 @@ module Abot
|
|
74
78
|
@percent_to_order ||= ((sell_price / current_price - 1) * 100)
|
75
79
|
end
|
76
80
|
|
81
|
+
def percent_from_order
|
82
|
+
@percent_from_order ||= ((1 - current_price / sell_price) * 100)
|
83
|
+
end
|
84
|
+
|
77
85
|
def percent_from_min_to_average
|
78
86
|
@percent_to_min ||= ((min_price / next_average_price - 1) * 100)
|
79
87
|
end
|
@@ -82,6 +90,10 @@ module Abot
|
|
82
90
|
@percent_to_max ||= ((sell_price / max_price - 1) * 100)
|
83
91
|
end
|
84
92
|
|
93
|
+
def percent_from_max
|
94
|
+
@percent_from_max ||= ((1 - max_price / sell_price) * 100)
|
95
|
+
end
|
96
|
+
|
85
97
|
def min_price
|
86
98
|
@min_price ||= account.symbol_min_price(symbol)
|
87
99
|
end
|
@@ -25,7 +25,7 @@ module Abot
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def data_daily_profit
|
28
|
-
BASE_CONNECTION.execute("SELECT quote, sum(profit) FROM daily_profit GROUP BY quote")
|
28
|
+
BASE_CONNECTION.execute("SELECT quote, sum(profit) as sum, count(*) as count FROM daily_profit GROUP BY quote")
|
29
29
|
end
|
30
30
|
end
|
31
31
|
end
|
@@ -5,6 +5,8 @@ module Abot
|
|
5
5
|
class Coin
|
6
6
|
module CoinDecorator
|
7
7
|
def decorated_sell_up
|
8
|
+
return '-' if sell_up == Float::INFINITY
|
9
|
+
|
8
10
|
rounded_sell_up = sell_up.round(2)
|
9
11
|
case num_averaging
|
10
12
|
when 1, 2
|
@@ -38,7 +40,7 @@ module Abot
|
|
38
40
|
end
|
39
41
|
|
40
42
|
def decorated_next_average_price
|
41
|
-
"#{next_average_price} (#{decorated_next_average_price_percent})"
|
43
|
+
next_average_price.zero? ? '-' : "#{next_average_price} (#{decorated_next_average_price_percent})"
|
42
44
|
end
|
43
45
|
|
44
46
|
def decorated_name
|
@@ -49,11 +51,12 @@ module Abot
|
|
49
51
|
else
|
50
52
|
''
|
51
53
|
end
|
52
|
-
"#{
|
54
|
+
"#{decorated_name_mobile} (#{account.symbol_info(symbol).try(:[], :priceChangePercent)}%)#{arrow}"
|
53
55
|
end
|
54
56
|
|
55
57
|
def decorated_name_mobile
|
56
|
-
|
58
|
+
pump_det = pump_detector == 'True' ? '👁 ' : ''
|
59
|
+
"#{pump_det}#{name}"
|
57
60
|
end
|
58
61
|
|
59
62
|
def decorated_sell_price
|
@@ -64,6 +67,10 @@ module Abot
|
|
64
67
|
"#{current_price} (#{percent_to_order.round(2)}%)"
|
65
68
|
end
|
66
69
|
|
70
|
+
def decorated_current_price_perc_of_order
|
71
|
+
"#{current_price} (#{percent_from_order.round(2)}%)"
|
72
|
+
end
|
73
|
+
|
67
74
|
def decorated_min_price
|
68
75
|
"#{min_price} (#{percent_from_min_to_average.round(2)}%)"
|
69
76
|
end
|
@@ -72,6 +79,10 @@ module Abot
|
|
72
79
|
"#{max_price} (#{percent_to_max.round(2)}%)"
|
73
80
|
end
|
74
81
|
|
82
|
+
def decorated_max_price_perc_of_order
|
83
|
+
"#{max_price} (#{percent_from_max.round(2)}%)"
|
84
|
+
end
|
85
|
+
|
75
86
|
def decorated_current_quote
|
76
87
|
current_quote.round(2)
|
77
88
|
end
|
@@ -85,16 +96,22 @@ module Abot
|
|
85
96
|
end
|
86
97
|
|
87
98
|
def decorated_buy_date
|
88
|
-
|
99
|
+
sec = timer.to_s[0..9].to_f
|
100
|
+
return '-' if sec < 1_577_836_800 # 2020-01-01 00:00:00 +0000
|
101
|
+
|
102
|
+
Time.at(sec).strftime('%d %h %H:%M')
|
89
103
|
rescue StandardError
|
90
104
|
'-'
|
91
105
|
end
|
92
106
|
|
93
107
|
def decorated_timer
|
94
|
-
|
108
|
+
sec = timer.to_s[0..9].to_f
|
109
|
+
return '-' if sec < 1_577_836_800 # 2020-01-01 00:00:00 +0000
|
110
|
+
|
111
|
+
medidas = %w[г мес д ч м c]
|
95
112
|
array = [1970, 1, 1, 0, 0, 0]
|
96
113
|
text = ''
|
97
|
-
Time.at(Time.now.to_i -
|
114
|
+
Time.at(Time.now.to_i - sec).utc.to_a.take(6).reverse.each_with_index do |k, i|
|
98
115
|
case i
|
99
116
|
when 0, 1, 2
|
100
117
|
next if text.blank? && (k - array[i]).zero?
|
@@ -118,6 +135,7 @@ module Abot
|
|
118
135
|
value = Paint[str, (Helpers::AVERAGE_COLORS[num_averaging] || :red)]
|
119
136
|
row = { value: value }
|
120
137
|
row[:alignment] = :right if name == :timer
|
138
|
+
row[:alignment] = :center if name == :buy_date
|
121
139
|
row
|
122
140
|
end
|
123
141
|
end
|
data/lib/abot/info/helpers.rb
CHANGED
@@ -12,13 +12,15 @@ module Abot
|
|
12
12
|
magenta
|
13
13
|
].freeze
|
14
14
|
|
15
|
-
def self.
|
15
|
+
def self.today_info_str
|
16
16
|
profit = 'Профит сегодня:'
|
17
|
+
transactions_count = 'Сделок '
|
17
18
|
DatabaseTable.data_daily_profit.each do |c|
|
18
19
|
tick_size = (c['quote'] == 'BTC' ? 7 : 2)
|
19
|
-
profit += Paint[" #{c['sum
|
20
|
+
profit += "#{Paint[" #{c['sum'].round(tick_size)} #{c['quote']}", :green]};"
|
21
|
+
transactions_count += "#{c['quote']}: #{Paint[c['count'], :green]}; "
|
20
22
|
end
|
21
|
-
profit
|
23
|
+
"#{profit} #{transactions_count}"
|
22
24
|
end
|
23
25
|
|
24
26
|
def self.balance_str(account, current_coins, trade_params)
|
@@ -58,6 +60,13 @@ module Abot
|
|
58
60
|
def self.check_abot
|
59
61
|
Paint['WARNING: ПРОВЕРЬТЕ БОТА !!!', :black, :red] + "\n" if (Time.now - File.mtime(DatabaseTable::DB_PATH)) > 10
|
60
62
|
end
|
63
|
+
|
64
|
+
def self.check_coins(account, quote_assets)
|
65
|
+
coins_without_order = account.coins_without_order(quote_assets)
|
66
|
+
if coins_without_order.present?
|
67
|
+
Paint["Монеты без ордера: #{coins_without_order.join(', ')}", :black, :red] + "\n"
|
68
|
+
end
|
69
|
+
end
|
61
70
|
end
|
62
71
|
end
|
63
72
|
end
|
data/lib/abot/info/table.rb
CHANGED
@@ -22,6 +22,8 @@ module Abot
|
|
22
22
|
potential_profit: "Пот.\nпрофит",
|
23
23
|
buy_date: "Дата покупки",
|
24
24
|
timer: 'Время',
|
25
|
+
current_price_perc_of_order: 'Тек.цена',
|
26
|
+
max_price_perc_of_order: 'Максимум 24h',
|
25
27
|
}.freeze
|
26
28
|
HEADINGS_COINS_TABLE_DEFAULT = %i[
|
27
29
|
name
|
@@ -95,11 +97,12 @@ module Abot
|
|
95
97
|
end
|
96
98
|
|
97
99
|
def info_str
|
100
|
+
"#{Helpers.check_coins(account, trade_params["quote_asset"].split(' '))}" \
|
98
101
|
"#{Helpers.check_abot}" \
|
99
|
-
"#{Helpers.
|
100
|
-
|
101
|
-
|
102
|
-
|
102
|
+
"#{Helpers.today_info_str}\n" \
|
103
|
+
"#{Helpers.balance_str(account, current_coins, trade_params)}\n" \
|
104
|
+
"#{Helpers.potential_balance_str(account, current_coins, trade_params)}\n" \
|
105
|
+
"#{rate_coins_str}"
|
103
106
|
end
|
104
107
|
|
105
108
|
def rate_coins_str
|
data/lib/abot/info/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: abot-info
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- w_dmitrii
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-08-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|