cAlgo API リファレンス

Robot【cAlgo API】

2020年10月19日

すべてのcBotのベースとなるクラス

cTraderの自動売買プログラム (cBot) はすべてRobotクラスを継承しています。

新しくcBotを作成しようとすると

[Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
public class YourcBot : Robot{

のように自動的にRobotを継承したクラスが作られます。このクラスの中身を作っていくことでcBotを作成します。

 

Robotクラス

public class Robot : Algo

見てのとおり、Algoを継承したクラスとなっていますので、Algoの中身も理解しておきましょう。

 

プロパティ
( IAccount ) Account

アカウント情報を持つオブジェクトを取得します。

(TradeResult) LastResult

最後のトレード結果を取得します。トレード結果といっても決済の結果に限りません。下記のTradeResultが返ってくる注文すべてが対象です。

その他Algoのプロパティすべて

Bars, Chart, Synbol, Positions, History, などよく使うのはだいたいこっちにそろってます。

 

メソッド

発注関連のメソッドがそろってます。たくさんあるように見えますが、実際にRobotから直接呼び出す必要があるのはエントリー用のメソッドだけです。

ポジションの修正、決済や、待機注文の修正、取消などはそれぞれPositionPendingOrderから行うため、Robotから行うことはほぼありません。

なお、末尾にAsyncがついてるものは非同期発注版です。

(TradeResult) ExecuteMarketOrder(...) 
(TradeOperation) ExecuteMarketOrderAsync(...)

成り行き注文を送信します。詳細

(TradeResult) ExecuteMarketRangeOrder(...)
(TradeOperation) ExecuteMarketRangeOrderAsync(...)

価格帯指定で成り行き注文を送信します。

(TradeResult) PlaceLimitOrder(...)
(TradeOperation) PlaceLimitOrderAsync(...)

指値注文を送信します。

(TradeResult) PlaceStopOrder(...)
(TradeOperation) PlaceStopOrderAsync(...)

逆指値注文を送信します。

(TradeResult) PlaceStopLimitOrder(...)
(TradeOperation) PlaceStopLimitOrderAsync(...)

ストップリミット注文を送信します。注文種別の詳細はこちら

(void) Stop()

cBotを止めます。

(void) OnStart()

オーバーライド用。起動時に1回だけ呼び出されます。初期化処理をここに書きます。

(void) OnTick()

オーバーライド用。価格が更新されるたびに呼び出されます。多くの場合メインロジックはここに書きます。毎Tick実行したい処理をここに書きます。

(void) OnBar()

オーバーライド用。ローソク足が更新されたときに呼び出されます。ローソク足更新時のみ動くcBotならここがメインとなります。ローソク足完成時に実行したい処理をここに書きます。

初期のテンプレートには含まれてないので必要な場合は自分でオーバーライドします。なお、ローソク足更新時はOnTick→OnBarの順で呼び出されます。

(void) OnStop()

オーバーライド用。cBotが停止するときに呼び出されます。例外が起きてクラッシュしても呼び出されるため、リソース解放など後処理が必要な場合ここにまとめておきましょう。

(void) OnError(Error error)

オーバーライド用。トレードでエラーが起きた時に呼び出されます。つまりは上記発注関連メソッドの返り値TradeResultのIsSuccessfulがfalseのときです。プログラムのエラーではありませんので注意してください。これもテンプレートにはないので必要なら自分でオーバーライドしましょう。

(double) GetFitness(GetFitnessArgs args)

オーバーライド用。最適化の際の処理を自分で定義できます。必要なら自分でオーバーライドします。もちろんオーバーライドしなくても最適化は可能です。

 

これ以下は使用頻度とても低いです。

(TradeResult) ClosePosition(Position pos, long volume) 
(TradeOperation) ClosePositionAsync(Position pos, long volume, Action callback)

ポジションを成り行きで決済します。

(TradeResult) ModifyPendingOrder(...)
(TradeOperation) ModifyPendingOrderAsync(...)

待機中の注文を修正します。

(TradeResult) ModifyPosition(...)
(TradeOperation) ModifyPositionAsync(...)

ポジションの数量修正(一部決済or追加発注)やストップロス、テイクプロフィットを修正します。

(TradeResult) CancelPendingOrder(PendingOrder order)
(TradeOperation) CancelPendingOrderAsync(PendingOrder order, Action callback)

待機中の注文をキャンセルします。

(TradeResult) ReversePosition(Position pos, double volume)
(TradeOperation) ReversePositionAsync(Position pos ,double volume, )

ドテンします。引数のposは全量決済し、volumeだけ逆向きにエントリーします。

Algoのメンバメソッド

CreateDataSeriesなど

 

サンプルコード

using System;
using System.Linq;
using cAlgo.API;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;
using cAlgo.Indicators;

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

        protected override void OnStart()
        {
            // 初期化処理をここに書く。使う変数やインジケーターの準備とか。
        }

        protected override void OnTick()
        {
            // 毎Tick行う処理をここに書く。
        }

        // ↓OnBar使うなら自分で追加する
        protected override void OnBar()
        {
            // ローソク足更新時に行う処理をここに書く。

            // 例:ローソク足更新時、資金残高が10000以下だったらcBotを止める
            Account.Balance <= 10000){
                Stop();
            }
        }

        protected override void OnStop()
        {
            // cBotの停止時に行う処理をここに書く。
        }
    }
}

サンプルというか、ほぼひな形そのまんまです。OnBar以外のオーバーライドメソッドは自動で生成されます。OnStart()内に初期化処理、OnTick()かOnBar()内にメインの処理、OnStop()内に終了処理を書く。基本はこれだけです。

-cAlgo API リファレンス
-,

© 2021 cTrader's Life Powered by AFFINGER5