โมเดลการสื่อสาร¶
บทนำ ¶
FIX API ใช้การสื่อสารแบบเซสชัน เซสชันถูกกำหนดเป็นการสื่อสารระหว่างสองฝ่าย: ผู้เริ่มต้น (ไคลเอนต์) ฝ่ายที่เริ่มการสื่อสาร และผู้รับ (เซิร์ฟเวอร์) ฝ่ายที่รับคำขอการเชื่อมต่อจากผู้เริ่มต้น
เซิร์ฟเวอร์ตรวจสอบคำขอของไคลเอนต์โดยใช้ข้อความ Logon
โปรโตคอลเซสชัน FIX ¶
แต่ละเซสชันรักษาข้อความสองทิศทางระหว่างไคลเอนต์และเซิร์ฟเวอร์ cTrader เซสชันสามารถรวมการเชื่อมต่อทางกายภาพหลายรายการและถูกรักษาไว้โดยใช้หมายเลขลำดับ
ทุกข้อความใหม่ภายในเซสชันเดียวจะได้รับหมายเลขลำดับที่ไม่ซ้ำกันเริ่มจาก 1 (หนึ่ง) ทั้งสองฝ่ายอาศัยหมายเลขลำดับเพื่อรักษาการสื่อสารที่เป็นระเบียบ ข้อความที่หายไปจะถูกส่งใหม่ด้วยข้อตกลงสองฝ่ายระหว่างทั้งสองฝ่าย
ลำดับการทำงานของเซสชันทั่วไป:
- ไคลเอนต์เริ่มเซสชันด้วยข้อความ Logon
- ไคลเอนต์แลกเปลี่ยนข้อความแอปพลิเคชันกับเซิร์ฟเวอร์
- เซสชันจบลงด้วยข้อความ Logout
หมวดหมู่ข้อความโปรโตคอล FIX ของ cTrader ¶
ตามที่กำหนดไว้ในโปรโตคอล FIX เซิร์ฟเวอร์ FIX ของ cTrader ใช้ข้อมูล 2 ระดับที่แตกต่างกัน: ระบบและแอปพลิเคชัน
โปรดทราบว่านี่เป็นชุดข้อความขั้นต่ำที่จำเป็นเพื่อรองรับขั้นตอนการทำงานที่จำเป็นและอาจมีการเปลี่ยนแปลงเมื่อเวลาผ่านไปตามความต้องการทางธุรกิจและมาตรฐาน FIX ที่พัฒนาขึ้น
ข้อความระบบ (ผู้ดูแลระบบ) ¶
- Heartbeat (ไคลเอนต์ ↔ cTrader) – ใช้เพื่อตรวจสอบการเชื่อมต่อระหว่างสองฝ่าย
- Test request (ไคลเอนต์ ↔ cTrader) – ใช้เพื่อทดสอบสุขภาพของการเชื่อมต่อ
- Logon (ไคลเอนต์ → cTrader) – ข้อความยืนยันตัวตนของไคลเอนต์
- Logon (ไคลเอนต์ → cTrader) – การยุติเซสชันตามปกติ
- Resend request (ไคลเอนต์ ↔ cTrader) – คำขอให้ส่งข้อความแอปพลิเคชันบางอย่างใหม่
- Reject (ไคลเอนต์ ↔ cTrader) – การตรวจสอบระดับเซสชันล้มเหลว
- Sequence reset (ไคลเอนต์ ↔ cTrader) – ในกรณีที่มีปัญหาการสื่อสาร ข้อความที่หายไปจะถูกกู้คืนหรือลำดับจะถูกรีเซ็ตเพื่อละเว้นข้อความที่หายไป
ข้อความแอปพลิเคชัน ¶
- Market data request (ไคลเอนต์ → cTrader) – คำขอทั่วไปสำหรับข้อมูลตลาด
- Market data incremental refresh (ไคลเอนต์ ← cTrader) – การตอบสนองต่อข้อความคำขอข้อมูลตลาด
- New order single (ไคลเอนต์ → cTrader) – ใช้เพื่อส่งคำสั่งทางอิเล็กทรอนิกส์ไปยังโบรกเกอร์เพื่อดำเนินการ
- Execution report (ไคลเอนต์ ← cTrader) – ใช้เพื่อส่งข้อมูลสถานะคำสั่งไปยังไคลเอนต์ FIX เช่น การยืนยัน การเติมเต็ม และการเปลี่ยนแปลงที่ไม่ได้ร้องขอ
- Business message reject (ไคลเอนต์ ← cTrader) – ใช้เพื่อปฏิเสธคำขอของไคลเอนต์ FIX ด้วยเหตุผลที่ไม่เกี่ยวกับเซสชัน
โครงสร้างข้อความ FIX ¶
ส่วนนี้อธิบายวิธีการประกอบข้อความ FIX API อธิบายรูปแบบข้อความ FIX และช่วยให้ผู้ใช้เข้าใจแนวคิดของคู่แท็กและค่า
แต่ละข้อความต้องประกอบด้วย 3 ส่วน:
- ส่วนหัว – ข้อความการจัดการหรือแอปพลิเคชันแต่ละรายการจะมีส่วนหัวมาตรฐานนำหน้า ส่วนหัวระบุประเภทข้อความ เวอร์ชัน FIX ความยาวข้อความ ปลายทาง หมายเลขลำดับ ต้นทาง และเวลา
- เนื้อหา – เนื้อหาในส่วนเนื้อหาของข้อความถูกกำหนดโดยประเภทข้อความที่ระบุในส่วนหัว
- ส่วนท้าย – ข้อความแต่ละรายการ ทั้งการจัดการหรือแอปพลิเคชัน จะจบลงด้วยส่วนท้ายมาตรฐาน ส่วนท้ายใช้เพื่อแยกข้อความและประกอบด้วยตัวแทนอักขระสามหลักของค่า
CheckSum <10>
รูปแบบข้อความ FIX ¶
ข้อความ FIX คือการรวมกันของฟิลด์ แต่ละฟิลด์เป็นคู่แท็ก-ค่าที่มีรูปแบบเป็น {tag}={value} ตัวอย่างเช่น 54=2 ซึ่งหมายความว่าประเภทคำสั่งคือขาย
แท็ก ¶
- FIX ใช้แท็กที่กำหนดไว้ล่วงหน้า
- แต่ละแท็กแทนฟิลด์เฉพาะ
- แต่ละแท็กได้รับหมายเลขที่กำหนดไว้ล่วงหน้า
- ข้อกำหนด FIX ของ cTrader ให้รายการฟิลด์และหมายเลขแท็กที่เกี่ยวข้อง
ค่า ¶
- ค่าแทนค่าของแท็กที่กำหนดให้กับมัน
- ค่าสามารถเป็นได้เพียงหนึ่งในประเภทข้อมูลต่อไปนี้เท่านั้น: จำนวนเต็ม ทศนิยม อักขระ เวลา วันที่ ข้อมูล หรือสตริง
ข้อความทั้งหมดภายใน cTrader FIX API จะเริ่มต้นด้วย 8=FIX.x.y โดย x.y คือเวอร์ชันของโปรโตคอล FIX ท้ายทุกข้อความควรมีฟิลด์ 10=xyz โดย xyz แทนผลรวมของค่าไบนารีทั้งหมดในข้อความที่เรียกว่า checksum
Checksum ช่วยในการระบุปัญหาการส่งข้อมูลใดๆ โดยเฉพาะการสูญหายของแพ็คเก็ตโดยอนุญาตให้ผู้รับทราบว่ามีส่วนใดของข้อความหายไปหรือไม่
หากแท็ก Symbol(55) ถูกใช้ในข้อความ FIX ไปยัง cTrader/cServer คุณต้องระบุ FIX symbol ค่านั้นอาจแตกต่างกันไปในแต่ละโบรกเกอร์ คุณสามารถหาฟิลด์ ID สัญลักษณ์ FIX ได้จากแอปพลิเคชัน cTrader ของโบรกเกอร์นั้นในหน้าต่างข้อมูลสัญลักษณ์
ตัวอย่างข้อความ ¶
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|
| แท็ก # | ชื่อแท็ก | ค่า | คำอธิบาย |
|---|---|---|---|
| 8 | BeginString | 4.4 | เวอร์ชัน FIX |
| 9 | BodyLength | 102 | ความยาวของเนื้อความคือ 102 ตัวอักษร |
| 35 | MsgType | A | ประเภทข้อความคือ Logon |
| 34 | MsgSeqNum | 1 | หมายเลขลำดับข้อความคือ 1 |
| 49 | SenderCompI | D | broker.1047 ID ของฝ่ายเทรด โดย "broker" คือ BrokerUID ที่ไม่ซ้ำกันที่ cTrader จัดเตรียมให้ และ "1047" คือตัวระบุตัวเลขของบัญชีเทรด |
| 57 | TargetSubID | TRADE | ตัวระบุเซสชันเพิ่มเติม ค่าที่เป็นไปได้คือ: "QUOTE","TRADE" |
| 50 | SenderSubID | QUOTE | ค่าที่กำหนดใช้เพื่อระบุผู้สร้างข้อความเฉพาะ |
| 52 | SendingTime | 20131129- 15:40:10.276 | เวลาของการส่งข้อความคือ 29 พฤศจิกายน 2013 (YYYYMMDD) เวลา 15:40:10 และ 276 มิลลิวินาที |
| 56 | TargetCompID | CSERVER | เป้าหมายของข้อความคือ CSERVER เป็นค่าที่ถูกต้องเพียงค่าเดียวภายใน cTrader FIX API |
| 98 | EncryptMethod | 0 | ปัจจุบัน ค่าที่ถูกต้องเพียงค่าเดียวคือ "0" (ศูนย์)= NONE_OTHER (ไม่ได้ใช้การเข้ารหัส) |
| 108 | HeartBtInt | 30 | ช่วงเวลาของ Heartbeat เป็นวินาที ค่าถูกตั้งในไฟล์ "config.properties" (ฝั่งไคลเอนต์) เป็น SERVER.POLLING.INTERVAL' 30 วินาทีเป็นค่าช่วงเวลาเริ่มต้น หาก HeartBtInt ถูกตั้งเป็น 0 จะไม่จำเป็นต้องมีข้อความ heart beat |
| 553 | Username | 1047 | ID ผู้ใช้แบบตัวเลข |
| 554 | Password | MyPassword1 | รหัสผ่านของผู้ใช้ |
| 10 | CheckSum | 000 | วิธีการคำนวณ checksum มีดังนี้: รวมทุกไบต์ของข้อความจนถึงแต่ไม่รวมฟิลด์ checksum เอง จากนั้นแปลงเป็นตัวเลขมอดูโล 256 โดยมีเลข "0" นำหน้าเพื่อให้ได้ตัวเลขสามหลัก |