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
更多关于Flutter技术分析插件ta_lib的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
ta-lib
(Technical Analysis Library)是一个广泛使用的技术分析库,提供了多种技术指标的计算功能,如移动平均线、相对强弱指数(RSI)、布林带等。虽然 ta-lib
最初是为 Python 开发的,但你可以通过一些方法在 Flutter 中使用它。
在 Flutter 中使用 ta-lib
的步骤
-
使用
flutter_ffi
或flutter_rust_bridge
:ta-lib
是用 C 语言编写的,因此你可以通过 Flutter 的 FFI(Foreign Function Interface)来调用它的函数。- 你可以使用
flutter_ffi
或者flutter_rust_bridge
来将ta-lib
的 C 函数暴露给 Dart 代码。
-
使用现有的 Dart/Flutter 插件:
- 目前并没有官方的
ta-lib
Flutter 插件,但你可以寻找社区开发的插件或库,或者自己封装一个。
- 目前并没有官方的
-
通过后端服务调用:
- 如果你不想直接在 Flutter 中调用
ta-lib
,可以在后端(如 Python 或 Node.js)中使用ta-lib
,然后通过 API 将结果返回给 Flutter 应用。
- 如果你不想直接在 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