جاوا¶
io.github.bitpin-dev:bitpin-sdk با پکیج io.github.bitpindev.bitpin: همان SDK به زبان جاوا، با همان رفتار پایتون، تایپاسکریپت و Go. هر متد تا رسیدن پاسخ منتظر میماند (blocking) و یک کلاینت Bitpin را میتوان بین چند thread به اشتراک گذاشت؛ برای اجرای همزمان چند فراخوانی از virtual thread استفاده کنید.
<dependency>
<groupId>io.github.bitpin-dev</groupId>
<artifactId>bitpin-sdk</artifactId>
<version>0.1.0</version>
</dependency>
implementation("io.github.bitpin-dev:bitpin-sdk:0.1.0")
import io.github.bitpindev.bitpin.*;
import java.math.BigDecimal;
import java.util.Map;
try (Bitpin client = new Bitpin(Config.fromEnv().build())) { // BITPIN_API_KEY، BITPIN_SECRET_KEY، BITPIN_DOMAIN
Ticker ticker = client.fetchTicker("BTC/IRT");
Order order = client.createOrder("USDT/IRT", "limit", "buy",
new BigDecimal("10"), new BigDecimal("90000"), Map.of("clientOrderId", "bot-1"));
client.cancelOrderByIdentifier("bot-1");
} catch (InsufficientFundsException e) {
// ...
}
نسخههای پشتیبانیشده¶
- جاوا ۲۱ یا بالاتر (فایل jar برای جاوا ۲۱ ساخته میشود و CI روی ۲۱، ۲۵ و ۲۷ آزمایش میکند). مخزن برای توسعه JDK 25 را در
java/.java-versionمشخص میکند، مثل.python-versionدر پایتون، و با Maven wrapper (./mvnw، Maven 3.10.0) ساخته میشود؛ لازم نیست خودتان Maven نصب کنید. - وابستگیهای زمان اجرا: Jackson 3 برای JSON (پکیجهای
tools.jacksonآن با Jackson 2 در برنامهٔ شما تداخل ندارند) و کلاینت رسمی Centrifugo یعنیcentrifuge-javaبرای وبسوکت، روی okhttp 5. - نسخهها با تگ
java-vX.Y.Zمنتشر میشوند و در Maven Central قرار میگیرند.
تفاوت با پایتون¶
| پایتون | جاوا | |
|---|---|---|
| فراخوانی | client.fetch_order_book("BTC/IRT") |
client.fetchOrderBook("BTC/IRT") که OrderBook برمیگرداند؛ blocking و thread-safe |
| آرگومانهای اختیاری | آرگومانهای کلیدی | overloadها، و null یعنی «تنظیم نشده»: fetchOrders(symbol, since, limit, params) |
| خروجی | دیکشنری با کلیدهای ccxt | record با نامهای ccxt (order.clientOrderId()، order.filled())؛ پاسخ خام در info() است |
| اعداد | Decimal |
همهجا BigDecimal، هم ورودی و هم خروجی؛ مقدار ناموجود null است |
| خطاها | کلاسهای استثنا | استثناهای unchecked با سلسلهمراتب ccxt و نامگذاری جاوا: InsufficientFundsException از ExchangeException و آن از BitpinException ارث میبرد. status()، body()، retryAfter()، code()، feature() و ccxtName() جزئیات را میدهند |
| لغو گروهی | cancel_orders(ids=[...]) |
cancelOrders(ids, null) یا cancelOrders(null, identifiers) |
| مهلت | timeout |
Config.builder().timeout(Duration)؛ هر watch* هم یک مهلت Duration میپذیرد |
| وبسوکت | هر دو کلاینت | داخلی؛ watch* تا بهروزرسانی بعدی منتظر میماند |
متدها¶
- بازارها:
loadMarkets،market،fetchMarkets،fetchCurrencies،fetchNetworks،fetchMarketSuspensions،has،rateLimits،config - قیمتها:
fetchTicker،fetchTickers،fetchOrderBook،fetchTrades،fetchOHLCV - کارمزد:
fetchTradingFees،fetchTradingFee - سفارشها:
createOrder،createOrders،fetchOrder،fetchOrders،fetchOpenOrders،fetchClosedOrders،fetchOrderHistory،cancelOrder،cancelOrderByIdentifier،cancelOrders،fetchMyTrades - کیف پول:
fetchBalance،fetchBankAccounts،fetchDepositAddress،fetchCurrencyNetworks،fetchDeposits،fetchWithdrawals،withdraw،verifyWithdrawOtp،resendWithdrawOtp - وبسوکت:
watchTicker،watchOHLCV،watchOrderBook،watchTrades،watchOrders،watchMyTradesوcloseبرای قطع اتصال (BitpinازAutoCloseableپیروی میکند) - سطح پایین:
request(endpointId, pathParams, params, body)وtoStringکه کلیدهای شما را پنهان میکند - فعلاً در بیتپین موجود نیست (
NotSupportedExceptionپرتاب میکنند):cancelAllOrders،editOrder،fetchAccounts،fetchLedger،transfer،fetchDepositWithdrawFees،fetchPositions،setLeverage،createDepositAddress،watchBalance،watchTickers،setSandboxMode
آرگومانها، محدودیتها و خروجیها همانهایی است که در صفحههای دادههای بازار، معامله، کیف پول و وبسوکت آمده است.
پیکربندی¶
Config config = Config.builder()
.apiKey("...").secretKey("...")
.domain(Domain.IR) // ORG (پیشفرض)، IR یا MARKET
.timeout(Duration.ofSeconds(10))
.maxRetries(3) // فقط برای درخواستهای تکرارپذیر
.rateLimit("orderbook", "10800/min")
.tokenStore(new FileTokenStore()) // اشتراک توکن بین پروسهها
.build();
با httpClient(HttpClient) کلاینت HTTP جاوای خودتان را میدهید (پروکسی، تنظیمات TLS)؛ restTransport(...) کل لایهٔ HTTP را جایگزین میکند.
چند بازار همزمان¶
try (var pool = Executors.newVirtualThreadPerTaskExecutor()) {
for (String symbol : List.of("BTC/IRT", "USDT/IRT", "ETH/USDT")) {
pool.submit(() -> {
while (true) {
OrderBook book = client.watchOrderBook(symbol);
// قیمتدهی ...
}
});
}
}
کلاینت همهٔ فراخوانیها را، از هر threadی که باشند، زیر محدودیت نرخ بیتپین نگه میدارد.
مثالها¶
از پوشهٔ java/ در نسخهٔ cloneشدهٔ مخزن:
./mvnw -q compile dependency:build-classpath -Dmdep.outputFile=target/classpath.txt
java -cp "target/classes:$(cat target/classpath.txt)" examples/Quickstart.java BTC/IRT
java -cp "target/classes:$(cat target/classpath.txt)" examples/MarketMaker.java --symbol USDT/IRT --size 10 # آزمایشی؛ برای اجرای واقعی --live اضافه کنید