Flutter技术分析插件deriv_technical_analysis的使用

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

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

1 回复

更多关于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'),
            ],
          ),
        ),
      ),
    );
  }
}

注意

  1. 上述代码是一个假设性的示例,deriv_technical_analysis插件的实际API可能与示例中的TechnicalAnalysis类及其方法不同。你需要查阅插件的官方文档或源代码来了解其实际提供的API。

  2. prices列表应该包含你想要分析的历史价格数据。这些数据通常是从某个数据源(如API)获取的。

  3. smarsi的计算结果取决于你提供的数据和所选择的参数(如SMA的周期数和RSI的周期数)。

  4. 插件可能提供了更多的技术分析工具和指标,你可以根据需求查阅文档并集成到你的应用中。

  5. 在实际项目中,你可能还需要处理异常情况和数据验证,以确保分析的准确性和稳定性。

回到顶部