Langkau tajuk talian

Kitaran hayat indikator tersuai

Struktur kod sampel

Artikel ini akan membimbing anda melalui struktur kod dan menjelaskan logik di sebalik peristiwa dan kitaran hayat untuk indikator cTrader. Untuk mengakses indikator tersuai, buka tab Local dalam aplikasi Algo.

Image title

Sebagai contoh, anda boleh mencipta indikator baharu bernama "LifeCycle Test" dengan kod sampel berikut yang tersedia dalam tetingkap editor kod.

Image title

Untuk menetapkan semula kepada versi boilerplate, salin kod di bawah.

 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
{
    [Indicator(AccessRights = AccessRights.None)]
    public class LifeCycleTest : Indicator
    {
        [Parameter(DefaultValue = "Hello world!")]
        public string Message { get; set; }

        [Output("Main")]
        public IndicatorDataSeries Result { get; set; }

        protected override void Initialize()
        {
            // To learn more about cTrader Algo visit our Help Center:
            // https://help.ctrader.com/ctrader-algo/


            Print(Message);
        }

        public override void Calculate(int index)
        {
            // Calculate value at specified index
            // Result[index] = 
        }
    }
}

Sepintas lalu, struktur kod hanya merangkumi dua kaedah, kaedah Initialize() dan kaedah Calculate(). Klik Build untuk meneruskan pengujian indikator ini. Kita akan menambah kaedah tambahan yang dipanggil OnDestroy() dan menjelaskan tujuannya kemudian.

Peristiwa inisialisasi

Apabila indikator cTrader pertama kali dilampirkan pada carta atau apabila pengguna menukar mana-mana tetapan parameter, instans indikator dicipta semula dan kaedah Initialize() dipanggil. Ia digunakan untuk menginisialisasi sebarang pemboleh ubah yang anda rancang untuk digunakan dalam indikator anda. Anda juga boleh mentakrifkan dan merujuk indikator tambahan untuk mencipta indikator tunggal menggunakan formula dari indikator lain.

Secara lalai, templat kod baharu merangkumi tetapan parameter yang dipanggil Message dengan nilai "Hello world!".

1
2
[Parameter(DefaultValue = "Hello world!")]
public string Message { get; set; }

Dalam kaedah Initialize(), terdapat baris kod untuk mencetak mesej ini ke log.

1
Print(Message);

Untuk menunjukkan kaedah Initialize(), tambah instans indikator dengan mengklik ikon Plus di sebelah ikon Build dan pilih simbol. Jika anda klik More dalam baris indikator dan pilih Add an instance, simbol EURUSD dengan tempoh masa h1 akan ditambah secara automatik.

Image title

Nota

Menambah instans dalam cTrader Algo adalah sama seperti melampirkan indikator pada carta dalam aplikasi Trade.

Sekarang, buka tab Log dalam panel Trade Watch di bawah carta. Seperti yang anda lihat, mesej "Hello world" telah dicetak.

Image title

Setiap kali indikator pertama kali ditambah pada carta atau apabila parameter diubah, carta disegarkan semula dan kaedah Initialize() dipanggil semula. Taip mesej yang berbeza dalam bahagian Parameters untuk melihat entri log dikemas kini dengan sewajarnya.

Image title

Kira output indikator

Kaedah Calculate() dipanggil untuk setiap indeks data sejarah dan pada setiap tik masuk. Contohnya, jika carta semasa mempunyai 1000 bar, kaedah Calculate() akan dipanggil untuk indeks 0, 1, 2, dan seterusnya, sehingga maksimum 999.

1
public override void Calculate(int index)

Kaedah Calculate() boleh dipanggil beberapa kali sesaat semasa tempoh turun naik yang tinggi atau lebih sedikit apabila pasaran mendatar. Untuk menguji cara ia berfungsi, anda boleh menambah baris kod pada badan kaedah Calculate() untuk mencetak nilai indeks yang dimasukkan ke dalam kaedah untuk setiap tik data baharu. Jangan lupa untuk klik Build setiap kali selepas menambah perubahan dalam tetingkap editor kod.

1
Print("Index: " + index);

Untuk beralih dari tetingkap editor kod ke carta, klik instans indikator yang ditambah. Jika anda membuka tab Log dalam panel Trade Watch, anda akan melihat nilai yang dicetak untuk setiap indeks yang dimasukkan ke dalam kaedah.

Image title

Kaedah OnDestroy()

Kaedah OnDestroy() dipanggil apabila indikator dikeluarkan dari carta dan tidak lagi diperlukan. Anda perlu melaksanakan kaedah ini, kerana ia tidak ditambah secara lalai apabila anda mencipta indikator baharu.

1
2
3
4
protected override void OnDestroy()
        {
            base.OnDestroy();            
        }

Kaedah ini berguna untuk pengaturcara, kerana ia membolehkan mereka melepaskan sumber yang tidak diurus dan melaksanakan tugas pemuktamadan. Ia membantu mencegah kebocoran memori dan memastikan indikator tidak mengekalkan sumber selepas dikeluarkan. Contoh termasuk menutup sambungan ke suapan data luaran, melepaskan objek data besar, dan operasi lain yang membebaskan memori.

Ringkasan

Secara ringkasnya, kaedah Initialize(), Calculate() dan OnDestroy() menggambarkan peringkat berbeza dalam kitaran hayat indikator tersuai. Dengan melaraskan kod sampel dalam aplikasi Algo, anda bebas untuk memutuskan cara untuk menginisialisasi pemboleh ubah indikator, mengira output indikator, dan menjalankan tugas pemuktamadan.

Image title