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

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

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

本文将详细介绍如何在Flutter应用中使用binance_futures插件进行加密货币交易。我们将通过一个完整的示例来展示如何初始化插件、获取市场数据、启动实时数据流等操作。

binance_futures

binance_futures是一个非官方的Dart库,用于与Binance期货API进行交互。目前它支持市场数据端点、账户/交易端点、市场WebSocket流以及用户数据流。

当前支持的功能

  • 市场数据端点 (100%)
  • 账户/交易端点 (50%)
  • WebSocket市场流 (100%)
  • 用户数据流 (100%)

有用的链接

开始使用

安装

在你的pubspec.yaml文件中添加以下依赖:

dependencies:
  binance_futures: ^0.0.1

或者从GitHub获取最新版本:

dependencies:
  binance_futures:
   git: https://github.com/AmauryBuguet/binance_futures

也可以使用以下命令添加到项目中:

flutter pub add binance_futures

使用

以下是一个完整的示例代码,展示了如何使用binance_futures插件。

import 'dart:async';

import 'package:binance_futures/binance_futures.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
  Widget build(BuildContext context) {
    return const MaterialApp(
      home: HomePage(),
    );
  }
}

class HomePage extends StatefulWidget {
  const HomePage({Key? key}) : super(key: key);

  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  // 初始化Binance Futures客户端
  BinanceFutures binanceFutures = BinanceFutures(
    key: "<apiKey>", // 替换为你的API密钥
    secret: "<apiSecret>", // 替换为你的API密钥
  );

  // 存储最近的BTC价格
  double lastClosePrice = 0;
  // 存储可交易对
  String tradablePairs = "";
  // 存储最后的用户数据事件
  String lastEventData = "";

  // 流订阅对象
  late StreamSubscription<dynamic> klineStreamSub;
  late StreamSubscription<dynamic> userdataStreamSub;

  @override
  void initState() {
    // 启动K线流
    startKlineStream();
    // 启动用户数据流
    startUserdataStream();
    super.initState();
  }

  @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("当前BTC价格: $lastClosePrice"),
            Text("最近的用户数据流事件: $lastEventData"),
            TextButton(
              onPressed: getTradablePairs,
              child: const Text("获取交易对"),
            ),
            Expanded(
              flex: 1,
              child: SelectableText(
                tradablePairs,
                maxLines: 200,
                minLines: 1,
              ),
            ),
          ],
        ),
      ),
    );
  }

  // 启动K线流
  void startKlineStream() {
    var stream = binanceFutures.klineStream(
      symbol: "BTCUSDT",
      interval: Interval.INTERVAL_5m,
    );
    klineStreamSub = stream.listen(handleNewKline);
  }

  // 处理新的K线事件
  void handleNewKline(WsKlineEvent event) {
    setState(() {
      lastClosePrice = event.kline.close;
    });
  }

  // 启动用户数据流
  void startUserdataStream() async {
    var response = await binanceFutures.createListenKey();
    if (response.isRight) {
      var stream = binanceFutures.userDataStream(listenKey: response.right);
      userdataStreamSub = stream.listen(handleUserdataEvent);
    } else {
      lastEventData = response.left;
    }
  }

  // 处理用户数据事件
  void handleUserdataEvent(dynamic event) {
    if (event is WsAccountUpdateEvent) {
      lastEventData = "账户更新事件: ${event.data.balanceUpdates.length}个余额已更新";
    } else if (event is WsOrderUpdateEvent) {
      lastEventData = "订单更新事件: ${event.orderUpdate.symbol}对上的订单已更新";
    } else {
      lastEventData = "其他事件类型: ${event.toString()}";
    }
  }

  // 获取可交易对
  void getTradablePairs() async {
    var response = await binanceFutures.exchangeInformation();
    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
  void dispose() {
    klineStreamSub.cancel();
    userdataStreamSub.cancel();
    super.dispose();
  }
}

代码解释

  1. 初始化

    BinanceFutures binanceFutures = BinanceFutures(
      key: "<apiKey>",
      secret: "<apiSecret>",
    );
    

    使用你的API密钥和密钥初始化BinanceFutures实例。

  2. 启动K线流

    void startKlineStream() {
      var stream = binanceFutures.klineStream(
        symbol: "BTCUSDT",
        interval: Interval.INTERVAL_5m,
      );
      klineStreamSub = stream.listen(handleNewKline);
    }
    

    订阅K线流,并处理新的K线事件。

  3. 处理用户数据流

    void startUserdataStream() async {
      var response = await binanceFutures.createListenKey();
      if (response.isRight) {
        var stream = binanceFutures.userDataStream(listenKey: response.right);
        userdataStreamSub = stream.listen(handleUserdataEvent);
      } else {
        lastEventData = response.left;
      }
    }
    

    创建并订阅用户数据流,处理不同的用户数据事件。

  4. 获取可交易对

    void getTradablePairs() async {
      var response = await binanceFutures.exchangeInformation();
      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 ";
        }
      }
    }
    

更多关于Flutter加密货币交易插件binance_futures的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter加密货币交易插件binance_futures的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中使用binance_futures插件来进行加密货币交易的示例代码。这个示例将展示如何初始化客户端、获取账户信息以及下单交易。请注意,为了运行此代码,你需要先在Binance注册并获得API密钥和密钥秘密。

1. 添加依赖

首先,在你的pubspec.yaml文件中添加binance_futures依赖:

dependencies:
  flutter:
    sdk: flutter
  binance_futures: ^最新版本号  # 请替换为实际的最新版本号

然后运行flutter pub get来安装依赖。

2. 初始化客户端

在你的Flutter应用中,初始化Binance Futures客户端:

import 'package:flutter/material.dart';
import 'package:binance_futures/binance_futures.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  BinanceFuturesClient? _client;

  @override
  void initState() {
    super.initState();
    String apiKey = '你的API密钥';
    String secretKey = '你的密钥秘密';

    _client = BinanceFuturesClient(apiKey: apiKey, secretKey: secretKey);
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Binance Futures Example'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () async {
              await fetchAccountInfo();
            },
            child: Text('Fetch Account Info'),
          ),
        ),
      ),
    );
  }

  Future<void> fetchAccountInfo() async {
    try {
      var accountInfo = await _client!.getAccountInfo();
      print(accountInfo);
    } catch (e) {
      print('Error fetching account info: $e');
    }
  }
}

3. 下单交易

以下是一个下单交易的示例代码,这里假设你要下单一个BTC/USDT的永续合约:

Future<void> placeOrder() async {
  try {
    String symbol = 'BTCUSDT_PERP'; // 永续合约的交易对
    String side = 'BUY'; // 订单方向 (BUY 或 SELL)
    String type = 'MARKET'; // 订单类型 (MARKET, LIMIT 等)
    double quantity = 0.001; // 交易数量,根据BTC的最小交易单位调整

    // 如果是限价单,需要指定price
    // double price = 30000; // 限价单的价格

    // 创建订单请求
    var orderRequest = OrderRequest(
      symbol: symbol,
      side: side,
      type: type,
      quantity: quantity,
      // 如果是限价单,取消以下行的注释并设置price
      // price: price,
    );

    var orderResponse = await _client!.newOrder(orderRequest);
    print('Order placed: $orderResponse');
  } catch (e) {
    print('Error placing order: $e');
  }
}

你可以将placeOrder方法添加到你的按钮点击事件中,或者根据需要在适当的位置调用它。

注意事项

  1. API权限:确保你的API密钥具有相应的权限(如交易权限)。
  2. 错误处理:在实际应用中,添加更多的错误处理和用户反馈。
  3. 安全性:不要在客户端代码中硬编码API密钥。考虑使用环境变量或安全的密钥管理服务。
  4. 交易风险:加密货币交易存在高风险,务必谨慎操作。

这个示例提供了一个基本的框架,你可以根据需要进行扩展和修改。

回到顶部