Flutter金融交易API插件degiro_api的使用

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

Flutter金融交易API插件degiro_api的使用

使用

// 创建DegiroApi实例
final degiro = DegiroApi.fromCredentials('用户名', '密码');

try {
    // 获取当前实例并检查是否已登录
    print(DegiroApi.instance.isLoggedIn ? '已登录' : '未登录');

    // 使用提供的凭据登录并创建会话
    await degiro.login();

    // 获取账户信息(登录方法返回此属性)
    final accountInfo = degiro.accountInfo;

    // 获取账户当前的投资组合仓位
    final List<PortfolioPosition> positions = await degiro.portfolioPositions();

    // 显示仓位名称列表
    for (var p in positions) {
      print(p.productInfo?.name);
    }

    // 从会话中登出
    await degiro.logout();
} on DegiroApiError catch (e) {
    print(e.message);
}

可用方法

构造函数
  • DegiroApi.fromCredentials(String username, String password)

    基于用户名和密码创建Degiro实例。注意: 2FA功能正在开发中。

  • DegiroApi.fromSession(String sessionId)

    基于jsessionid创建Degiro实例。可以从浏览器开发者工具访问网络请求中获取。所有对Degiro API的请求都必须包含sessionId。

方法
  • login
  • logout
  • portfolioPositions
  • productInfo
  • productInfos
  • transactions
  • searchProducts
  • cashMovements

贡献

由于此包由一个人维护,欢迎帮助。如有问题或拉取请求,请在GitHub仓库中打开。

Freezed代码生成

如果向模型中添加了新字段,运行以下命令来自动生成模型:

dart run build_runner build --delete-conflicting-outputs

示例代码

import 'dart:io';

import 'package:degiro_api/degiro_api.dart';

void main() {
  print('按y开始示例');
  final value = stdin.readLineSync();

  if (value == 'y') {
    libraryTest();
  }
}

Future<void> libraryTest() async {
  // 从文件读取凭证
  List<String> lines = File('./example/credentials.txt').readAsLinesSync();
  if (lines.isEmpty) return;

  final degiro = DegiroApi.fromCredentials(lines.first, lines.last);
  // final degiro = DegiroApi.fromSession(lines.first);

  try {
    await degiro.login();
    print(DegiroApi.instance.isLoggedIn ? '已登录' : '未登录');

    print(degiro.sessionId);

    List<Transaction> transactions =
        await degiro.transactions(fromDate: DateTime(2022, 4, 18));

    List<ProductInfo> products = await degiro.searchProducts(
      searchText: 'nasdaq',
      sortColumn: 'name',
      sortType: 'asc',
      limit: 10,
      offset: 10 * 2,
    );

    List<CashMovement> movements = await degiro.cashMovements(
      fromDate: DateTime(2022, 02, 23),
      toDate: DateTime(2022, 02, 25),
      showFlatexMovements: true,
    );

    await degiro.logout();
    print(DegiroApi.instance.isLoggedIn ? '已登录' : '未登录');
  } on DegiroApiError catch (e) {
    print(e.message);
  }
}

更多关于Flutter金融交易API插件degiro_api的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter金融交易API插件degiro_api的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中使用degiro_api插件进行金融交易操作的代码示例。请注意,实际使用中你可能需要处理认证、错误处理以及API的限制和配额,这里仅提供一个基本的示例来展示如何使用该插件。

首先,确保你已经在pubspec.yaml文件中添加了degiro_api依赖:

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

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

接下来,在你的Flutter项目中创建一个服务类来处理与Degiro API的交互。例如,可以创建一个名为DegiroService的类:

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

class DegiroService {
  DegiroAPI? _degiroApi;

  DegiroService({required String username, required String password}) {
    _degiroApi = DegiroAPI(username: username, password: password);
  }

  Future<void> login() async {
    try {
      await _degiroApi!.login();
      print('Login successful');
    } catch (e) {
      print('Login failed: $e');
    }
  }

  Future<List<dynamic>> getPortfolio() async {
    try {
      var portfolio = await _degiroApi!.getPortfolio();
      return portfolio;
    } catch (e) {
      print('Failed to get portfolio: $e');
      return [];
    }
  }

  Future<void> placeOrder({
    required String productId,
    required int size,
    required String orderType,
    required double price,
  }) async {
    try {
      var order = await _degiroApi!.placeOrder(
        productId: productId,
        size: size,
        orderType: orderType,
        price: price,
      );
      print('Order placed: $order');
    } catch (e) {
      print('Failed to place order: $e');
    }
  }
}

在你的主应用代码中,你可以使用这个服务类来与Degiro API交互。例如:

import 'package:flutter/material.dart';
import 'degiro_service.dart';  // 假设你将服务类放在了这个文件中

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

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

class _MyAppState extends State<MyApp> {
  DegiroService? _degiroService;
  List<dynamic> _portfolio = [];

  @override
  void initState() {
    super.initState();
    // 替换为你的Degiro用户名和密码
    _degiroService = DegiroService(username: 'your_username', password: 'your_password');
    _login();
  }

  Future<void> _login() async {
    await _degiroService!.login();
    setState(() {
      _getPortfolio();
    });
  }

  Future<void> _getPortfolio() async {
    _portfolio = await _degiroService!.getPortfolio();
    setState(() {});
  }

  Future<void> _placeOrder() async {
    // 示例订单参数,需要根据实际情况修改
    await _degiroService!.placeOrder(
      productId: 'your_product_id',
      size: 1,
      orderType: 'MARKET',
      price: 0.0,  // 对于市场订单,价格通常为0
    );
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Degiro API Demo'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Column(
            children: [
              Text('Portfolio:'),
              SizedBox(height: 16),
              Expanded(
                child: ListView.builder(
                  itemCount: _portfolio.length,
                  itemBuilder: (context, index) {
                    return ListTile(
                      title: Text('${_portfolio[index]}'),
                    );
                  },
                ),
              ),
              SizedBox(height: 16),
              ElevatedButton(
                onPressed: _placeOrder,
                child: Text('Place Order'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

请注意,以上代码仅作为示例,并未处理所有可能的错误情况和边界情况。在实际应用中,你应该添加更多的错误处理和用户反馈机制。此外,由于Degiro API的具体实现和认证流程可能会有所变化,请参考最新的Degiro API文档和degiro_api插件的README文件来调整代码。

回到顶部