Flutter技术分析插件deriv_technical_analysis的使用
Flutter技术分析插件deriv_technical_analysis的使用
deriv_technical_analysis
是一个全面的 Dart 包,用于技术分析,提供了超过50种金融市场的技术指标。
安装
在你的项目的 pubspec.yaml
文件中添加以下依赖:
dependencies:
deriv_technical_analysis: ^1.0.0
要求:
- Dart SDK: >=3.0.0 <4.0.0
- Flutter: >=3.10.1
核心概念
该包围绕三个核心接口构建。
1. IndicatorResult
表示指标计算的输出:
abstract class IndicatorResult {
double get quote; // 计算出的指标值
}
2. IndicatorOHLC
表示具有开盘价(open)、最高价(high)、最低价(low)和收盘价(close)的价格数据:
abstract class IndicatorOHLC {
double get open; // 开盘价
double get high; // 最高价
double get low; // 最低价
double get close; // 收盘价
}
3. IndicatorDataInput
管理输入数据和结果创建:
abstract class IndicatorDataInput {
List<IndicatorOHLC> get entries; // 输入数据点
IndicatorResult createResult(int index, double value); // 创建结果对象
}
可用指标
该包包括以下技术指标:
移动平均线
- 简单移动平均线 (SMA)
- 指数移动平均线 (EMA)
- 双指数移动平均线 (DEMA)
- 三指数移动平均线 (TEMA)
- 三角移动平均线 (TRIMA)
- 加权移动平均线 (WMA)
- 改进的移动平均线 (MMA)
- 最小二乘移动平均线 (LSMA)
- 壳移动平均线 (HMA)
- 变量移动平均线 (VMA)
- Welles Wilder 平滑移动平均线 (WWSMA)
- 零延迟指数移动平均线 (ZELMA)
摆动指标
- 相对强弱指数 (RSI)
- 斯托克斯特指标
- 快速斯托克特
- 慢速斯托克特
- 平滑斯托克特
- 斯托克特动量指数 (SMI)
- 移动平均收敛/发散 (MACD)
- MACD 线
- 信号线
- MACD 直方图
- 绝妙摆动指标
- 威廉姆斯%R
- 变化率 (ROC)
- Chanade 动量摆动指标 (CMO)
- 加托摆动指标
- 上部摆动器
- 下部摆动器
趋势指标
- 平均方向性指数 (ADX)
- ADX 线
- 正向方向性指数 (+DI)
- 负向方向性指数 (-DI)
- ADX 直方图
- 抛物线 SAR
- 一目均衡云
- 转换线 (Tenkan-sen)
- 基准线 (Kijun-sen)
- 领先跨度 A (Senkou Span A)
- 领先跨度 B (Senkou Span B)
- 滞后跨度 (Chikou Span)
波动指标
- 布林带
- 上轨
- 下轨
- 波幅
- %B (百分比 B)
- 平均真实范围 (ATR)
- 标准差
- 方差
通道指标
- 顿奇安通道
- 移动平均包络线
- 上包络线
- 下包络线
其他指标
- 阿伦
- 阿伦上升
- 阿伦下降
- 阿伦振荡器
- 商品通道指数 (CCI)
- 去趋势价格摆动指标 (DPO)
- 锌锌
- 固定通道带 (FCB)
- FCB 高
- FCB 低
- 牛市/熊市形态识别
辅助指标
- 价格值 (开盘价、最高价、最低价、收盘价)
- 各种价格平均值 (HL2, HLC3, HLCC4, OHLC4)
- 真实范围
- 方向运动
- 收益/损失
- 平均差和差值计算
实现指南
1. 创建你的结果类
指标的输出是一种泛型类型,这意味着你可以决定当指标计算出某项的结果时应该创建什么样的模型类。这使得你可以轻松地创建一个符合你特定需求的结果列表。你可以定义列表应包含什么类型的数据。
使用 IndicatorDataInput.createResult
,你可以选择所需的输出类型。每个指标结果代表特定项目的一个值(如报价),并且你的自定义模型类可以包含其他属性。
例如,如果你想要处理或可视化带有某种数据类型的项目列表,可以设置如下:
class SampleResult implements IndicatorResult {
SampleResult(this.quote, this.anotherProperty);
@override
final double quote; // 由 IndicatorResult 要求
final DateTime time; // 你的自定义属性
}
要开始,创建一个实现 IndicatorResult
接口的类:
class SampleResult implements IndicatorResult {
SampleResult(this.quote, this.anotherProperty);
@override
final double quote; // 由 IndicatorResult 要求
final DateTime time; // 你的自定义属性
}
2. 创建你的输入类
接下来,你可以实现 IndicatorDataInput
并实现 createResult
方法:
class SampleInput implements IndicatorDataInput {
SampleInput(this.entries);
@override
final List<IndicatorOHLC> entries;
@override
IndicatorResult createResult(int index, double value) =>
SampleResult(value, getDateTimeFromIndex(index));
}
如果包只给你了一组数字(例如 List<double>
),你需要将其转换为自己的类型,例如 List<SampleResult>
。通过使用泛型类型,包让你直接定义输出类型,所以你不必进行额外的转换。这样,每个结果都会自动以你所需的方式创建。
3. 实现 OHLC 接口
你可以为单值和 OHLC 数据实现 IndicatorOHLC
:
// 单值实现
class SampleTick implements IndicatorOHLC {
const SampleTick(this.quote);
final double quote;
@override
double get close => quote;
@override
double get high => quote;
@override
double get low => quote;
@override
double get open => quote;
}
// 完整 OHLC 实现
class SampleOHLC implements IndicatorOHLC {
const SampleOHLC(this.open, this.close, this.high, this.low);
@override
final double close;
@override
final double high;
@override
final double low;
@override
final double open;
}
使用指标
基本用法
// 准备你的数据
final List<SampleOHLC> data = [
SampleOHLC(0, 75.1, 74.06, 75.11),
SampleOHLC(0, 75.9, 76.03, 74.64),
// ... 更多数据点
];
// 创建输入
final input = SampleInput(data);
// 创建并使用指标
final rsi = RSIIndicator<SampleResult>(input);
final allValues = rsi.calculateValues();
final specificValue = rsi.getValue(5);
指标链式调用
指标可以用作其他指标的输入:
// 创建第一个指标
final macd = MACDIndicator<SampleResult>(input);
// 使用 MACD 作为 SMA 的输入
final sma = SMAIndicator<SampleResult>(macd, 3);
性能优化
大多数指标扩展了 CachedIndicator
,它提供了性能优化:
// 计算所有值(缓存以供将来使用)
final values = indicator.calculateValues();
// 获取特定值(如果可用则使用缓存)
final value = indicator.getValue(5);
// 如果需要,使缓存值失效
indicator.invalidate(3);
// 刷新特定值
indicator.refreshValueFor(5);
更多关于Flutter技术分析插件deriv_technical_analysis的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter技术分析插件deriv_technical_analysis的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter项目中,使用deriv_technical_analysis
插件可以帮助你进行技术分析。这个插件可能提供了各种技术分析工具,如移动平均线、相对强弱指数(RSI)、布林带等。虽然具体的使用细节可能依赖于插件的实现和API文档,但以下是一个基本的使用示例,展示如何在Flutter应用中集成并使用这个插件。
首先,确保你已经在pubspec.yaml
文件中添加了deriv_technical_analysis
依赖:
dependencies:
flutter:
sdk: flutter
deriv_technical_analysis: ^latest_version # 请替换为实际最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,你可以在你的Dart代码中导入并使用这个插件。以下是一个简单的示例,展示如何计算并显示一些技术分析指标:
import 'package:flutter/material.dart';
import 'package:deriv_technical_analysis/deriv_technical_analysis.dart'; // 假设插件的导入路径是这样的
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
List<double> prices = [ /* 你的价格数据列表 */ ];
List<double>? sma; // 简单移动平均线
double? rsi; // 相对强弱指数
@override
void initState() {
super.initState();
calculateTechnicalIndicators();
}
void calculateTechnicalIndicators() {
// 计算简单移动平均线(例如,5期SMA)
sma = TechnicalAnalysis.simpleMovingAverage(prices, 5);
// 计算相对强弱指数(例如,14期RSI)
rsi = TechnicalAnalysis.relativeStrengthIndex(prices, 14);
// 注意:这里假设TechnicalAnalysis类提供了这些静态方法。
// 实际情况可能需要根据插件的API进行调整。
// 更新UI
setState(() {});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Technical Analysis Example'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('Simple Moving Average (5-period):'),
if (sma != null) Text('SMA: ${sma!.join(', ')}'),
SizedBox(height: 16),
Text('Relative Strength Index (14-period):'),
if (rsi != null) Text('RSI: $rsi'),
],
),
),
),
);
}
}
注意:
-
上述代码是一个假设性的示例,
deriv_technical_analysis
插件的实际API可能与示例中的TechnicalAnalysis
类及其方法不同。你需要查阅插件的官方文档或源代码来了解其实际提供的API。 -
prices
列表应该包含你想要分析的历史价格数据。这些数据通常是从某个数据源(如API)获取的。 -
sma
和rsi
的计算结果取决于你提供的数据和所选择的参数(如SMA的周期数和RSI的周期数)。 -
插件可能提供了更多的技术分析工具和指标,你可以根据需求查阅文档并集成到你的应用中。
-
在实际项目中,你可能还需要处理异常情况和数据验证,以确保分析的准确性和稳定性。