Ana içeriğe geç

İletişim modeli

Giriş

FIX API, oturum tabanlı iletişim kullanır. Oturum, iki taraf arasındaki iletişim olarak tanımlanır: iletişimi başlatan taraf olan başlatıcı (istemci) ve başlatıcıdan gelen bağlantı isteğini alan taraf olan kabul eden (sunucu).

Sunucu, Oturum Açma mesajını kullanarak istemci isteklerini doğrular.

FIX oturum protokolü

Her oturum, istemci ve cTrader sunucusu arasında çift yönlü mesajları korur. Bir oturum birden çok fiziksel bağlantı içerebilir ve sıra numaraları kullanılarak korunur.

Tek bir oturumdaki her yeni mesaj, 1'den (bir) başlayarak benzersiz bir sıra numarası alır. Her iki taraf da düzenli iletişimi sürdürmek için sıra numaralarına güvenir. Eksik mesajlar, her iki taraf arasındaki ikili bir anlaşma ile yeniden iletilir.

Tipik oturum akışı:

  1. İstemci, oturuma bir Oturum Açma mesajıyla başlar.
  2. İstemci, sunucuyla uygulama mesajları alışverişinde bulunur.
  3. Oturum, bir Oturumu Kapat mesajıyla sona erer.

cTrader FIX Protokolü mesaj kategorileri

FIX Protokolü'nde tanımlandığı gibi, cTrader FIX sunucusu 2 farklı veri düzeyi kullanır: sistem ve uygulama.

Lütfen bunun, gerekli iş akışlarını desteklemek için gereken minimum mesaj kümesi olduğunu ve hem iş ihtiyaçları hem de FIX standardı geliştikçe zaman içinde değişebileceğini unutmayın.

Sistem (yönetim) mesajları

  • Kalp atışı (istemci ↔ cTrader) – iki taraf arasındaki iletişim bağlantısını kontrol etmek için kullanılır.
  • Test isteği (istemci ↔ cTrader) – iletişim bağlantısının sağlığını test etmek için kullanılır.
  • Oturum açma (istemci → cTrader) – istemci kimlik doğrulama mesajı.
  • Oturum açma (istemci → cTrader) – oturumun normal şekilde sonlandırılması.
  • Yeniden gönderme isteği (istemci ↔ cTrader) – belirli uygulama mesajlarını yeniden iletme isteği.
  • Reddetme (istemci ↔ cTrader) – oturum düzeyi doğrulama hatası.
  • Sıra sıfırlama (istemci ↔ cTrader) – iletişim sorunları durumunda eksik mesajlar kurtarılır veya eksik mesajları yok saymak için sıra sıfırlanır.

Uygulama mesajları

  • Piyasa verisi isteği (istemci → cTrader) – piyasa verileri için genel istek.
  • Piyasa verisi artımlı yenileme (istemci ← cTrader) – bir piyasa verisi isteği mesajına yanıtlar.
  • Yeni emir tek (istemci → cTrader) – emirleri yürütme için bir broker'a elektronik olarak göndermek için kullanılır.
  • Yürütme raporu (istemci ← cTrader) – bir FIX istemcisine onaylar, dolgular ve istenmeyen değişiklikler gibi emir durumu bilgilerini göndermek için kullanılır.
  • İş mesajı reddetme (istemci ← cTrader) – oturum dışı nedenlerle bir FIX istemci isteğini reddetmek için kullanılır.

FIX mesaj yapısı

Bu bölüm, FIX API mesajının nasıl oluşturulduğunu açıklar, FIX mesaj biçimini açıklar ve kullanıcıların etiket ve değer çifti kavramını anlamalarına yardımcı olur.

Her mesaj 3 bölüm içermelidir:

  • Başlık – her yönetim veya uygulama mesajından önce standart bir başlık gelir. Başlık, mesaj türünü, FIX sürümünü, mesaj uzunluğunu, hedefi, sıra numarasını, kaynağı ve zamanı tanımlar.
  • Gövde – mesajın gövdesindeki içerik, başlıkta tanımlanan mesaj türü tarafından belirtilir.
  • Altbilgi – her mesaj, yönetim veya uygulama, standart bir altbilgi ile sonlandırılır. Altbilgi, mesajları ayırmak için kullanılır ve CheckSum <10> değerinin üç basamaklı karakter gösterimini içerir.

FIX mesaj biçimi

Bir FIX mesajı, alanlardan oluşan bir koleksiyondur. Her alan, {etiket}={değer} olarak biçimlendirilmiş bir etiket-değer çiftidir. Örneğin, 54=2, bu, emir türünün sat olduğu anlamına gelir.

Etiket

  • FIX, önceden tanımlanmış etiketler kullanır.
  • Her etiket belirli bir alanı temsil eder.
  • Her etikete önceden tanımlanmış bir numara atanır.
  • cTrader FIX spesifikasyonu, alanların ve karşılık gelen etiket numaralarının bir listesini sağlar.

Değer

  • Değerler, kendisine atanan etiketin değerini temsil eder.
  • Değerler yalnızca aşağıdaki veri türlerinden biri olabilir: tamsayı, kayan nokta, karakter, saat, tarih, veri veya dize.

cTrader FIX API içindeki tüm mesajlar 8=FIX.x.y ile başlar, burada x.y FIX Protokolünün sürümüdür. Her mesajın sonunda, xyz'nin sağlama toplamı adı verilen mesajdaki tüm ikili değerlerin toplamını temsil ettiği bir 10=xyz alanı olmalıdır.

Sağlama toplamı, alıcının mesajın herhangi bir bölümünün eksik olup olmadığını bilmesini sağlayarak, özellikle paket kaybı olmak üzere tüm iletim sorunlarını belirlemeye yardımcı olur.

Symbol(55) etiketi, cTrader/cServer'a bir FIX mesajında kullanılıyorsa, FIX sembol kimliğini belirtmelisiniz. Bu değer, brokerler arasında farklılık gösterebilir. FIX Sembol Kimliği alanını, o brokerin cTrader uygulamasındaki sembol bilgileri penceresinde bulabilirsiniz.

Mesaj örneği

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|
Etiket # Etiket adı Değer Açıklama
8 BeginString 4.4 FIX sürümü
9 BodyLength 102 Mesaj gövde uzunluğu 102 karakterdir
35 MsgType A Mesaj türü Oturum Açma'dır
34 MsgSeqNum 1 Mesaj sıra numarası 1'dir
49 SenderCompI D broker.1047 işlem tarafının kimliği, burada "broker" cTrader tarafından sağlanan benzersiz BrokerUID ve "1047" işlem hesabının sayısal tanımlayıcısıdır.
57 TargetSubID TRADE Ek oturum niteleyicisi. Olası değerler: "QUOTE","TRADE".
50 SenderSubID QUOTE Belirli mesaj göndericisini tanımlamak için kullanılan atanmış değer
52 SendingTime 20131129- 15:40:10.276 Mesaj iletim zamanı 29 Kasım 2013 (YYYYMMDD) saat 15:40:10 ve 276 milisaniyedir
56 TargetCompID CSERVER Mesaj hedefi CSERVER'dır. cTrader FIX API içinde tek geçerli değerdir.
98 EncryptMethod 0 Şu anda, tek geçerli değer "0" (sıfır)= NONE_OTHER (şifreleme kullanılmıyor)
108 HeartBtInt 30 Saniye cinsinden kalp atışı aralığı. Değer, "config.properties" dosyasında (istemci tarafı) 'SERVER.POLLING.INTERVAL' olarak ayarlanır. 30 saniye varsayılan aralık değeridir. HeartBtInt 0 olarak ayarlanırsa, kalp atışı mesajı gerekmez.
553 Kullanıcı adı 1047 Sayısal kullanıcı kimliği
554 Şifre MyPassword1 Kullanıcı parolası
10 CheckSum 000 Sağlama toplamını hesaplama yöntemi şöyledir: mesajın sağlama toplamı alanı dahil olmamak üzere her baytını toplamak, ardından üç haneli bir sayı elde etmek için "0" ile önekli bir modulo 256 sayısına dönüştürmek.