Skip to content

Roboquant-avro should allow to use non-Price items #89

@AlexandreClose

Description

@AlexandreClose

Hello, and thank you for all the great work done for this project.

I'm currently using it for building a strategy based also on news sentiment.
I gathered very large datasets of csv-based news, and i computed a finbert sentiment on each csv line new.

As it is not a price-based CSV type, it was not possible to use the existing CSVFeed which is made mainly for prices (despite the name). So i created my own Feed and it worked like a charm, but was a bit too clunky on each backtest startup.

So i decided to convert it to an avro File, by following the related documentation.

But it didn't work, despite the fact that the constructor of AvroFeed accepted any feed implementing the Feed interface.

By browsing the code, i saw that both of the record( ) and the play( ) methods rely on the fact that the Feed is a feed of PriceItem.
So even with the other Item classes defined in roboquant.core, it is not possible to convert feed out of the box.

` val event = channel.receive()

            for (item in event.items.filterIsInstance<PriceItem>()) {
                if (!assetFilter.filter(item.asset, event.time)) continue

                record.put(0, event.time.toString())
                record.put(1, item.asset.serialize())

                val serialization = serializer.serialize(item)
                val t = GenericData.EnumSymbol(enumSchema, serialization.type)
                record.put(2, t)

                val arr = GenericData.Array<Double>(serialization.values.size, arraySchema)
                arr.addAll(serialization.values)
                record.put(3, arr)

                record.put(4, serialization.meta)
                dataFileWriter.append(record)
                count++
            }

        }`

For exemple, in this part of code, the AvroFeed should also handle NewsItem which is defined by roboquant.core.

In my case i couln't use any of those classes in my use case because :

  • CSVFeed can't deal with non price data
  • AvroFeed can't deal with non PriceItem
  • NewsItem defined not enough field to be effectively used, because the Map<String,Any> used for metadata is not efficient to store the sentiment score, the summary, etc...

Maybe a great feature could be to allow user to register easily its own schema, and Item types ?

I can work on any part of this request as a PR, if you think it can be profitable.
Thanks,

Alexandre

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions