debi12345, это да... но потом может быть очень много проблем. Возможно, что их решение съест всю прибыль.
API на таких биржах доступно только зареганным на бирже, операции (даже только просмотровые) на бирже не начнешь не положив (намайнив или купив за валюту) N-ую сумму на свой биржевой кошелек. За систематические шалости с API - бан эккаунта (при этом ессно тереяшь то, что в кошельке).
Ессно на котировках на таких биржах не выиграешь - как прочем на любой бирже если не инсайд. В вот микро-трэйдинг (очень много очень мелких чередующихся купи-продай операций на флюктуациях) - словно создан для брокер-ботов.
Боты (в данном простейшем примере на Rust-е) выглядят примерно так:
Код: Выделить всё
extern crate rusqlite;
extern crate coinnect;
extern crate serde_json;
use std::path::PathBuf;
use coinnect::kraken::{KrakenApi, KrakenCreds};
use std::error::Error;
fn main() {
// We create a KrakenApi by loading a json file containing API configuration
// (see documentation for more info)
let path = PathBuf::from("keys_real.json");
let my_creds = KrakenCreds::new_from_file("account_kraken", path).unwrap();
let mut my_api = KrakenApi::new(my_creds).unwrap();
let server_time_request = match my_api.get_server_time() {
Ok(server_time_request) => server_time_request,
Err(err) => panic!("Error : {:?}, description : {}", err, err.description()),
};
let server_times = server_time_request.get("result").unwrap();
println!("result= {}",server_times["unixtime"]);
// First, get the list of all pair we can trade with EUR€ as quote
// You could use a simple unwrap() or use match to recover from an error for example
let pairs_request = match my_api.get_tradable_asset_pairs("", "") {
Ok(pairs_request) => pairs_request,
Err(err) => panic!("Error : {:?}, description : {}", err, err.description()),
};
let list_all_pairs = pairs_request.get("result").unwrap().as_object().unwrap();
let mut list_pairs_eur = Vec::new();
for pair in list_all_pairs {
// The map structure is explained in documentation
let quote = pair.1
.as_object()
.unwrap()
.get("quote")
.unwrap()
.as_str()
.unwrap();
if quote == "ZEUR" {
let name = pair.0;
list_pairs_eur.push(name);
}
}
println!("List {:?}", list_pairs_eur);
// Now that we have the pairs, we choose the one with the highest price variation.
// We query the ticker to get the opening and closing price over the last 24 hours for each
// pairs in list_pairs_eur. KrakenApi has a blocking timer which prevents from ban if you
// make rapid succession of requests (inside a for loop for example). Here, the ticker function
// can take a list of pairs as parameter, so 1 request should suffice.
// Convert Vec into comma separated values String
let eur_pairs = format!("{:?}", list_pairs_eur);
let eur_pairs = eur_pairs
.replace(""", "")
.replace("[", "")
.replace("]", "")
.replace(" ", "");
// Get ticker
let ticker_request = my_api.get_ticker_information(&eur_pairs).unwrap();
let list_ticker = ticker_request.get("result").unwrap().as_object().unwrap();
let mut pair_to_buy = "";
let mut pair_price_var = 0.0;
let mut current_price = 0.0;
for pair in list_ticker {
let name = pair.0;
// WARNING: Kraken uses quotes to encapsulate floating value
let pair_info = pair.1.as_object().unwrap();
let open_price = pair_info
.get("o")
.unwrap()
.as_str()
.unwrap()
.parse::<f64>()
.unwrap();
let close_price_array = pair_info.get("c").unwrap().as_array().unwrap();
let close_price = close_price_array[0]
.as_str()
.unwrap()
.parse::<f64>()
.unwrap();
let price_var = (close_price / open_price - 1.0) * 100.0;
if price_var > pair_price_var {
pair_price_var = price_var;
pair_to_buy = name;
current_price = close_price;
}
}
println!("{} has the highest price variation ({:.2}%).",
pair_to_buy,
pair_price_var);
здесь только просмотр, а есть еще операции покупки,продажи, отмены и статистки...
Добавлено спустя 1 час 58 минут 1 секунду:Жалкие попытки мошенника оправдаться:
Интервью Илона Маска на Recode 2018 (01.11.18) |На русском|https://youtu.be/iiwDBkLyvHs 