ทำอะไรได้ และทำได้เร็วแค่ไหน
ทุกอย่างในหน้านี้มาพร้อม @tradecanvas/chart 1.31.0 เวลาต่อเฟรมวัดใน Chrome บนแล็ปท็อปที่ใช้กราฟิกในตัว (Intel UHD) และ node scripts/bench-render.mjs ในรีโพสิทอรีจะรันฉากเดียวกันบนเครื่องของคุณ
สรุปเป็นตัวเลข
- ประเภทกราฟ
- 18
- อินดิเคเตอร์ในตัว
- 111
- เครื่องมือวาด
- 69
- ภาษาของวิดเจ็ต
- 30
- คีย์สไตล์
- 101
- สวิตช์ฟีเจอร์ของวิดเจ็ต
- 112
- ไลบรารีภายนอกที่ต้องพึ่งพาขณะรัน
- 0
- ยูนิตเทสต์
- 3,000+
เวลาต่อเฟรม
เวลาที่ใช้วาดหนึ่งเฟรมระหว่างเลื่อนกราฟ 16.7 ms เท่ากับ 60 เฟรมต่อวินาที
| กราฟ | อัตราส่วนพิกเซล | Canvas 2D | WebGL | Canvas 2D / WebGL |
|---|---|---|---|---|
| 1600×900, 500 แท่งเทียน + อินดิเคเตอร์ 4 ตัว · 2× | 2 | 27.4 ms | 19.6 ms | |
| 1600×900, ซูมออกบน 200,000 แท่ง + อินดิเคเตอร์ 4 ตัว · 2× | 2 | 34.5 ms | 20.2 ms | |
| 1600×900, ซูมออกบน 1,000,000 แท่ง + อินดิเคเตอร์ 4 ตัว · 2× | 2 | 34.5 ms | 16.7 ms | |
| 1600×900, ฮีตแมปความลึก สแนปช็อต 240 ชุด × 80 ระดับ · 2× | 2 | 25.5 ms | 16.8 ms | |
| หกกราฟ แต่ละกราฟมี 500 แท่งเทียนและอินดิเคเตอร์ 2 ตัว · 2× | 2 | 23.5 ms | 17.2 ms | |
| 2560×1400, 2,000 แท่งเทียน + อินดิเคเตอร์ 4 ตัว · 1× | 1 | 41.6 ms | 17.7 ms | |
| 2560×1400, 2,000 แท่งเทียน + อินดิเคเตอร์ 4 ตัว · 1.5× | 1.5 | 70.8 ms | 17.6 ms | |
| 2560×1400, 2,000 แท่งเทียน + อินดิเคเตอร์ 4 ตัว · 2× | 2 | 114.5 ms | 29.1 ms |
ค่าเริ่มต้นคือ Canvas 2D ส่วน renderer: 'webgl' (หรือ 'auto') จะวาดพื้นที่กราฟด้วย WebGL 2 และกลับไปใช้ Canvas 2D เมื่อไม่มี WebGL 2 หรือคอนเท็กซ์ของ WebGL หายไป
เส้นทางข้อมูล
- ติกสดพร้อม Bollinger Bands, EMA, RSI และ MACD บน 100,000 แท่ง
- ~0.001 ms
- คำนวณอินดิเคเตอร์สี่ตัวเดิมใหม่ทั้งหมดบน 100,000 แท่ง
- ~27 ms
- เส้นที่มีจุดมองเห็นได้ 1,000,000 จุด ลดจำนวนจุดสำหรับหนึ่งเฟรม
- ~2.6 ms
- วาดใหม่เมื่อชี้เมาส์ (เป้าเล็ง คำอธิบายกราฟ)
- ~0.2 ms
- การสลับสัญลักษณ์หรือกรอบเวลาจะแสดงม่านโหลดก็ต่อเมื่อนานกว่า
- 200 ms
ขนาดดาวน์โหลด
ย่อขนาดและบีบอัดด้วย gzip รวมทุกอย่างที่นำเข้า
- Chart, API แบบ headless
- 176 KB
- ChartWidget, อินเทอร์เฟซครบชุด
- 315 KB
- ตัวเรนเดอร์ WebGL โหลดเมื่อใช้ครั้งแรก
- 18 KB
ตรวจสอบอย่างไร
- ยูนิตเทสต์กว่า 3,000 รายการในเจ็ดแพ็กเกจรันบน CI ทุกครั้งที่มี pull request
- ตัวเรนเดอร์ WebGL วาดแท่งเทียนบนพิกเซลของอุปกรณ์ชุดเดียวกับ Canvas 2D ส่วนเส้นและพื้นที่ระบายต่างกันเพียงไม่กี่พิกเซลที่ขอบซึ่งลดรอยหยัก
- ตัวเรนเดอร์ WebGL ผ่านการตรวจสอบใน Chromium, Firefox และ WebKit แล้ว หากไม่มี WebGL 2 หรือคอนเท็กซ์หายไป กราฟจะทำงานต่อด้วย Canvas 2D
- ตัวอย่างโค้ดในเอกสารและในสกิลสำหรับเอเจนต์ผ่านการตรวจไทป์กับ API จริง
- โปรแกรมอ่านหน้าจออ่านกราฟได้และใช้งานด้วยคีย์บอร์ดได้ วิดเจ็ตแสดงจากขวาไปซ้ายในภาษาอาหรับ ฮีบรู และเปอร์เซีย
ความสามารถ
กรองตามหมวด หรือค้นหาด้วยชื่อหรือ API
| ความสามารถ | หมวด | รายละเอียดและ API |
|---|---|---|
| แท่งเทียน แท่ง OHLC เส้น พื้นที่ เส้นฐาน Heikin-Ashi แท่งเทียนกลวง | ประเภทกราฟ | candlestick, bar, line, area, baseline, heikinAshi, hollowCandle |
| Renko, Line Break, Kagi, Point & Figure, แท่งช่วงราคา | ประเภทกราฟ | ขนาดกล่องหรือ ATR จำนวนเส้นที่ต้องทะลุ ระยะกลับตัวเป็นเปอร์เซ็นต์หรือราคา ช่วงราคาต่อแท่ง |
| แท่งเทียนวอลุ่ม Equivolume พื้นที่ HLC เส้นขั้นบันได เส้นพร้อมจุด สูง-ต่ำ | ประเภทกราฟ | รวม 18 ประเภทกราฟ |
| ซ่อนซีรีส์หลัก | ประเภทกราฟ | เหลือเพียงอินดิเคเตอร์และภาพวาด |
| กราฟสำหรับแดชบอร์ด | ประเภทกราฟ | กราฟแท่ง (จัดกลุ่ม ซ้อนกัน แนวนอน) กราฟโดนัทและวงกลม กราฟการกระจายและฟอง ฮิสโทแกรม ปฏิทิน เมทริกซ์สหสัมพันธ์ แผนที่รายกลุ่มอุตสาหกรรม เส้นทวนเข็มนาฬิกา สปาร์กไลน์ เกจ ฮีตแมปและทรีแมป กราฟน้ำตก ความลึก เส้นมูลค่าพอร์ต |
| Canvas 2D หรือ WebGL 2 | การเรนเดอร์ | renderer: 'canvas' | 'webgl' | 'auto', setRenderer, อีเวนต์ rendererChange |
| หนึ่งช่วงต่อคอลัมน์พิกเซลเมื่อซูมออก | การเรนเดอร์ | เส้น แบนด์ และฮิสโทแกรมของอินดิเคเตอร์ เมื่อน้อยกว่าหนึ่งพิกเซลต่อแท่ง |
| เลื่อนหนึ่งล้านแท่งได้ลื่นไหล | การเรนเดอร์ | พร้อมอินดิเคเตอร์สี่ตัว ที่อัตราส่วนพิกเซล 2 |
| ฮีตแมปความลึก วอลุ่มโปรไฟล์ และมาร์เก็ตโปรไฟล์บน GPU | การเรนเดอร์ | pushDepthSnapshot(book, time) |
| กราฟ WebGL หลายตัวในหน้าเดียว | การเรนเดอร์ | สูงสุด 8 ตัว (setMaxWebGLCharts) ที่เหลือวาดด้วย Canvas 2D และกลับมาใช้ WebGL เมื่อคอนเท็กซ์กลับมา |
| คมชัดทุกสเกลหน้าจอ | การเรนเดอร์ | แท่งเทียน วอลุ่ม และภาพวาดตรงพิกเซลจริงของอุปกรณ์ที่ 100%, 125% และ 200% |
| ไม่พึ่งพาไลบรารีภายนอกขณะรัน | การเรนเดอร์ | ไม่มีอะไรต้องติดตั้งหรือตรวจสอบเพิ่ม |
| อินดิเคเตอร์ในตัว 134 ตัว | อินดิเคเตอร์ | Pivot Points หกแบบ, MA Cross, สหสัมพันธ์กับสัญลักษณ์อื่น |
| แหล่งราคา | อินดิเคเตอร์ | open, high, low, hl2, hlc3, ohlc4, hlcc4 |
| อินดิเคเตอร์บนอินดิเคเตอร์ | อินดิเคเตอร์ | เช่น ค่าเฉลี่ยเคลื่อนที่ของ RSI ที่อัปเดตทุกติก |
| หลายอินดิเคเตอร์ในแผงเดียว ย้ายข้ามแผงได้ | อินดิเคเตอร์ | moveIndicatorToPane |
| อินดิเคเตอร์ตัวเดียวกันหลายครั้ง | อินดิเคเตอร์ | EMA 20 และ EMA 50 คู่กัน |
| ระดับและเกณฑ์ | อินดิเคเตอร์ | RSI 30/70, CCI ±100 บันทึกไปกับเลย์เอาต์ |
| ค่าล่าสุดบนแกน | อินดิเคเตอร์ | บนแกนราคาและแกนของแต่ละแผง ด้วยสีของเส้น |
| ยุบ ขยายเต็ม และจัดลำดับแผงใหม่ | อินดิเคเตอร์ | บันทึกไปกับเลย์เอาต์ |
| เทมเพลตอินดิเคเตอร์ | อินดิเคเตอร์ | พารามิเตอร์ สไตล์ ระดับ และแผง บันทึกและนำไปใช้พร้อมกัน |
| สไตล์และการแสดงของแต่ละเส้น | อินดิเคเตอร์ | เส้นที่ซ่อนอยู่ไม่ยืดสเกล; setIndicatorDefaults |
| วอลุ่มเดลตาและ CVD | อินดิเคเตอร์ | ประมาณจากแท่งราคา |
| ส่งออกค่าอินดิเคเตอร์ | อินดิเคเตอร์ | CSV หรือ JSON หนึ่งคอลัมน์ต่อเส้น |
| อัปเดตแบบคำนวณเพิ่มบนติกสด | อินดิเคเตอร์ | update() คำนวณใหม่เฉพาะแท่งที่กำลังก่อตัว |
| เครื่องมือวาด 69 แบบ | เครื่องมือวาด | เส้น ช่องราคา ฟีโบนัชชี แกนน์ พิตช์ฟอร์ก คลื่นเอลเลียต รูปแบบ วัฏจักร การคาดการณ์ |
| การตั้งค่าเฉพาะของแต่ละเครื่องมือ | เครื่องมือวาด | สไตล์ คุณสมบัติ และพิกัดบนตารางราคาของตลาด |
| สถานะซื้อและขาย | เครื่องมือวาด | ความเสี่ยงต่อผลตอบแทน ปริมาณคำนวณจากความเสี่ยงเป็นเปอร์เซ็นต์หรือจำนวนเงิน |
| แจ้งเตือนบนภาพวาด | เครื่องมือวาด | เมื่อราคาตัดเส้นแนวโน้มหรือช่องราคาตามที่วาดไว้ รวมถึงบนสเกลลอการิทึม |
| ลำดับ กลุ่ม และเทมเพลต | เครื่องมือวาด | เลื่อนไปข้างหน้า ส่งไปข้างหลัง จัดกลุ่ม ล็อก ซ่อน |
| โน้ต คำอธิบายประกอบ ลูกศร ธง พู่กัน เส้นทาง เส้นโค้ง | เครื่องมือวาด | วาดด้วยมืออิสระและแบบหลายจุด |
| Anchored VWAP และวอลุ่มโปรไฟล์ช่วงคงที่ | เครื่องมือวาด | อ่านจากแท่งของกราฟ |
| ยางลบ ซูมด้วยกรอบ แม่เหล็กแบบแรง ปุ่มลัด | เครื่องมือวาด | Alt+T, Alt+H, Alt+J, Alt+V, Alt+C, Alt+F |
| ไปยังวันที่ ช่วง 1D ถึงทั้งหมด | สเกลและเวลา | ซูมออกได้ไม่จำกัด |
| เขตเวลา IANA พร้อมเวลาออมแสง | สเกลและเวลา | หรือเขตเวลาของตลาดเอง |
| กรอบเวลาใดก็ได้ และแท่ง tick | สเกลและเวลา | 7m, 90m, 2d สร้างจากข้อมูลที่ฟีดให้มา ส่วน 100T สร้างจากรายการซื้อขาย |
| สเกลซ้ายและขวา ลอการิทึม กลับด้าน และเปอร์เซ็นต์แยกตามแผง | สเกลและเวลา | สเกลซ้ายสำหรับโอเวอร์เลย์หรือสำเนาของสเกลราคา |
| เปรียบเทียบสัญลักษณ์ ส่วนต่าง และอัตราส่วน | สเกลและเวลา | บนสเกลหรือแผงของตัวเอง เรียงตรงกันตามเวลา |
| การซื้อขายนอกเวลาปกติ | สเกลและเวลา | จากช่วงเวลาซื้อขายของสัญลักษณ์ |
| รูปแบบราคาและเวลา | สเกลและเวลา | priceFormat เป็นฟังก์ชันหรือเศษส่วนอย่าง 1/32; timeFormatter |
| สเกลตามทศนิยมและช่วงราคาของสัญลักษณ์ | สเกลและเวลา | pricePrecision, minTick: หุ้นที่ขยับทีละ 10 จะไม่แสดง 21,705 |
| เส้นราคาสูงสุดและต่ำสุด bid และ ask | สเกลและเวลา | bid และ ask จากติกของฟีด |
| เครื่องหมายเหตุการณ์บนกราฟ | สเกลและเวลา | signalMarkerHover, signalMarkerClick |
| ฟีดสำเร็จรูปและฟีดของคุณเอง | ข้อมูลและเรียลไทม์ | Binance, Bybit, Coinbase, Kraken, mock; WebSocketAdapter, PollingAdapter |
| โหลดประวัติเก่าเมื่อเลื่อนไปทางซ้าย | ข้อมูลและเรียลไทม์ | fetchHistoryBefore |
| ค้นหาสัญลักษณ์พร้อมรายละเอียด | ข้อมูลและเรียลไทม์ | searchSymbols, resolveSymbol: ทศนิยม ช่วงราคา ช่วงเวลาซื้อขาย เขตเวลา |
| รายละเอียดสัญลักษณ์ที่ได้หลังเชื่อมต่อ | ข้อมูลและเรียลไทม์ | อีเวนต์ symbolInfo ของอะแดปเตอร์ |
| บันไดความลึกตลาด | ข้อมูลและเรียลไทม์ | ปริมาณ bid และ ask ตามราคา คลิกเพื่อเทรด |
| ราคาสดสำหรับรายการเฝ้าดู | ข้อมูลและเรียลไทม์ | subscribeQuotes, setQuotes, getQuote |
| ข่าวและสถานะตลาด | ข้อมูลและเรียลไทม์ | fetchNews; นับถอยหลังสู่การเปิดหรือปิดตลาด |
| กฎของตลาด | ข้อมูลและเรียลไทม์ | setMarket: ช่วงราคาตามระดับราคา ราคาเพดานและราคาพื้นรายวัน หน่วยการซื้อขาย ช่วงเวลาซื้อขาย; HOSE, HNX, UPCoM และฟิวเจอร์ส VN30 |
| คำสั่งและสถานะบนกราฟ | การเทรด | ลากเพื่อแก้ไข ยกเลิก ปิด และกลับสถานะได้จากเส้น |
| เครื่องหมายการจับคู่ | การเทรด | เหตุผลและกำไรหรือขาดทุนใน executionFill |
| หน้าต่างส่งคำสั่ง | การเทรด | ปริมาณ ประเภท ตัดขาดทุนและทำกำไร อายุคำสั่ง ตรวจสอบขณะพิมพ์ รวมถึงช่วงราคา ราคาเพดาน ราคาพื้น และหน่วยการซื้อขายของตลาด |
| แผงบัญชี | การเทรด | สถานะพร้อมกำไรขาดทุนสด คำสั่งที่รออยู่ และการจับคู่ |
| สัญญาณและโซนการเทรด | การเทรด | คีย์สไตล์ markers.*, tradeZones.* |
| แบ็กเทสต์และตัวชี้วัดความเสี่ยง | การเทรด | @tradecanvas/analytics: ค่าคอมมิชชัน สลิปเพจ Sharpe, Sortino, Calmar, drawdown |
| แจ้งเตือนได้มากกว่าระดับราคา | การแจ้งเตือนและการเล่นซ้ำ | เส้นตัดเส้น ราคาขยับ N% ใน N แท่ง เมื่อแท่งปิด พร้อมวันหมดอายุ |
| เล่นซ้ำแท่งเทียนแบบขั้นละเอียดกว่า | การแจ้งเตือนและการเล่นซ้ำ | กรอบเวลาใหญ่เล่นซ้ำจากแท่งที่เล็กกว่า |
| เทรดจำลองระหว่างเล่นซ้ำ | การแจ้งเตือนและการเล่นซ้ำ | คำสั่งจับคู่ที่ราคาที่เล่นซ้ำ |
| เล่นซ้ำทั้งกริดกราฟ | การแจ้งเตือนและการเล่นซ้ำ | ทุกกราฟเดินไปพร้อมกัน |
| การเล่นซ้ำสำหรับแอปพลิเคชัน | การแจ้งเตือนและการเล่นซ้ำ | startTime, hideHistory, duration, เครื่องหมายปรากฏขณะเล่น, replayComplete |
| กริดวิดเจ็ตที่ซิงค์กัน | พื้นที่ทำงาน | สูงสุด 6 ตัว ใช้สัญลักษณ์ กรอบเวลา เป้าเล็ง เวลา และภาพวาดร่วมกัน |
| เลย์เอาต์ที่ตั้งชื่อบนที่เก็บข้อมูลของคุณเอง | พื้นที่ทำงาน | บันทึก เปิด เปลี่ยนชื่อ บันทึกอัตโนมัติ; LayoutStorage สำหรับเซิร์ฟเวอร์ |
| เลิกทำและทำซ้ำได้ทุกอย่าง | พื้นที่ทำงาน | ภาพวาด อินดิเคเตอร์ การตั้งค่า และประเภทกราฟ; recordUndo |
| เมนูคลิกขวาตามพื้นที่ | พื้นที่ทำงาน | ภาพวาด พื้นที่กราฟ แผง แกนราคา แกนเวลา |
| รายการเฝ้าดู | พื้นที่ทำงาน | หลายรายการ จัดลำดับด้วยการลาก |
| อีเวนต์สำหรับแอปโฮสต์ | พื้นที่ทำงาน | symbolChange, timeframeChange, ordersChange, executionFill, styleChange และอื่น ๆ |
| สามหน้าตาของวิดเจ็ต | การปรับแต่ง | Studio, Terminal, Capsule; ui และ setUI; ตัวแปร CSS --tcw-* |
| หน้าตากราฟตามคีย์ | การปรับแต่ง | applyOverrides บน 101 คีย์ที่มีไทป์กำกับ ทั้งชั้นของโฮสต์และชั้นของผู้ใช้ |
| การตั้งค่าที่เข้าถึงทุกคีย์ | การปรับแต่ง | แท็บสไตล์สำหรับประเภทกราฟที่แสดงอยู่ และแท็บการเทรด |
| สวิตช์ฟีเจอร์ 112 ตัว | การปรับแต่ง | features, setFeatures, isFeatureOn; เปลี่ยนได้ขณะทำงาน |
| ชิ้นส่วนของคุณเองในวิดเจ็ต | การปรับแต่ง | ปุ่มและดรอปดาวน์บนแถบเครื่องมือ ปุ่มแถบด้านข้าง รายการสถานะ สล็อต รายการเมนู |
| ปุ่มลัดของคุณเอง | การปรับแต่ง | addHotkey ตามเลย์เอาต์แป้นพิมพ์ |
| วิดเจ็ตใน 30 ภาษา | ภาษาและการเข้าถึง | อาหรับ ฮีบรู และเปอร์เซียแสดงจากขวาไปซ้าย |
| โปรแกรมอ่านหน้าจอและคีย์บอร์ด | ภาษาและการเข้าถึง | สรุปกราฟ อ่านแท่งทีละแท่ง ใช้กล่องโต้ตอบด้วยคีย์บอร์ด |
| เอกสารหกภาษา เว็บไซต์นี้สิบสี่ภาษา | ภาษาและการเข้าถึง | English, Tiếng Việt, 简体中文, 日本語, 한국어, Español |
| คอมโพเนนต์ React, Vue และ Svelte | นักพัฒนา | props แบบ reactive: overrides, indicators, features |
| ปลั๊กอิน | นักพัฒนา | อินดิเคเตอร์ เครื่องมือวาด ประเภทกราฟ และโอเวอร์เลย์; overlayScale และ getPriceStep สำหรับวาดบนตารางราคา |
| เอกสารสำหรับเอเจนต์เขียนโค้ด | นักพัฒนา | llms.txt, llms-full.txt และสกิลสำหรับเอเจนต์ |
ข้อจำกัดที่ทราบ
- Canvas 2D ยังคงเป็นตัวเรนเดอร์เริ่มต้นจนกว่า WebGL จะได้ลองใช้บนอุปกรณ์มากขึ้น และยังไม่ได้วัดอัตราเฟรมของ WebGL บน Safari และจอ 5K
- ที่อัตราส่วนพิกเซล 2 บนกราฟ 2560×1400 การคอมโพสิตของเบราว์เซอร์อย่างเดียวก็ใช้เวลาราว 23 ms บนกราฟิกในตัว เฟรม WebGL ตรงนั้นจึงเฉลี่ย 29 ms
- กรอบเวลาแบบ tick สร้างจากรายการซื้อขายล่าสุดที่ฟีดส่งมา จึงโหลดประวัติ tick ที่เก่ากว่านั้นไม่ได้
- วอลุ่มเดลตาและ CVD ประมาณจากแท่งราคา ไม่ได้มาจากฝั่งของแต่ละรายการซื้อขาย
- ในหน้าเดียววาดด้วย WebGL พร้อมกันได้สูงสุด 8 กราฟ ที่เหลือวาดด้วย Canvas 2D