Go¶
github.com/bitpin-dev/bitpin-sdk/go با پکیج bitpin: همان SDK به زبان Go، با همان رفتار پایتون و تایپاسکریپت. هر فراخوانی یک context.Context میگیرد، (T, error) برمیگرداند و استفادهٔ همزمان از چند goroutine امن است.
go get github.com/bitpin-dev/bitpin-sdk/go
client, err := bitpin.New(bitpin.ConfigFromEnv()) // BITPIN_API_KEY، BITPIN_SECRET_KEY، BITPIN_DOMAIN
if err != nil {
log.Fatal(err)
}
ticker, err := client.FetchTicker(ctx, "BTC/IRT")
order, err := client.CreateOrder(ctx, "USDT/IRT", "limit", "buy", "10", "90000", bitpin.Params{"clientOrderId": "bot-1"})
if errors.Is(err, bitpin.ErrInsufficientFunds) {
// ...
}
err = client.CancelOrderByIdentifier(ctx, "bot-1")
نسخههای پشتیبانیشده¶
- Go نسخهٔ ۱٫۲۶ یا بالاتر (
go 1.26.0درgo.mod؛ آخرین نسخهٔcentrifuge-goآن را لازم دارد). go.modهمچنینtoolchain go1.27.3را مشخص میکند. با تنظیم پیشفرضGOTOOLCHAIN=auto، دستورgoدقیقاً همان toolchain را دانلود میکند؛ مثل کاری که uv برای پایتون میکند.
از داخل ایران¶
proxy.golang.org فهرست ماژولها را میدهد، ولی دانلودهایش به فضای ذخیرهٔ گوگل هدایت میشوند که از ایران خطای 403 میدهد؛ برای همین دانلود toolchain و گاهی go get شکست میخورد. این پروکسیها از ایران هم ماژول و هم toolchain را میدهند (آزمودهشده در ۲۷ اکتبر ۲۰۲۶): goproxy.cn، mirrors.aliyun.com/goproxy و proxy.golang.com.cn. goproxy.io دانلود را رد میکند.
go env -w GOPROXY=https://goproxy.cn,https://mirrors.aliyun.com/goproxy,direct
go get github.com/bitpin-dev/bitpin-sdk/go # toolchain مشخصشده هم خودکار دانلود میشود
checksumها همچنان با sum.golang.org بررسی میشوند که در دسترس است؛ GOSUMDB پیشفرض را نگه دارید. اگر هیچ پروکسی کار نکرد، GOTOOLCHAIN=local را تنظیم کنید و خودتان Go نسخهٔ ۱٫۲۶ یا بالاتر را نصب کنید.
- نسخهها با تگ go/vX.Y.Z منتشر میشوند؛ go get github.com/bitpin-dev/bitpin-sdk/go@latest جدیدترین را میگیرد.
تفاوت با پایتون¶
| پایتون | Go | |
|---|---|---|
| فراخوانی | client.fetch_order_book("BTC/IRT") |
client.FetchOrderBook(ctx, "BTC/IRT", 0) که (OrderBook, error) برمیگرداند |
| آرگومانهای اختیاری | آرگومانهای کلیدی | 0 / "" / nil یعنی «تنظیم نشده»، یا ساختارهای گزینه: FetchOrdersOptions، OrderHistoryOptions، TransactionsOptions |
| خروجی | دیکشنری با کلیدهای ccxt | struct با فیلدهای ccxt (Order.ClientOrderID، Order.Filled)؛ پاسخ خام در Info است |
| اعداد | Decimal |
decimal.Decimal از shopspring (نام دیگر: bitpin.Decimal)؛ فیلدهای اختیاری *Decimal هستند. ورودیها Decimal، رشته یا عدد میپذیرند |
| خطاها | کلاسهای استثنا | errors.Is(err, bitpin.ErrInvalidOrder) سلسلهمراتب ccxt را دنبال میکند؛ errors.As(err, &e) با *bitpin.Error فیلدهای Status، Body، RetryAfter، Code و Feature را میدهد |
| لغو گروهی | cancel_orders(ids=[...]) |
CancelOrders(ctx, ids, nil) یا CancelOrders(ctx, nil, identifiers) |
| مهلت و لغو درخواست | timeout |
Config.Timeout و همان ctx که میدهید |
| وبسوکت | هر دو کلاینت | داخلی؛ Watch* تا بهروزرسانی بعدی یا پایان ctx منتظر میماند |
متدها¶
- بازارها:
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برای قطع اتصال - سطح پایین:
Request(ctx, endpointID, pathParams, params, body)وStringکه کلیدهای شما را پنهان میکند - فعلاً در بیتپین موجود نیست (خطایی برمیگردانند که با
bitpin.ErrNotSupportedجور است):CancelAllOrders،EditOrder،FetchAccounts،FetchLedger،Transfer،FetchDepositWithdrawFees،FetchPositions،SetLeverage،CreateDepositAddress،WatchBalance،WatchTickers،SetSandboxMode
آرگومانها، محدودیتها و خروجیها همانهایی است که در صفحههای دادههای بازار، معامله، کیف پول و وبسوکت آمده است.
پیکربندی¶
client, err := bitpin.New(bitpin.Config{
APIKey: "...",
SecretKey: "...",
Domain: bitpin.DomainIR, // DomainOrg (پیشفرض)، DomainIR یا DomainMarket
Timeout: 10 * time.Second,
MaxRetries: bitpin.Int(3), // فقط برای درخواستهای تکرارپذیر
RateLimits: map[string]string{"orderbook": "10800/min"},
TokenStore: bitpin.FileTokenStore{}, // اشتراک توکن بین پروسهها
})
مثالها¶
go run github.com/bitpin-dev/bitpin-sdk/go/examples/quickstart@latest -symbol BTC/IRT
go run github.com/bitpin-dev/bitpin-sdk/go/examples/marketmaker@latest -symbol USDT/IRT -size 10 # آزمایشی؛ برای اجرای واقعی -live اضافه کنید