Ana içeriğe geç

Bar olayları

Algoritma geliştiricilerinin, güncellenmiş fiyatlara yanıt olarak işlem stratejilerini zamanında yürütmek için sık sık bar olaylarına başvurması gerekir. API, algo yaratıcılarının cBot'lara ince ayar yapması ve bar döngüsünün farklı noktalarında fırsatları yakalaması için BarOpened ve BarClosed olaylarını sunar.

Not

Bar olayları yalnızca cBot'ları kodlarken ele alınabilir. Göstergeler ise her tick'te çağrılan Calculate() metoduna sahiptir.

Bu kılavuzda, OnBar() ve OnBarClosed() metotları arasındaki farkı açıklıyor ve çeşitli kullanım durumları sunuyoruz.

Bar olayları bir dakikada!

  • OnBar() metodu, bir örneğin eklendiği grafikte her yeni bar çizildiğinde tetiklenir. Yeni oluşan bar için çağrılır.
  • OnBarClosed() olay işleyici de her yeni barda tetiklenir. Ancak, son kapanan (yani mevcut olandan önceki) bar için çağrılır.
  • Doğru bar olayına başvurarak, teknik analizinizin doğruluğunu artırır ve algoritma eylemleri için uygun zamanlamayı seçersiniz.
  • BarOpened ve BarClosed için desteklenen grafik türleri zaman barları, mumlar, tick, Renko, aralık ve Heikin Ashi grafikleridir.

OnBar() metodunu kullanın

BarOpened olayının meydana gelmesi, bir sembol programına ve gelen fiyatların sıklığına bağlıdır. Genellikle, platform kullanıcıları BarClosed olayının meydana gelmesini grafik zaman dilimi ayarlarıyla ayarlayabilir.

Not

OnBar() metodu, grafik zaman dilimi ayarları izin verdiği sürece sık sık çağrılabilir. Bir bar kapandığında, OnBar() bir sonraki tick gelene kadar tetiklenmeyecektir; bu da mantıksal olarak yeni bir barın oluşmasını tetikler.

Bir algoritmanın eklendiği grafikte çizilen her yeni barla eş zamanlı olarak OnBar() metodu çağrılır. Sonuç olarak, OnBar() işleyicisi, cBot'unuzun düzenli olarak tekrarlaması gereken özel işlem mantığını tanımlamak için mükemmel bir yerdir.

Kod düzenleyicide, OnBar() işleyicisini şu şekilde belirtebilirsiniz:

override void OnBar()

OnBarClosed() metodunu kullanın

Algo API ayrıca, uygulamak istediğiniz stratejiye bağlı olarak BarOpened olayını ele almaya daha kullanışlı ve doğru bir alternatif olabilecek son kapanan bar için mantık yürütmeye olanak tanır. Bar açılışında, yeni bar bir (doji mum) olarak görünür ve teknik analiz için tam veri içermez.

BarClosed olayı, BarOpened olayının bir takma adıdır; yani yalnızca BarOpened olayı gerçekleşirse meydana gelir. Örneğin, Cuma günkü son bar için BarClosed olayı, sembolün hafta sonu işlem görmemesi koşuluyla Pazartesi günü açılan ilk barla birlikte meydana gelecektir.

Not

OnBarClosed() metodu, yeni barı oluşturmak için bir tick gelene kadar çağrılmayacaktır.

OnBarClosed() olay işleyicisi şu şekilde bildirilebilir:

override void OnBarClosed()

OnBarClosed() metodunun gövdesinde, BarClosed olayı tetiklendiğinde cBot'larınızın hangi bağlantılı eylemleri gerçekleştireceğini belirleyebilirsiniz (örneğin, bir emir yürütmek, bir formasyon çizmek, teknik analiz görselleri çizmek vb.).

Bu olay işleyicide erişildiğinde, Bars koleksiyonu mevcut canlı barı içermezken, diğer koleksiyonlar (örneğin Positions, Symbols vb.) gerçek verileri içerir.

OnBar() ve OnBarClosed() olay işleyicileri, geriye dönük test ve optimizasyonda amaçlandığı gibi çalışır. Her iki metot da zaman barları, mumlar, tick, Renko, aralık ve Heikin Ashi grafikleri dahil olmak üzere farklı grafik türlerinde kullanılabilir.

Örnek cBot'lar oluşturun

Aşağıdaki örnek cBot, EURCHF grafiğinde her üçüncü bar açıldığında bir piyasa emri yerleştirir.

 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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using cAlgo.API;
using cAlgo.API.Collections;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;

namespace cAlgo
{
    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.FullAccess)]
    public class ThirdBarMarketOrderBot : Robot
    {
        private int barCount;

        protected override void OnStart()
        {
            barCount = 0;
        }

        protected override void OnBar()
        {
            barCount++;

            if (barCount % 3 == 0)
            {
                var symbol = Symbols.GetSymbol("EURCHF");
                ExecuteMarketOrder(TradeType.Buy, symbol, 100);
            }
        }
    }
}

cBot bir m1 grafiğinde başlatıldığı için, gerçekleştirilen piyasa emirleri arasındaki yaklaşık zaman aralığı üç dakikadır.

Image title

Aşağıda, iç içe geçmiş Directional Movement System (DMS) göstergesine sahip bir cBot örneği bulunmaktadır; bu örnek (Yükseliş trendi!) DI+ değeri (yeşil çizgi) DI- değerini (kırmızı çizgi) aşarsa yazdırır.

Image title

DI- DI+'dan büyük olduğunda, (Düşüş trendi!) BarClosed olayında yazdırılır.

Image title

 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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using cAlgo.API;
using cAlgo.API.Collections;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;

namespace cAlgo.Robots
{
    [Robot(AccessRights = AccessRights.None)]
    public class OnBarClosedTest : Robot
    {

        private DirectionalMovementSystem _dms;

        [Parameter("DMS Period", DefaultValue = 14)]
        public int Period { get; set; }

        protected override void OnStart()
        {
            _dms = Indicators.DirectionalMovementSystem(Period);
        }

        protected override void OnBarClosed() 
        {

            if (_dms.DIPlus.LastValue > _dms.DIMinus.LastValue) 
            {
                Print("Uptrend!");
            }
            else if (_dms.DIPlus.LastValue == _dms.DIMinus.LastValue) 
            {
                Print("Undecided!");
            }
            else 
            {
                Print("Downtrend!");
            }

        }
    }
}

Özet

Algo API'de bulunan bar olaylarının çeşitliliği, algoritma geliştiricilerinin çağrılan metotlar için doğru zamanlamayı seçmelerine olanak tanır. OnBar() metodu, sembol programına ve grafik zaman dilimi ayarlarına bağlı olarak farklı sıklıkta çağrılabilir, bu da cBot'ların işlevselliğine katkıda bulunur. OnBarClosed() metodu, göstergelerle çalışmak için OnBar() metodunun kullanışlı bir takma adıdır.