Flutter加密货币交易插件binance_spot的使用
Flutter加密货币交易插件binance_spot的使用
这是Binance SPOT API的一个非官方Dart包装器。目前它包括市场数据、子账户、钱包、现货账户/交易和法币端点,以及市场和用户数据流的支持。
当前支持的功能
- 市场数据端点
- 子账户端点
- 钱包端点
- 现货账户/交易端点
- 法币端点
- Websocket市场流
- 用户数据流
有用的链接
入门指南
安装
在pubspec.yaml
文件中添加以下依赖:
dependencies:
binance_spot: ^0.0.1
或者使用以下命令:
flutter pub add binance_spot
使用示例
下面是一个完整的示例代码,展示了如何使用binance_spot
插件进行加密货币交易。
import 'dart:async';
import 'package:binance_spot/binance_spot.dart';
import 'package:flutter/material.dart' hide Interval;
void main() => runApp(const MyApp());
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
[@override](/user/override)
Widget build(BuildContext context) {
return const MaterialApp(
home: HomePage(),
);
}
}
class HomePage extends StatefulWidget {
const HomePage({Key? key}) : super(key: key);
[@override](/user/override)
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
BinanceSpot binanceSpot = BinanceSpot(
key: "<apiKey>",
secret: "<apiSecret>",
);
double lastClosePrice = 0;
String tradablePairs = "";
String lastEventData = "";
late StreamSubscription<dynamic> klineStreamSub;
late StreamSubscription<dynamic> userdataStreamSub;
[@override](/user/override)
void initState() {
startKlineStream();
startUserdataStream();
super.initState();
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text("Binance API tester"),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text("Current BTC price : $lastClosePrice"),
Text("Last userdataStream event : $lastEventData"),
TextButton(
onPressed: getTradablePairs,
child: const Text("GET PAIRS"),
),
Expanded(
flex: 1,
child: SelectableText(
tradablePairs,
maxLines: 200,
minLines: 1,
),
),
],
),
),
);
}
void startKlineStream() {
// 开启K线流
var stream = binanceSpot.klineStream(
symbol: "BTCUSDT",
interval: Interval.INTERVAL_5m,
);
klineStreamSub = stream.listen(handleNewKline);
}
void handleNewKline(WsKlineEvent event) {
// 处理新的K线事件
setState(() {
lastClosePrice = event.kline.close;
});
}
void startUserdataStream() async {
// 创建监听密钥并开启用户数据流
var response = await binanceSpot.createListenKey();
if (response.isRight) {
var stream = binanceSpot.userDataStream(listenKey: response.right);
userdataStreamSub = stream.listen(handleUserdataEvent);
} else {
lastEventData = response.left;
}
}
void handleUserdataEvent(dynamic event) {
// 处理用户数据事件
if (event is WsAccountUpdate) {
lastEventData = "Account update event : ${event.balances.length} balances updated";
} else if (event is WsBalanceUpdate) {
lastEventData = "Balance update event : ${event.asset} balance updated";
} else if (event is WsExecutionReport) {
lastEventData = "Execution report event : status is ${event.orderStatus.toStr()}";
} else if (event is WsListOrderStatus) {
lastEventData = "ListOrder update event : status is ${event.listOrderStatus}";
} else {
lastEventData = "Unknown event type : ${event.toString()}";
}
}
void getTradablePairs() async {
// 获取可交易对
var response = await binanceSpot.exchangeInfo();
if (response.isLeft) {
tradablePairs = response.left;
} else {
var listSymbol = response.right.symbols.map((e) => e.symbol).toList();
tradablePairs = "";
for (var s in listSymbol) {
tradablePairs += "$s ";
}
}
}
[@override](/user/override)
void dispose() {
// 取消订阅
klineStreamSub.cancel();
userdataStreamSub.cancel();
super.dispose();
}
}
更多关于Flutter加密货币交易插件binance_spot的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter加密货币交易插件binance_spot的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter项目中使用binance_spot
插件来进行加密货币交易的代码示例。这个插件允许你访问Binance的现货交易API。
首先,确保你已经在pubspec.yaml
文件中添加了binance_spot
依赖:
dependencies:
flutter:
sdk: flutter
binance_spot: ^x.y.z # 请替换为最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,我们将展示如何初始化客户端、获取账户信息、以及执行一个简单的交易操作。
1. 初始化客户端
首先,你需要初始化一个Binance客户端。你需要提供API密钥和秘密。
import 'package:binance_spot/binance_spot.dart';
import 'package:dio/dio.dart';
void main() async {
// 你的API密钥和秘密
String apiKey = 'YOUR_API_KEY';
String apiSecret = 'YOUR_API_SECRET';
// 创建Binance客户端
var client = BinanceClient(apiKey: apiKey, apiSecret: apiSecret);
// 打印客户端信息(可选)
print('Binance Client Initialized');
// 接下来,你可以使用client进行各种操作
}
2. 获取账户信息
// 获取账户信息
try {
var accountInfo = await client.getAccountInfo();
print('Account Info: $accountInfo');
} catch (e) {
print('Error getting account info: $e');
}
3. 下单交易
这里我们展示如何下一个限价买单。你需要提供交易对(例如BTCUSDT
)、购买数量以及价格。
// 下限价买单
String symbol = 'BTCUSDT';
String side = 'BUY'; // 买入
String type = 'LIMIT'; // 限价单
double quantity = 0.001; // 购买数量
String price = '30000'; // 价格
var order = await client.newOrder(
symbol: symbol,
side: side,
type: type,
quantity: quantity,
price: price,
);
print('Order Placed: $order');
4. 查询订单状态
你可以通过订单ID查询订单状态。
// 假设你已经有了orderId
String orderId = 'YOUR_ORDER_ID'; // 从上一步的order结果中获取
try {
var orderStatus = await client.getOrder(symbol: symbol, orderId: orderId);
print('Order Status: $orderStatus');
} catch (e) {
print('Error getting order status: $e');
}
5. 取消订单
你也可以取消一个订单。
try {
var cancelResponse = await client.cancelOrder(symbol: symbol, orderId: orderId);
print('Cancel Order Response: $cancelResponse');
} catch (e) {
print('Error canceling order: $e');
}
完整示例
下面是一个完整的示例,将上述步骤整合在一起:
import 'package:binance_spot/binance_spot.dart';
import 'package:dio/dio.dart';
void main() async {
String apiKey = 'YOUR_API_KEY';
String apiSecret = 'YOUR_API_SECRET';
var client = BinanceClient(apiKey: apiKey, apiSecret: apiSecret);
try {
var accountInfo = await client.getAccountInfo();
print('Account Info: $accountInfo');
String symbol = 'BTCUSDT';
String side = 'BUY';
String type = 'LIMIT';
double quantity = 0.001;
String price = '30000';
var order = await client.newOrder(
symbol: symbol,
side: side,
type: type,
quantity: quantity,
price: price,
);
print('Order Placed: $order');
String orderId = order['orderId'].toString(); // 假设orderId是字符串类型
var orderStatus = await client.getOrder(symbol: symbol, orderId: orderId);
print('Order Status: $orderStatus');
var cancelResponse = await client.cancelOrder(symbol: symbol, orderId: orderId);
print('Cancel Order Response: $cancelResponse');
} catch (e) {
print('Error: $e');
}
}
注意:在实际应用中,请确保妥善处理API密钥和秘密,不要将它们硬编码在代码中。你可以考虑使用环境变量或安全的密钥管理服务。
此外,交易加密货币存在风险,请确保你了解相关的市场风险和交易规则。