Akses rangkaian
Panduan ini menentukan cara anda boleh mencipta algoritma yang boleh mengakses Internet. Di bawah ialah ringkasan satu minit ciri API ini.
Akses rangkaian dalam satu minit!
- Penyelesaian algo anda boleh mendapatkan maklumat daripada laman web berita dagangan atau API web berorientasikan Forex. Gunakan ciri ini untuk memastikan cBot, plugin dan indikator anda bertindak balas terhadap peristiwa dan maklumat semasa yang mendesak.
- Dengan menggunakan kaedah dalam ruang nama
System.Text.JsondanSystem.Text.Json.Serialization, anda boleh menyerialisasi atau menyahserialisasi objek dengan cepat kepada dan daripada fail JSON, membolehkan cBot menggunakan titik akhir dengan mudah dan memproses maklumat berharga. - Protokol WebSocket membolehkan penerimaan data daripada perkhidmatan dalam masa nyata tanpa perlu membuat permintaan HTTP setiap kali. Gunakan websocket untuk mengintegrasikan algo anda dengan sumber web dengan lancar. Kelas
WebSocketClientmengandungi semua kaedah dan parameter yang diperlukan untuk menggunakan sambungan websocket. - Apabila menggunakan websocket, anda boleh menghantar dan menerima rentetan dan data bait mentah. Bekerja dengan struktur data yang berbeza dan menyerialisasikannya kepada bait untuk menggunakan perkhidmatan pihak ketiga yang berharga.
AccessRights.Noneadalah mencukupi untuk fungsi rangkaian.
HTTP
Antara muka Http baharu mengandungi beberapa kaedah yang, apabila dilaksanakan, sepatutnya membolehkan cBot dan jenis algoritma lain untuk mengakses Internet. Untuk ilustrasi, lihat yang berikut:
HttpResponse Http.Get(string uri). Melaksanakan permintaanGETkepada URI yang dinyatakan dalam rentetanuriyang dihantar dan mengembalikan objekHttpsResponseyang mengandungi hasil permintaan ini.
Kelas HttpsRequest membolehkan pelaksanaan permintaan yang lebih kompleks termasuk permintaan POST. Untuk melaksanakan permintaan ini, tetapkan sifat HttpsRequest.Method kepada salah satu nilai enum HttpMethod seperti HttpMethod.Put atau HttpMethod.Patch.
Seterusnya, sifat HttpsRequest.Uri mengandungi URI yang dihantar permintaan manakala sifat HttpsRequest.Body boleh digunakan untuk menetapkan badan permintaan. Lihat di bawah untuk contoh bagaimana anda boleh menggunakan objek HttpsRequest.
HttpResponse Http.Send(HttpRequest request). Melaksanakan permintaan kepada URI yang dinyatakan sebagai nilai sifatrequest.UriobjekHttpsRequestyang dihantar ke dalam kaedah ini. Selepas itu, mengembalikan objekHttpsResponseyang mengandungi hasil permintaan ini. Jenis permintaan ditetapkan sebagai nilai sifatequest.Method.
Akses rangkaian dalam pengujian balik dan pengoptimuman
Semua kaedah dalam antara muka Http berfungsi seperti yang dimaksudkan dalam pengujian balik dan pengoptimuman. Perhatikan bahawa, apabila mengakses sumber web dalam pengujian balik atau pengoptimuman, versi terkini sumber ini akan diminta dan bukannya yang bersejarah.
Cipta contoh cBot
Laksanakan permintaan GET
Kita akan mencipta cBot ringkas yang melaksanakan tindakan berikut:
- Menghantar permintaan
GETdan mengakses fail JSON melalui API dihttps://forexApiExample.com/v1/exchangerate(perhatikan bahawa API ini adalah palsu sepenuhnya). - Jika respons
GETberjaya, cBot menyahserialisasi badan respons kepada objek kelasSymbolPricetersuai (kami telah mencipta kelas ini untuk tujuan demonstrasi). - Meletakkan pesanan had jualan untuk simbol pada harga yang sedikit lebih tinggi daripada harga yang dinyatakan dalam API.
Perhatikan bahawa cBot ini adalah rekaan sepenuhnya. Walaupun kod akan dibina, ia tidak akan melaksanakan sebarang tindakan yang bermakna.
Cara menyerialisasi atau menyahserialisasi rentetan daripada fail JSON
Kod cBot kami merangkumi dua pernyataan using yang penting, iaitu System.Text.Json dan System.Text.Json.Serialization. Ruang nama ini mengandungi beberapa kaedah yang membolehkan penyerialisasian dan penyahserialisasian rentetan daripada fail JSON dengan mudah seperti JsonSerializer.Deserialize<T>().
Berikut ialah kod contoh cBot kami:
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 | |
Jika cBot ini mengakses API sebenar, ia akan berjaya melakukannya.
Laksanakan permintaan POST
Kita juga boleh mencipta cBot yang lebih maju yang mencapai matlamat berikut:
- Menghantar permintaan
POSTkepada API palsu yang sama dihttps://anotherForexApiExample.com/commodities/v1/getaccesstoken. Ini dilakukan untuk mendapatkan token akses untuk API ini. - Menyimpan token daripada badan respons dalam pemboleh ubah
token. - Melaksanakan permintaan
GETkepada API yang sama dengan nilai pemboleh ubahtokendihantar sebagai parameter pertanyaan dalam URI (https://anotherForexApiExample.com/commodities/v1/getprices). - Menggunakan penyerialisasian JSON (dibincangkan di atas), meletakkan pesanan henti beli pada harga yang sedikit lebih rendah daripada harga yang diterima daripada API.
Sekali lagi, perhatikan bahawa cBot ini tidak akan melaksanakan sebarang tindakan yang bermakna apabila dikompil. Ia wujud untuk tujuan contoh sahaja.
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 | |
Pelanggan WebSocket
API Algo membolehkan sesiapa sahaja menggunakan pelbagai perkhidmatan dan sumber web menggunakan sambungan websocket. Berbanding dengan protokol HTTP yang digunakan dalam ciri akses rangkaian, protokol WebSocket adalah lebih pantas dan membolehkan penerimaan data dalam masa nyata.
Gunakan pelanggan WebSocket
Menggunakan pelanggan WebSocket adalah mudah:
- Pilih perkhidmatan yang mendedahkan titik akhir untuk sambungan websocket
- Mulakan objek kelas
WebSocketClientOptionsdan tentukan parameternya untuk mengkonfigurasi pelanggan anda. - Mulakan objek kelas
WebSocketClientdan hantar pilihan yang dicipta sebelum ini ke pembina. - Gunakan kaedah
Connect()untuk menyambung ke sumber pilihan anda dan hantar data melalui kaedahSend(). - Gunakan pengendali acara
TextReceived()danBinaryReceived()untuk menetapkan apa yang perlu dilakukan oleh algo anda apabila pelanggan WebSocket menerima data baharu.
Di bawah, kita akan mencipta cBot ringkas yang menyambung ke perkhidmatan berita ekonomi khayalan melalui websocket. Apabila berita baharu disiarkan tentang simbol yang sedang dilampirkan cBot, algo akan menunjukkan kotak mesej yang mengandungi teks berita.
Nota
cBot ini adalah untuk tujuan contoh sahaja. Walaupun ia berjaya dibina, ia tidak melaksanakan sebarang tindakan apabila dilampirkan pada 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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | |
Seperti yang anda lihat, kod kami agak padat kerana kita boleh mengendalikan acara WebSocketClient.TextReceived untuk menunjukkan kotak mesej. Perhatikan bahawa cBot kami tidak meminta maklumat secara aktif daripada perkhidmatan. Sebaliknya, ia bertindak balas secara dinamik terhadap maklumat baharu yang dibekalkan kepadanya.
Amaran
Apabila pelanggan websocket anda terputus sambungan atas sebarang sebab (seperti ralat di bahagian pelayan yang menyebabkan selang keep-alive melebihi had), anda perlu memanggil kaedah WebSocketClient.Connect() sekali lagi. Untuk mengendalikan kes sedemikian secara programatik, gunakan acara WebSocketClient.Disconnected.
Faedah WebSocket
Oleh kerana websocket membolehkan tindak balas terhadap data baharu daripada web dalam masa nyata, ia adalah sempurna untuk integrasi dengan perkhidmatan pihak ketiga yang boleh memaklumkan algo anda secara autonomi tentang sesuatu. Berikut ialah beberapa contoh sumber web yang boleh anda gunakan dengan pelanggan WebSocket.
- Kalendar berita ekonomi. Apabila berita baharu dikeluarkan, algo anda boleh menunjukkan kotak mesej dengan maklumat utama.
- Perkhidmatan AI generatif. Apabila perkhidmatan AI mula membekalkan respons kepada arahan, anda boleh menunjukkan hasilnya perkataan demi perkataan dan bukannya menunggu respons lengkap.
- Aliran harga untuk semua simbol yang berkorelasi dengan yang dilampirkan algo. Apabila harga dikemas kini, ia ditunjukkan dengan segera dan tepat kepada pengguna algo.
- Rangkaian media sosial yang fokus pada dagangan. Apabila mesej baharu disiarkan tentang simbol tertentu, algo boleh menunjukkan kandungannya kepada pengguna.
Secara umum, sambungan websocket menawarkan faedah berikut berbanding HTTPS biasa:
- Sambungan WebSocket lebih cekap. Sebarang permintaan HTTP perlu mengandungi data tambahan seperti pengepala. Dengan websocket, sambungan anda ditubuhkan hanya sekali, selepas itu tiada keperluan untuk menghantar data berlebihan.
- Sambungan WebSocket menawarkan keserentakan yang lebih baik. Tiada keperluan untuk menghentikan operasi algo sehingga anda menunggu respons selepas menghantar permintaan HTTP. Dengan websocket, anda boleh menghantar dan menerima data pada bila-bila masa dan mengendalikannya secara tak segerak.
Pelanggan WebSocket membolehkan semua jenis algo berinteraksi secara dinamik dengan sumber web; interaksi ini lebih pantas dan lebih cekap berbanding menggunakan HTTP. Gunakan pelanggan WebSocket untuk membina algo berkuasa yang diintegrasikan dengan perkhidmatan pihak ketiga.
Akses rangkaian dan sifat AccessRights
Secara ringkas, enum AccessRights menentukan sama ada algoritma mempunyai akses kepada data yang luaran kepada cTrader seperti sistem fail mesin tempatan anda. Anda boleh mengetahui lebih lanjut dalam tutorial ini.
Menetapkan AccessRights kepada AccessRights.FullAccess membolehkan algo melaksanakan operasi lanjutan (seperti mendapatkan maklumat daripada registry Windows). Walau bagaimanapun, pengguna akhir mungkin mendapati memberikan akses penuh kepada cBot atau indikator berisiko kerana ia boleh menyebabkan pelanggaran data.
Hasilnya, AccessRights.None biasanya merupakan pilihan yang paling masuk akal jika anda ingin berkongsi produk algo anda dengan orang lain. Walau bagaimanapun, walaupun anda memilih pilihan ini, produk cTrader anda bebas untuk mengakses web. Penambahan fungsi akses rangkaian kepada API cTrader Algo bermakna cBot tidak lagi memerlukan sifat AccessRights ditetapkan kepada AccessRights.FullAccess untuk bekerja dengan sumber di Internet.
Ini sangat mengembangkan peluang yang dimiliki oleh pembangun algo semasa mengekod produk cTrader yang mereka ingin edarkan kepada pedagang lain.
Ringkasan
Kesimpulannya, akses rangkaian adalah ciri yang berkuasa yang membolehkan pengembangan besar bilangan operasi yang boleh dilakukan oleh algoritma anda tanpa memperkenalkan risiko tambahan.