C# untuk dagangan algoritma
Apakah itu C#
C# ialah bahasa pengaturcaraan berorientasikan objek yang digunakan untuk membina pelbagai perkhidmatan dan aplikasi. Sintaksnya yang jelas dan berstruktur menjadikannya mudah untuk dipelajari dan dibaca, walaupun oleh pemula, sambil menyediakan pendekatan berstruktur untuk menulis kod yang padat dan boleh diguna semula.
Algoritma C# dalam satu minit!
- Walaupun anda tidak pernah bekerja dengan C# sebelum ini, mencipta dan menggunakan bot pertama anda atau indikator hanya mengambil masa beberapa minit sahaja.
- Oleh kerana C# mudah digunakan, anda boleh menulis semula mana-mana cebisan kod daripada dokumentasi ini dengan cepat untuk memenuhi keperluan anda.
- Apabila menggunakan C#, anda boleh mengakses sejumlah besar perpustakaan yang mengandungi kelas dan kaedah yang telah ditentukan. Kaedah-kaedah ini boleh mengendalikan tugas-tugas biasa dengan cekap, membebaskan anda untuk menyelesaikan masalah dagangan yang kompleks.
- Dalam C#, anda boleh menulis kod yang tidak menghalang bebenang pelayan semasa pelaksanaan. Dengan kata lain, anda boleh memulakan tugas-tugas tertentu secara serentak dengan tugas-tugas lain.
Apakah itu .NET?
Untuk program C# berjalan, kod sumbernya mesti dikompil menjadi Bahasa Perantaraan (IL). Kod IL ini mengikuti spesifikasi Infrastruktur Bahasa Umum (CLI) dan kemudiannya dikompil menjadi arahan mesin natif semasa masa jalan. Rangka kerja .NET menyediakan persekitaran pelaksanaan maya yang dibina pada perpustakaan kelas yang luas dan Common Language Runtime (CLR), pelaksanaan CLI oleh Microsoft.
Tanpa mendalami kerumitan teknikal, .NET memenuhi fungsi-fungsi berikut:
- Memudahkan pembangunan dan pelaksanaan aplikasi: .NET SDK sudah mengandungi beberapa pengompil dan enjin pembinaan terbina dalam, menghapuskan keperluan untuk mencipta sebarang penyelesaian tersuai.
- Menyediakan perpustakaan masa jalan: Apabila menambah jenis data atau koleksi baharu ke dalam kod anda, anda akan sering mendapati bahawa .NET sudah menawarkan kelas dan kaedah yang sesuai untuk tugas tersebut.
Asas-asas C#
Jenis data dan pengisytiharan pemboleh ubah
Jenis data adalah cara untuk mengkategorikan data supaya C# tahu dengan tepat bagaimana untuk mengendalikan pemboleh ubah dan sifat. Dalam pengisytiharan pemboleh ubah/sifat, jenis data sentiasa mendahului nama pemboleh ubah/sifat.
1 | |
Sebagai alternatif, anda boleh menggunakan kata kunci var untuk mengelakkan penentuan jenis data.
1 | |
Objek dan kelas
Fikirkan objek sebagai abstraksi entiti nyata atau tidak nyata. Entiti-entiti ini boleh mempunyai ciri-ciri tertentu (sifat) dan boleh melakukan pelbagai operasi (kaedah). Seterusnya, kelas berfungsi sebagai templat untuk penciptaan objek.
Oleh kerana C# ialah bahasa berorientasikan objek, kelas juga boleh mewarisi sifat dan kaedah daripada kelas lain. Pertimbangkan contoh berikut di mana kita mengisytiharkan kelas NewBot baharu yang mewarisi daripada kelas Robot. Kita juga menentukan beberapa sifat kelas baharu.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | |
Jenis data
Oleh kerana C# ialah bahasa yang ditaip dengan kuat, adalah perlu untuk menentukan jenis data semasa mengisytiharkan pemboleh ubah dan sifat kelas. Secara ringkas, jenis data merupakan kelas unik dengan set tingkah laku yang berbeza. Pertimbangkan contoh-contoh berikut di mana pelbagai jenis data ditentukan untuk sifat kelas dan parameter berkaitan yang berbeza.
1 2 | |
Dalam kod di atas, jenis data DataSeries mewakili senarai nilai baca sahaja dan oleh itu, biasanya digunakan untuk mewakili harga pasaran.
Apabila terdapat keperluan untuk mencipta parameter pelbagai pilihan, anda boleh menggunakan jenis data enum terbina dalam seperti yang diterangkan di bawah. Anda boleh menganggap enum sebagai kelas khas yang mengandungi pelbagai pemalar.
1 2 3 4 5 6 7 8 9 | |
Untuk mengakses pemalar yang terkandung dalam enum, gunakan sintaks berikut.
1 | |
Jika parameter atau sifat perlu menjadi nombor, anda akan paling kerap menggunakan jenis data int (integer) atau double (perpuluhan). Walaupun jenis double mempunyai ketepatan yang kurang daripada jenis decimal, ia juga kurang intensif sumber.
1 2 | |
Akhir sekali, jenis bool biasanya mewakili input ya atau tidak. Nilai ya dan tidak sepadan dengan true dan false, masing-masing.
1 2 | |
Ruang nama
Ruang nama bertindak sebagai koleksi kelas yang ditetapkan. Setelah anda menetapkan kelas kepada ruang nama, ia boleh diakses kemudian dengan menggunakan notasi Namespace.ClassName. Kita akan menetapkan NewBot kita kepada ruang nama CoolTradingBots.
1 2 3 4 5 6 7 8 | |
Kaedah kelas
Kaedah kelas ditakrifkan selepas pengisytiharan kelas. Semua objek kelas NewBot kita akan dapat memanggil kaedah CustomTradeOperation(). Ia mengambil dua hujah, iaitu objek Symbol dan objek double. Kaedah kita sepatutnya mengambil simbol dan melaksanakan sejenis tindakan dagangan untuk volum yang ditentukan
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
Perpustakaan kelas
Perpustakaan kelas (dan seterusnya, kaedah kelas) boleh diakses melalui ruang nama mereka seperti yang ditunjukkan dalam contoh di bawah.
1 | |
Sebagai alternatif, anda boleh menaip kata kunci using pada permulaan kod anda untuk menentukan ruang nama tertentu dan mengelakkan kelewahan. Pertimbangkan cebisan kod berikut.
1 2 3 | |
Penyata bersyarat
Untuk menggunakan penyata bersyarat, gunakan kata kunci diikuti dengan ungkapan dalam kurungan bulat. Contoh di bawah menggunakan kata kunci if untuk menyelesaikan kaedah CustomTradingOperation() kita. Untuk berbuat demikian, kita menggunakan kaedah EvaluateMarket() yang ditakrifkan dalam ruang nama Analytics.Actions.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | |
Koleksi
Koleksi ditakrifkan sebagai bekas yang boleh menyimpan satu atau lebih objek daripada kelas tertentu.
Koleksi boleh diindeks sepenuhnya, bermakna ahli-ahlinya boleh diakses dengan memasukkan nilai integer tertentu dalam kurungan siku. Pertimbangkan contoh berikut di mana kaedah Calculate() mencetak sifat-sifat bar yang diakses melalui indeksnya.
1 2 3 4 5 | |
Cipta sambungan cTrader
Dalam cebisan di bawah, kita mencipta bot dagangan asas menggunakan hanya pengetahuan yang diliputi dalam bahagian di atas.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | |
Operasi segerak dan tak segerak
Seperti yang dinyatakan sebelum ini, C# menyokong sepenuhnya operasi tak segerak. Rajah di bawah menentukan contoh asas bagaimana aktiviti dagangan dilaksanakan dalam pelaksanaan segerak.
graph TD
A(Menemui Isyarat Teknikal) ==> B(Laksanakan Pesanan Pasaran)
B ==> C(Ambilan Untung/Henti <br>Rugi Dicapai)
C ==> D(Tutup Posisi)
D ==> A Pelaksanaan segerak membawa satu kelemahan penting. Dalam contoh di atas, tindakan melaksanakan pesanan pasaran sepenuhnya menduduki semua bebenang pelayan, bermakna robot dagangan anda tidak dapat melakukan apa-apa lagi sebelum operasi ini selesai.
Ini kurang ideal apabila anda ingin bertindak balas dengan cepat terhadap peristiwa pasaran dan turun naik. Sebaik-baiknya, bot anda harus dapat menyimpan pelbagai tindakan atau menangguhkan tugas tertentu untuk melibatkan diri dalam aktiviti lain yang lebih mendesak. Kita akan mengembangkan contoh kita untuk mencerminkan dengan lebih baik bagaimana operasi tak segerak dilaksanakan.
graph TD
A([Menemui Isyarat Teknikal]) ==> B([Letakkan Pesanan Beli]) & C([Letakkan Pesanan Jual <br>untuk Perlindungan Nilai]) ==> D([Suatu Pesanan Mencapai <br>Ambilan Untung/Henti Rugi])
D ==> E([Tutup Kedudukan])
E ==> A Dalam contoh di atas, bot dagangan kita secara serentak meletakkan pesanan dalam kedua-dua arah untuk melindungi nilai posisinya. Berbeza dengan operasi segerak, tidak perlu menunggu satu operasi selesai sebelum meneruskan operasi yang lain. Ini secara ketara mengembangkan peluang pembangun untuk mencipta robot dagangan yang cekap dan boleh dipercayai.
Perhatikan bahawa pelaksanaan tak segerak adalah berbeza daripada pelbagai bebenang:
- Dalam pelaksanaan tak segerak, semua tugas dimulakan pada bebenang yang sama. Apabila ia disimpan atau ditangguhkan, ia membebaskan bebenang ini dan, apabila pelaksanaannya diteruskan kemudian, ia berlaku pada bebenang berbeza yang dipilih daripada kumpulan bebenang.
- Apabila menggunakan pelbagai bebenang, semua tugas bermula pada bebenang yang berbeza dan meneruskan pelaksanaannya pada bebenang awal mereka. Tiada pertukaran bebenang.
cTrader tidak pernah memanggil kaedah anda secara selari jadi anda tidak perlu risau tentang isu pelbagai bebenang.
