チャートインジケーターの管理

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

幸いなことに、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);

次に示すのは、両方のメソッドを使用して、平均真実レンジ(ATR)値が特定の閾値を超えたときにカスタムボリンジャーバンドインジケーターをチャートに追加する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を介して追加されたすべてのインジケーターは、バックテスト終了時にチャートに表示されます。
視覚的バックテストおよび「Market Replayすべてがリアルタイムで意図どおりに動作します。
最適化すべての操作は機能しますが、バックテスト終了時にはチャートに変更は加えられません。
cTrader CLIすべての操作が意図どおりに動作しますが、チャートには変更が加えられません。

まとめ

チャートインジケーターをプログラムで管理することは、インジケーターの操作を強化したり簡略化したりするアルゴを提供したい開発者にとって最適です。この機能を活用することで、ユーザーに高品質で価値のある製品を提供できます。

目次

このページについて