cAlgo API リファレンス

属性(attribute)【cAlgo API】

2020年10月23日

クラスやメンバに属性を付与するAttribute

cBot作成時に生成されるテンプレートのクラス定義を見てみましょう。

namespace cAlgo.Robots{
    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class cTradersLife : Robot    {
        [Parameter(DefaultValue = 0.0)]
        public double Parameter { get; set; }

この2行目と4行目、プログラム経験のある方でもC#に馴染みがないと「この[カッコ]なに?」って感じですよね。

これはC#特有の構文で、クラスやメンバに属性(attribute)を付与するものです。

namespace cAlgo.Robots{
    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    // このクラス↓は(TimeZone=...)のRobotにします
    public class cTradersLife : Robot    {
        [Parameter(DefaultValue = 0.0)]
        // このメンバ↓は(DefaultValue=0.0)のParameterにします
        public double Parameter { get; set; }

Attributeの型名は基本的に~Attributeとなっていますが、指定するときは[Robot]のようにAttributeを省略できます。

 

Attributeのプロパティ

cAlgoで使用するAttributeはプロパティを持ちます。

[Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]の()内がプロパティです。「これは(アクセス権限はなくて、UTC標準のタイムゾーンで動く)Robotですよと指定してるわけです。

プロパティは一つ一つ プロパティ名=値 の形で指定する必要があります。名前付きのプロパティを持たずに[Levels(20.0, 80.0)]のように直接数字を指定するだけのものもあります。

 

cAlgo内での使い方

cAlgoでは「cTrader本体に使い方を教えてあげるラベル」程度に考えておけば構いません。ほぼcBotもしくはIndicatorを作成し始めるとき最初に設定で使うだけです。

しかもほぼテンプレートで自動出力されてるので、やることは[Robot]や[Indicator]のプロパティを変更したり、どれが[Parameter]でどれが[Output]か指定する程度です。

以下にcAlgoで定義されているAtrributeを一通り示します。なお、プロパティはコード上では {get; set;}ですが、Attributeのプロパティは使い方が全く異なるため {get; set;}の記述は省略します。

 

 

cBot作成で使用するAttribute

RobotAttribute

これが付与されたクラスはcBot本体として扱われます。

プロパティ
(AccessRights) AccessRights

アクセス権限を指定します。プログラムがcTraderの外側に手を出す場合にどこまでやっていいのか権限を指定します。.None以外にすると起動時に警告が出ます。

(TimeZone) TimeZone

タイムゾーンを指定します。BarのOpenTimeなどで取得した時の時間がこのタイムゾーンになります。DataTime.Nowなどは影響を受けませんので注意してください。

 

 

ParameterAttribute

付与されたメンバ変数はcBotやIndicatorの外部から設定できるパラメータとなります。詳細は別記事書きました。

ParameterAttribute【cAlgo API】

外部から設定可能なパラメータ cBotやインジケーターのパラメータとして外部からユーザーが選択できる項目を表すために、MT4のEAではexternやinputというキーワードを使用して指定しますが、c ...

続きを見る

プロパティ
(string) Name

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

(メンバの型) DefaultValue

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

(string) Group

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

(メンバの型) MinValue

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

(メンバの型) MaxValue

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

(double) Step

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

 

サンプルコード
public class HelloWorld : Robot {
    [Parameter("期間",DefaultValue = 25)]
    public int Period { get; set; }

 

 

インジケータ作成で使用するAttribute

上記ParameterAttributeに加えて下記を使います。

IndicatorAttribute

付与されたクラスはIndicatorとして扱われます。Robotと同じ2つのプロパティに加えて下記を持ちます。

プロパティ
(bool) IsOverlay

重ねて表示するか別窓で表示するか。指定しないとfalse(別窓表示)です。

(bool) AutoRescale

自動でスケール調整をするかどうか。IsOverlay=trueのインジケータで、trueだと画面にインジケーターを表示させるよう自動調整されます。IsOverlay=falseの場合は違いがよくわかりません。指定しないとtrueです。cTraderはRescale周りもうちょい頑張ってほしいです(愚痴)

(int) ScalePrecision

数値を表示する際の小数点以下の桁数を指定します。

 

 

OutputAttribute

付与されたメンバはインジケータの表示に使われます

プロパティ
(string) Name

表示する名前を指定します。プロパティ名を記述せずに[Output("name", ...)]のように指定します

(string) LineColor

ラインの色を指定します。既定値は"Green"です。

(PlotType) PlotType

表示するのが線か点かヒストグラムかをPlotTypeで指定します。既定値はPlotType.Lineです。

(LineStyle) LineStyle

ラインスタイルをLineStyleで指定します。既定値は普通の線LiseStyle.Solidです。

(double) Thickness

線の太さをしてします。既定値は1.0です。

(bool) IsHistogram

ヒストグラムにするかどうか。

 

 

LevelsAttribute

必要なら指定します。指定位置に基準線を表示させたいときに[Indicator]と並べて使います。

プロパティ
(double[]) Levels

水平線を表示する場所。プロパティ名は記述せずに[Lebels(20.0, 80.0)]のように指定します。必ず指定する必要があります。

 

 

CloudAttribute

一目均衡表の雲みたいなの作りたいときに。[Indicator]と並べて使います。付与すると2本のラインの間を雲みたいな表示にできます。

プロパティ
(string) FirstLineName (string) SecondLineName

間を雲にしたい2本のラインのそれぞれの名前。プロパティ名を記述せずに[CloudAttribute("firstLine", "secondLine")]のように指定します。必ず指定する必要があります。

(Color) FirstColor

雲の色。指定しないと1本目のラインと同じ色になります。

(double) opacity

雲の不透明度。0~1の間の値で指定します。defaultは0.2。

 

 

関連する列挙型

Outputのプロパティで使用するPlotTypeとLineStyleは以下のメンバを指定します。

PlotType列挙型

Line 線 (データ欠損があっても存在するデータ同士をつなぐ)
DiscontinuousLine つながらない線(データ欠損があった場合、途切れる)
Points
Histogram

ヒストグラム

 

 

LineStyle列挙型

ちなみにこれはChartTrendLineなどでも使用します。

Solid
Lines 途切れ線 _ _ _ _ _ _ _ _ _ _ 
Dots 点線  ..........
DotsRare 間が空いた点線  . . . . . . . . . . . .
DotsVeryRare もっと間が空いた点線  .  .  .  .  .  .  .  .  .  .  .
LinesDots 線+点 _ . _ . _ . _ . _ .

 

 

その他cAlgoのAttribute

一応、リファレンスにあるので挙げておきますが、使いません。

(2021/7/20 追記) 気づいたら使えなくなっており、リファレンスからも消えています。ver4.0にて削除?

HideFromIntellisenceAttribute

旧式のメンバについていて、インテリセンスで表示されないようになっているみたいです。名前付きプロパティはありません。

System.ComponentModelの[EditorBrowsable(EditorBrowsableState.Never)]の組み込み環境版でしょうか。手元で試してみましたがよくわかりませんでした。同じアセンブリ内で機能しないとこも同様なのかもしれません。

でも、そもそも組み込み環境だと別アセンブリではインテリセンスがきいていない気がするんですけど・・・

 

 

余談ですが、attributeという用語はプログラミング言語によっては違う意味合いになったりしますので、検索の際はご注意を。

-cAlgo API リファレンス
-, , ,

© 2024 cTrader's Life Powered by AFFINGER5