Upgrade to Pro — share decks privately, control downloads, hide ads and more …

FIXエンジン作ってみた

 FIXエンジン作ってみた

Smartplusで運用開発するBaaSの1機能であるGo製のFIXエンジンについて。
FIXプロトコル、FIXエンジンの概要。BaaSにおけるFIXエンジンの運用。FIXエンジンの利用について。

061aa5e9730f0e513df7e861d0ab61cf?s=128

Yuji Tanioka

July 01, 2020
Tweet

Other Decks in Technology

Transcript

  1. FIXΤϯδϯ࡞ͬͯΈͨɻ Finatext × ΤϒϦʔ ʙελʔτΞοϓ࠷લઢͷGo ͷࣄྫʙ 2020/6/26 Smartplus ୩Ԭ

  2. ࣗݾ঺հ • ୩Ԭɹ༞ࢤʢͨʹ͓͔ɹΏ͏͡ʣ • 11೥ؒɺۜߦγεςϜ։ൃʹؔΘ͍͕ͬͯͨɺGoΛ΍Γͨͯ͘Finatextά ϧʔϓͷSmartplusʹɻ • ݱࡏ͸ɺ ূ݊ϓϥοτϑΥʔϜ BaaSͷ։ൃӡ༻ʹܞΘ͍ͬͯΔ

    • GoͰ͸ɺओʹޱ࠲։ઃؔ࿈ͷΤϯϋϯεͱ͔࣮ࢪதɻ΍ͬͱgo modΛཧղ ͖ͯͨ͠ͱ͜Ζɻ • झຯ͸ɺຊΛങ͏͜ͱɻʢੵΈຊɻʣ
  3. ͸͡Ίʹ • Fixnatextάϧʔϓͷূ݊ձࣾͰ͋ΔSmartplusͰ͸ɺূ݊ϓϥοτ ϑΥʔϜͰ͋ΔBaaSʢBroker as a Serviceʣͷӡ༻։ൃΛߦͳ͍ͬͯ Δɻ • BaaS͸΄΅͢΂ͯGo

    Ͱ։ൃɻ • Go Ͱ։ൃͨ͠BaaSͷػೳʹFIXΤϯδϯ͕͋Δɻ
  4. FIXΤϯδϯͱ͸ • FIX͸ɺFinancial Information eXchangeͷུɻ • FIXϓϩτίϧʹ४ڌͨ͠ϝοηʔδసૹΛߦ͏ιϑτ΢ΣΞɻ

  5. FIXϓϩτίϧͱ͸ • ۚ༥৘ใͷ΍ΓͱΓΛిࢠԽ͢Δ͜ͱΛ໨తʹ։ൃ͞Εͨϓϩτί ϧɻ • FIXϓϩτίϧͷ࢓༷͸ɺෳ਺ͷۚ༥ػؔͷؔ܎ऀͰߏ੒͞Εͨஂ ମɺFIX Protocol LimitedʢFPLʣ͕ॴ༗ɾ؅ཧ͍ͯ͠Δɻ •

    1992೥ɺถࠃגࣜചങΛର৅ͱͨ͠ిࢠऔҾͷඪ४ԽΛ໨తʹɺι ϩϞϯϒϥβʔζࣾɺϑΟσϦςΟࣾʹΑͬͯఆٛ͞Εͨɻ
  6. • ౤ࢿՈ͔Βͷגࣜͷ஫จΛBaaSͰड͚ɺFIXΤϯδϯʹͯ౦ژূ݊औ ҾॴͱిࢠऔҾʢגࣜͷൃ஫ɺ໿ఆͷड৴ʣ͍ͯ͠Δɻ BaaSͰͷFIXΤϯδϯͷར༻ גࣜൃ஫ #BB4 '*9 Τ ϯ δ

    ϯ औ࣍ઌ '*9 Τ ϯ δ ϯ ౦ژऔҾূ݊ॴ גࣜൃ஫ גࣜൃ஫ ໿ఆͨ͠ ໿ఆͨ͠ ໿ఆͨ͠ FIXϓϩτίϧ
  7. FIXϓϩτίϧɹ • BaaSͰ͸ɺFIXΤϯδϯؒΛTCPͰ௨৴͢Δɻ • BaaSͰ͸ɺFIXϓϩτίϧͷόʔδϣϯ4.2Λར༻͍ͯ͠Δ • LogonΛ࠷ॳʹૹ৴͢ΔଆͷFIXΤϯδϯΛΠχγΤʔλɺड৴͢Δ ଆΛΞΫηϓλͱΑͿɻ • ϝοηʔδຖʹ௨൪͕͋Γɺϝοηʔδͷ࠶ૹ͕Մೳ

    • FIXΤϯδϯಉ࢜ͷࢮ׆؂ࢹ͕Մೳ
  8. FIXϓϩτίϧɹʙిจϑΥʔϚοτʙ • tagܗࣜͷిจϑΥʔϚοτ • tagʹ͸ͦΕͧΕҙຯ͕͋Δɻtag8:Fixόʔδϣϯ etc • ”tag൪߸”=”value” ͷܗࣜ •

    ۠੾Γ͸ɺ0x01 • ʢαϯϓϧʣLogonϝοηʔδɻ۠੾Γ͸”|”Ͱදࣔɻ 8=FIX.4.2|9=69|35=A|34=1|49=SENDER|52=20200608-22:36:08.683|56=RECVER|98=1|108=30|10=040|
  9. FIXϓϩτίϧɹʙ؅ཧܥిจϑϩʔʙ ΞΫηϓλ ΠχγΤʔλ Logon Logout Logout Logon ۀ຿ܥిจ ۀ຿ܥిจ ۀ຿ܥిจ

    HeartBeat TestRequest HeartBeat ೝূ0,ͷ৔߹ -PHPOΛૹ৴ 5FTU3FRVFTUΛड৴͢ Δͱ)FBSU#FBUΛૹ৴ ҰఆִؒͰ)FBSU#FBU Λૹ৴ ૬खଆ͔ΒҰఆ࣌ؒ಺ ʹ)FBSU#FBU͕དྷͳ͍ ৔߹ʹ͸5FTU3FRVFTU Λૹ৴
  10. FIXϓϩτίϧɹʙۀ຿ܥిจϑϩʔʙ ΞΫηϓλ ΠχγΤʔλ ड෇ గਖ਼ड෇ గਖ਼஫จ ໿ఆ ৽ن஫จ ໏ฑ גΛ

    ԁͰCVZ஫จ ࢢ৔ʹͯ໏ฑ͕ ԁͰג໿ఆ ໏ฑ גΛ ԁͰCVZ஫จʹగਖ਼ గਖ਼׬ྃ
  11. FIXϓϩτίϧɹʙ࠶ૹͷ࢓૊Έʙ ΞΫηϓλ ΠχγΤʔλ Logon(seqno=1) Logon(seqno=1) ۀ຿ܥిจ(seqno=2) ۀ຿ܥిจ(seqno=3) ۀ຿ܥిจ(seqno=4) ۀ຿ܥిจ(seqno=5) Resend

    Request(seqno=2, BeginSeqno=4) ۀ຿ܥిจ(seqno=4, 43=Y) ۀ຿ܥిจ(seqno=5, 43=Y) TFROP͕དྷͣɺ TFROP͕͖ͨͰ࠶ ૹґཔ TFROP͸ͱͲ͔ͣ ࠶ૹґཔ͕͖ͨͷͰॏ ෳϑϥά  Ληοτ ͯ͠࠶ૹ ·ͱΊͯ࠶ૹґཔɺ࠶ૹεΩοϓɺ௨൪ϦηοτཁٻͳͲ΋͋Γɻ
  12. BaaSͰͷγεςϜߏ੒ %# ஫จड෇ '*9XSJUFS 0SEFSOPUJpFS '*9QSPYZ %# .2 BaaS ᶃड஫

    ᶄDB؅ཧ ᶅFIXۀ຿ܥిจ࡞੒ ᶆFIXΤϯδϯ ᶇૹड৴ిจ؅ཧ ᶈड৴ۀ຿ܥిจॲཧ ᶉরձ ᶊཤྺࢀর ࢢ৔ FIXϓϩτίϧ
  13. BaaSͰͷFIXΤϯδϯͷӡߦ • ฏ೔ 7:30ࠒɹ FIXΤϯδϯΛىಈ͠ɺΞΫηϓλʹLogonΛૹ৴ • ฏ೔ 8:00ࠒɹ ࢢ৔΁ൃ஫։࢝ •

    ฏ೔ 9:00ɹɹ ࢢ৔औҾ։࢝ʢ໿ఆΛड৴࢝͠ΊΔʣ • ฏ೔11:30ɹɹલ৔ऴྃʢ໿ఆ͸ड৴͠ͳ͘ͳΔʣ • ฏ೔12:30ɹɹޙ৔։࢝ʢ໿ఆͷड৴࠶։ʣ • ฏ೔15:00ɹɹࢢ৔ͰͷऔҾऴྃ • ฏ೔15:15ࠒɹdone for day ిจΛड৴ • ฏ೔16:00ࠒɹLogout͠FIXΤϯδϯΛఀࢭ
  14. ͦͷଞ • GoͰTCPૹड৴Λهड़͍ͯ͠Δɻ • ૹड৴ΛgoroutineͱchannelͰฒߦॲཧɻ • ిจ࠶ૹͷͨΊͷిจอ࣋ʹDatabaseΛར༻͍ͯ͠Δɻ • ϐʔΫ࣌ؒ͸ɺฏ೔8:00ʙ8:05Ͱ਺ઍ݅΄Ͳͷ৽ن஫จΛૹ৴͍ͯ͠ Δɻ

  15. ΍ͬͯΈͯ • Ҏલ΋FIXϓϩτίϧͱࣅͨϓϩτίϧΛར༻͍ͯͨ͠ͷͰɺ਌ۙײ ͕͋ͬͨ • ϚΠΫϩαʔϏεͰͷτϥϯβΫγϣϯ؅ཧͷ೉͠͞ • Մ༻ੑ͸ɺࠓޙΑΓΑ͍͖͍ͯͨ͘͠ͱ͜Ζɻ • TCP௨৴ΛϓϩάϥϜͰॻ͘͜ͱʹ͸ͪΐͬͱͨ͠ίπ͕͍Δɻ

  16. ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ