-
Notifications
You must be signed in to change notification settings - Fork 2
/
rekt.rs
51 lines (45 loc) · 1.47 KB
/
rekt.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
use std::{
collections::HashSet
};
use book::{
utils::get_args
};
use crypto::{
types::{
assets::Asset,
marketplace::{OrderBook,read_marketplace,fetch_sell_books,orderbook,
dual_asset},
portfolio::{Portfolio,assets_from_file,print_portfolio,for_each_asset},
},
algos::orders::target_sell_ratio
};
fn usage() {
println!("\n./rekt <assets CSV file> <marketplace LSV file>");
println!("\n\tmakes bid rekt-omendations based on portfolio and markets.");
let follow = "... if you blindly follow these bids,";
let comeuppance = "you get what's comin' t'ye!";
println!("\n\t{} {}", follow, comeuppance);
println!("\n\tCaveat Emptor. DYOR. YMMV.");
}
fn main() {
if let [assets_file, markets_file] = get_args().as_slice() {
let markets = read_marketplace(markets_file);
let portfolio = assets_from_file(assets_file);
print_portfolio(&portfolio);
println!("\nRecommendations\n");
for_each_asset(&portfolio, |asset| rec(&portfolio, &markets, asset));
} else {
usage();
}
}
fn rec(_p: &Portfolio, m: &HashSet<OrderBook>, sell: &Asset) {
let books = fetch_sell_books(m, sell);
books.iter().for_each(|book| anal(sell, book));
}
fn anal(sell: &Asset, book: &OrderBook) {
if let Some(target) = target_sell_ratio(sell, book, 1.1) {
let buy = dual_asset(book, sell);
println!("SELL {} on {} at Price({}): {}",
&sell.token, orderbook(book), buy, target);
}
}