Langkau tajuk talian

Model komunikasi

Pengenalan

FIX API menggunakan komunikasi berasaskan sesi. Sesi ditakrifkan sebagai komunikasi antara dua pihak: pemula (klien), pihak yang memulakan komunikasi, dan penerima (pelayan), pihak yang menerima permintaan sambungan daripada pemula.

Pelayan mengesahkan permintaan klien menggunakan mesej Log Masuk.

Protokol sesi FIX

Setiap sesi mengekalkan mesej dua hala antara klien dan pelayan cTrader. Sesi boleh merangkumi berbilang sambungan fizikal dan dikekalkan menggunakan nombor urutan.

Setiap mesej baharu dalam satu sesi menerima nombor urutan unik bermula dari 1 (satu). Kedua-dua pihak bergantung pada nombor urutan untuk mengekalkan komunikasi yang teratur. Mesej yang hilang dihantar semula dengan perjanjian dua hala antara kedua-dua pihak.

Aliran sesi tipikal:

  1. Klien memulakan sesi dengan mesej Log Masuk.
  2. Klien bertukar mesej aplikasi dengan pelayan.
  3. Sesi berakhir dengan mesej Log Keluar.

Kategori mesej protokol FIX cTrader

Seperti yang ditakrifkan dalam Protokol FIX, pelayan FIX cTrader menggunakan 2 tahap data yang berbeza: sistem dan aplikasi.

Sila ambil perhatian bahawa ini adalah set minimum mesej yang diperlukan untuk menyokong aliran kerja yang diperlukan dan tertakluk kepada perubahan dari semasa ke semasa apabila keperluan perniagaan dan standard FIX berkembang.

Mesej sistem (pentadbir)

  • Denyutan jantung (klien ↔ cTrader) – digunakan untuk memeriksa pautan komunikasi antara dua pihak.
  • Permintaan ujian (klien ↔ cTrader) – digunakan untuk menguji kesihatan pautan komunikasi.
  • Log masuk (klien → cTrader) – mesej pengesahan klien.
  • Log keluar (klien → cTrader) – penamatan normal sesi.
  • Permintaan hantar semula (klien ↔ cTrader) – permintaan untuk menghantar semula mesej aplikasi tertentu.
  • Tolak (klien ↔ cTrader) – kegagalan pengesahan tahap sesi.
  • Tetapan semula urutan (klien ↔ cTrader) – sekiranya berlaku masalah komunikasi, mesej yang hilang dipulihkan atau urutan ditetapkan semula untuk mengabaikan mesej yang hilang.

Mesej aplikasi

  • Permintaan data pasaran (klien → cTrader) – permintaan umum untuk data pasaran.
  • Segar semula tambahan data pasaran (klien ← cTrader) – respons kepada mesej permintaan data pasaran.
  • Pesanan tunggal baharu (klien → cTrader) – digunakan untuk menghantar pesanan secara elektronik kepada broker untuk pelaksanaan.
  • Laporan pelaksanaan (klien ← cTrader) – digunakan untuk menghantar maklumat status pesanan kepada klien FIX, seperti pengesahan, pengisian dan perubahan yang tidak diminta.
  • Tolak mesej perniagaan (klien ← cTrader) – digunakan untuk menolak permintaan klien FIX atas sebab bukan sesi.

Struktur mesej FIX

Bahagian ini menerangkan bagaimana mesej FIX API disusun, menghuraikan format mesej FIX dan membantu pengguna memahami konsep pasangan tag dan nilai.

Setiap mesej mesti mengandungi 3 bahagian:

  • Pengepala – setiap mesej pentadbiran atau aplikasi didahului oleh pengepala standard. Pengepala mengenal pasti jenis mesej, versi FIX, panjang mesej, destinasi, nombor urutan, asal dan masa.
  • Badan – kandungan dalam badan mesej ditentukan oleh jenis mesej yang ditakrifkan dalam pengepala.
  • Pengaki – setiap mesej, pentadbiran atau aplikasi diakhiri dengan pengaki standard. Pengaki digunakan untuk memisahkan mesej dan mengandungi perwakilan tiga digit aksara nilai CheckSum <10>.

Format mesej FIX

Mesej FIX adalah koleksi medan. Setiap medan adalah pasangan tag-nilai yang diformatkan sebagai {tag}={value}. Contohnya, 54=2, yang bermaksud jenis pesanan adalah jual.

Tag

  • FIX menggunakan tag yang telah ditentukan.
  • Setiap tag mewakili medan tertentu.
  • Setiap tag diberikan nombor yang telah ditentukan.
  • Spesifikasi FIX cTrader menyediakan senarai medan dan nombor tag yang sepadan.

Nilai

  • Nilai mewakili nilai tag yang diberikan kepadanya.
  • Nilai hanya boleh menjadi salah satu jenis data berikut: integer, titik terapung, aksara, masa, tarikh, data atau rentetan.

Semua mesej dalam cTrader FIX API bermula dengan 8=FIX.x.y, di mana x.y adalah versi Protokol FIX. Pada akhir setiap mesej harus ada medan 10=xyz, di mana xyz mewakili jumlah semua nilai binari dalam mesej yang dipanggil checksum.

Checksum membantu mengenal pasti sebarang masalah penghantaran, khususnya kehilangan paket dengan membolehkan penerima mengetahui jika ada bahagian mesej yang hilang.

Jika tag Symbol(55) digunakan dalam mesej FIX kepada cTrader/cServer, anda mesti menentukan ID simbol FIX. Nilai tersebut boleh berbeza antara broker. Anda boleh mencari medan ID Simbol FIX daripada aplikasi cTrader broker tersebut dalam tetingkap maklumat simbol.

Contoh mesej

8=FIX.4.4|9=126|35=A|34=1|49=theBroker.12345|57=TRADE|50=any_string|52=20170117-08:03:04|56=CSERVER|98=0|108=30|553=12345|554=passw0rd!|10=131|
Tag # Nama Tag Nilai Penerangan
8 BeginString 4.4 Versi FIX
9 BodyLength 102 Panjang badan mesej ialah 102 aksara
35 MsgType A Jenis mesej ialah Log masuk
34 MsgSeqNum 1 Nombor urutan mesej ialah 1
49 SenderCompI D broker.1047 ID pihak dagangan, di mana "broker" ialah BrokerUID unik yang disediakan oleh cTrader dan "1047" ialah pengecam numerik akaun dagangan.
57 TargetSubID TRADE Kelayakan sesi tambahan. Nilai yang mungkin ialah: "QUOTE","TRADE".
50 SenderSubID QUOTE Nilai yang ditetapkan digunakan untuk mengenal pasti pengasal mesej tertentu
52 SendingTime 20131129- 15:40:10.276 Masa penghantaran mesej ialah 29 November 2013 (YYYYMMDD) pada 15:40:10 dan 276 milisaat
56 TargetCompID CSERVER Sasaran mesej ialah CSERVER. Ia adalah satu-satunya nilai yang sah dalam cTrader FIX API.
98 EncryptMethod 0 Pada masa ini, satu-satunya nilai yang sah ialah "0" (sifar)= NONE_OTHER (penyulitan tidak digunakan)
108 HeartBtInt 30 Selang denyutan jantung dalam saat. Nilai ditetapkan dalam fail "config.properties" (sisi pelanggan) sebagai SERVER.POLLING.INTERVAL'. 30 saat ialah nilai selang lalai. Jika HeartBtInt ditetapkan kepada 0, tiada mesej denyutan jantung diperlukan.
553 Username 1047 ID pengguna numerik
554 Password MyPassword1 Kata laluan pengguna
10 CheckSum 000 Cara untuk mengira checksum adalah seperti berikut: menjumlahkan setiap bait mesej sehingga tetapi tidak termasuk medan checksum itu sendiri, kemudian mengubahnya menjadi nombor modulo 256 yang diawali dengan "0" untuk menerima nombor tiga digit.