跳转至

技术指标的程序化管理

交易者通常依赖手动交易和自动化交易助手的某种组合,尤其是自定义指标。 然而,在许多情况下,这些助手完全不了解彼此,无法对彼此的操作和输出做出反应。

幸运的是,cTrader 提供了一种方便的程序化管理图表指标的方法。 使用此功能,您可以构建动态助手,读取用户添加到图表的指标数据。

您还可以使算法根据某些条件添加、删除或更改指标设置,从而为用户提供更多价值并开辟新的变现途径。

本 API 指南解释了如何在不同的条件下以编程方式管理图表指标。

一分钟掌握图表指标管理!

  • 通过编程方式管理图表指标,您可以根据特定条件调整指标设置(例如,线条粗细)。
  • cBot 可以访问您手动附加到图表上的任何指标,读取其数据并据此进行交易。
  • 您的算法可以自动向图表添加或移除指标,节省您的时间。
  • 所有自定义指标都可以通过编程方式进行管理。

编程方式添加和移除指标

您可以通过调用以下方法轻松添加您有权访问的任何指标。

1
ChartIndicator ChartIndicators.Add(string name, params object[] parameterValues)

该方法将指标名称作为第一个参数,然后依次接受该指标的所有参数(例如,"Simple Moving Average", "High", 25)。

注意

该方法将接受您有权访问的任何指标的名称。

注意

任何 DataSeries 参数都必须在方法参数中指定为字符串。

注意

如果某些参数未指定,该方法将使用默认值。 如果某些参数无效,该方法将调用您的算法的 OnException 处理程序

方法执行后,请求的指标将立即添加到图表中,您可以使用该方法返回的值来管理它。 例如,您可以通过调用 ChartIndicators.Remove() 方法来移除它。

1
2
3
var newIndicator = ChartIndicators.Add("Simple Moving Average", "High", 25);
...
ChartIndicators.Remove(newIndicator);

以下是一个简单的 cBot,它使用这两种方法在 Average True Range (ATR) 值超过特定阈值时向图表添加自定义 Bollinger Bands 指标。 如果 ATR 值低于阈值,则移除该指标。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using cAlgo.API;
using cAlgo.API.Collections;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;

namespace cAlgo.Robots
{
    [Robot(AccessRights = AccessRights.None)]
    public class ChartIndicatorsTest : Robot
    {

        private AverageTrueRange _aTR;
        private ChartIndicator _customBollingerBands;

        protected override void OnStart()
        {
            _aTR = Indicators.AverageTrueRange(14, MovingAverageType.Exponential);
            ChartIndicators.Add("Average True Range");
        }

        protected override void OnBar()
        {
            if (_aTR.Result[Bars.Count - 1] >= 0.0002) 
            {
                _bollingerBands = ChartIndicators.Add("Custom BB");
            } else if (_bollingerBands != null)
            {
                ChartIndicators.Remove(_bollingerBands);
            }
        }

    }
}

修改指标设置

ChartIndicator 接口通过以下属性提供对所有主要指标设置的直接访问:

  • ChartIndicator.Type,获取指标的类型。
  • ChartIndicator.Parameters,获取所有指标参数的列表。
  • Lines,获取指标输出的所有线条的列表。

由于指标是视觉辅助工具,您可以根据市场条件修改其设置来增强它们。 以下指标正是这样做的。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using cAlgo.API;
using cAlgo.API.Collections;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;

namespace cAlgo
{
    [Indicator(AccessRights = AccessRights.None, IsOverlay = true)]
    public class ColourMovingAverage : Indicator
    {

        private MovingAverage _fastMA;
        private ChartIndicator _chartMA;
        private const int __lineThickness = 4;


        protected override void Initialize()
        {
            _fastMA = Indicators.MovingAverage(Bars.OpenPrices, 10, MovingAverageType.Exponential);
            _chartMA = ChartIndicators.Add("Exponential Moving Average", "Open", 10);
        }

        public override void Calculate(int index)
        {
            var line = _chartMA.Lines[0];

            if (Symbol.Bid > _fastMA.Result[index]) 
            {
                line.Color = Color.Green;
                line.Thickness = __lineThickness;
            } else 
            {
                line.Color = Color.Red;
                line.Thickness = __lineThickness;
            }
        }
    }
}

根据交易品种的当前价格是高于还是低于指数移动平均线,指标线的颜色和粗细会发生变化。 在某些情况下(例如,快速反应变化趋势),额外的视觉帮助可以起到关键作用。

处理附加事件

ChartsIndicators 接口还公开了几个事件,您可以通过处理这些事件来编程管理图表指标:

  • IndicatorAdded,每次向图表添加新指标时触发。
  • IndicatorRemoved,每次从图表移除指标时触发。
  • IndicatorModified,每次调整指标设置时触发。

这些事件对于 插件 开发者非常有价值。 通过插件,您可以创建 cTrader UI 的新元素,这些元素的内容会根据用户添加、移除或修改指标而变化。

不同模式下的指标管理

以下是不同 cTrader 模式和工具中的指标管理方式。

模式/工具 运作方式
非可视化回测 通过 ChartIndicators 添加的所有指标将在回测完成后显示在图表上。
可视化回测和 市场回放 一切按预期实时工作。
优化 所有操作都将工作,但回测完成后不会对图表进行任何更改。
cTrader CLI 所有操作按预期工作,但不会对任何图表进行更改。

编程管理图表指标对于任何希望提供增强或简化指标使用的算法的开发者来说都是理想的选择。 通过利用此功能,您可以向用户提供高质量且有价值的产品。

Image title