Skip to content

Diomchen/crypto-trading-system

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

7 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Crypto Trading System

ๅŸบๆœฌ็š„ไบคๆ˜“็ณป็ปŸ็ป“ๆž„๏ผˆไพ›ๅญฆไน ๏ผ‰

้กน็›ฎๆก†ๆžถ

structure

ๅŠŸ่ƒฝๆจกๅ—่ฎพ่ฎก

ๆ’ฎๅˆๅผ•ๆ“Ž

ๆ’ฎๅˆๅผ•ๆ“Žไธป่ฆ่ดŸ่ดฃๅ…ฌๅนณ็š„ๆ’ฎๅˆไนฐๅ–่ฎขๅ•ใ€ๅฎž็Žฐๅ…ฌๅนณไบคๆ˜“ๆ’ฎๅˆใ€‚

ไธ€ใ€ๅŸบ็ก€ๆฆ‚ๅฟต

ไนฐๅ•็ฐฟ๏ผˆBids๏ผ‰๏ผš ๆ‰€ๆœ‰ไนฐๅฎถๆ„ฟๆ„ไปฅไธๅŒไปทๆ ผไนฐๅ…ฅ็š„ๅง”ๆ‰˜ๅ•๏ผŒไปทๆ ผไปŽ้ซ˜ๅˆฐไฝŽ๏ผˆๅคงๆ นๅ †๏ผ‰

ๅ–ๅ•็ฐฟ๏ผˆAsks๏ผ‰๏ผš ๆ‰€ๆœ‰ไนฐๅฎถๆ„ฟๆ„ไปฅไธๅŒไปทๆ ผไนฐๅ…ฅ็š„ๅง”ๆ‰˜ๅ•๏ผŒไปทๆ ผไปŽไฝŽๅˆฐ้ซ˜๏ผˆๅฐๆ นๅ †๏ผ‰

ไปทๅทฎ๏ผˆSpread๏ผ‰๏ผš ๅชๆœ‰ไนฐๅ•ไปท โ‰ฅ ๅ–ๅ•ไปทๆ—ถ๏ผŒๆ‰ไผšๅ‘็”Ÿๆ’ฎๅˆ

**ไปทๆ ผ-ๆ—ถ้—ดไผ˜ๅ…ˆๅŽŸๅˆ™๏ผš**ๆ’ฎๅˆๆ—ถ๏ผŒๅŒน้…ไปทๆ ผๆœ€ไผ˜็š„่ฎขๅ•๏ผˆๅฆ‚ไนฐๅ•ไผ˜ๅ…ˆๅŒน้…ๆœ€ไฝŽๅ–ไปท๏ผŒๅ–ๅ•ไผ˜ๅ…ˆๅŒน้…ๆœ€้ซ˜ไนฐไปท๏ผ‰๏ผŒๅฆ‚ๆžœๆœ‰ๅคšไธช่ฎขๅ•ไปทๆ ผ็›ธๅŒ๏ผŒๅˆ™ไผ˜ๅ…ˆๅŒน้…ๆœ€ๆ—ฉๆไบค็š„่ฎขๅ•๏ผˆๅณโ€œๅ…ˆๅˆฐๅ…ˆๅพ—โ€๏ผ‰

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                        ่ฎขๅ•็ฐฟ Order Book๏ผˆ่กจๆ ผๅฏนๆฏ”๏ผ‰                  โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚  ไปทๆ ผไผ˜ๅ…ˆ    โ”‚  ๆ—ถ้—ดไผ˜ๅ…ˆ   โ”‚   ๆ–นๅ‘      โ”‚   ไปทๆ ผ      โ”‚  ๆ•ฐ้‡(ๆ‰‹)     โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚             โ”‚             โ”‚    ASK      โ”‚   30.50     โ”‚     200      โ”‚
โ”‚             โ”‚             โ”‚    ASK      โ”‚   30.40     โ”‚     500      โ”‚
โ”‚             โ”‚             โ”‚    ASK      โ”‚   30.30     โ”‚     300      โ”‚
โ”‚   ๆœ€ไฝŽๅ–ไปท   โ”‚ ๆœ€ๆ—ฉๆŒ‚ๅ•    โ”‚    ASK      โ”‚   30.20     โ”‚     400 โ†ๅ–ไธ€โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚   ๆœ€้ซ˜ไนฐไปท   โ”‚ ๆœ€ๆ—ฉๆŒ‚ๅ•    โ”‚    BID      โ”‚   30.10     โ”‚     300 โ†ไนฐไธ€โ”‚
โ”‚             โ”‚             โ”‚    BID      โ”‚   30.00     โ”‚     600      โ”‚
โ”‚             โ”‚             โ”‚    BID      โ”‚   29.90     โ”‚     200      โ”‚
โ”‚             โ”‚             โ”‚    BID      โ”‚   29.80     โ”‚     100      โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
ไปทๅทฎ Spread = 30.10 - 30.20 = -0.10๏ผŒไธไผšๆˆไบค๏ผŒ็ญ‰ๅพ…ๆ–ฐ็š„ๅ•ๅญ่ฟ›ๆฅ

ๅธ‚ไปทๅ•๏ผˆLimit Order๏ผ‰๏ผš

  • ๆŒ‡ๅฎšไปทๆ ผ๏ผšๅช่ƒฝๅœจๆŒ‡ๅฎšไปทๆ ผๆˆ–ๆ›ดไผ˜็š„ไปทๆ ผๆˆไบค
  • ๅฏ่ƒฝ้ƒจๅˆ†ๆˆไบค๏ผšๅฏนๆ‰‹็›˜ไธๅคŸ
  • ้œ€่ฆ็ญ‰ๅพ…๏ผšไผš็•™ๅœจ่ฎขๅ•็ฐฟ้‡Œ

้™ไปทๅ•๏ผˆMarket Order๏ผ‰๏ผš

  • ็ซ‹ๅณๆˆไบค๏ผšไปฅๅฝ“ๅ‰ๅธ‚ๅœบๆœ€ไผ˜ไปทๆ ผ็ซ‹ๅณๆˆไบค
  • ๅ…จ้ƒจๆˆไบคๆˆ–ๆ‹’็ป
  • ไธ็ญ‰ๅพ…๏ผšไธไผš็•™ๅœจ่ฎขๅ•็ฐฟ้‡Œ

ไบŒใ€่ฎพ่ฎก

ๅŠŸ่ƒฝ็ป„ๆˆ
  1. ่ฎขๅ•็ฐฟ็ฎก็†ๆจกๅ—๏ผš ็ปดๆŠคๆ‰€ๆœ‰ๆœชๆˆไบค็š„่ฎขๅ•
  2. ๆ’ฎๅˆ็ฎ—ๆณ•ๆจกๅ—๏ผš ๅฎž็Žฐไปทๆ ผ-ๆ—ถ้—ดไผ˜ๅ…ˆๆ’ฎๅˆๅŽŸๅˆ™

็ป“ๆž„่ฎพ่ฎก

ๆ•ดไฝ“ๆก†ๆžถ่ฎพ่ฎก๏ผš

  • ่ฎขๅ•้€š้“๏ผˆOrder Chan๏ผ‰๏ผš็”จๆˆท่ฎขๅ•ๅ…ฅๅฃ
  • ไบคๆ˜“้€š้“๏ผˆTrade Chan๏ผ‰๏ผšๆ’ฎๅˆๆˆๅŠŸ่ฎขๅ•ๅ‡บๅฃ
  • ๅพช็Žฏๆ’ฎๅˆๅค„็†๏ผˆProcess Loop๏ผ‰๏ผšๆ’ฎๅˆ็ฌฆๅˆ่ง„ๅˆ™็š„่ฎขๅ•
  • ่ฎขๅ•็ฐฟ๏ผˆOrder Books Map๏ผ‰๏ผš็ฎก็†ๆœชๆˆไบค็š„ๅ„ๅธๅฏน็š„ไบคๆ˜“็ฐฟ

ๅ•ไธช่ฎขๅ•็ฐฟ่ฎพ่ฎก๏ผš

ๅฆ‚ไธ‹ๅ›พๆ‰€่ง๏ผŒๅ•ไธช่ฎขๅ•็ฐฟๅˆ†ไธบไนฐๅ•็ฐฟ๏ผˆBuyOrders๏ผ‰ใ€ๅ–ๅ•็ฐฟ๏ผˆSellOrders๏ผ‰ใ€‚

OrderBook (BTC/USDT)
โ”œโ”€โ”€ BuyOrders (ๆœ€ๅคงๅ †)
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚   โ”‚ Price: $110,100 โ”‚ โ† ๅ †้กถ (ๆœ€้ซ˜ไปท)
โ”‚   โ”‚ Amount: 0.5 BTC โ”‚
โ”‚   โ”‚ Time: 10:01:00  โ”‚
โ”‚   โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚   โ”‚ Price: $110,099 โ”‚
โ”‚   โ”‚ Amount: 1.0 BTC โ”‚
โ”‚   โ”‚ Time: 10:00:30  โ”‚
โ”‚   โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚   โ”‚ Price: $110,098 โ”‚
โ”‚   โ”‚ Amount: 0.8 BTC โ”‚
โ”‚   โ”‚ Time: 10:01:00  โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”‚
โ””โ”€โ”€ SellOrders (ๆœ€ๅฐๅ †)
    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
    โ”‚ Price: $110,101 โ”‚ โ† ๅ †้กถ (ๆœ€ไฝŽไปท)
    โ”‚ Amount: 0.3 BTC โ”‚
    โ”‚ Time: 10:00:45  โ”‚
    โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
    โ”‚ Price: $110,102 โ”‚
    โ”‚ Amount: 0.7 BTC โ”‚
    โ”‚ Time: 10:01:15  โ”‚
    โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
    โ”‚ Price: $110,105 โ”‚
    โ”‚ Amount: 1.2 BTC โ”‚
    โ”‚ Time: 10:00:45  โ”‚
    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
ๆ’ฎๅˆๆต็จ‹

ๆ’ฎๅˆๆก†ๆžถๅค„็†ๆต็จ‹๏ผš

  1. ๆ–ฐ่ฎขๅ•่ฏทๆฑ‚่ขซๆŽจ้€ๅˆฐ orderChan
  2. ่ฐƒ็”จProcessOrder ๅผ€ๅง‹ๅˆ†้…่ฎขๅ•ๅค„็†้€ป่พ‘๏ผŒไปฅๅŠ็ป“ๆžœๅ“ๅบ”้€ป่พ‘๏ผˆๅผ‚ๆญฅๅค„็†่ฎขๅ•+ๅŒๆญฅ็ญ‰ๅพ…็ป“ๆžœ๏ผ‰
  3. ่ฐƒ็”จ matchOrder ๅค„็†่ฎขๅ•ๆ’ฎๅˆ
  4. ่ฟ”ๅ›žไบคๆ˜“็ป“ๆžœ่‡ณ ResultChan ๏ผŒๅŒๆ—ถๅฐ†็›ธๅ…ณ้€ป่พ‘ๅ‘้€็ป™ tradeChan ๏ผˆไพ›ๅ…ถไป–ๆจกๅ—็š„่ฐƒ็”จ๏ผ‰
graph TD
A[ๆ–ฐ่ฎขๅ•่ฏทๆฑ‚] -->B[ๅ‘้€ๅˆฐorderChan]
B-->C[processOrder ๅ็จ‹ๅค„็†]
C --> D[่ฐƒ็”จ matchOrder]
D -->E[่Žทๅ–/ๅˆ›ๅปบ่ฎขๅ•็ฐฟ]
E -->F[ๆ‰ง่กŒๅˆ้€ป่พ‘]
F-->G[่ฟ”ๅ›žไบคๆ˜“็ป“ๆžœ]
G --> H[้€š่ฟ‡ ResultChan ่ฟ”ๅ›ž]
H -->I[่ฐƒ็”จๆ–น่Žทๅพ—็ป“ๆžœ]
J[tradeChan]-.->k[ไบคๆ˜“่ฎฐๅฝ•ๅค„็†]
F-.->J
Loading

่ฏฆ็ป†ๆ’ฎๅˆๆต็จ‹๏ผš

  1. ่Žทๅ–็›ธๅ…ณๅธๅฏน่ฎขๅ•็ฐฟๅŽๅŠ ้”
  2. ๆ นๆฎๅฝ“ๅ‰่ฎขๅ•ๆ–นๅ‘๏ผˆbuy/sell๏ผ‰่Žทๅ–็›ธๅฏน็š„ๅฏนๆ‰‹็›˜้˜Ÿๅˆ—
    1. ๅฆ‚ๆžœๅฏนๆ‰‹็›˜้˜Ÿๅˆ—ไธบ็ฉบ๏ผˆๆ˜ฏ๏ผ‰๏ผŒ็›ดๆŽฅๅŠ ๅ…ฅ่ฎขๅ•็ฐฟ๏ผŒ็„ถๅŽ่ฟ›่กŒ่ฎขๅ•็ฑปๅž‹ๅˆคๆ–ญ
    2. ๅฆ‚ๆžœๅฏนๆ‰‹็›˜้˜Ÿๅˆ—ไธๅฏน็ฉบ๏ผˆๅฆ๏ผ‰๏ผŒๅˆ™ๅผ€ๅง‹ๅˆคๆ–ญๅฝ“ๅ‰่ฎขๅ•ๆ˜ฏๅฆๅฎŒๅ…จไบคๆ˜“
      1. ๅฆ‚ๆžœๆœ‰ๅ‰ฉไฝ™๏ผˆๆ˜ฏ๏ผ‰๏ผŒๅˆ™็ปง็ปญๅˆคๆ–ญๅฏนๆ‰‹็›˜้กถ้ƒจ่ฎขๅ•ๆ˜ฏๅฆๅŒน้…
        1. ๅฆ‚ๆžœๅฏนๆ‰‹ๅ•ๅŒน้…ไธŠไบ†๏ผˆๆ˜ฏ๏ผ‰๏ผŒๅˆ™่ฟ›่กŒๅˆ›ๅปบไบคๆ˜“ใ€ๆ›ดๆ–ฐ่ฎขๅ•็Šถๆ€ใ€ๆ›ดๆ–ฐไปทๆ ผ๏ผŒๅ†ๅˆคๆ–ญๅฏนๆ‰‹ๅ•ๆ˜ฏๅฆๅฎŒๅ…จไบคๆ˜“
          1. ๅฆ‚ๆžœๅฏนๆ‰‹ๅ•ๅฎŒๅ…จไบคๆ˜“๏ผˆๆ˜ฏ๏ผ‰๏ผŒๅˆ™ๅฐ†ๅฏนๆ‰‹ๅ•็งปๅ‡บ้˜Ÿๅˆ—
          2. ๅฆ‚ๆžœๅฏนๆ‰‹ๅ•ๆฒกๆœ‰ๅฎŒๅ…จไบคๆ˜“๏ผˆๅฆ๏ผ‰๏ผŒๅˆ™่ฟ”ๅ›žๅฝ“ๅ‰่ฎขๅ•ๆ˜ฏๅฆๅฎŒๅ…จไบคๆ˜“็š„ๅˆคๆ–ญๅˆ†ๆ”ฏ
        2. ๅฆ‚ๆžœๅฏนๆ‰‹ๅ•ๆฒกๆœ‰ๅŒน้…ไธŠ๏ผˆๅฆ๏ผ‰๏ผŒๅŠ ๅ…ฅ่ฎขๅ•็ฐฟ๏ผŒๅ†ๅˆคๆ–ญ่ฎขๅ•็ฑปๅž‹๏ผˆlimit/market๏ผ‰
          1. ้™ไปทๅ• limit๏ผˆๆ˜ฏ๏ผ‰๏ผšๅŠ ๅ…ฅๅฏนๅบ”ๅฏนๆ‰‹็›˜้˜Ÿๅˆ—๏ผŒ่ฟ”ๅ›žไบคๆ˜“็ป“ๆžœ
          2. ๅธ‚ไปทๅ• market๏ผˆๅฆ๏ผ‰๏ผš่ฟ”ๅ›žไบคๆ˜“็ป“ๆžœ
      2. ๅฆ‚ๆžœๆฒกๆœ‰ๅ‰ฉไฝ™๏ผˆๅฆ๏ผ‰๏ผŒ่ฟ”ๅ›žไบคๆ˜“็ป“ๆžœ
flowchart TD
    Start([ๆ–ฐ่ฎขๅ•่ฟ›ๅ…ฅ]) --> GetBook[่Žทๅ–่ฎขๅ•็ฐฟ]
    GetBook --> Lock[ๅŠ ้”่ฎขๅ•็ฐฟ]
    Lock --> GetCounter{่Žทๅ–ๅฏนๆ‰‹็›˜้˜Ÿๅˆ—}
    
    GetCounter -->|ไนฐๅ•| SellQueue[่Žทๅ–ๅ–ๅ•้˜Ÿๅˆ—]
    GetCounter -->|ๅ–ๅ•| BuyQueue[่Žทๅ–ไนฐๅ•้˜Ÿๅˆ—]
    
    SellQueue --> CheckEmpty
    BuyQueue --> CheckEmpty
    
    CheckEmpty{ๅฏนๆ‰‹็›˜ๆ˜ฏๅฆไธบ็ฉบ?}
    CheckEmpty -->|ๆ˜ฏ| AddToBook[ๅŠ ๅ…ฅ่ฎขๅ•็ฐฟ]
    CheckEmpty -->|ๅฆ| CheckRemaining{ๅฝ“ๅ‰่ฎขๅ•ๆ˜ฏๅฆ่ฟ˜ๆœ‰ๅ‰ฉไฝ™?}
    
    CheckRemaining -->|ๅฆ| Unlock[่งฃ้”]
    CheckRemaining -->|ๆ˜ฏ| PeekCounter[ๆŸฅ็œ‹ๅฏนๆ‰‹็›˜้กถ้ƒจ่ฎขๅ•]
    
    PeekCounter --> CanMatch{ไปทๆ ผๆ˜ฏๅฆๅŒน้…?}
    CanMatch -->|ๅฆ| AddToBook
    CanMatch -->|ๆ˜ฏ| CalcTrade[่ฎก็ฎ—ๆˆไบค้‡ๅ’Œไปทๆ ผ]
    
    CalcTrade --> CreateTrade[ๅˆ›ๅปบไบคๆ˜“่ฎฐๅฝ•]
    CreateTrade --> UpdateOrders[ๆ›ดๆ–ฐ่ฎขๅ•็Šถๆ€]
    UpdateOrders --> UpdatePrice[ๆ›ดๆ–ฐๆœ€ๆ–ฐไปทๆ ผ]
    UpdatePrice --> CheckCounterFilled{ๅฏนๆ‰‹ๅ•ๆ˜ฏๅฆๅฎŒๅ…จๆˆไบค?}
    
    CheckCounterFilled -->|ๆ˜ฏ| RemoveCounter[ไปŽ้˜Ÿๅˆ—็งป้™คๅฏนๆ‰‹ๅ•]
    CheckCounterFilled -->|ๅฆ| CheckRemaining
    RemoveCounter --> CheckRemaining
    
    AddToBook --> CheckLimit{ๆ˜ฏๅฆไธบ้™ไปทๅ•?}
    CheckLimit -->|ๆ˜ฏ| AddLimit[ๅŠ ๅ…ฅๅฏนๅบ”้˜Ÿๅˆ—]
    CheckLimit -->|ๅฆ| Unlock
    AddLimit --> Unlock
    
    Unlock --> End([่ฟ”ๅ›žไบคๆ˜“็ป“ๆžœ])
    
    style Start fill:#e1f5fe
    style End fill:#e8f5e8
    style CreateTrade fill:#fff3e0
    style CanMatch fill:#fce4ec
Loading

ไปทๆ ผ-ๆ—ถ้—ดไผ˜ๅ…ˆๅŽŸๅˆ™๏ผš

flowchart TD
    Compare[ๆฏ”่พƒไธคไธช่ฎขๅ•] --> SamePrice{ไปทๆ ผ็›ธๅŒ?}
    
    SamePrice -->|ๆ˜ฏ| TimeFirst[ๆ—ถ้—ดไผ˜ๅ…ˆ]
    SamePrice -->|ๅฆ| CheckSide{ไนฐๅ•่ฟ˜ๆ˜ฏๅ–ๅ•?}
    
    CheckSide -->|ไนฐๅ•| HigherPrice[ไปทๆ ผ้ซ˜็š„ไผ˜ๅ…ˆ]
    CheckSide -->|ๅ–ๅ•| LowerPrice[ไปทๆ ผไฝŽ็š„ไผ˜ๅ…ˆ]
    
    TimeFirst --> Earlier[ๆ—ถ้—ดๆ—ฉ็š„ไผ˜ๅ…ˆ]
    HigherPrice --> BuyResult[ไนฐๅ•้˜Ÿๅˆ—ๆŽ’ๅบ็ป“ๆžœ]
    LowerPrice --> SellResult[ๅ–ๅ•้˜Ÿๅˆ—ๆŽ’ๅบ็ป“ๆžœ]
    Earlier --> TimeResult[ๆ—ถ้—ดๆŽ’ๅบ็ป“ๆžœ]
    
    style Compare fill:#e3f2fd
    style TimeFirst fill:#f3e5f5
    style HigherPrice fill:#e8f5e8
    style LowerPrice fill:#ffebee
Loading

่ฎขๅ•ๅนถๅ‘ๅค„็†ๆก†ๆžถ๏ผš

่ฟ™้‡Œ็›ดๆŽฅ็”จ go ไปฃ็ ่ฏดๆ˜Ž๏ผš

้‡‡็”จ็š„ๆ˜ฏ ๅผ‚ๆญฅ+ๅŒๆญฅ ๆ–นๅผ่ฟ›่กŒใ€‚

func (e *matchingEngine) ProcessOrder(ctx context.Context, order *model.Order) ([]*model.Trade, error) {
	resultChan := make(chan *MatchResult, 1)

	// ๅผ‚ๆญฅๅค„็†่ฎขๅ•๏ผšๅŠ ๅ…ฅ่ฎขๅ•ๅค„็†้€š้“
	select {
	case e.orderChan <- &OrderRequest{Order: order, ResultChan: resultChan}:
	case <-ctx.Done():
		return nil, ctx.Err()
	}

	// ๅŒๆญฅ็ญ‰ๅพ…ๅค„็†็ป“ๆžœ
	select {
	case result := <-resultChan:
		return result.Trades, result.Error
	case <-ctx.Done():
		return nil, ctx.Err()
	}
}
sequenceDiagram
    participant Client as ๅฎขๆˆท็ซฏ
    participant Engine as ๆ’ฎๅˆๅผ•ๆ“Ž
    participant OrderChan as ่ฎขๅ•้€š้“
    participant Processor as ๅค„็†ๅ็จ‹
    participant OrderBook as ่ฎขๅ•็ฐฟ
    participant TradeChan as ไบคๆ˜“้€š้“
    
    Client->>Engine: ProcessOrder(order)
    Engine->>OrderChan: ๅ‘้€ OrderRequest
    Note over Engine: ้ž้˜ปๅกž่ฟ”ๅ›ž
    
    Processor->>OrderChan: ๆŽฅๆ”ถ่ฎขๅ•่ฏทๆฑ‚
    Processor->>OrderBook: ๆ‰ง่กŒๆ’ฎๅˆ
    OrderBook-->>Processor: ่ฟ”ๅ›žไบคๆ˜“็ป“ๆžœ
    
    alt ๆœ‰ๆˆไบค
        Processor->>TradeChan: ๅ‘้€ไบคๆ˜“่ฎฐๅฝ•
    end
    
    Processor->>Engine: ้€š่ฟ‡ ResultChan ่ฟ”ๅ›ž
    Engine-->>Client: ่ฟ”ๅ›žไบคๆ˜“็ป“ๆžœ
Loading

About

๐Ÿช™ๆ‰‹ๆ“ๅŠ ๅฏ†ไบคๆ˜“็ณป็ปŸ๏ผˆ่ฟ›่กŒไธญ๐Ÿ› ๏ผ‰

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors