Skip to content

Customizing Chart Data

You can customize the information shown on the charts when backtesting or monitoring your strategy during live trading.

TIP

During a live trading session, the chart is updated in real time, similar to other live charting solutions, allowing you to monitor your trading strategy.

Backtest Dashboard

1. Configuring the Chart Schema

In your sma_sample_strategy.py add imports for ChartSchema, ChartPointDataType, set_chart_schema, chart:

python
...
from superalgorithm.types import (
    Bar,
    OrderType,
    PositionType,
    ChartSchema,
    ChartPointDataType
)
...
from superalgorithm.utils.logging import set_chart_schema, chart

Create the chart schema in the init function. We will plot the candlesticks of the price data, and the moving averages.

python
class SMAStrategy(BaseStrategy):

    def init(self):
        self.on("5m", self.on_5)
        self.sma = SMA(14)
        self.sma_slow = SMA(200)

        set_chart_schema(
            [
                ChartSchema(
                    "BTC/USDT", ChartPointDataType.OHLCV, "candlestick", "orange"
                ),
                ChartSchema("sma", ChartPointDataType.FLOAT, "line", "red"),
                ChartSchema("sma_slow", ChartPointDataType.FLOAT, "line", "blue"),
            ]
        )

2. Populate Chart Data

We now populate the charts with data every time we receive an update in our 5m handler.

python
    async def on_5(self, bar: Bar):

        self.sma.add(bar.close)
        self.sma_slow.add(bar.close)

        chart("BTC/USDT", bar.ohlcv)
        chart("sma", self.sma[-1])
        chart("sma_slow", self.sma_slow[-1])

        await self.trade_logic()

3. Test the Chart

Now run your backtest.py again to see the chart:

SUPER_STRATEGY_ID=<choose a unique name for your strategy> backtest.py

4. Adding entry and exit points

Inside the set_chart_schema function add two additional configurations of type scatter:

py
ChartSchema("long", ChartPointDataType.FLOAT, "scatter", chart_color="green"),
ChartSchema("short", ChartPointDataType.FLOAT, "scatter", chart_color="red"),
```

Then, modify the buy and sell code blocks to plot the scatter points when we go long or short.

python
    async def trade_logic(self):

        ...

        if buy:
            await self.open("BTC/USDT", PositionType.LONG, 0.1, OrderType.LIMIT, close)
            chart("long", close)

        if sell:
            await self.close("BTC/USDT", PositionType.LONG, 0.1, OrderType.LIMIT, close)
            chart("short", close)

Re-run your backtest to see the results.