Flutter技术分析插件ta_lib的使用

Flutter技术分析插件ta_lib的使用

Dart 包装器 TA-Lib

警告

此包尚未稳定。几乎所有功能都未实现。详情请参阅 Roadmap

开始使用

dart pub add ta_lib

警告

Linux 用户需要复制预编译的 so 文件或从源代码构建 ta-lib 库,并将二进制文件放在 ta-lib 目录中。

使用方法

你可以通过 TaLib 类调用 TA-Lib 函数。关于函数列表,请参阅 TA-Lib 函数列表

final taLib = TaLib();
final result = taLib.ma(1, 4, [1, 2, 3, 4, 5], maType: MaType.sma, timePeriod: 3);
print(result); // [2.0, 3.0, 4.0]

示例代码

import 'package:ta_lib/ta_lib.dart';

void main() {
  final taLib = TaLib();
  final result = taLib.ma([1, 2, 3, 4, 5], maType: MaType.sma, timePeriod: 3);
  print(result); // 输出 [2.0, 3.0, 4.0]
}

更多关于Flutter技术分析插件ta_lib的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter技术分析插件ta_lib的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


ta-lib(Technical Analysis Library)是一个广泛使用的技术分析库,提供了多种技术指标的计算功能,如移动平均线、相对强弱指数(RSI)、布林带等。虽然 ta-lib 最初是为 Python 开发的,但你可以通过一些方法在 Flutter 中使用它。

在 Flutter 中使用 ta-lib 的步骤

  1. 使用 flutter_ffiflutter_rust_bridge

    • ta-lib 是用 C 语言编写的,因此你可以通过 Flutter 的 FFI(Foreign Function Interface)来调用它的函数。
    • 你可以使用 flutter_ffi 或者 flutter_rust_bridge 来将 ta-lib 的 C 函数暴露给 Dart 代码。
  2. 使用现有的 Dart/Flutter 插件

    • 目前并没有官方的 ta-lib Flutter 插件,但你可以寻找社区开发的插件或库,或者自己封装一个。
  3. 通过后端服务调用

    • 如果你不想直接在 Flutter 中调用 ta-lib,可以在后端(如 Python 或 Node.js)中使用 ta-lib,然后通过 API 将结果返回给 Flutter 应用。

示例:通过 FFI 调用 ta-lib

假设你已经安装了 ta-lib 的 C 库,以下是一个简单的示例,展示如何通过 FFI 在 Flutter 中调用 ta-lib 的函数。

1. 创建 Flutter 项目

首先,创建一个新的 Flutter 项目:

flutter create ta_lib_example
cd ta_lib_example

2. 添加 ffi 依赖

pubspec.yaml 中添加 ffi 依赖:

dependencies:
  flutter:
    sdk: flutter
  ffi: ^1.1.2

3. 创建 FFI 绑定

lib 目录下创建一个新的 Dart 文件,例如 ta_lib_bindings.dart,并添加以下代码:

import 'dart:ffi';
import 'package:ffi/ffi.dart';

typedef TA_Initialize = Void Function();
typedef TA_Shutdown = Void Function();
typedef TA_SMA = Int32 Function(
    Int32 startIdx,
    Int32 endIdx,
    Pointer<Double> inReal,
    Int32 optInTimePeriod,
    Pointer<Int32> outBegIdx,
    Pointer<Int32> outNBElement,
    Pointer<Double> outReal,
);

class TaLib {
  final DynamicLibrary _library;

  TaLib() : _library = DynamicLibrary.open('libta_lib.so');

  void initialize() {
    final taInitialize = _library.lookupFunction<TA_Initialize, TA_Initialize>('TA_Initialize');
    taInitialize();
  }

  void shutdown() {
    final taShutdown = _library.lookupFunction<TA_Shutdown, TA_Shutdown>('TA_Shutdown');
    taShutdown();
  }

  List<double> sma(List<double> inReal, int optInTimePeriod) {
    final taSma = _library.lookupFunction<TA_SMA, TA_SMA>('TA_SMA');

    final inRealPtr = calloc<Double>(inReal.length);
    for (var i = 0; i < inReal.length; i++) {
      inRealPtr.elementAt(i).value = inReal[i];
    }

    final outBegIdx = calloc<Int32>();
    final outNBElement = calloc<Int32>();
    final outRealPtr = calloc<Double>(inReal.length);

    final result = taSma(
      0,
      inReal.length - 1,
      inRealPtr,
      optInTimePeriod,
      outBegIdx,
      outNBElement,
      outRealPtr,
    );

    if (result != 0) {
      throw Exception('TA_SMA failed');
    }

    final outReal = List.generate(outNBElement.value, (i) => outRealPtr.elementAt(i).value);

    calloc.free(inRealPtr);
    calloc.free(outBegIdx);
    calloc.free(outNBElement);
    calloc.free(outRealPtr);

    return outReal;
  }
}

4. 使用 TaLib

main.dart 中使用 TaLib 类来计算简单移动平均线(SMA):

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('TA-Lib Example')),
        body: Center(
          child: ElevatedButton(
            onPressed: () {
              final taLib = TaLib();
              taLib.initialize();

              final inReal = [1.0, 2.0, 3.0, 4.0, 5.0];
              final smaValues = taLib.sma(inReal, 3);

              print('SMA values: $smaValues');

              taLib.shutdown();
            },
            child: Text('Calculate SMA'),
          ),
        ),
      ),
    );
  }
}

5. 运行应用

确保你的系统上已经安装了 ta-lib 的 C 库,并且库文件 (libta_lib.so) 在系统的库路径中。然后运行 Flutter 应用:

flutter run
回到顶部