Ana içeriğe geç

Trend cBot

Stratejiye genel bakış

Trend cBot, trendleri tespit etmek ve işlem kararları vermek için iki Moving Averages (MA'lar) kullanılan bir strateji uygular. Algoritma, hızlı bir MA ve yavaş bir MA hesaplar, zaman içinde değerlerini karşılaştırır ve alış veya satış sinyalleri üretmek için kesişim noktalarını belirler.

Trend cBot, momentum değişimlerini tespit etmek için MA kesişimlerine dayandığından, açık ve sürdürülebilir trendlere sahip piyasalarda en etkilidir. Başka bir deyişle, algoritma, yukarı veya aşağı yönlü güçlü hareketler sergileyen sembollerle iyi sonuç verir.

cBot oluşturma

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

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

Indicator entegrasyonu

Moving Average, belirli bir dönemdeki trendleri belirlemek için fiyat verilerini yumuşatan popüler bir teknik göstergedir. Moving Average göstergeleri arasında Simple Moving Average (SMA), Exponential Moving Average (EMA), Time Series, Triangular, Weighted, Welles Wilder Smoothing, Hull vb. bulunur.

Trend cBot, piyasadaki trendleri izlemek için iki MA kullanır:

  • Hızlı MA – fiyat değişikliklerine daha hızlı tepki verir ve tipik olarak kısa vadeli trendleri temsil eder.
  • Yavaş MA – fiyat değişikliklerine daha yavaş tepki verir ve uzun vadeli trendleri temsil eder.

cBot, hızlı MA ve yavaş MA arasındaki kesişim olaylarını izler ve sinyal üretmek için bunları kullanır:

  • Alış sinyali – yavaş MA, hızlı MA'nın altından geçtiğinde, yukarı yönlü momentum olarak yorumlanır ve bir alış sinyali üretilir.
  • Satış sinyali – hızlı MA, yavaş MA'nın altından geçtiğinde, aşağı yönlü momentum olarak yorumlanır ve bir satış sinyali üretilir.

Karşıt işlem pozisyonu açıkken yeni bir sinyal üretilirse, örneğin bir satış pozisyonu açıkken bir alış sinyali, cBot mevcut pozisyonu kapatır ve yeni bir pozisyon açar. Bu kurulum, aynı anda yalnızca bir pozisyonun açık olmasını sağlar.

Hesaplama ve mantık

İlk kurulum

cBot, iki MA'yı cBot başladığında çağrılan OnStart() yönteminde başlatır.

MA'lar, bir veri serisi üzerinde farklı dönemler kullanılarak hesaplanır. fastMA, FastPeriods ile hesaplanırken, slowMA, SlowPeriods ile hesaplanır.

Gerçek zamanlı MA hesaplamaları

İşlem kararları için ana mantık, her yeni tik (fiyat verisi) alındığında çağrılan OnTick() yönteminde gerçekleştirilir. İki MA, seçilen MAType için cTrader yerleşik formülleri kullanılarak sürekli olarak hesaplanır ve her tikte güncellenir.

cBot, MA'ların mevcut ve önceki değerlerini alır ve ardından kesişim koşuluna geçer. cBot, bir kesişim olup olmadığını belirlemek için MA'ların mevcut ve önceki değerlerini karşılaştırır:

  • Yükseliş trendi tespiti – slowMA, fastMA'nın altından geçerse, yukarı yönlü momentum olarak yorumlanır ve alış sinyaliyle sonuçlanır.
  • Düşüş trendi tespiti – fastMA, slowMA'nın altından geçerse, aşağı yönlü momentum olarak yorumlanır ve satış sinyaliyle sonuçlanır.

İşlem gerçekleştirme

Bir kesişim tespit ettikten sonra cBot, üretilen sinyale göre bir işlem gerçekleştirir:

  • Alış sinyali için işlem gerçekleştirme – cBot, açık kısa (satış) pozisyonlarını kontrol eder ve kapatır. Ardından yeni bir alış pozisyonu açar.
  • Satış sinyali için işlem gerçekleştirme – cBot, açık uzun (alış) pozisyonlarını kontrol eder ve kapatır. Yeni bir satış pozisyonu açar.

Parametreler

Parametre Birim Tanım İpuçları
Adet Lot Her işlemin hacmi. Küçük fiyat hareketlerine odaklanan scalping trader'ları, kısa sürede birçok işlem yaparken riski en aza indirmek için küçük lot boyutlarını tercih edebilir.

Pozisyonları daha uzun süre tutan swing trader'ları, piyasada büyük hareketler bekledikleri ve potansiyel kazançlarını maksimize etmek istedikleri için büyük lot boyutları kullanabilir.
MA türü — Hareketli ortalama türü. Daha az değişken piyasalarda trader'lar, fiyat verilerini daha etkili bir şekilde düzelttiği ve cBot'un kısa vadeli dalgalanmalar tarafından yanıltılma olasılığını azalttığı için SMA'yı tercih edebilir.

Değişken piyasalarda kullanıcılar, fiyat değişikliklerine hızlı tepki verme ve erken trend dönüşlerini yakalama yeteneği nedeniyle EMA'yı tercih edebilir.
Kaynak — Hareketli ortalamayı hesaplamak için kullanılan fiyat verileri. Mevcut seçenekler arasında kapanış fiyatı, açılış fiyatı, yüksek fiyat ve düşük fiyat bulunur. Muhafazakar trader'lar, bir mumun son fiyatını temsil ettiği ve daha güvenilir olma eğiliminde olduğu için kapanış fiyatını kaynak olarak kullanabilir.

Daha agresif trader'lar, trend dönüşlerini veya fiyat aralığının uç noktalarındaki kırılma fırsatlarını yakalamak istiyorlarsa en yüksek fiyatı veya en düşük fiyatı tercih edebilir.
Yavaş Dönemler — Yavaş hareketli ortalamayı hesaplamak için kullanılan dönem sayısı. Günlük trader'lar, kısa vadeli trendlere odaklanmak ve gün içinde sık fırsatlar yakalamak için düşük değerler ayarlayabilir.

Uzun vadeli trendleri hedefleyen trader'lar, cBot'un yalnızca güçlü, onaylanmış bir trend olduğunda işlem yapmasını sağlamak için yüksek değerler ayarlayabilir.
Hızlı Dönemler — Hızlı hareketli ortalamayı hesaplamak için kullanılan dönem sayısı. Hızlı giriş ve çıkış arayan trader'lar, cBot'un kısa vadeli fiyat hareketlerine hızlı tepki vermesini sağlamak için düşük değerler ayarlayabilir.

Daha geniş piyasa trendlerini takip eden trader'lar, yanlış sinyallerin sayısını azaltmak ve önemli fiyat hareketlerine odaklanmak için yüksek değerler ayarlayabilir.

Uygulama

Trend piyasaları

Trend cBot, fiyat hareketlerinin tutarlı ve sürekli olduğu trend piyasalarında iyi performans gösterir. Bu tür piyasalarda hareketli ortalamalar genellikle trendi yakalar ve çapraz geçişleri alım ve satım sinyalleri için etkili göstergeler haline getirir.

Kullanım durumu

EURUSD'nin güçlü bir yükseliş trendinde olduğu ve grafiğinde günlük en yüksekler ve daha yüksek en düşükler oluşturduğu bir senaryo düşünün. Hareketli ortalama çapraz geçişi trendi algılar ve cBot, hızlı MA'nın yavaş MA'yı her yukarı yönlü çapraz geçişinde alım sinyalleri başlatır.

En iyi uygulamalar

  • Gürültüyü önlemek ve sürekli trendleri yakalamak için daha uzun dönemlerde işlem yaparken MA'lar için yüksek dönem değerleri kullanın.
  • Nispeten düşük volatiliteye sahip emtialar (örneğin, altın) için trend piyasalarında, küçük fiyat dalgalanmalarının filtrelendiğinden emin olmak için basit bir hareketli ortalama kullanın.

Yüksek volatiliteye sahip varlıklar

Keskin, önemli fiyat hareketleri yaşayan varlıklar, uygun bir hareketli ortalama seçildiğinde cBot'un hızlı hareket eden trendlere yanıt verme yeteneğinden faydalanma eğilimindedir.

Kullanım durumu

Bitcoin'in bir kripto boğa koşusu veya sezonunun ortasında olduğu bir senaryo düşünün. BTC hızlı fiyat dalgalanmaları yaşar, bazen birkaç gün içinde binlerce dolar yukarı yönlü trend gösterir. cBot, hızlı MA yavaş MA'nın üzerine çıktığında uzun pozisyonlar açarak keskin yükseliş trendinden faydalanır.

En iyi uygulamalar

  • cBot'un son fiyat değişikliklerine daha hızlı tepki vermesi için üstel hareketli ortalama kullanın.
  • Erken momentumu yakalamak için kısa hızlı ve yavaş dönemler ayarlamayı düşünün.

Swing işlemi

Pozisyonları birkaç gün veya hafta tutan swing trader'ları, uygun ayarlar kullanıldığında cBot'un orta vadeli trendleri tespit etme yeteneğinden faydalanır. Hareketli ortalama çapraz geçişi, periyodik fiyat dalgalanmaları olan piyasalarda işlemler için net giriş ve çıkış noktaları sağlar.

Kullanım durumu

Bir swing trader'ın GBPUSD'de periyodik trendleri tespit ettiği ve birkaç gün süren trendleri yakalamak için cBot'u 4 saatlik grafikte kullandığı bir senaryo düşünün. Hızlı MA yavaş MA'nın üzerine çıktığında cBot bir alım pozisyonu açar ve trend tersine dönene kadar onu tutar.

En iyi uygulama

cBot'un önemli piyasa hareketlerini yakalarken küçük dalgalanmaları göz ardı etmesini sağlamak için hızlı ve yavaş MA'lar için orta uzunlukta dönemler kullanın.

Kırılma stratejileri

Trend cBot, fiyatların bir konsolidasyon aralığından çıktığı ve yeni bir trende girdiği kırılma olaylarında faydalıdır. Hareketli ortalama çapraz geçişleri, bir kırılma meydana geldiğinde güçlü bir hareketin başlangıcını işaret edebilir.

Kullanım durumu

Büyük bir hisse senedinin birkaç gün veya hafta boyunca dar bir aralıkta işlem gördüğü ve bir kırılma beklendiği bir senaryo düşünün. cBot, kırılmayı yakalamak için konuşlandırılabilir. Hisse senedi fiyatı direncin üzerine çıktığında, hızlı MA yavaş MA'nın üzerine çıkarak bir alım sinyalini tetikler.

En iyi uygulama

cBot'un trendi erken yakalamasını sağlamak için hızlı MA dönemi için düşük değerler kullanın, bu da işlemler için uygun giriş noktaları sağlar.

Özet

Trend cBot, trend değişikliklerini tespit etmek ve işlem yapmak için hareketli ortalama çapraz geçişlerine dayalı basit bir matematiksel süreci takip eder. Hızlı ve yavaş MA'ların mevcut ve önceki değerlerini karşılaştırarak cBot alım mı satım mı yapacağına karar verir ve pozisyonların her zaman tespit edilen trendle uyumlu olmasını sağlar.

cBot, diğer göstergelerle birleştirildiğinde geliştirilmiş performans sunabilir. Relative Strength Index (RSI) veya Moving Average Convergence Divergence (MACD) yanlış sinyalleri filtreleyebilir ve trend gücünü onaylayabilir. Örneğin, MA çapraz geçişleri üzerinde işlem yapılmadan önce RSI, aşırı alım veya aşırı satım koşullarını kontrol etmek için kullanılabilir.

cBot'un özelleştirilebilir parametrelerini kullanarak, algoritmayı işlem ihtiyaçlarınıza ve risk iştahınıza uyacak şekilde ince ayar yapabilirsiniz. Ek olarak, belirli bir sembol ve dönem için optimal veya kârlı bir parametre kombinasyonu bulmak amacıyla cBot'u farklı değerler, ayarlar ve verilerle geriye dönük test edebilirsiniz.