Langkau tajuk talian

Peristiwa bar

Pembangun algoritma sering perlu merujuk kepada peristiwa bar untuk melaksanakan strategi dagangan tepat pada masanya sebagai tindak balas kepada harga yang dikemas kini. API menawarkan peristiwa BarOpened dan BarClosed untuk pencipta algo untuk menala cBot dengan tepat dan merebut peluang pada titik berbeza dalam kitaran bar.

Nota

Peristiwa bar hanya boleh dikendalikan semasa mengekod cBot. Indikator, sebaliknya, mempunyai kaedah Calculate() yang dipanggil pada setiap tick.

Dalam panduan ini, kami menjelaskan perbezaan antara kaedah OnBar() dan OnBarClosed() dan memberikan beberapa kes penggunaan.

Peristiwa bar dalam satu minit!

  • Kaedah OnBar() dicetuskan setiap kali bar baru dilukis pada carta di mana suatu contoh ditambah. Ia dipanggil untuk bar yang baru terbentuk.
  • Pengendali peristiwa OnBarClosed() juga dicetuskan pada setiap bar baru. Walau bagaimanapun, ia dipanggil untuk bar terakhir yang ditutup (iaitu, sebelum bar semasa).
  • Dengan merujuk kepada peristiwa bar yang betul, anda meningkatkan ketepatan analisis teknikal anda dan memilih masa yang sesuai untuk tindakan algoritma.
  • Jenis carta yang disokong untuk BarOpened dan BarClosed adalah carta bar masa, candlesticks, tick, Renko, julat dan Heikin Ashi.

Gunakan kaedah OnBar()

Kejadian peristiwa BarOpened bergantung pada jadual simbol dan kekerapan harga yang masuk. Biasanya, pengguna platform boleh melaraskan kejadian BarClosed dengan tetapan rangka masa carta.

Nota

Kaedah OnBar() boleh dipanggil sekerap yang dibenarkan oleh tetapan rangka masa carta. Sebaik sahaja bar ditutup, OnBar() tidak akan dicetuskan sehingga tick seterusnya tiba, yang secara logik mencetuskan bar baru untuk dibentuk.

Kaedah OnBar() dipanggil serentak dengan setiap bar baru yang dilukis pada carta di mana algoritma dilampirkan. Hasilnya, pengendali OnBar() adalah tempat yang sempurna untuk menentukan logik dagangan tersuai yang perlu diulang oleh cBot anda secara berkala.

Dalam editor kod, anda boleh menentukan pengendali OnBar() seperti berikut:

override void OnBar()

Gunakan kaedah OnBarClosed()

API Algo juga membolehkan pelaksanaan logik untuk bar terakhir yang ditutup, yang, bergantung pada strategi yang ingin anda laksanakan, mungkin merupakan alternatif yang lebih mudah dan tepat untuk mengendalikan peristiwa BarOpened. Pada pembukaan bar, bar baru muncul sebagai (lilin doji) dan tidak mengandungi data lengkap untuk analisis teknikal.

Peristiwa BarClosed adalah alias untuk peristiwa BarOpened, bermakna ia hanya berlaku sekiranya peristiwa BarOpened berlaku. Sebagai contoh, peristiwa BarClosed untuk bar terakhir pada hari Jumaat akan berlaku dengan bar pertama yang dibuka pada hari Isnin, dengan syarat simbol tersebut tidak didagangkan pada hujung minggu.

Nota

Kaedah OnBarClosed() tidak akan dipanggil sehingga tick tiba untuk membentuk bar baru.

Pengendali peristiwa OnBarClosed() boleh diisytiharkan seperti berikut:

override void OnBarClosed()

Dalam badan kaedah OnBarClosed(), anda boleh menentukan tindakan yang berkaitan yang akan dilakukan oleh cBot anda apabila peristiwa BarClosed dicetuskan (contohnya, melaksanakan pesanan, menggariskan corak, melukis visual analisis teknikal, dan sebagainya).

Apabila diakses dalam pengendali peristiwa ini, koleksi Bars tidak mengandungi bar langsung semasa, manakala koleksi lain (seperti Positions, Symbols, dan sebagainya) mengandungi data sebenar.

Pengendali peristiwa OnBar() dan OnBarClosed() berfungsi seperti yang dimaksudkan dalam ujian belakang dan pengoptimuman. Kedua-dua kaedah boleh digunakan pada jenis carta yang berbeza, termasuk carta bar masa, candlesticks, tick, Renko, julat dan Heikin Ashi.

Cipta contoh cBot

Contoh cBot berikut meletakkan pesanan pasaran apabila setiap bar ketiga pada carta EURCHF dibuka.

 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);
            }
        }
    }
}

Oleh kerana cBot dilancarkan pada carta m1, selang masa anggaran antara pesanan pasaran yang dilaksanakan adalah tiga minit.

Image title

Di bawah adalah contoh cBot dengan indikator Sistem Pergerakan Berarah (DMS) tersarang, yang mencetak (Aliran menaik!) jika nilai DI+ (garis hijau) melebihi nilai DI- (garis merah).

Image title

Apabila DI- lebih besar daripada DI+, (Aliran menurun!) dicetak dalam peristiwa BarClosed.

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!");
            }

        }
    }
}

Ringkasan

Kepelbagaian peristiwa bar yang wujud dalam API Algo membolehkan pembangun algoritma memilih masa yang tepat untuk kaedah yang dipanggil. Kaedah OnBar() boleh dipanggil dengan kekerapan yang berbeza bergantung pada jadual simbol dan tetapan rangka masa carta, yang juga menambah fungsi cBot. Kaedah OnBarClosed() adalah alias yang mudah untuk OnBar() untuk bekerja dengan indikator.