Lewati ke isi

RSI cBot

Ikhtisar strategi

RSI cBot mengimplementasikan strategi trading reversal berbasis momentum sederhana yang mengandalkan Relative Strength Index (RSI) sebagai indikator utamanya.

RSI cBot secara otomatis membeli dan menjual berdasarkan nilai RSI yang mencerminkan momentum pasar dan menentukan kondisi overbought atau oversold. cBot ini dikodekan untuk menutup posisi yang ada sebelum membuka yang baru, dan ini memastikan bahwa hanya satu posisi relevan yang terbuka pada suatu waktu.

Ketika RSI turun di bawah 30, pasar dianggap oversold, dan cBot membuka posisi beli. Sinyal beli didasarkan pada harapan bahwa harga akan meningkat setelah pasar mencapai kondisi oversold.

Ketika RSI naik di atas 70, pasar dianggap overbought, dan cBot membuka posisi jual. Sinyal jual didasarkan pada harapan bahwa harga akan turun setelah pasar menjadi overbought.

Strategi berdasarkan indikator RSI paling cocok untuk pasar di mana cBot dapat melakukan trading pembalikan berdasarkan sinyal RSI.

Pembuatan cBot

Pelajari cara membuat cBot, menggunakan C# atau Python, dalam panduan langkah demi langkah kami.

Kode RSI cBot tersedia di repositori publik kami C# dan Python. Kode yang sama disediakan sebagai templat dalam wizard pembuatan algoritma di cTrader Windows atau Mac, atau Anda dapat menyalin dan menggunakan cuplikan di bawah ini:

 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")

Integrasi indikator

Relative Strength Index (RSI) adalah indikator utama yang digunakan dalam RSI cBot. RSI adalah momentum oscillator yang mengukur kecepatan dan perubahan pergerakan harga. Ini berkisar antara 0 dan 100 dan digunakan untuk mengidentifikasi kondisi overbought atau oversold di pasar.

Berdasarkan penilaiannya terhadap kondisi overbought atau oversold, RSI menentukan apakah cBot membeli atau menjual. RSI cBot tidak bergantung pada indikator atau faktor lain, seperti moving averages atau volume; ini hanya menggunakan level RSI untuk sinyal trading.

cBot fokus pada dua ambang batas utama:

  • RSI < 30 menandakan bahwa pasar oversold dan memicu order beli.
  • RSI > 70 menandakan bahwa pasar overbought dan memicu order jual.

cBot terus memantau nilai RSI dengan memeriksanya pada setiap tick baru. Ini memastikan bahwa algoritma selalu siap untuk bertindak begitu RSI bergerak ke wilayah oversold atau overbought.

Logika

Pengaturan awal

Indikator RSI diinisialisasi menggunakan parameter Source dan Periods yang ditentukan dalam metode OnStart(), yang dipanggil saat cBot dimulai. Perhitungan dilakukan menggunakan rumus bawaan cTrader untuk indikator tersebut.

Pemantauan kondisi

Logika kondisional untuk trade dieksekusi dalam metode OnTick(), yang dipanggil setiap kali tick baru (pembaruan harga) diterima. Jika RSI < 30, sinyal beli dihasilkan. Jika RSI > 70, sinyal jual dihasilkan.

Manajemen posisi

Sebelum cBot membuka posisi baru berdasarkan sinyal yang dihasilkan, metode Close() memeriksa dan menutup semua posisi berlawanan yang terbuka dengan label "SampleRSI". Pengaturan ini memastikan bahwa hanya satu trade yang aktif pada satu waktu untuk simbol tertentu.

Eksekusi trading

Metode Open() memeriksa apakah posisi dengan tipe yang sama berdasarkan sinyal yang dihasilkan (beli atau jual) sudah terbuka. Jika posisi tidak ditemukan, cBot membuka posisi baru dengan jumlah dan parameter lain yang ditentukan yang diteruskan di dalam metode.

Parameter Unit Definisi Tips
Kuantitas Lot Volume setiap trade. Trader konservatif mungkin memilih ukuran lot kecil untuk meminimalkan risiko.

Trader agresif mungkin memilih ukuran lot yang lebih besar untuk memaksimalkan potensi keuntungan, meskipun dengan risiko yang lebih tinggi.
Sumber — Sumber data untuk indikator RSI. Opsi yang tersedia termasuk harga penutupan, harga pembukaan, harga tertinggi, dan harga terendah. Harga penutupan sering digunakan untuk perhitungan RSI karena mencerminkan titik harga terpenting dalam sebuah lilin. Namun, trader dapat bereksperimen dengan berbagai deret data dan memilih yang paling sesuai dengan kondisi pasar.

Harga tertinggi atau harga terendah dapat membantu mengidentifikasi pergerakan harga ekstrem, sementara harga median atau Typical Price menawarkan perspektif yang lebih seimbang selama suatu periode.
Periode — Jumlah periode (lilin) yang digunakan untuk menghitung RSI. Nilai default, 14, adalah nilai standar atau pengaturan populer untuk indikator ini. Scalper atau trader yang ingin mengambil keuntungan dari pergerakan harga jangka pendek (misalnya, pada grafik m5) mungkin memilih periode rendah. Pengaturan ini membuat RSI lebih responsif, menyebabkan RSI menghasilkan sinyal beli dan jual lebih sering.

Swing atau trader jangka panjang (misalnya, pada grafik h1) mungkin lebih memilih periode RSI yang lebih besar. Pengaturan ini mengurangi sensitivitas RSI, membuatnya lebih halus dan lebih tahan terhadap fluktuasi harga cepat. Dengan kebisingan yang disaring, RSI fokus pada tren pasar utama dan menghasilkan lebih sedikit sinyal.

Penerapan

Pasar terikat rentang (sideways)

Dalam pasar terikat rentang, harga berosilasi antara level resistensi (batas atas) dan level support (batas bawah). Peristiwa seperti ini ideal untuk strategi berbasis RSI karena menyediakan banyak contoh overbought dan oversold. Karena harga sering berbalik arah ketika mencapai level support atau resistensi dalam pasar terikat rentang, RSI lebih mungkin memberikan sinyal yang akurat.

Contoh penggunaan

Pertimbangkan skenario di mana EURUSD berulang kali bergerak antara 1.1000 dan 1.1200. cBot dapat menunjukkan kinerja yang baik dengan membeli di dekat batas bawah untuk oversold (RSI < 30) dan menjual di dekat batas atas untuk overbought (RSI > 70).

Praktik terbaik

  • Fokus pada trading selama periode volatilitas rendah. Indikator RSI bekerja lebih baik ketika pasar tidak melakukan pergerakan tren yang signifikan.
  • Periksa grafik harga untuk periode ketika harga berfluktuasi dalam rentang yang jelas.
  • Pantau Breakout. Jika harga bergerak secara signifikan di luar rentang, hentikan cBot dan tinjau kembali kondisi pasar.

Pasar dengan volatilitas rendah

Pasar dengan volatilitas rendah ditandai dengan pergerakan harga kecil dan kurangnya tren utama. RSI sangat berguna dalam lingkungan seperti ini karena dapat mengidentifikasi ketidakseimbangan pasar jangka pendek tanpa dipengaruhi oleh tren arah yang kuat.

Dalam lingkungan volatilitas rendah, harga cenderung berosilasi antara level overbought dan oversold, yang mengarah pada peluang trading yang sering untuk cBot.

Contoh penggunaan

Indeks saham seperti S&P 500 mungkin menunjukkan periode volatilitas rendah, di mana harganya bergerak antara pita sempit. Selama periode tersebut, cBot memanfaatkan pembalikan kecil. cBot memasuki posisi Long ketika RSI turun di bawah 30 dan posisi jual ketika RSI naik di atas 70.

Praktik terbaik

  • Gunakan indikator volatilitas untuk menentukan kapan pasar memasuki fase volatilitas rendah.
  • Sesuaikan ukuran lot dan periode RSI untuk memungkinkan indikator menargetkan perubahan harga kecil secara efektif.
  • Gunakan strategi manajemen risiko tambahan seperti Stop Loss untuk melindungi dari pergerakan pasar yang tidak terduga.

Pasar yang terkonsolidasi setelah tren kuat

Setelah tren naik atau turun yang kuat, pasar sering memasuki fase konsolidasi di mana harga stabil. Trader kemudian mengambil Take Profit atau menunggu arah pasar baru, dan periode konsolidasi menjadi ideal untuk strategi trading berbasis RSI.

Dalam periode konsolidasi setelah tren kuat, indikator RSI dapat mengidentifikasi kapan pasar telah bergerak ke wilayah overbought atau oversold. RSI cBot kemudian dapat menangkap titik pembalikan dalam konsolidasi.

Contoh penggunaan

Pertimbangkan skenario di mana saham blue-chip memasuki konsolidasi setelah reli atau penurunan signifikan. Harga saham mulai berosilasi dalam kisaran sempit. cBot kemudian mendeteksi kondisi overbought (RSI > 70) atau oversold (RSI < 30) selama fase ini dan melakukan trading sesuai.

Praktik terbaik

  • Setelah tren kuat, tunggu pasar mulai terkonsolidasi sebelum menjalankan cBot.
  • Pantau level support dan resistance jangka panjang untuk memastikan pasar benar-benar memasuki konsolidasi dan tidak bersiap untuk Breakout lainnya.

Ringkasan

Indikator RSI adalah pusat dari strategi cBot, dan ini mendorong semua keputusan beli dan jual. Meskipun cBot efektif dalam menggunakan indikator untuk memanfaatkan pembalikan di pasar oversold dan overbought, ketergantungannya pada satu algoritma datang dengan risiko sinyal palsu dan konteks pasar yang terbatas.

Kemampuan untuk menentukan nilai untuk parameter kunci dan memilih sumber data memungkinkan pengguna untuk menyesuaikan RSI cBot dengan gaya trading individu, toleransi risiko, dan kondisi pasar. Baik Anda seorang scalper, swing trader, atau investor jangka panjang, menyesuaikan parameter cBot dapat menghasilkan keselarasan yang lebih baik dengan strategi Anda dan meningkatkan peluang kesuksesan.

Trader dapat melakukan backtesting pada cBot dengan nilai, pengaturan, dan data yang berbeda untuk menemukan kombinasi parameter yang optimal atau menguntungkan untuk simbol dan periode yang dipilih. Selain itu, pengguna cTrader dapat memodifikasi kode cBot dan mengimplementasikan indikator volatilitas untuk melindungi dari tren kuat dan menyaring sinyal non-pembalikan.