コンテンツにスキップ

Trend cBot

戦略概要

Trend cBotは、2つの移動平均線(MA)を使用してトレンドを検出し、取引の決定を行う戦略を実装しています。 このアルゴリズムは、高速MAと低速MAを計算し、時間の経過とともにそれらの値を比較し、クロスオーバーポイントを特定して買いまたは売りのシグナルを生成します。

Trend cBotはMAのクロスオーバーを利用してモメンタムの変化を検出するため、明確で持続的なトレンドのある市場で最も効果的です。 言い換えれば、このアルゴリズムは、上昇または下降の強い方向性の動きを示す通貨ペアで良好な結果を出します。

cBotの作成

C#またはPythonを使用してcBotを作成する方法を、ステップバイステップのガイドで学びます。

Trend cBotのコードは、公開されているC#およびPythonリポジトリで利用可能です。 同じコードが、cTrader WindowsまたはMacのアルゴリズム作成ウィザードでテンプレートとして提供されており、以下のスニペットをコピーして使用することもできます:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
using cAlgo.API;
using cAlgo.API.Indicators;

namespace cAlgo
{
    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None, AddIndicators = true)]
    public class SampleTrendcBot : Robot
    {
        [Parameter("Quantity (Lots)", Group = "Volume", DefaultValue = 1, MinValue = 0.01, Step = 0.01)]
        public double Quantity { get; set; }

        [Parameter("MA Type", Group = "Moving Average")]
        public MovingAverageType MAType { get; set; }

        [Parameter("Source", Group = "Moving Average")]
        public DataSeries SourceSeries { get; set; }

        [Parameter("Slow Periods", Group = "Moving Average", DefaultValue = 10)]
        public int SlowPeriods { get; set; }

        [Parameter("Fast Periods", Group = "Moving Average", DefaultValue = 5)]
        public int FastPeriods { get; set; }


        private MovingAverage slowMa;
        private MovingAverage fastMa;
        private const string label = "Sample Trend cBot";

        protected override void OnStart()
        {
            fastMa = Indicators.MovingAverage(SourceSeries, FastPeriods, MAType);
            slowMa = Indicators.MovingAverage(SourceSeries, SlowPeriods, MAType);
        }

        protected override void OnTick()
        {
            var longPosition = Positions.Find(label, SymbolName, TradeType.Buy);
            var shortPosition = Positions.Find(label, SymbolName, TradeType.Sell);

            var currentSlowMa = slowMa.Result.Last(0);
            var currentFastMa = fastMa.Result.Last(0);
            var previousSlowMa = slowMa.Result.Last(1);
            var previousFastMa = fastMa.Result.Last(1);

            if (previousSlowMa > previousFastMa && currentSlowMa <= currentFastMa && longPosition == null)
            {
                if (shortPosition != null)
                    ClosePosition(shortPosition);

                ExecuteMarketOrder(TradeType.Buy, SymbolName, VolumeInUnits, label);
            }
            else if (previousSlowMa < previousFastMa && currentSlowMa >= currentFastMa && shortPosition == null)
            {
                if (longPosition != null)
                    ClosePosition(longPosition);

                ExecuteMarketOrder(TradeType.Sell, SymbolName, VolumeInUnits, label);
            }
        }

        private double VolumeInUnits
        {
            get { return Symbol.QuantityToVolumeInUnits(Quantity); }
        }
    }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import clr

clr.AddReference("cAlgo.API")

# Import cAlgo API types
from cAlgo.API import *

# Import trading wrapper functions
from robot_wrapper import *

class SampleTrendcBot():
    Label = "Sample Trend cBot"

    def on_start(self):
        self.volume_in_units = api.Symbol.QuantityToVolumeInUnits(api.Quantity)
        self.fastMa = api.Indicators.MovingAverage(api.SourceSeries, api.FastPeriods, api.MAType)
        self.slowMa = api.Indicators.MovingAverage(api.SourceSeries, api.SlowPeriods, api.MAType)

    def on_tick(self):
        longPosition = api.Positions.Find(self.Label, api.SymbolName, TradeType.Buy)
        shortPosition = api.Positions.Find(self.Label, api.SymbolName, TradeType.Sell)

        currentSlowMa = self.slowMa.Result.Last(0)
        currentFastMa = self.fastMa.Result.Last(0)
        previousSlowMa = self.slowMa.Result.Last(1)
        previousFastMa = self.fastMa.Result.Last(1)

        if previousSlowMa > previousFastMa and currentSlowMa <= currentFastMa and longPosition is None:
            if shortPosition is not None:
                api.ClosePosition(shortPosition)
            api.ExecuteMarketOrder(TradeType.Buy, api.SymbolName, self.volume_in_units, self.Label)
        elif previousSlowMa < previousFastMa and currentSlowMa >= currentFastMa and shortPosition is None:
            if longPosition is not None:
                api.ClosePosition(longPosition)
            api.ExecuteMarketOrder(TradeType.Sell, api.SymbolName, self.volume_in_units, self.Label)

インジケーターの統合

移動平均線は、特定の期間にわたるトレンドを識別するために価格データをスムージングする人気のあるテクニカル指標です。 移動平均指標には、Simple Moving Average (SMA)Exponential Moving Average (EMA)Time SeriesTriangularWeightedWelles Wilder SmoothingHullなどが含まれます。

Trend cBotは2つのMAを使用して市場のトレンドを監視します:

  • Fast MA – 価格の変化に迅速に反応し、通常は短期トレンドを表します。
  • Slow MA – 価格の変化にゆっくりと反応し、長期トレンドを表します。

cBotは高速MAと低速MAの間のクロスオーバーイベントを監視し、それらを使用してシグナルを生成します:

  • 買いシグナル – slow MAがfast MAを下から上にクロスするとき、上昇モメンタムと解釈され、買いシグナルが生成されます。
  • 売りシグナル – fast MAがslow MAを下から上にクロスするとき、下降モメンタムと解釈され、売りシグナルが生成されます。

反対の取引ポジションが開いている状態で新しいシグナルが生成された場合(例:売りポジションが開いている状態で買いシグナルが生成された場合)、cBotは既存のポジションを閉じて新しいポジションを開きます。 この設定により、常に1つのポジションのみが開いている状態が保証されます。

計算とロジック

初期設定

cBotはOnStart()メソッドで2つのMAを初期化します。このメソッドはcBotが起動したときに呼び出されます。

MAは、データシリーズに対して異なる期間を使用して計算されます。 fastMAFastPeriodsを使用して計算され、slowMASlowPeriodsを使用して計算されます。

リアルタイムMA計算

取引決定の主要なロジックはOnTick()メソッドで実行されます。このメソッドは新しいティック(価格データ)が受信されるたびに呼び出されます。 2つのMAは、選択されたMATypeに対してcTraderの組み込み公式を使用して継続的に計算され、各ティックで更新されます。

cBotはMAの現在値と前回の値を取得し、その後クロスオーバー条件に進みます。 cBotはMAの現在値と前回の値を比較して、クロスオーバーが発生したかどうかを判断します:

  • 上昇トレンド検出slowMAfastMAを下から上にクロスする場合、上昇モメンタムと解釈され、買いシグナルが生成されます。
  • 下降トレンド検出fastMAslowMAを下から上にクロスする場合、下降モメンタムと解釈され、売りシグナルが生成されます。

取引の実行

クロスオーバーを検出した後、cBotは生成されたシグナルに基づいて取引を実行します:

  • 買いシグナルの取引実行 – cBotは、開いている売りポジションをチェックしてクローズします。 その後、新しい買いポジションを開きます。
  • 売りシグナルの取引実行 – cBotは、開いている買いポジションをチェックしてクローズします。 その後、新しい売りポジションを開きます。

パラメーター

パラメーター 単位 定義 ヒント
数量 ロット 各取引の取引高。 小さな価格変動に焦点を当てるスキャルピングトレーダーは、短期間に多くの取引を行いながらリスクを最小限に抑えるために、小さなロットサイズを選択する場合があります。

ポジションを長期間保有するスイングトレーダーは、市場の大きな動きを予想し、潜在的な利益を最大化したいため、大きなロットサイズを使用する場合があります。
MA type 移動平均線の種類。 変動の少ない市場では、トレーダーはSMAを好む傾向があります。これは価格データをより効果的に平滑化し、短期的な変動によってcBotが誤った判断をする可能性を減らすためです。

変動の激しい市場では、ユーザーはEMAを好む可能性があります。これは価格変動に素早く反応し、早期のトレンド反転を捉えることができるためです。
ソース 移動平均線の計算に使用される価格データ。 利用可能なオプションには、終値、始値、高値、安値があります。 保守的なトレーダーは、終値を信頼性が高いとして使用する傾向があります。これはローソク足の最終価格を表すためです。

より積極的なトレーダーは、トレンド反転やブレイクアウトの機会を価格範囲の極端な点で捉えたい場合、高値または安値を好む可能性があります。
Slow Periods 遅い移動平均線を計算するために使用される期間数。 デイトレーダーは、短期的なトレンドに焦点を当て、日中に頻繁な機会を捉えるために低い値を設定する可能性があります。

長期的なトレンドを狙うトレーダーは、強力で確認されたトレンドがある場合にのみcBotがトレードに参入するよう、高い値を設定する可能性があります。
Fast Periods 速い移動平均線を計算するために使用される期間数。 素早いエントリーとイグジットを求めるトレーダーは、cBotが短期的な価格変動に素早く反応するよう、低い値を設定する可能性があります。

より広範な市場トレンドに従うトレーダーは、誤ったシグナルの数を減らし、大きな価格変動に焦点を当てるために高い値を設定する可能性があります。

応用

トレンド相場

Trend cBotは、価格変動が一貫して持続するトレンド相場で良好なパフォーマンスを発揮します。 このような市場では、移動平均線がしばしばトレンドを捉え、クロスオーバーが売買シグナルの効果的な指標となります。

ユースケース

EURUSDが強い上昇トレンドにあり、チャート上で日々高値を更新し、安値も上昇している状況を考えてみましょう。 移動平均線のクロスオーバーがトレンドを検出し、速いMAが遅いMAを上向きにクロスするたびに、cBotは買いシグナルを出します。

!!! info "情報" 「ベストプラクティス」

- 長期間のトレードを行う場合は、ノイズを避け、持続的なトレンドを捉えるために、MAの期間値を高く設定します。
- 比較的変動の少ない商品(例えば金)のトレンド相場では、軽微な価格変動をフィルタリングするために単純移動平均線を使用します。

ボラティリティの高い資産

急激で大きな価格変動を経験する資産は、適切な移動平均線が選択された場合、cBotが速いトレンドに反応する能力から恩恵を受ける傾向があります。

ユースケース

ビットコインが暗号資産の強気相場または季節の真っ只中にある状況を考えてみましょう。 BTCは急激な価格変動を経験し、時には数日で数千ドル上昇するトレンドを示します。 cBotは、速いMAが遅いMAを上回ったときにロングポジションに入ることで、急激な上昇トレンドを活用します。

!!! info "情報" 「ベストプラクティス」

- cBotが最近の価格変動により速く反応するように、指数移動平均線を使用します。
- 初期のモメンタムを捉えるために、速いMAと遅いMAの期間を短く設定することを検討します。

スイングトレード

数日から数週間ポジションを保有するスイングトレーダーは、適切な設定を使用した場合、cBotが中期的なトレンドを検出する能力から恩恵を受けます。 移動平均線のクロスオーバーは、定期的な価格変動がある市場でトレードの明確な入口と出口を提供します。

ユースケース

スイングトレーダーがGBPUSDの定期的なトレンドを識別し、数日間続くトレンドを捉えるために4時間チャートでcBotを使用する状況を考えてみましょう。 速いMAが遅いMAを上回ったとき、cBotは買いポジションに入り、トレンドが反転するまでそれを保持します。

ベストプラクティス

cBotが軽微な変動を無視しつつ、重要な市場の動きを捉えられるように、速いMAと遅いMAの期間を中程度の長さに設定します。

ブレイクアウト戦略

Trend cBotは、価格が consolidation range から抜け出して新しいトレンドに入るブレイクアウトイベントで有用です。 移動平均線のクロスオーバーは、ブレイクアウトが発生したときに強い動きの始まりを示すことができます。

ユースケース

主要な株式が数日または数週間にわたって狭いレンジで取引され、ブレイクアウトが予想される状況を考えてみましょう。 cBotをデプロイしてブレイクアウトを捉えることができます。 株価が抵抗線を上回ると、速いMAが遅いMAをクロスし、買いシグナルが発生します。

ベストプラクティス

cBotがトレンドを早期に捉え、有利なエントリーポイントでトレードできるように、速いMAの期間に低い値を使用します。

Summary

Trend cBotは、移動平均線のクロスオーバーに基づいた単純な数学的プロセスに従って、トレンドの変化を検出し、トレードを実行します。 速いMAと遅いMAの現在値と前回値を比較することで、cBotは買いまたは売りを決定し、常に検出されたトレンドに沿ったポジションを取ることを保証します。

cBotは、他の指標と組み合わせることでパフォーマンスが向上する可能性があります。 Relative Strength Index (RSI)またはMoving Average Convergence Divergence (MACD)は、誤ったシグナルをフィルタリングし、トレンドの強さを確認するのに役立ちます。 例えば、RSIを使用して、MAのクロスオーバーに基づいて行動を起こす前に、買われ過ぎまたは売られ過ぎの状態をチェックすることができます。

cBotのカスタマイズ可能なパラメータを使用して、あなたの取引ニーズとリスク選好に合わせてアルゴリズムを微調整できます。 さらに、異なる値、設定、データでcBotをバックテストし、特定のシンボルと期間に対して最適または収益性の高いパラメータの組み合わせを見つけることができます。