cAlgo API リファレンス

ParameterAttribute【cAlgo API】

2020年11月24日

外部から設定可能なパラメータ

cBotやインジケーターのパラメータとして外部からユーザーが選択できる項目を表すために、MT4のEAではexternやinputというキーワードを使用して指定しますが、cAlgoではC#の属性という仕組みを使います。

属性(attribute)【cAlgo API】

クラスやメンバに属性を付与するAttribute cBot作成時に生成されるテンプレートのクラス定義を見てみましょう。 namespace cAlgo.Robots{ [Robot(TimeZone ...

続きを見る

ParameterAttributeは特によく使うため、ここでもう少し詳しく説明します。

なお、この記事で「パラメータ」といったらこの外部パラメータを指してるものと思ってください(ついメソッドの引数を想像してしまうので念のため・・・)

 

ParameterAttribute

概要

cBotやIndicatorのプロパティにこの属性を付与することで、そのプロパティはユーザーが外部から設定できるパラメータとなります。publicのプロパティである必要があります。

 

プロパティ
(string) Name

パラメータの表示名を指定します。プロパティ名を記述せずに[Parameter("name", ...)]と指定します。指定しなければメンバ変数名がそのまま表示されます。

(メンバの型) DefaultValue

既定値を指定します。起動しようとしたときに最初から入ってる値です。実際のプロパティ自体の型はobjectですが、メンバの型を入れてください。

(string) Group

パラメータのグループを指定します。

(メンバの型) MinValue

パラメータの最小値を指定します。数値型専用。

(メンバの型) MaxValue

パラメータの最大値を指定します。数値型専用。

(double) Step

設定画面で上下ボタンを押したときのパラメータの増減値を指定します。

 

使い方

実際の使い方を見てみましょう。ちなみに当ブログのMultiEnvelopesのパラメータ宣言部分ほぼそのままです。

// もととなる価格
[Parameter("基準価格", Group ="MA setting")]
public DataSeries Source { get; set; }

// 移動平均線の期間
[Parameter("期間", DefaultValue = 25, MinValue =1, Group = "MA setting")]
public int Period { get; set; }

// 移動平均タイプ
[Parameter(DefaultValue = MovingAverageType.Simple, Group = "MA setting")]
public MovingAverageType MAType { get; set; }

// ライン同士の距離(価格%)
[Parameter("線同士の間隔", DefaultValue = 0.05, MinValue =0, Step=0.05, Group = "band setting")]
public double Step { get; set; }

// 表示本数
[Parameter("表示本数", DefaultValue = 8, MaxValue = 12, MinValue = 1, Group = "band setting")]
public int LineCount { get; set; }

 

この記述で設定画面ではこんな風になります。

同じGroupに設定したパラメータはまとめられわかりやすく表示されます。パラメータが多い場合はGroupを設定したほうがいいでしょう。

DefaultValueは省略可能で、省略した場合は型により既定の値が入るか、赤く表示されユーザーに入力を促すようになります。2,3行目のSourceでは省略されてるため、DataSeriesの既定値Closeが入ってます。

10,11行目のMATypeでは表示名を省略しているため、変数名がそのまま表示されています。

MinValue,MaxValueは入力できる最小値、最大値、Stepは上下矢印を押したときに増減する値を設定してます。挙動を確認したい場合はMultiEnvelopesを入れてみてください。

 

パラメータに設定可能な型

int, double, bool, stringなどのC#組み込み型のほかに列挙型およびDataSeries,TimeFrameを設定することが可能です。

上記のMATypeが列挙型の例です。列挙型が指定された場合、ユーザーはパラメータを直接入力できず、選択肢から選ぶ形になります。

自作の列挙型も使用可能なので、MATypeのように選択肢の中から選ばせたい場合は専用の列挙型を作ってパラメータの型にするとよいでしょう。

DataSeriesとTimeFrameは列挙型ではないのですが設定可能です。cTrader側から特別扱いされるみたいです。

プログラム内でDataSeriesの既定値を設定しておきたい場合はDefaultValue = "High"という形で設定可能です。(大文字始まり。"high"じゃダメなので注意。)

TimeFrameも同様にDefaultValue = ”Hour4"のように文字列で設定可能です。

なお、設定できない型にParameter属性を付けてもVisual Studioではビルドが通ってしまいますが、パラメータとして表示はされません。(よく見るとcTrader組み込み環境の方でエラー表示がでてます)

 

パラメータの内容を変更した場合の注意点

インジケーターはcBotと異なり、プログラムを変更してビルドしなおすと、使用中のインジケーターでも自動的に更新・再起動されます。しかしインジケーター、cBotともにすでに設定済みのパラメータの値は変わりません

ありがちなのが、

まず試しにビルドして表示 → 微妙だったのでDefaultValueを変更して再ビルド → おや?なにも変わらないぞ?

というパターン。わかってるはずなのに、何度もはまってます。

変更したDefaultValueを反映させたい場合はインジケーターの設定画面開いてResetボタンを押すのを忘れないようにしましょう。

-cAlgo API リファレンス
-

© 2021 cTrader's Life Powered by AFFINGER5