#russia -0, #usa -1, #BinaryCode

https://app.binance.com/uni-qr/cart/22992287009050?r=1028249916&l=uk-UA&uco=_QhdTRs0nNn0yWPtVZUqBA&uc=app_square_share_link&us=001 com.kucoin ccxt 4.2.11 com.fasterxml.jackson.core jackson-databind 2.17.2 org.slf4j slf4j-simple 2.0.16

Налаштування API ключів

Для кожної біржі (Binance, Coinbase, Kraken, KuCoin, Bybit) потрібно створити API ключі:

Binance: https://www.binance.com/en/my/settings/api-management

Coinbase: https://www.coinbase.com/settings/api

Kraken: https://www.kraken.com/u/security/api

KuCoin: https://www.kucoin.com/account/api

Bybit: https://www.bybit.com/en-US/account/api-management

Зберігайте ключі безпечно, оскільки код використовуватиме їх для автентифікації (хоча для публічних даних, як ціни, ключі не завжди потрібні).

Java-код із інтеграцією кількох бірж через #CCXT

[ {"exchange": "binance", "symbol": "BTC/USDT", "tags": "#russia #usa"}, {"exchange": "coinbase", "symbol": "BTC/USDT", "tags": "#usa"}, {"exchange": "kraken", "symbol": "ETH/USDT", "tags": "#usa #russia"}, {"exchange": "kucoin", "symbol": "DOGE/USDT", "tags": "#russia"}, {"exchange": "bybit", "symbol": "XRP/USDT", "tags": "#usa"} ]

Exchange: binance Symbol: BTC/USDT Timestamp: 1747228800000 Price: 87000.00 Volume: 150.25 Tags: #russia #usa Binary Code: 01 --- Exchange: coinbase Symbol: ETH/USDT Timestamp: 1747228800000 Price: 3200.00 Volume: 250.50 Tags: #usa Binary Code: 1 --- Price Analysis Summary: Exchange: binance Symbol: BTC/USDT Average Price: 86950.00 Volatility: 100.25 Trump Tariff Impact: Possible tariff impact detected (price drop) --- Exchange: coinbase Symbol: ETH/USDT Average Price: 3200.00 Volatility: 50.00 Trump Tariff Impact: No significant tariff impact ---

4.0.0 com.crypto exchange-analyzer 1.0-SNAPSHOT 11 11 UTF-8 com.kucoin ccxt 4.2.11 com.fasterxml.jackson.core jackson-databind 2.17.2 org.jfree jfreechart 1.5.4 org.slf4j slf4j-simple 2.0.16 org.apache.maven.plugins maven-compiler-plugin 3.13.0 ${maven.compiler.source} ${maven.compiler.target} org.codehaus.mojo exec-maven-plugin 3.4.0 com.crypto.MultiExchangeVisualizer

package com.crypto; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.kucoin.ccxt.Exchange; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartUtils; import org.jfree.chart.JFreeChart; import org.jfree.chart.plot.XYPlot; import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer; import org.jfree.data.time.Millisecond; import org.jfree.data.time.TimeSeries; import org.jfree.data.time.TimeSeriesCollection; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.awt.*; import java.io.*; import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class MultiExchangeVisualizer { private static final Logger logger = LoggerFactory.getLogger(MultiExchangeVisualizer.class); private static final String[] EXCHANGES = {"binance", "coinbase", "kraken", "kucoin", "bybit"}; private static final String[] SYMBOLS = {"BTC/USDT", "ETH/USDT", "DOGE/USDT", "XRP/USDT"}; private static final Map> priceSeries = new ConcurrentHashMap<>(); private static final Map>> priceData = new ConcurrentHashMap<>(); private static final List results = Collections.synchronizedList(new ArrayList<>()); private static final String JSON_FILE = "tags.json"; private static final String OUTPUT_FILE = "multi_exchange_analysis.txt"; private static final String CHART_FILE = "prices_chart.png"; public static void main(String[] args) { // Завантаження тегів із JSON Map tagsData = loadTagsFromJson(JSON_FILE); // Ініціалізація серій для графіків і даних for (String exchange : EXCHANGES) { priceSeries.put(exchange, new ConcurrentHashMap<>()); priceData.put(exchange, new ConcurrentHashMap<>()); for (String symbol : SYMBOLS) { priceSeries.get(exchange).put(symbol, new TimeSeries(exchange + "_" + symbol)); priceData.get(exchange).put(symbol, new ArrayList<>()); } } // Ініціалізація пулу потоків ExecutorService executor = Executors.newFixedThreadPool(EXCHANGES.length); // Ініціалізація бірж for (String exchangeId : EXCHANGES) { try { Exchange exchange = new Exchange(exchangeId, new HashMap<>()); executor.submit(() -> pollExchangeData(exchange, tagsData)); } catch (Exception e) { logger.error("Error initializing exchange {}: {}", exchangeId, e.getMessage()); } } // Зупинка після 60 секунд і створення графіка try { Thread.sleep(60000); executor.shutdown(); writeToFile(OUTPUT_FILE, results); generatePriceChart(); logger.info("Data collection stopped. Results written to {}. Chart saved as {}.", OUTPUT_FILE, CHART_FILE); } catch (InterruptedException e) { logger.error("Error during sleep: {}", e.getMessage()); } } // Опитування даних із біржі private static void pollExchangeData(Exchange exchange, Map tagsData) { String exchangeId = exchange.getId(); try { while (!Thread.currentThread().isInterrupted()) { for (String symbol : SYMBOLS) { try { Map ticker = exchange.fetchTicker(symbol); double price = ((Number) ticker.get("last")).doubleValue(); double volume = ((Number) ticker.get("baseVolume")).doubleValue(); long timestamp = ((Number) ticker.get("timestamp")).longValue(); // Отримання тегів String tagKey = ex