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

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

ByBit 是一个用于与 ByBit 交易所平台 API 进行简单通信的 Dart 库。这个包允许你进行简单的 REST API 调用或订阅多个 WebSocket 频道主题。

如何使用它

创建一个 ByBit 实例

请注意,所有参数都是可选的,但你需要有效的密钥和密码才能访问 ByBit 的私有主题。你可以在 ByBit 网站上创建自己的 API 密钥。

var bybit = ByBit(
    key: 'yOuRsUpErKey',
    password: 'yOuRsUpErPaSsWoRd',
    logLevel: 'INFO',
    restUrl: 'https://api.bybit.com',
    websocketUrl: 'wss://stream.bytick.com/realtime',
    timeout: 60);

注意:超时以秒为单位。如果没有提供超时参数,则不会在超时时抛出异常。

连接到服务器

bybit.connect();

添加周期性的 REST API 调用(如果需要)

有时,你可能希望每隔一段时间从 API 获取信息。这就是为什么该库允许设置哪些 REST API 调用需要定期执行,并且来自服务器的所有响应会被合并到一个单一的流中。请注意 API 调用限制

bybit.getServerTimePeriodic(period: Duration(seconds: 5));
bybit.getAnnouncementPeriodic(period: Duration(seconds: 5));
bybit.getOpenInterestPeriodic(
    symbol: 'ETHUSD',
    interval: '15min',
    period: Duration(seconds: 2),
    limit: 3);

订阅 WebSocket 主题

bybit.subscribeToKlines(symbol: 'ETHUSD', interval: '1');
bybit.subscribeToKlines(symbol: 'BTCUSD', interval: 'D');
bybit.subscribeToOrderBook(depth: 25);

读取 ByBit 流并处理服务器响应

注意:bybit.stream 流包含来自 WebSockets 和周期性 REST API 调用的所有数据。

StreamBuilder(
    stream: bybit.stream,
    builder: (context, bybitResponse) {
        print('From WebSocket: ' + bybitResponse.data.toString());
        //...
    }
),

也可以进行单次 REST API 调用

FutureBuilder(
    future: bybit.getKLine(symbol: 'BTCUSD', from: 1581231260, interval: 'D'),
    builder: (context, bybitResponse) {
        // 处理 bybit 响应
        if (bybitResponse.hasData && bybitResponse.data != null) {
          print('From REST: ' + bybitResponse.data.toString());
          //...
        }
    }
)

示例

下面是一个完整的 Flutter 示例,展示了如何使用 ByBit 插件来连接到 ByBit 服务器、订阅 WebSocket 主题以及处理响应。

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

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'ByBit Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'ByBit Flutter Example'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

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

class _MyHomePageState extends State<MyHomePage> {
  late ByBit bybit;
  List<String> messages = [];

  @override
  void initState() {
    super.initState();
    bybit = ByBit(logLevel: 'INFO');
    bybit.connect();

    // 定义要定期执行的 REST API 调用
    bybit.getServerTimePeriodic(period: Duration(seconds: 5));
    bybit.getAnnouncementPeriodic(period: Duration(seconds: 5));

    // 订阅 WebSocket 频道
    bybit.subscribeToKlines(symbol: 'BTCUSD', interval: 'D');

    // 监听流中的消息
    bybit.stream.listen((data) {
      setState(() {
        messages.add(data.toString());
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: ListView.builder(
        itemCount: messages.length,
        itemBuilder: (context, index) {
          return ListTile(
            title: Text(messages[index]),
          );
        },
      ),
    );
  }

  @override
  void dispose() {
    bybit.disconnect();
    super.dispose();
  }
}

函数列表

查看 ByBit 文档获取最新的可用函数。


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

1 回复

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


当然,以下是一个关于如何在Flutter中使用Bybit加密货币交易API的示例代码。请注意,实际使用中你需要处理API密钥、签名等敏感信息,并且Bybit API有严格的速率限制和错误处理要求。这里仅提供一个基本的框架和示例,帮助你开始。

首先,你需要确保你的Flutter项目已经配置好,并且已经添加了必要的依赖,比如http用于发送HTTP请求。

  1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  http: ^0.13.3  # 确保使用最新版本

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

  1. 创建Bybit API请求帮助类

创建一个新的Dart文件,比如bybit_api.dart,来处理Bybit API请求。

import 'dart:convert';
import 'package:http/http.dart' as http;

class BybitApi {
  String apiUrl = 'https://api.bybit.com/v3';
  String apiKey;
  String apiSecret;

  BybitApi({required this.apiKey, required this.apiSecret});

  Future<Map<String, dynamic>> getOrderBook(String symbol) async {
    String endpoint = '/orderBook/L2_20';
    String url = '$apiUrl/$endpoint?symbol=$symbol';

    http.Response response = await http.get(Uri.parse(url));

    if (response.statusCode == 200) {
      return jsonDecode(response.body);
    } else {
      throw Exception('Failed to fetch order book: ${response.statusCode}');
    }
  }

  Future<String> signRequest(String method, String endpoint, Map<String, String> params) {
    // 时间戳
    String timestamp = (DateTime.now().millisecondsSinceEpoch / 1000).toString();
    params['api_key'] = apiKey;
    params['timestamp'] = timestamp;

    // 排序参数
    List<String> keys = params.keys.toList()..sort();
    String queryString = keys.map((key) => '${Uri.encodeComponent(key)}=${Uri.encodeComponent(params[key]!)}').join('&');

    // 生成签名
    String prehash = '${method.toUpperCase()}${Uri.encodeComponent(endpoint)}$timestamp$queryString';
    String signature = _hmacSha256(apiSecret, prehash);

    params['sign'] = signature;
    return queryString;
  }

  Future<http.Response> privateRequest(String method, String endpoint, Map<String, String> params) async {
    String queryString = await signRequest(method, endpoint, params);
    String url = '$apiUrl/$endpoint?$queryString';

    http.Response response;
    if (method == 'GET') {
      response = await http.get(Uri.parse(url));
    } else if (method == 'POST') {
      response = await http.post(Uri.parse(url), body: params);
    } else {
      throw UnsupportedError('Unsupported method: $method');
    }

    return response;
  }

  String _hmacSha256(String key, String message) {
    // 需要导入'package:cryptography/cryptography.dart'或其他加密库来实现HMAC-SHA256
    // 这里仅为示例,未实际实现加密逻辑
    throw UnimplementedError('HMAC-SHA256 not implemented');
  }
}

注意:上面的_hmacSha256方法是一个占位符,你需要使用Dart的加密库来实现HMAC-SHA256签名。可以使用pointycastlecryptography等库。

  1. 使用BybitApi类

在你的主应用程序文件中(比如main.dart),你可以这样使用BybitApi类:

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

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

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

class _MyAppState extends State<MyApp> {
  late BybitApi bybitApi;
  Map<String, dynamic>? orderBook;

  @override
  void initState() {
    super.initState();
    String apiKey = 'your_api_key_here';
    String apiSecret = 'your_api_secret_here';
    bybitApi = BybitApi(apiKey: apiKey, apiSecret: apiSecret);
    fetchOrderBook();
  }

  void fetchOrderBook() async {
    try {
      orderBook = await bybitApi.getOrderBook('BTCUSD');
      setState(() {});
    } catch (e) {
      print(e);
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Bybit API Example'),
        ),
        body: orderBook != null
            ? ListView.builder(
                itemCount: orderBook!['asks']!.length,
                itemBuilder: (context, index) {
                  return ListTile(
                    title: Text('Ask: ${orderBook!['asks']![index][0]} ${orderBook!['asks']![index][1]}'),
                  );
                },
              )
            : Center(child: CircularProgressIndicator()),
      ),
    );
  }
}

这个示例展示了如何获取BTCUSD的交易订单簿,并在Flutter应用中显示买单(asks)。

重要提示

  • 在生产环境中,不要在客户端代码中硬编码API密钥。考虑使用安全存储或后端服务来处理敏感信息。
  • Bybit API有速率限制,确保你的请求符合API文档中的规定。
  • 实现完整的错误处理和重试逻辑。
  • 使用官方提供的SDK(如果有的话)来代替手动实现API请求和签名,以减少出错的可能性。
回到顶部