コンテンツにスキップ

テクニカルインジケーターのプログラム管理

トレーダーは、特にカスタムインジケーターを使用して、マニュアル取引と自動取引ヘルパーの組み合わせに頼ることがよくあります。 しかし、多くの場合、これらのヘルパーは互いに完全に認識しておらず、互いのアクションや出力に反応できません。

幸いなことに、cTraderはチャートインジケーターをプログラムで管理する便利な手段を提供しています。 この機能を使用すると、ユーザーがチャートに追加したインジケーターからデータを読み取る動的なアシスタントを構築できます。

また、アルゴが特定の条件に基づいてインジケーターを追加、削除、または設定を変更できるようにすることで、ユーザーにさらに価値を提供し、収益化の新しい道を開くことができます。

このAPIガイドでは、さまざまな条件でチャートインジケーターをプログラムで管理する方法を説明します。

チャートインジケーター管理を1分で!

  • チャートインジケーターをプログラムで管理することで、特定の条件に応じてインジケーター設定(例えば、線の太さ)を調整できます。
  • 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);

以下は、Average True Range (ATR) の値が特定の閾値を超えたときに、カスタムのBollinger Bandsインジケーターをチャートに追加する両方の方法を使用するシンプルなcBotです。 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