Flutter加密货币交易插件binance_spot的使用

发布于 1周前 作者 bupafengyu 来自 Flutter

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

1 回复

更多关于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密钥和秘密,不要将它们硬编码在代码中。你可以考虑使用环境变量或安全的密钥管理服务。

此外,交易加密货币存在风险,请确保你了解相关的市场风险和交易规则。

回到顶部