インジケーター、cBotすべてのベース
Algoクラス
cTrader内で作成するプログラム、つまりはCBotやインジケーターのおおもととなるベースクラスです。CBotのRobotクラスとインジケーターのIndicatorクラスはAlgoを継承しています。
プログラムに使用するための主要なデータにアクセスするためのプロパティを提供するインターフェースとなっています。
このクラス自体を意識することはありませんが、CBotやインジケーターから頻繁に利用するプロパティは実はこのクラスがもってるものです。
public class Algo : Object
関連するクラス:Robot, Indicator
プロパティ
このクラスに限ったことではないのですが、C#は型名とプロパティ名が同じ名前のものが多くわかりにくく感じるかもしれません。ここでは()内は型名、そのあとがプロパティ名を表してます。
比較的よくお世話になるものを上の方に並べてます。cAlgo特有の型名については別記事があるため詳細はそちらを参考にして下さい。
(double) Ask
その通貨ペアの現在のAsk値です。
(double) Bid
その通貨ペアの現在のBid値です。
(Bars) Bars
これまでの4本値データ(Bar)の集まりを取得します。
(Symbol) Symbol
通貨ペアの各種情報を取得します。
(string) SymbolName
Symbol.Nameが直接参照できるようになってます。
(Chart) Chart
cBotやIndicatorが動いてるチャートそのものを取得します。チャートの表示やオブジェクトを操作するときによく使います。
(TimeFrame) TimeFrame
チャートのタイムフレームを取得します。5分足とか1時間足とか。Chart.TimeFrameが直接参照できるようになってるだけです。
(Positions) Positions
保有中Positionの集まりを取得します。Positionクラスからはポジションの情報得たり、ロスカット、テイクプロフィットを変更したり、クローズしたりできます。よく使います。
(History) History
これまでのトレード履歴を取得します。HistoryはHistoricalTradeの集まりです。
(IIndicatorsAccessor) Indicators
組み込みインジケータを取得するためのアクセッサを取得します。ややこしいんですが、表示されてるインジケーターの集まりではありません。
(bool) IsBacktesting
バックテスト中かどうかを取得します。バックテスト時と実稼働時に動きを変えたいときに使います。
(RunningMode) RunningMode
実稼働中(.RealTime)か最適化中(.Optimization)かバックテスト中(.SilentBacktesting)かビジュアルモードでバックテスト中(.VisualBacktesting)かの状態情報を取得します。
(MarketData) MarketData
他のシンボルの4本値データ、板情報、Tick情報を得たいときに使うオブジェクトを取得します。
(INotifications) Notifications
音鳴らしたり、メール送ったりするのに使うオブジェクトを取得します。
(PendingOrders) PendingOrders
待機注文の集まりを取得します。待機注文の情報が必要な時はここから。
(IServer) Server
Server関連情報を見るためのインターフェースを取得します。
(DateTime) Time
Server.Timeが直接参照できるようになってます。
(DateTime) TimeInUTC
Server.TimeInUTCが直接参照できるようになってます。
(Symbols) Symbols
通貨ペアの存在確認などに使うオブジェクトを取得します。
(Application) Application
cTrader本体オブジェクトを取得します。cTraderのバージョン情報、カラーテーマ、ユーザータイムオフセットを保持します。カラーテーマ変更やタイムオフセット変更のイベントを検知するのもこれ。
(TimeZoneInfo) TimeZone
このcBot、インジケーターのタイムゾーンを取得します。東京時間とかニューヨーク時間とか。なおTimeZoneInfoはcAlgo特有の型ではなくC#(.NetのSystem名前空間)のクラスです。
(WatchLists) WatchLists
ウォッチリストを取得します。追加したり削除したりできます。cBotからウォッチリスト編集するという発想はなかった。
(Assets) Assets
cTraderが持ってる資産情報一覧を取得します。Assets参照。(cTrader4.5以降)
(String) InstanceId
インスタンスごとに割り振られるIDを取得します。このIDはcTraderを再起動したり、時間足を切り替えたりしてインジケーター自体が初期化されても変更されることはありません。このIDに紐づけてローカルストレージにデータを保存しておくことで、再起動後もインスタンスごとに異なるデータを保持しておくことが可能となります。(cTrader4.6以降)
(IAssetConverter) AssetConverter
為替レート変換をするためのオブジェクトを取得します。(cTrader4.6以降)
メソッド
(void) Print( string str)
cBotウィンドウにログを出力します。よく使います。引数には直接stringを指定するほか、C#のstring.Formatの記法が使えます。
(void) RefreshDate()
データを最新の状態に更新します。処理途中に注文状態を更新したいときなどに使用します。
(void) BeginInvokeOnMainThread(Action action)
メインスレッド上で非同期で指定したアクションを実行します。
(IndicatorDataSeries) CreateDateSeries()
IndicatorDataSeriesを初期化します。注意点としてOutput属性のついた表示用データはこれで初期化してはいけません。非表示で使うためのIndicatorDataSeriesを初期化するためのメソッドです。
(void) OnTimer()
オーバーライド用です。一定間隔で繰り返したい処理があるときにオーバーライドします。Timer.Start(n)が呼ばれると、n秒間隔でOnTimerメソッドが繰り返し実行されます。Timer参照。
(void) OnException(Exception exception)
オーバーライド用です。cBotやインジケーターの例外発生時に共通して行いたい処理があるときにオーバーライドします。 (cTrader 4.6以降)
RunningMode列挙型
稼働してる環境を表します。Algo (cBotやIndicator本体) のプロパティRunningModeで取得します。
RealTime | Trade画面のチャート上で稼働中 |
SilentBacktesting | VisualModeじゃないバックテストで稼働中 |
VisualBacktesting | VisualModeのバックテストで稼働中 |
Optimization | 最適化中 |
TimeFrameクラス
一応クラスなんですが、列挙型と考えていいです。解説が必要なプロパティもメソッドもないので一覧にしておきます。TimeFrame同士を不等号で比較できるようになってます。
cTraderはとにかく足の種類がたくさんあります。9分足とか使う人いるんだろうか。一応表にしておきます。
(updateにより追記) 下記に加えRenko(練行足)やcTrader4.4からはHeikin~(平均足)といったものも使えるようになっていますが、これらの特殊足は一般的なHourなどの足と不等号で比較することができません。比較しても常にfalseが返るため注意が必要です。
Minute | 1分足 |
Minute2 | 2分足 |
Minute3 | 3分足 |
Minute4 | 4分足 |
Minute5 | 5分足 |
Minute6 | 6分足 |
Minute7 | 7分足 |
Minute8 | 8分足 |
Minute9 | 9分足 |
Minute10 | 10分足 |
Minute15 | 15分足 |
Minute20 | 20分足 |
Minute30 | 30分足 |
Minute45 | 45分足 |
Hour | 1時間足 |
Hour2 | 2時間足 |
Hour3 | 3時間足 |
Hour4 | 4時間足 |
Hour6 | 6時間足 |
Hour8 | 8時間足 |
Hour12 | 12時間足 |
Daily | 日足 |
Day2 | 2日足 |
Day3 | 3日足 |
Monthly | 月足 |
Weekly | 週足 |
サンプルコード
// 非対応の時間足だった時はcBotを止める
if(this.TimeFrame < TimeFrame.Hour) {
Print("1時間足より短い時間足には対応してません。時間足を変更してください。");
Stop();
}
(追記)このコードだと練行足など特殊足のときには止まりませんのでご注意ください。
Assetsインターフェイス
cTraderが情報をもってるAssetの一覧を管理するインターフェイスです。
public interface Assets : IEnumerable<string>
IEnumerableを継承してるのでCountでの要素数取得や[]によるアクセスも可能です。ただし、[]によるアクセスで返ってくるのはAsset型ではなくただの文字列です。
メソッド
(bool) Exists( string assetName)
指定した名前の資産情報をAssets内に持っているかどうかを返します。
(Asset) GetAsset(string assetName)
指定した名前の資産情報を取得します。
(Asset[]) GetAsset(string[] assetName)
複数の指定した名前の資産情報を取得します。
IAssetConverterインターフェイス
Assetを変換するためだけのインターフェイスです。
public interface IAssetConverter
メソッド
(double) Convert(double value, Asset from, Asset to)
(double) Convert(double value, string from, string to)
(double) Convert(double value, string from, Asset to)
(double) Convert(double value, Asset from, string to)
アセット(通貨など)を変換します。(下2つのオーバーロードはcTrader4.7で追加)
サンプルコード
var volume = 10;
var yen = AssetConverter.Convert(volume,"USD", "JPY");
Print($"現在の為替レートでは{volume}ドルは{yen}円です。");