roq-trading / roq-issues

Issue tracker for Roq's software solutions.
https://roq-trading.com/
1 stars 0 forks source link

building roq-samples from source #433

Closed linoxoidunix closed 10 months ago

linoxoidunix commented 10 months ago

Hello dear developers I encountered a problem building the roq-samples

home/linoxoidunix/Programming/C++/roq-samples/src/roq/samples/import/processor.cpp:115:7: error: 'roq::ReferenceData' has no non-static data member named 'exchange_time_utc' 115 | }, | ^ /home/linoxoidunix/Programming/C++/roq-samples/src/roq/samples/import/processor.cpp:127:7: error: 'roq::MarketStatus' has no non-static data member named 'exchange_time_utc' 127 | }, | ^

I looked at the ReferenceData which is stored in /home/linoxoidunix/conda/pkgs/roq-api-0.9.8-h666e512_0/include/roq/reference_data.hpp

*struct ROQ_PUBLIC ReferenceData final { uint16_t stream_id = {}; //!< Stream identifier std::string_view exchange; //!< Exchange std::string_view symbol; //!< Symbol std::string_view description; //!< Description SecurityType security_type = {}; //!< Security type std::string_view base_currency; //!< Base currency std::string_view quote_currency; //!< Quote currency std::string_view margin_currency; //!< Margin currency std::string_view commission_currency; //!< Commission currency double tick_size = NaN; //!< Minimum price increment double multiplier = NaN; //!< Multiplier (notional) double min_notional = NaN; //!< Minimum notional (price quantity) double min_trade_vol = NaN; //!< Minimum trade volume double max_trade_vol = NaN; //!< Maximum trade volume double trade_vol_step_size = NaN; //!< Trade volume step size OptionType option_type = {}; //!< Option type std::string_view strike_currency; //!< Strike currency double strike_price = NaN; //!< Strike price std::string_view underlying; //!< Underlying instrument std::string_view time_zone; //!< Time-zone std::chrono::days issue_date = {}; //!< Issue date std::chrono::days settlement_date = {}; //!< Settlement date std::chrono::seconds expiry_datetime = {}; //!< Expiry datetime std::chrono::seconds expiry_datetime_utc = {}; //!< Expiry datetime bool discard = false; //!< Discard market data updates? };**

this structure really does not have such fields as exchange_time_utc and other fields

here is the structure ReferenceData

*struct ROQ_PUBLIC ReferenceData final { uint16_t stream_id = {}; //!< Stream identifier std::string_view exchange; //!< Exchange std::string_view symbol; //!< Symbol std::string_view description; //!< Description SecurityType security_type = {}; //!< Security type std::string_view base_currency; //!< Base currency std::string_view quote_currency; //!< Quote currency std::string_view margin_currency; //!< Margin currency std::string_view commission_currency; //!< Commission currency double tick_size = NaN; //!< Minimum price increment double multiplier = NaN; //!< Multiplier (notional) double min_notional = NaN; //!< Minimum notional (price quantity) double min_trade_vol = NaN; //!< Minimum trade volume double max_trade_vol = NaN; //!< Maximum trade volume double trade_vol_step_size = NaN; //!< Trade volume step size OptionType option_type = {}; //!< Option type std::string_view strike_currency; //!< Strike currency double strike_price = NaN; //!< Strike price std::string_view underlying; //!< Underlying instrument std::string_view time_zone; //!< Time-zone std::chrono::days issue_date = {}; //!< Issue date std::chrono::days settlement_date = {}; //!< Settlement date std::chrono::seconds expiry_datetime = {}; //!< Expiry datetime std::chrono::seconds expiry_datetime_utc = {}; //!< Expiry datetime std::chrono::nanoseconds exchange_time_utc = {}; //!< Exchange timestamp, possibly from matching engine (UTC) uint64_t exchange_sequence = {}; //!< Exchange message sequence number std::chrono::nanoseconds sending_time_utc = {}; //!< Exchange sending timestamp (UTC) bool discard = false; //!< Discard market data updates? };** which is stored in /home/linoxoidunix/Programming/C++/roq-api/include/roq/reference_data.hpp

You may notice that in this structure there are fields like exchange_time_utc

Thus, the roq-samples sources (https://github.com/roq-trading/roq-samples) are not compatible with the roq-api package, which is installed via conda

Can you update roq-api, which is installed via conda, so that it is compatible with roq-samples sources?

I also tried to build the roq-api library from source. This library compiled without problems. Then I tried to compile roq-samples using the roq-api library compiled from source code. As a result, I received other errors related to the lack of some *.h files

thraneh commented 10 months ago

Hi,

Thanks for noticing this. It was documentation issue. (The README now suggests using the unstable channel -- this commit.)

Let me explain:

There are two sources for packages -- stable and unstable. The former is for the releases. The latter is "head".

Therefore, when installing packages from stable, you must select the roq-samples code for the latest release. Currently you would achieve it by git checkout 4a8008d (release 0.9.8) and then rebuild.

Can you update roq-api, which is installed via conda, so that it is compatible with roq-samples sources?

Should be solved by updating the documentation suggesting that you download packages from unstable.

I also tried to build the roq-api library from source. This library compiled without problems. Then I tried to compile roq-samples using the roq-api library compiled from source code. As a result, I received other errors related to the lack of some *.h files

That's because other dependencies are closed source. You can find them listed in the main CMakeLists.txt file, e.g. roq-io, roq-utils, ...

Finally, if you try this again:

Alternatively, just try it all from scratch.

linoxoidunix commented 10 months ago

thank you for answering so quickly the problem was solved Снимок экрана от 2024-01-02 13-00-24

thraneh commented 10 months ago

Many thanks for the feedback!

Feel free to reach out if you need anything else.