WPF
Windows Presentation Foundation (WPF) adalah solusi antarmuka pengguna (UI) Windows yang merupakan bagian dari .NET. Awalnya dikembangkan pada tahun 2006, dimaksudkan sebagai penerus WinForms. Untuk informasi tambahan, lihat dokumentasi resminya.
WPF memungkinkan pembuatan UI yang kaya dan canggih. Ini memisahkan kode dari UI dengan menggunakan XAML, bahasa berbasis XML yang dikembangkan oleh Microsoft. cTrader Windows adalah aplikasi WPF dan semua elemen UI yang Anda lihat didukung oleh solusi ini.
Penggunaan WPF memungkinkan pengembangan UI yang kaya fitur dan hampir sempurna piksel. Namun, WPF memiliki kurva pembelajaran yang curam. Jika Anda ingin membuat elemen UI yang relatif sederhana, Anda mungkin ingin menggunakan kontrol grafik atau WinForms.
Catatan
Algo yang menggunakan WinForms atau WPF hanya dapat dijalankan pada mesin Windows.
Untuk menggunakan WPF dengan cBot dan indikator, ubah kompilator cTrader Anda dari kompilator tersemat ke kompilator .NET SDK.
Mengonfigurasi proyek Anda
Mirip dengan WinForms, sebelum Anda dapat menggunakan WPF dengan cBot dan indikator Anda, Anda harus membuat beberapa perubahan pada file proyek indikator atau cBot Anda. Karena WPF hanya berfungsi di Windows, Anda harus mengubah target framework proyek indikator atau cBot Anda ke varian Windows dari .NET.
Untuk melakukannya, buka file proyek Anda di Visual Studio dan ganti isinya dengan yang berikut:
1 2 3 4 5 6 7 8 9 10 | |
Kami telah menambahkan tag UseWpf dan mengubah nilai TargetFramework menjadi net6.0-windows.
Setelah itu, ubah nilai parameter kelas AccessRights menjadi FullAccess. Kecuali perubahan ini dilakukan, ekstensi Anda tidak akan memiliki hak akses yang cukup untuk beroperasi dengan WPF.
Bangun ulang proyek Anda setelah membuat perubahan di atas.
Buat dan tampilkan jendela menggunakan WPF
Proses pembuatan jendela kustom mirip dengan membuat WinForm kustom.
Setelah Anda mengonfigurasi proyek Anda, klik kanan proyek tersebut, pilih Add dan kemudian pilih Window (WPF)....

Di jendela yang baru terbuka, pilih opsi WPF window. Atur nama jendela menjadi MainWindow dan klik tombol Add. Jendela WPF baru akan muncul di explorer solusi proyek Anda. Ini akan memiliki dua file, file .XAML dan file .cs yang berisi kode backend.
Buka file .XAML dan salin dan tempel kode berikut ke dalamnya untuk mengubah warna latar belakangnya menjadi "SlateGray".
1 2 3 4 5 6 7 8 9 10 | |
Tempel kode berikut ke dalam file sumber utama indikator Anda:
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 | |
Ketika Anda menambahkan jendela WPF baru, itu akan menggunakan namespace indikator atau cBot Anda (seperti cAlgo). Di file .cs yang berisi kode backend jendela, ubah menjadi WPF_Test dan pastikan cocok dengan pernyataan using Anda dalam kode indikator.
Bangun ulang indikator baik dari Visual Studio atau menggunakan cTrader Algo.
Setelah proses build selesai, buat instance indikator. Anda seharusnya melihat jendela kustom Anda muncul hampir segera setelah diluncurkan.

Menampilkan panel trading
Dalam contoh ini, kita akan membuat panel trading sederhana menggunakan WPF. Buat cBot baru dan atur namanya menjadi WPF Trading Panel.
Buka robot baru Anda di Visual Studio, dan tambahkan sumber daya WPF baru seperti yang diuraikan di atas. Atur nama jendela menjadi MainWindow.

Setelah itu, buka file .XAML jendela dan tempelkan kode berikut ke dalamnya:
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 | |
Selanjutnya, buka file backend .cs dan tempelkan kode berikut:
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 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 | |
Kita sekarang siap untuk meluncurkan jendela kustom kita menggunakan cBot kita. Buka file sumber cBot dan masukkan 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 | |
Bangun ulang kode Anda menggunakan Visual Studio dan buat instance cBot Anda. Jalankan dan jendela berikut seharusnya muncul.

Di jendela, pilih simbol dari daftar simbol dan klik Execute. Meskipun panel trading kita agak sederhana, ia berfungsi sebagaimana dimaksud. Anda dapat menggunakannya sebagai template untuk membuat kontrol WPF yang kompleks.
Kode di file .xaml.cs untuk jendela kita bertanggung jawab untuk mengirim instruksi ke cBot kita. Saat mengembangkan kode backend untuk jendela Anda, ikuti pedoman berikut:
- Buat layanan untuk mengelola interaksi dengan cBot atau indikator menggunakan metode
BeginInvokeOnMainThread(). - Jika Anda membangun kontrol WPF yang kompleks, gunakan MVVM, IoC dan pisahkan komponen logika bisnis Anda dari UI (misalnya, dengan menggunakan Prism)
Gunakan thread khusus untuk UI
Jendela WinForms dan WPF harus berjalan di dalam thread yang ditandai STA, jika tidak, mereka tidak akan berfungsi. Untuk informasi lebih lanjut, lihat dokumentasi resmi.
Anda tidak dapat mengubah properti ApartmentState dari thread yang sudah berjalan. Karena thread utama cBot atau indikator tidak ditandai STA, Anda harus menggunakan thread baru yang ditandai STA untuk WinForms dan WPF.
Akses anggota API dari thread UI
Seperti yang telah kami jelaskan sebelumnya, Anda harus menggunakan thread terpisah yang didedikasikan untuk menjalankan kontrol WPF Anda. Hanya kode yang dieksekusi pada thread ini yang akan dapat mengakses kontrol dan properti jendela.
Hal yang sama berlaku untuk semua anggota algo API. Karena API tidak thread safe, Anda tidak dapat mengakses anggota API dari thread UI. Sebaliknya, Anda harus mengirim pekerjaan dengan menggunakan metode BeginInvokeOnMainThread() dalam kode indikator atau cBot Anda.
Ini mungkin menciptakan komplikasi jika Anda ingin bertukar data antara indikator atau cBot Anda dan jendela WPF. Untuk mengatasi masalah ini, Anda dapat membuat kelas proxy untuk mengelola interaksi antara cBot atau indikator Anda dan thread terkait UI.