İ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ışı:
- İstemci, oturuma bir Oturum Açma mesajıyla başlar.
- İstemci, sunucuyla uygulama mesajları alışverişinde bulunur.
- 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. |