Objek carta dan lukisan
Objek carta (lukisan) membolehkan melukis garis atau bentuk geometri pada carta cTrader. Dengan menggunakannya, anda boleh melukis corak atau menunjukkan peristiwa tertentu pada carta berdasarkan data cBot atau indikator anda.
Objek carta menggunakan koordinat X dan Y untuk penempatan.
- Paksi X mewakili masa carta atau indeks bar.
- Paksi Y ialah harga simbol.
Semua objek carta diperoleh daripada kelas asas ChartObject, bermakna bahawa semuanya mewarisi ciri asas tertentu.
Sampel kod objek carta
Lukis dalam tetingkap indikator
Apabila mencipta objek carta, anda tidak terhad kepada carta simbol utama. Sebenarnya, anda boleh melukis objek carta di dalam mana-mana tetingkap yang mengandungi output indikator.
Kelas Chart mempunyai koleksi IndicatorAreas. Ia mengandungi semua tetingkap bukan tindihan atau berasingan di mana indikator boleh memaparkan outputnya.
Anda juga boleh mengakses kawasan indikator semasa anda dengan menggunakan sifat IndicatorArea kelas Indicator anda.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
Apabila anda menjalankan contoh indikator di atas, anda sepatutnya melihat garis merah dalam tetingkap indikator yang berasingan. Apabila mencipta carta dalam kawasan indikator berasingan, anda boleh menggunakan semua kaedah lukisan kerana kedua-dua Chart dan IndicatorArea mewarisi daripada kelas asas ChartArea.
Teks statik
Bukannya menggunakan koordinat X dan Y untuk penempatan, teks statik menggunakan penjajaran mendatar dan menegak yang statik. Untuk menunjukkan atau melukis teks statik, gunakan kaedah DrawStaticText().
1 | |
Jika anda melampirkan objek carta ini kepada indikator dan menjalankan contoh, anda akan melihat teks berikut dalam carta utama.

Garis menegak
Gunakan kaedah DrawVerticalLine() untuk melukis garis menegak.
1 2 3 | |
Garis mendatar
Gunakan kaedah DrawHorizontalLine() untuk melukis garis mendatar.
1 2 3 | |
Garis trend
Garis trend bermula dari titik tertentu dalam carta dan berakhir di titik lain. Garis trend berguna untuk mencipta bentuk yang berbeza atau corak kompleks.
Untuk melukis garis trend gunakan kaedah DrawTrendLine().
1 2 3 4 5 6 7 | |
Segi empat tepat
Gunakan kaedah DrawRectangle() untuk melukis segi empat tepat.
1 2 3 4 5 6 7 | |
Segi tiga
Gunakan kaedah DrawTriangle() untuk melukis segi tiga.
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
Objek carta lain
Demi ringkasan, kami tidak menyebut beberapa objek carta lain dalam cebisan kod di atas. Objek-objek ini termasuk tetapi tidak terhad kepada yang berikut:
- Elips
- Ikon
- Andrews Pitchfork
- Saluran Sama Jarak
- Pengembangan Fibonacci
- Kipas Fibonacci
- Penjejakan semula Fibonacci
Semua objek ini boleh dilukis menggunakan kaedah Draw...() yang dinamakan serupa yang menerima parameter yang serupa.
Risiko-ganjaran
Antara muka ChartRiskReward menyediakan jenis yang membolehkan anda mencipta dan menguruskan objek risiko-ganjaran secara programatik pada carta.
Kod di bawah menunjukkan kepada anda cara untuk mencipta penunjuk yang melukis objek risiko-ganjaran:
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 | |

Tetapan objek utama
Menamakan objek carta
Apabila anda cuba melukis objek carta, anda perlu memberikan namanya sebagai hujah untuk kaedah lukisan.
Semua nama objek carta mestilah unik. Jika keperluan ini tidak dipenuhi, anda berisiko objek carta mengatasi objek carta dengan nama yang sama bergantung pada masa pelaksanaan mereka. Anda boleh menggunakan nilai indeks bar semasa atau masa semasa untuk menjana nama unik bagi setiap objek.
Mengakses objek carta
Semua objek carta terkandung dalam koleksi Objects. Koleksi ini termasuk objek yang dilukis oleh pengguna. Hasilnya, koleksi Objects boleh diakses untuk membuang objek dari carta atau mengubah suai sifat-sifatnya.
Contoh di bawah mengakses ahli koleksi Objects:
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 | |
Peristiwa
Objek carta mempunyai beberapa peristiwa yang boleh anda gunakan untuk mengetahui objek mana yang dilukis, dikemas kini atau dibuang:
ObjectsAdded- dicetuskan apabila satu atau lebih objek carta ditambah pada carta.ObjectsRemoved- dicetuskan apabila satu atau lebih objek carta dibuang dari carta.ObjectsUpdated- dicetuskan apabila satu atau lebih objek carta dikemas kini (salah satu sifatnya diubah oleh pengguna atau penunjuk atau cBot aktif).ObjectsSelectionChanged- dicetuskan apabila satu atau lebih objek carta dipilih oleh pengguna.ObjectHoverChanged- dicetuskan apabila kursor tetikus berada di atas objek carta.
Contoh berikut menggunakan kelima-lima jenis peristiwa:
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 | |
Objek interaktif dan bukan interaktif
Apabila bekerja dengan objek interaktif, pengguna boleh mengubah sifat-sifatnya seperti kedudukan objek, warna, komen, dan sebagainya. Semua objek yang dilukis oleh pengguna adalah interaktif secara lalai.
Nota
Sifat ChartStaticText tidak boleh diubah tanpa mengira sama ada objek yang berkaitan dengannya adalah interaktif.
Untuk menjadikan objek interaktif, tetapkan sifat IsInteractive kepada true seperti yang ditunjukkan di bawah:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | |
Semua objek carta mempunyai sifat IsInteractive. Nilai lalainya ialah false.
Jika objek carta adalah interaktif, ia tidak akan dibuang apabila contoh penunjuk atau cBot dibuang atau dihentikan. Sebaliknya, objek bukan interaktif dibuang secara automatik apabila penunjuk atau cBot berhenti berfungsi.
Untuk mengelakkan kekacauan, pastikan untuk membersihkan objek interaktif selepas contoh yang berkaitan dibuang dengan menggunakan kaedah Destroy penunjuk atau kaedah OnStop cBot.
Jika objek carta tidak interaktif, ia juga akan tidak kelihatan dalam senarai dan koleksi objek carta.
Objek terkunci dan tidak terkunci
Mengunci objek carta menghalang pengguna daripada mengubah suai atau mengemaskininya. Anda boleh melakukannya melalui kotak Trader (Sifat carta) atau dengan menetapkan sifat IsLocked kepada true. Nilai lalai ialah false.
Anda boleh menggunakan penguncian untuk menjadikan objek interaktif tetapi pada masa yang sama menghalang pengguna daripada mengemaskininya. Contoh berikut mengunci objek garis menegak:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | |
Tunjuk dan sembunyi
Anda boleh melukis objek pada carta dan, kemudiannya, menyembunyikannya. Walaupun objek itu masih ada pada carta, ia akan menjadi sama sekali tidak kelihatan.
Untuk berbuat demikian, tetapkan sifat IsHidden kepada true.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | |
Penggunaan sumber adalah pertimbangan utama untuk menggunakan ciri ini. Jika terdapat objek yang sepatutnya kerap muncul pada carta (tetapi tidak sepanjang masa), adalah lebih baik untuk menyembunyikannya daripada membuang dan melukis semula setiap kali ia diperlukan.
Pemilihan objek dan indeks penampilan (ZIndex)
Secara semula jadi, mungkin ada kes di mana beberapa objek bersilang antara satu sama lain pada carta, menjadikan pemilihan satu objek tertentu sukar atau mustahil sama sekali. Hanya objek yang dilukis terakhir akan boleh dipilih apabila anda meletakkan kursor tetikus di atas sekumpulan objek carta yang bersilang.
Untuk mengubah tingkah laku ini anda boleh menggunakan sifat ZIndex. Ia boleh membantu apabila cuba memaparkan corak kompleks objek carta.
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 | |
Sebaik sahaja dilampirkan pada carta, penunjuk di atas akan memaparkan garis menegak merah dan bukannya kuning. Oleh kerana nilai sifat ZIndex garis pertama adalah lebih tinggi daripada nilai yang sepadan dengan garis kedua, ia mengambil keutamaan berbanding garis kedua (kuning).
Dengan kata lain, sifat ZIndex menentukan objek carta mana yang dipaparkan dahulu apabila mereka bertindih. Semua objek carta yang dilukis diberikan nilai tertentu untuk sifat ZIndex secara automatik.
Ketahui sama ada objek dibuang
Semua objek carta mewarisi sifat IsAlive daripada kelas asas ChartObject. Nilai sifat ini adalah true selagi objek ada pada carta (tanpa mengira sama ada ia kelihatan atau tidak kelihatan). Nilai ditetapkan kepada false sebaik sahaja objek dibuang dari carta.
Jika anda menyimpan rujukan kepada objek carta dan objek ini dibuang oleh pengguna, anda boleh memeriksa sifat IsAlive untuk memeriksa sama ada objek itu hidup atau mati.
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 | |
Jika anda menjalankan contoh penunjuk ini, klik kanan pada garis merah dan buangnya. Log kemudian harus mengeluarkan mesej "Object reference removed".
Jika anda menyimpan rujukan kepada objek carta (mati), kebocoran memori akan berlaku. Semasa pengumpulan sampah, objek anda masih akan dianggap hidup, bermakna ia akan terselamat daripada proses pengumpulan.
Untuk mengelakkan masalah ini, gunakan peristiwa ObjectsRemoved bersama dengan sifat IsAlive.
Indeks bar atau masa
Apabila mengekod objek carta, anda boleh menggunakan sama ada masa carta atau indeks bar untuk paksi X.
Pada pendapat kami, masa carta adalah pilihan yang lebih baik. Apabila menggunakan indeks bar, anda tidak boleh merancang untuk nilai masa hadapan (kerana indeks yang diperlukan belum wujud) dan tidak boleh mengambil kira sebarang ruang antara bar. Walau bagaimanapun, indeks bar mungkin lebih mudah digunakan, terutamanya dalam kes objek carta yang agak mudah.
Semua kaedah Chart.Draw mempunyai overload yang berbeza untuk indeks bar dan masa carta.