Ankit3445/options_pricing
0
1#pragma once2 3#include <string>4#include <vector>5#include <memory>6#include <atomic>7#include <thread>8#include <random>9#include <mutex>10#include <unordered_map>11 12#include "Common.hpp"13#include "ThreadSafeQueue.hpp"14#include "Config.hpp"15 16class AlphaVantageClient {17public:18 AlphaVantageClient(const std::vector<std::string>& symbols,19 const std::string& api_key,20 const AppConfig& config,21 std::shared_ptr<ThreadSafeQueue<MarketTick>> queue);22 ~AlphaVantageClient();23 24 void start();25 void stop();26 void pause();27 void resume();28 bool is_paused() const;29 void request_reset();30 void set_symbols(const std::vector<std::string>& symbols);31 std::vector<std::string> get_symbols() const;32 33private:34 void polling_loop();35 MarketTick fetch_quote(const std::string& symbol);36 std::vector<MarketTick> expand_option_chain(const MarketTick& base);37 double compute_option_market_price(double spot, double strike, double T, double r, OptionType type) const;38 double synthetic_spot(const std::string& symbol);39 40 std::vector<std::string> symbols_;41 std::string api_key_;42 AppConfig config_;43 std::shared_ptr<ThreadSafeQueue<MarketTick>> queue_;44 std::atomic<bool> running_{false};45 std::unique_ptr<std::thread> thread_;46 std::atomic<size_t> symbol_index_{0};47 std::atomic<bool> paused_{false};48 std::atomic<bool> reset_requested_{false};49 mutable std::mutex symbols_mutex_;50};51 