コンテンツにスキップ

スリープ機能

特定の時間まで待機する機能は、特にスケジュールされたり、何らかのイベント(例えば、公表)の発生時にアクティブ化されるべきcBotにとって不可欠です。 cTraderのSleep()メソッドは、指定された時間が経過または接近するまでアルゴリズムを一時停止することを可能にします。

注意

スリープ機能はcBotとインジケーターでのみ利用可能です。

このAPIガイドでは、Sleep()メソッドとその正しい使用方法を紹介します。

1分間のSleep()メソッド!

  • Sleep()メソッドは、開発者が柔軟な時間パラメーターを設定してアルゴリズムの実行を一時停止することを可能にします。
  • cBotが特定のイベントに反応してカスタム戦略を実行する必要がある場合、スリープ機能を使用してニュースを取引し、スケジュールされたイベントに反応します。
  • スリープ機能のために経過する期間をミリ秒から任意の時間間隔で設定します。
  • Sleep()メソッドは.NET 6アルゴでのみ利用可能であり、バックテストで意図した通りに動作します。

Sleep()メソッドの動作

スリープ機能は.NET 6アルゴリズムでのみ利用可能です。 cBotがスリープモードにある間、コード内の他のすべてのイベントは無視されます。

スリープモード中にBarOpenedイベントが5回発生した場合、cBotが起動した後も、見逃されたOnBar()ハンドラは呼び出されません。 この場合、新しい今後のイベントのみが発生します。

それでも、cBotはスリープモード中にすべてのデータメッセージを処理します(例えば、RefreshData()が呼び出された場合)。

注意

スリープ時間を指定することで、アルゴリズムの中断の最小間隔を設定します。 実際のスリープ時間は、常に要求された中断時間以上になります。

Sleep()メソッドを適用するために、アルゴリズム開発者は目的に応じて以下のシグネチャのいずれかを使用する必要があります。

指定された時間が経過するまでアルゴリズムを中断する場合:

void Sleep(Timespan timespan)

指定されたミリ秒数が経過するまでアルゴリズムを中断する場合:

void Sleep(int milliseconds)

指定された日時に達するまでアルゴリズムを中断する場合:

void Sleep(DateTime dateTime)

現在の米連邦準備制度理事会(FRB)議長ジェローム・パウエルの次のスピーチが2023年12月11日11:00に予定されていると仮定します。 EURUSDのトレンドに影響を与えるいくつかの発表を期待しており、スピーチ開始時に適切な戦略を追求するcBotを開発しました。 この場合、以下のようにSleep()メソッドを適用できます。

DateTime doomsday = new DateTime(2023, 12, 11, 11, 0, 0); 
Sleep(doomsday)

警告

DateTimeパラメータがアルゴリズムのタイムゾーンにない場合、ArgumentExceptionがスローされます。

Sleep()メソッドはバックテストでも意図した通りに動作します。 UIからスリープ中のcBotを停止したい場合、起動するまで待つ必要はありません。 停止ボタンをクリックすると、タイムアウトなしで動作を停止します。

例の cBot を作成する

以下の例のcBotは起動後30秒間スリープし、ログにそれぞれのメッセージを出力します。 その後、USDJPYの買い成行注文を出します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class SleepAndExecuteBot : Robot
    {
        protected override void OnStart()
        {
            Print("cBot will sleep for 30 seconds");
            Sleep(30000);

            var symbol = Symbols.GetSymbol("USDJPY");
            ExecuteMarketOrder(TradeType.Buy, symbol, 1000);
        }        
    }
}

Image title

概要

スリープ機能により、アルゴリズム開発者はcBotが起動された場合でも他のメソッドの実行を中断できます。 柔軟な時間パラメータを持つSleep()メソッドを適用することで、スケジュールされたイベントにタイムリーにカスタム戦略で対応できます。