コンテンツにスキップ

RSI cBot

戦略概要

RSI cBotは、Relative Strength Index (RSI)を主要な指標として使用するシンプルなモメンタムベースの反転取引戦略を実装しています。

RSI cBotは、市場のモメンタムを反映し、買われ過ぎや売られ過ぎの状態を判断するRSI値に基づいて自動的に売買を行います。 このcBotは、新しいポジションを開く前に既存のポジションを決済するようにコーディングされており、これにより常に1つの関連ポジションのみが開いている状態を確保します。

RSIが30を下回ると、市場は売られ過ぎと見なされ、cBotは買いポジションを開きます。 この買いシグナルは、市場が売られ過ぎの状態に達した後に価格が上昇するという期待に基づいています。

RSIが70を上回ると、市場は買われ過ぎと見なされ、cBotは売りポジションを開きます。 この売りシグナルは、市場が買われ過ぎになった後に価格が下落するという期待に基づいています。

RSI指標に基づく戦略は、cBotがRSIシグナルに基づいて反転を取引できる市場に最適です。

cBotの作成

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

RSI 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
using cAlgo.API;
using cAlgo.API.Indicators;

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

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

        [Parameter("Periods", Group = "RSI", DefaultValue = 14)]
        public int Periods { get; set; }

        private RelativeStrengthIndex rsi;

        protected override void OnStart()
        {
            rsi = Indicators.RelativeStrengthIndex(Source, Periods);
        }

        protected override void OnTick()
        {
            if (rsi.Result.LastValue < 30)
            {
                Close(TradeType.Sell);
                Open(TradeType.Buy);
            }
            else if (rsi.Result.LastValue > 70)
            {
                Close(TradeType.Buy);
                Open(TradeType.Sell);
            }
        }

        private void Close(TradeType tradeType)
        {
            foreach (var position in Positions.FindAll("SampleRSI", SymbolName, tradeType))
                ClosePosition(position);
        }

        private void Open(TradeType tradeType)
        {
            var position = Positions.Find("SampleRSI", SymbolName, tradeType);
            var volumeInUnits = Symbol.QuantityToVolumeInUnits(Quantity);

            if (position == null)
                ExecuteMarketOrder(tradeType, SymbolName, volumeInUnits, "SampleRSI");
        }
    }
}
 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
import clr

clr.AddReference("cAlgo.API")

# Import cAlgo API types
from cAlgo.API import *

# Import trading wrapper functions
from robot_wrapper import *

class SampleRSIcBot():
    def on_start(self):
        self.rsi = api.Indicators.RelativeStrengthIndex(api.Source, api.Periods)

    def on_tick(self):
        if self.rsi.Result.LastValue < 30:
            self.close_position(TradeType.Sell)
            self.open_position(TradeType.Buy)
        elif self.rsi.Result.LastValue > 70:
            self.close_position(TradeType.Buy)
            self.open_position(TradeType.Sell)

    def close_position(self, tradeType):
        for position in api.Positions.FindAll("SampleRSI", api.SymbolName, tradeType):
            api.ClosePosition(position)

    def open_position(self, tradeType):
        position = api.Positions.Find("SampleRSI", api.SymbolName, tradeType)
        volumeInUnits = api.Symbol.QuantityToVolumeInUnits(api.Quantity)
        if position is None:
            api.ExecuteMarketOrder(tradeType, api.SymbolName, volumeInUnits, "SampleRSI")

インジケーターの統合

Relative Strength Index (RSI)は、RSI cBotで使用される主要な指標です。 RSIは、価格変動の速度と変化を測定するモメンタムオシレーターです。 0から100の範囲で変動し、市場の買われ過ぎまたは売られ過ぎの状態を識別するために使用されます。

買われ過ぎまたは売られ過ぎの状態の評価に基づいて、RSIはcBotが買うか売るかを決定します。 RSI cBotは、移動平均や出来高などの他の指標や要因に依存せず、取引シグナルにはRSIレベルのみを使用します。

このcBotは2つの重要な閾値に焦点を当てています:

  • RSI < 30は市場が売られ過ぎであることを示し、買い注文をトリガーします。
  • RSI > 70は市場が買われ過ぎであることを示し、売り注文をトリガーします。

cBotは新しいティックごとにRSI値を確認することで、継続的にRSI値をモニタリングします。 これにより、RSIが売られ過ぎまたは買われ過ぎの領域に移動した瞬間にアルゴリズムが常に行動できる状態を確保します。

ロジック

初期設定

RSI指標は、cBotが開始されるときに呼び出されるOnStart()メソッドで、指定されたSourceおよびPeriodsパラメータを使用して初期化されます。 計算はcTraderの組み込み公式を使用して行われます。

条件モニタリング

取引の条件論理は、新しいティック(価格更新)が受信されるたびに呼び出されるOnTick()メソッドで実行されます。 RSI < 30の場合、買いシグナルが生成されます。 RSI > 70の場合、売りシグナルが生成されます。

ポジション管理

cBotが生成されたシグナルに基づいて新しいポジションを開く前に、Close()メソッドは"SampleRSI"ラベルを持つすべての反対方向のオープンポジションをチェックして決済します。 この設定により、特定の通貨ペアに対して常に1つの取引のみがアクティブであることが保証されます。

取引の実行

Open() メソッドは、生成されたシグナル(買いまたは売り)に基づいて同じタイプのポジションがすでに開かれているかどうかをチェックします。 ポジションが見つからない場合、cBotは指定された数量と、メソッド内で渡される他のパラメータを使用して新しいポジションを開きます。

パラメーター 単位 定義 ヒント
数量 ロット 各取引の取引高。 保守的なトレーダーは、リスクを最小限に抑えるために小さなロットサイズを選択することがあります。

積極的なトレーダーは、リスクは高くなりますが、潜在的な利益を最大化するために大きなロットサイズを選択することがあります。
ソース RSIインジケーターのデータソース。 利用可能なオプションには、終値、始値、高値、安値があります。 終値はローソク足の中で最も重要な価格ポイントを反映しているため、RSI計算によく使用されます。 ただし、トレーダーは異なるデータシリーズを試し、市場状況に最も適したものを選択することができます。

高値または安値は極端な価格変動を識別するのに役立ち、一方で中央値または代表値は一定期間にわたってより均衡の取れた視点を提供します。
期間 RSIを計算するために使用される期間(ローソク足)の数。 デフォルト値の14は、このインジケーターの標準値または一般的な設定です。 スキャルパーや短期的な価格変動から利益を得ようとするトレーダー(例えば、5分足チャートで)は、少ない期間を選択することがあります。 この設定によりRSIの反応性が高まり、より頻繁に売買シグナルを生成します。

スイングトレーダーや長期トレーダー(例えば、1時間足チャートで)は、より大きなRSI期間を好むかもしれません。 この設定によりRSIの感度が低下し、より滑らかで急激な価格変動に耐性のあるものになります。 ノイズがフィルタリングされることで、RSIは主要な市場トレンドに焦点を当て、より少ないシグナルを生成します。

応用

レンジ相場(横ばい相場)

レンジ相場では、価格が抵抗線(上限)とサポートライン(下限)の間を振動します。 このような状況は、多くの買われ過ぎと売られ過ぎの事例を提供するため、RSIベースの戦略に理想的です。 レンジ相場では価格がサポートまたは抵抗レベルに達すると頻繁に方向を逆転するため、RSIがより正確なシグナルを提供する可能性が高くなります。

ユースケース

EURUSDが1.1000と1.1200の間を繰り返し動く状況を考えてみましょう。 cBotは、売られ過ぎ(RSI < 30)の下限付近で買い、買われ過ぎ(RSI > 70)の上限付近で売ることで、良好なパフォーマンスを示すことができます。

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

- ボラティリティの低い期間に取引を集中させます。 RSIインジケーターは、市場が大きなトレンド移動をしていない時に最も効果的に機能します。
- 価格チャートで、価格が明確な範囲内で変動している期間を確認します。
- ブレイクアウトに注意します。 価格が大幅にレンジを超えて動いた場合は、cBotを停止し、市場状況を再評価します。

低ボラティリティ市場

低ボラティリティ市場は、小さな価格変動と大きなトレンドの欠如によって特徴付けられます。 RSIは、強い方向性のあるトレンドに影響されずに短期的な市場の不均衡を識別できるため、このような環境で特に有用です。

低ボラティリティ環境では、価格が買われ過ぎと売られ過ぎのレベルの間を振動する傾向があり、cBotにとって頻繁な取引機会につながります。

ユースケース

S&P 500などの株価指数は、価格が狭いバンドの間を動く低ボラティリティ期間を示すことがあります。 このような期間中、cBotは小さな反転を利用します。 RSIが30を下回ったときに買いポジションを取り、RSIが70を上回ったときに売りポジションを取ります。

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

- ボラティリティインジケーターを使用して、市場が低ボラティリティフェーズに入っているかどうかを判断します。
- ロットサイズとRSI期間を調整して、インジケーターが小さな価格変化を効果的にターゲットにできるようにします。
- 予期せぬ市場の動きから身を守るために、損切りなどの追加のリスク管理戦略を使用します。

強いトレンド後の整理相場

強い上昇または下降トレンドの後、市場はしばしば価格が安定する整理フェーズに入ります。 トレーダーはその後利益を確定するか、新しい市場の方向性を待ち、この整理期間はRSIベースの取引戦略に理想的になります。

強いトレンドに続く整理期間中、RSIインジケーターは市場が買われ過ぎまたは売られ過ぎの領域に移動したタイミングを識別できます。 RSI cBotは、その後整理期間内の反転ポイントを捉えることができます。

ユースケース

大型株が大幅な上昇または下落の後に整理相場に入るシナリオを考えてみましょう。 株価は狭いレンジ内で振動し始めます。 cBotはこのフェーズ中に買われ過ぎ(RSI > 70)または売られ過ぎ(RSI < 30)の状態を検出し、それに応じて取引します。

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

- 強いトレンドの後、市場が整理相場に入り始めてからcBotを実行します。
- 長期的なサポートとレジスタンスレベルを監視して、市場が真に整理相場に入ったことを確認し、別のブレイクアウトの準備をしていないことを確認します。

サマリー

RSIインジケーターはcBot戦略の中心であり、すべての売買決定を駆動します。 cBotはインジケーターを効果的に使用して、売られ過ぎと買われ過ぎの市場での反転を活用しますが、単一のアルゴリズムに依存しているため、誤ったシグナルと限られた市場コンテキストのリスクがあります。

主要なパラメータの値を指定し、データソースを選択する機能により、ユーザーは個々の取引スタイル、リスク許容度、市場状況に合わせてRSI cBotを適応させることができます。 スキャルパー、スイングトレーダー、長期投資家のいずれであっても、cBotパラメータを調整することで、戦略とのより良い整合性と成功の可能性を高めることができます。

トレーダーは、選択したシンボルと期間に対して最適または収益性の高いパラメータの組み合わせを見つけるために、異なる値、設定、データでcBotをバックテストできます。 さらに、cTraderユーザーはcBotコードを修正し、強いトレンドから身を守り、非反転シグナルをフィルタリングするためのボラティリティインジケーターを実装することができます。