Ana içeriğe geç

RSI cBot

Stratejiye genel bakış

RSI cBot, ana göstergesi olarak Relative Strength Index (RSI) kullanan basit, momentum tabanlı bir geri dönüş işlem stratejisi uygular.

RSI cBot, piyasa momentumunu yansıtan ve aşırı alım veya aşırı satım koşullarını belirleyen RSI değerlerine göre otomatik olarak alış ve satış yapar. cBot, yeni pozisyonlar açmadan önce mevcut pozisyonları kapatacak şekilde kodlanmıştır ve bu, herhangi bir zamanda yalnızca bir ilgili pozisyonun açık olmasını sağlar.

RSI 30'un altına düştüğünde, piyasa aşırı satılmış olarak görülür ve cBot alış pozisyonları açar. Alış sinyali, piyasa aşırı satım koşuluna ulaştıktan sonra fiyatın artacağı beklentisine dayanır.

RSI 70'in üzerine çıktığında, piyasa aşırı alınmış olarak görülür ve cBot satış pozisyonları açar. Satış sinyali, piyasa aşırı alım durumuna geçtikten sonra fiyatın düşeceği beklentisine dayanır.

RSI göstergesine dayalı strateji, cBot'un RSI sinyallerine dayalı geri dönüş işlemleri yapabileceği piyasalar için en uygunudur.

cBot oluşturma

C# veya Python kullanarak cBot oluşturmayı adım adım kılavuzlarımızda öğrenin.

RSI cBot kodu, herkese açık C# ve Python depolarımızda mevcuttur. Aynı kod, cTrader Windows veya Mac'teki algoritma oluşturma sihirbazında bir şablon olarak sağlanır veya aşağıdaki kod parçasını kopyalayıp kullanabilirsiniz:

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

Indicator entegrasyonu

RSI cBot'ta kullanılan ana gösterge Relative Strength Index (RSI)'dır. RSI, fiyat hareketlerinin hızını ve değişimini ölçen bir momentum osilatörüdür. 0 ile 100 arasında değişir ve piyasadaki aşırı alım veya aşırı satım koşullarını belirlemek için kullanılır.

Aşırı alım veya aşırı satım koşullarına ilişkin değerlendirmesine dayanarak, RSI cBot'un alış mı yoksa satış mı yapacağını belirler. RSI cBot, hareketli ortalamalar veya hacim gibi başka hiçbir göstergeye veya faktöre dayanmaz; yalnızca işlem sinyalleri için RSI seviyelerini kullanır.

cBot iki temel eşiğe odaklanır:

  • RSI < 30, piyasanın aşırı satıldığını ve alış emirlerini tetiklediğini gösterir.
  • RSI > 70, piyasanın aşırı alındığını ve satış emirlerini tetiklediğini gösterir.

cBot, her yeni tick'te kontrol ederek RSI değerini sürekli olarak izler. Bu, RSI aşırı satım veya aşırı alım bölgesine girdiğinde algoritmanın her zaman harekete geçmeye hazır olmasını sağlar.

Mantık

İlk kurulum

RSI göstergesi, cBot başladığında çağrılan OnStart() yöntemindeki belirtilen Source ve Periods parametreleri kullanılarak başlatılır. Hesaplamalar, gösterge için cTrader'ın yerleşik formülleri kullanılarak yapılır.

Koşul izleme

İşlemler için koşullu mantık, her yeni tick (fiyat güncellemesi) alındığında çağrılan OnTick() yönteminde gerçekleştirilir. RSI < 30 ise, bir alış sinyali üretilir. RSI > 70 ise, bir satış sinyali üretilir.

Pozisyon yönetimi

cBot, üretilen sinyale dayalı yeni bir pozisyon açmadan önce, Close() yöntemi "SampleRSI" etiketli tüm açık karşıt pozisyonları kontrol eder ve kapatır. Bu kurulum, belirli bir sembol için herhangi bir zamanda yalnızca bir işlemin aktif olmasını sağlar.

İşlem gerçekleştirme

Open() yöntemi, üretilen sinyale (alış veya satış) dayalı aynı türde bir pozisyonun zaten açık olup olmadığını kontrol eder. Bir pozisyon bulunamazsa, cBot belirtilen miktar ve yöntemin içine aktarılan diğer parametrelerle yeni bir pozisyon açar.

Parametre Birim Tanım İpuçları
Adet Lot Her işlemin hacmi. Muhafazakar trader'lar, riski en aza indirmek için küçük lot boyutlarını tercih edebilir.

Agresif trader'lar, daha yüksek risk taşısa da potansiyel kazançları en üst düzeye çıkarmak için daha büyük lot boyutlarını tercih edebilir.
Kaynak — RSI göstergesi için veri kaynağı. Mevcut seçenekler arasında kapanış fiyatı, açılış fiyatı, yüksek fiyat ve düşük fiyat bulunur. Kapanış fiyatı, bir mumdaki en önemli fiyat noktasını yansıttığı için RSI hesaplamalarında sıklıkla kullanılır. Ancak, trader'lar farklı veri serileriyle deney yapabilir ve piyasa koşullarına en uygun olanı seçebilir.

Yüksek veya düşük fiyat, aşırı fiyat hareketlerini belirlemeye yardımcı olabilirken, Median Price veya Typical Price bir dönem boyunca daha dengeli bir bakış açısı sunar.
Dönemler — RSI'yı hesaplamak için kullanılan dönem (mum) sayısı. Varsayılan değer olan 14, bu gösterge için standart değer veya popüler ayardır. Kısa vadeli fiyat hareketlerinden (örneğin, 5 dakikalık bir grafikte) kar elde etmek isteyen scalper'lar veya trader'lar düşük dönemleri tercih edebilir. Bu ayar, RSI'yı daha duyarlı hale getirerek daha sık alış ve satış sinyalleri üretmesine neden olur.

Swing veya uzun vadeli trader'lar (örneğin, 1 saatlik bir grafikte) daha büyük RSI dönemlerini tercih edebilir. Bu ayar, RSI hassasiyetini azaltarak onu daha pürüzsüz ve hızlı fiyat dalgalanmalarına karşı daha dirençli hale getirir. Gürültü filtrelendiğinde, RSI ana piyasa trendlerine odaklanır ve daha az sinyal üretir.

Uygulama

Aralık bazlı (yatay) piyasalar

Aralık bazlı bir piyasada, fiyatlar bir direnç seviyesi (üst sınır) ile bir destek seviyesi (alt sınır) arasında dalgalanır. Bu tür olaylar, birçok aşırı alım ve aşırı satım örneği sağladıkları için RSI tabanlı stratejiler için idealdir. Fiyatlar, belirli bir aralıkta hareket eden piyasalarda destek veya direnç seviyelerine ulaştığında sık sık yön değiştirdiğinden, RSI'ın doğru sinyaller sağlama olasılığı daha yüksektir.

Kullanım durumu

EURUSD'nin tekrar tekrar 1.1000 ile 1.1200 arasında hareket ettiği bir senaryo düşünün. cBot, aşırı satım (RSI < 30) için alt sınıra yakın alım yaparak ve aşırı alım (RSI > 70) için üst sınıra yakın satış yaparak iyi performans gösterebilir.

En iyi uygulamalar

  • Düşük volatilite dönemlerinde işlem yapmaya odaklanın. RSI göstergesi, piyasa önemli trend hareketleri yapmıyorken daha iyi çalışır.
  • Fiyatın belirgin bir aralıkta dalgalandığı dönemler için fiyat grafiklerini kontrol edin.
  • Kırılmaları izleyin. Fiyat, aralığın dışına önemli ölçüde çıkarsa, cBot'u durdurun ve piyasa koşullarını yeniden değerlendirin.

Düşük volatiliteye sahip piyasalar

Düşük volatilite piyasaları, küçük fiyat hareketleri ve büyük trendlerin olmaması ile karakterize edilir. RSI, güçlü yönlü trendlerden etkilenmeden kısa vadeli piyasa dengesizliklerini tespit edebildiği için bu tür ortamlarda özellikle faydalıdır.

Düşük volatilite ortamlarında, fiyat aşırı alım ve aşırı satım seviyeleri arasında salınım yapma eğilimindedir, bu da cBot için sık işlem fırsatları yaratır.

Kullanım durumu

S&P 500 gibi bir hisse senedi endeksi, fiyatının dar bantlar arasında hareket ettiği düşük volatilite dönemleri sergileyebilir. Bu tür dönemlerde, cBot küçük geri dönüşlerden faydalanır. RSI 30'un altına düştüğünde alım pozisyonlarına ve RSI 70'in üzerine çıktığında satış pozisyonlarına girer.

En iyi uygulamalar

  • Piyasanın ne zaman düşük volatilite aşamasına girdiğini belirlemek için volatilite göstergelerini kullanın.
  • Göstergenin küçük fiyat değişikliklerini etkili bir şekilde hedeflemesini sağlamak için lot büyüklüğünü ve RSI periyotlarını ayarlayın.
  • Beklenmedik piyasa hareketlerine karşı korunmak için zarar durdur gibi ek risk yönetimi stratejileri kullanın.

Güçlü trendlerin ardından piyasaların konsolidasyonu

Güçlü bir yukarı veya aşağı yönlü trendin ardından piyasalar genellikle fiyatın istikrara kavuştuğu bir konsolidasyon aşamasına girer. Trader'lar daha sonra kâr alır veya yeni bir piyasa yönü bekler ve konsolidasyon dönemi RSI tabanlı işlem stratejileri için ideal hale gelir.

Güçlü bir trendi takip eden konsolidasyon döneminde, RSI göstergesi piyasanın ne zaman aşırı alım veya aşırı satım bölgesine geçtiğini belirleyebilir. RSI cBot daha sonra konsolidasyon içindeki geri dönüş noktalarını yakalayabilir.

Kullanım durumu

Mavi çip bir hisse senedinin önemli bir yükseliş veya düşüşün ardından konsolidasyona girdiği bir senaryoyu düşünün. Hisse senedi fiyatı dar bir aralıkta dalgalanmaya başlar. cBot daha sonra bu aşamada aşırı alım (RSI > 70) veya aşırı satım (RSI < 30) koşullarını tespit eder ve buna göre işlem yapar.

En iyi uygulamalar

  • Güçlü bir trendden sonra, cBot'u çalıştırmadan önce piyasanın konsolidasyona başlamasını bekleyin.
  • Piyasanın gerçekten konsolidasyona girdiğinden ve başka bir kırılmaya hazırlanmadığından emin olmak için uzun vadeli destek ve direnç seviyelerini izleyin.

Özet

RSI göstergesi, cBot stratejisinin merkezindedir ve tüm alış ve satış kararlarını yönlendirir. cBot, göstergeyi aşırı satım ve aşırı alım piyasalarındaki geri dönüşlerden faydalanmada etkili olsa da, tek bir algoritmaya bağımlılığı yanlış sinyal ve sınırlı piyasa bağlamı riskini beraberinde getirir.

Anahtar parametreler için değerleri belirleme ve bir veri kaynağı seçme yeteneği, kullanıcıların RSI cBot'u kendi bireysel işlem tarzlarına, risk toleranslarına ve piyasa koşullarına uyarlamalarına olanak tanır. İster bir scalper, ister bir swing trader veya uzun vadeli bir yatırımcı olun, cBot parametrelerini ayarlamak stratejinizle daha iyi uyum ve artan başarı şansı sağlayabilir.

Trader'lar, seçtikleri sembol ve dönem için en uygun veya kârlı parametre kombinasyonunu bulmak amacıyla cBot'u farklı değerler, ayarlar ve verilerle geriye dönük test edebilir. Ek olarak, cTrader kullanıcıları cBot kodunu değiştirebilir ve güçlü trendlere karşı korunmak ve geri dönüş olmayan sinyalleri filtrelemek için volatilite göstergeleri uygulayabilir.