Konversi tingkat simbol¶
Konversi tingkat simbol adalah tindakan penting jika Anda ingin aplikasi Anda mencakup fungsi yang terkait dengan perhitungan L&R.
Use cases
Melakukan konversi tingkat simbol diperlukan saat menghitung komisi, Swap, dan dividen. Komisi, Swap, dan dividen biasanya dinyatakan dalam USD. Namun, tergantung pada broker dan preferensi Anda, mata uang deposit akun Anda mungkin dalam aset lain selain USD. Untuk mendefinisikan komisi, Swap, dan dividen secara akurat, Anda perlu mengetahui nilai tukar antara USD dan mata uang deposit akun Anda.
Conversion chains
Bayangkan harga setiap simbol individu sebagai tingkat konversi antara aset dasar dan aset kutipannya. Tugas mendapatkan tingkat konversi menjadi rumit jika tidak ada simbol yang secara langsung menghubungkan aset tertentu ke aset lainnya. Untungnya, backend cTrader dapat secara otomatis membuat rantai konversi yang bertindak sebagai jalur konversi terpendek dari satu aset ke aset lainnya.
Sebagai contoh, jika Anda ingin mengkonversi EUR ke NZD, dan tidak ada simbol EURNZD di server trading, cTrader akan mengusulkan rantai yang akan berfungsi sebagai langkah-langkah perantara dalam proses konversi. Tergantung pada ketersediaan simbol, rantai tersebut bisa terlihat seperti EURUSD-USDCAD-CADNZD, EURCFH-CFHUSD-USDNZD, atau bahkan EURCAD-CADUSD-USDCFH-CFHNZD.
Untuk mengkonversi antara dua aset, aplikasi Anda perlu melakukan tindakan berikut:
- Akses ID dari aset yang ingin Anda konversi.
- Capai rantai konversi yang mencakup satu atau lebih simbol ringan.
- Berlangganan dan tangani peristiwa spot.
- Ikuti rantai konversi dan kembalikan tingkat konversi akhir.
Di bawah ini, kami menjelaskan setiap tindakan ini secara detail.
Akses ID Aset ¶
ID Aset dapat diakses langsung sebagai properti dari entitas simbol ringan (diwakili oleh ProtoOALightSymbol model message). Selain itu, Anda dapat memperoleh ID mata uang deposit akun langsung dari ProtoOaTrader entity yang terkait.
Perhatikan bahwa contoh di bawah ini hanya memperoleh ID aset untuk satu simbol. Untuk melakukan operasi yang sama untuk beberapa simbol, Anda perlu menambahkan loop atau menggunakan solusi lain yang sesuai (misalnya, metode map() atau yang setara).
Bekerja dengan JSON
Saat bekerja dengan JSON, Anda masih dapat menggunakan kembali kode di bawah ini dan cuplikan kode lainnya dalam tutorial ini. Namun, pastikan untuk mengganti nama kelas Proto... dengan nama kelas kustom Anda dan lakukan modifikasi yang diperlukan untuk menyesuaikan dengan klien TCP dan WebSocket yang Anda pilih.
symbol adalah variabel dari tipe ProtoOALightSymbol. Jika Anda menggunakan JSON, ini dapat berupa tipe kustom apa pun yang mewakili pesan ProtoOALightSymbol.
1 2 | |
Dalam contoh di bawah ini, kami memperoleh ID mata uang deposit dari objek account yang bertipe ProtoOATrader.
1 | |
symbol adalah variabel yang mewakili pesan dari tipe ProtoOALightSymbol.
1 2 | |
Dalam contoh di bawah ini, kami memperoleh ID mata uang deposit dari objek account yang mewakili pesan model ProtoOATrader.
1 | |
Capai Rantai Konversi ¶
Untuk mencapai rantai konversi yang valid, aplikasi Anda perlu mengirim ProtoOASymbolsForConversionReq message dengan bidang firstAssetId dan lastAssetId diatur ke ID aset yang ingin Anda konversi. Ketika Anda menerima respons dari tipe ProtoOASymbolsForConversionRes, simpan bidang symbol yang berulang di dalam koleksi.
Berikut adalah cara Anda dapat melakukan tindakan ini melalui SDK resmi.
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 | |
1 2 3 4 5 | |
Tambahkan juga kondisi berikut ke callback onMessageReceived.
1 2 3 | |
Catatan
Kami sangat merekomendasikan untuk memperoleh semua simbol rantai konversi untuk setiap aset saat Anda pertama kali meminta dan menerima data aset dari server. Jika tidak, Anda harus mengirim pesan ProtoOASymbolsForConversionReq setiap kali Anda perlu mengonversi tingkat yang, dalam beberapa kasus, mungkin terjadi beberapa kali per detik.
Catatan
Karena entitas ProtoOALightSymbol tidak mengandung bidang apa pun yang mewakili harga bid atau ask, kami sangat merekomendasikan untuk membuat kelas Symbol kustom atau yang setara sehingga Anda dapat dengan mudah membuat simbol baru secara terprogram dan memperbarui propertinya ketika peristiwa tertentu dipicu. Anda harus mengonversi simbol ringan menjadi objek dari kelas ini secara terpisah.
Berlangganan dan Tangani Peristiwa Spot ¶
Untuk mengikuti rantai konversi dari awal hingga akhir, Anda perlu berlangganan ke ProtoOASpotEvent untuk semua simbol yang termasuk dalam rantai. Ini dilakukan sebagai berikut melalui SDK resmi.
Sebelum Anda melakukan operasi yang tercantum di bawah ini, buat kelas Symbol atau yang setara sehingga Anda dapat dengan mudah membuat simbol baru secara terprogram dan memperbarui propertinya ketika peristiwa tertentu dipicu. Dalam contoh di bawah ini, kelas Symbol kami mencakup objek ProtoOASymbol dan ProtoOALightSymbol sebagai properti.
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 | |
Kami juga harus berlangganan ke peristiwa spot dan menanganinya. Dalam contoh di bawah ini, kami mengakses koleksi symbols yang menyimpan simbol ringan kami. Kami menemukan objek simbol yang ID-nya cocok dengan bidang symbolId dari ProtoOASpotEvent yang baru saja kami terima. Terakhir, kami memperbarui properti bid dan ask dari symbol menggunakan metode bantu GetPriceFromRelative.
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 | |
Kami dapat menggunakan fungsi berikut untuk berlangganan ke ProtoOASpotEvent untuk simbol tertentu. Perhatikan bahwa ini hanya berlangganan ke satu simbol, artinya Anda perlu memanggil fungsi ini untuk setiap simbol ringan dalam koleksi simbol konversi Anda.
1 2 3 4 5 6 7 | |
Untuk menangani peristiwa spot, kami dapat menambahkan kondisi berikut ke callback onMessageReceived kami.
1 2 3 | |
Terakhir, berikut adalah callback onSpotEvent kami.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
Dalam kelas Symbol kami, fungsi getPipsFromRelative didefinisikan sebagai berikut:
1 2 3 4 | |
Perhatikan bahwa nilai properti pipPosition dan digits harus diperoleh secara terpisah.
Ikuti Rantai Konversi dan Kembalikan Tingkat Konversi Akhir ¶
Pada titik ini, semua simbol dalam rantai konversi Anda harus menerima tingkat spot dan Anda harus dapat mengakses harga bid dan ask yang akurat untuk setiap simbol. Yang tersisa hanyalah mengikuti rantai konversi dan mengembalikan tingkat akhir. Ini dapat dilakukan sebagai 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 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |