Wrapper cho framework

Wrapper đúng phong cách cho React, Vue và Svelte. Cả ba có cùng một bộ props và trao cho bạn instance Chart bên dưới.

Cài đặt

npm install @tradecanvas/react   # or @tradecanvas/vue · @tradecanvas/svelte
npm install @tradecanvas/chart   # the core (peer of each wrapper)

React

import { TradeCanvas, type TradeCanvasRef } from '@tradecanvas/react'
import { BinanceAdapter } from '@tradecanvas/chart'
import { useRef } from 'react'

function App() {
  const chartRef = useRef<TradeCanvasRef>(null)

  return (
    <TradeCanvas
      ref={chartRef}
      symbol="BTCUSDT"
      timeframe="5m"
      theme="dark"
      adapter={new BinanceAdapter()}
      onReady={(chart) => {
        chart.on('orderPlace', e => console.log(e.payload))
      }}
    />
  )
}

Vue

<script setup lang="ts">
import { TradeCanvas } from '@tradecanvas/vue'
import { BinanceAdapter } from '@tradecanvas/chart'

const adapter = new BinanceAdapter()
</script>

<template>
  <TradeCanvas
    symbol="BTCUSDT"
    timeframe="5m"
    theme="dark"
    :adapter="adapter"
    @ready="(chart) => console.log('ready', chart)"
  />
</template>

Svelte

<script lang="ts">
  import { TradeCanvas } from '@tradecanvas/svelte'
  import { BinanceAdapter } from '@tradecanvas/chart'

  const adapter = new BinanceAdapter()
</script>

<TradeCanvas
  symbol="BTCUSDT"
  timeframe="5m"
  theme="dark"
  {adapter}
  onReady={(chart) => console.log('ready', chart)}
/>

Props dùng chung

Nến của riêng bạn, chỉ báo kèm tham số, và một biểu đồ không bao giờ tự mở luồng dữ liệu:

<script lang="ts">
  import { TradeCanvas } from '@tradecanvas/svelte'
  import type { Chart } from '@tradecanvas/chart'

  let { bars } = $props()
  let chart = $state<Chart | null>(null)
</script>

<TradeCanvas
  data={bars}
  stream={false}
  indicators={['rsi', { id: 'ema', params: { period: 50 } }]}
  features={{ replay: true }}
  bind:chart
/>
PropKiểuGhi chú
symbolstringMã của luồng dữ liệu. Mặc định 'BTCUSDT'.
timeframeTimeFrameKhung thời gian của luồng. Mặc định '5m'.
theme'dark' | 'light' | ThemeMặc định 'dark'.
chartTypeChartTypeMặc định 'candlestick'.
dataOHLCBar[]Nến của riêng bạn, hiện đúng như vậy. Có ngay lúc mount thì không mở luồng nào; đưa vào sau thì luồng đang mở vẫn giữ (stream=false sẽ đóng nó). Với Vue và Svelte, nến push thêm vào cùng mảng, hoặc nến cuối thay đổi, được đưa vào như một tick realtime và khung nhìn giữ nguyên; một mảng mới là một chuỗi dữ liệu mới.
adapterDataAdapterNguồn của luồng; không có thì dùng Binance.
streambooleanfalse: không có luồng nào, biểu đồ chờ data. Mặc định true.
historyLimitnumberSố nến luồng nạp lúc đầu. Mặc định 500.
indicatorsIndicatorSpec[]'rsi', hoặc { id, params, position }; chỉ báo nào đổi tham số sẽ được đặt lại với tham số mới.
featuresFeaturesConfigNgười dùng được làm gì trên biểu đồ; đổi sau khi mount cũng có hiệu lực.
signalMarkers / tradeZonesmảngĐiểm mua, bán và lệnh giao dịch; phát lại sẽ hiện chúng khi chạy tới.
signalMarkerStyle / tradeZoneStylestyleMàu và nhãn của chúng.
overridesChartStyleOverridesGiao diện biểu đồ theo khoá (xem Giao diện).
autoScalebooleanMặc định true.
watermarkTextstringChữ chìm phía sau các nến.
optionsPartial<ChartOptions>Tuỳ chọn của chart mà các prop không có (maxBarSpacing, rightMargin, renderer…), gộp đè lên mặc định của component khi mount. Đổi sau khi mount không được áp dụng; chartType, theme và autoScale luôn lấy từ prop của chúng.
onReady(chart) => voidSau khi biểu đồ mount (Vue: sự kiện ready).
Cần nhiều hơn những gì props cung cấp? Truy cập Chart bên dưới qua onReady, một ref (React / Vue) hoặc bind:chart (Svelte) để dùng toàn bộ API — hình vẽ, giao dịch, adapter khớp lệnh, plugin, bảng đổi được kích thước và nhiều thứ khác.