Lewati ke isi

Siklus hidup indikator kustom

Struktur kode sampel

Artikel ini akan memandu Anda melalui struktur kode dan menjelaskan logika di balik event dan siklus hidup untuk indikator cTrader. Untuk mengakses indikator kustom, buka tab Local di aplikasi Algo.

Image title

Sebagai contoh, Anda dapat membuat indikator baru bernama "LifeCycle Test" dengan kode sampel berikut yang tersedia di jendela editor kode.

Image title

Untuk mengatur ulang ke versi boilerplate, salin kode di bawah ini.

 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] = 
        }
    }
}

Sekilas, struktur kode hanya mencakup dua metode, metode Initialize() dan metode Calculate(). Klik Build untuk melanjutkan pengujian indikator ini. Kita akan menambahkan metode tambahan yang disebut OnDestroy() dan menjelaskan tujuannya nanti.

Event inisialisasi

Ketika indikator cTrader pertama kali dilampirkan ke grafik atau ketika pengguna mengubah pengaturan parameter apa pun, instance indikator dibuat ulang dan metode Initialize() dipanggil. Ini digunakan untuk menginisialisasi variabel apa pun yang Anda rencanakan untuk digunakan dalam indikator Anda. Anda juga dapat mendefinisikan dan mereferensikan indikator tambahan untuk membuat satu indikator menggunakan rumus dari indikator lain.

Secara default, template kode baru menyertakan pengaturan parameter yang disebut Message dengan nilai "Hello world!".

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

Dalam metode Initialize(), ada baris kode untuk mencetak pesan ini ke log.

1
Print(Message);

Untuk mendemonstrasikan metode Initialize(), tambahkan instance indikator dengan mengklik ikon Plus di sebelah ikon Build dan pilih simbol. Jika Anda mengklik More di baris indikator dan memilih Add an instance, simbol EURUSD dengan rentang waktu h1 akan ditambahkan secara otomatis.

Image title

Catatan

Menambahkan instance di cTrader Algo sama dengan melampirkan indikator ke grafik di aplikasi Trade.

Sekarang, buka tab Log di panel Trade Watch di bawah grafik. Seperti yang Anda lihat, pesan "Hello world" telah dicetak.

Image title

Setiap kali indikator pertama kali ditambahkan ke grafik atau ketika parameter diubah, grafik diperbarui dan metode Initialize() dipanggil lagi. Ketik pesan yang berbeda di bagian Parameters untuk melihat entri log diperbarui sesuai.

Image title

Menghitung output indikator

Metode Calculate() dipanggil untuk setiap indeks data historis dan pada setiap tick yang masuk. Misalnya, jika grafik saat ini memiliki 1000 bar, metode Calculate() akan dipanggil untuk indeks 0, 1, 2, dan seterusnya, hingga maksimum 999.

1
public override void Calculate(int index)

Metode Calculate() dapat dipanggil beberapa kali per detik selama periode volatilitas tinggi atau lebih sedikit ketika pasar datar. Untuk menguji cara kerjanya, Anda dapat menambahkan baris kode ke dalam badan metode Calculate() untuk mencetak nilai indeks yang dilewatkan ke dalam metode untuk setiap tick data baru. Jangan lupa untuk mengklik Build setiap kali setelah menambahkan perubahan di jendela editor kode.

1
Print("Index: " + index);

Untuk beralih dari jendela editor kode ke grafik, klik instance indikator yang ditambahkan. Jika Anda membuka tab Log di panel Pemantau Trading, Anda akan melihat nilai-nilai yang dicetak untuk setiap indeks yang dilewatkan ke dalam metode.

Image title

Metode OnDestroy()

Metode OnDestroy() dipanggil ketika indikator dihapus dari grafik dan tidak lagi diperlukan. Anda perlu mengimplementasikan metode ini, karena tidak ditambahkan secara default saat Anda membuat indikator baru.

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

Metode ini berguna bagi programmer, karena memungkinkan mereka untuk melepaskan sumber daya yang tidak dikelola dan melakukan tugas finalisasi. Ini membantu mencegah kebocoran memori dan memastikan indikator tidak mempertahankan sumber daya setelah dihapus. Contohnya termasuk menutup koneksi ke feed data eksternal, melepaskan objek data besar, dan operasi lain yang membebaskan memori.

Ringkasan

Singkatnya, metode Initialize(), Calculate() dan OnDestroy() menggambarkan tahapan berbeda dari siklus hidup indikator kustom. Dengan menyesuaikan kode sampel di aplikasi Algo, Anda bebas memutuskan bagaimana menginisialisasi variabel indikator, menghitung output indikator, dan menjalankan tugas finalisasi.

Image title