Giter Club home page Giter Club logo

quantx's Introduction

QuantX

QuantX encompasses modules for real-time stock data collection, analysis, AI-driven position sizing, and data insights, providing traders with informed decision-making capabilities. Highlighting dynamic hedging strategies, advanced simulations, and slippage modeling, QuantX facilitates risk reduction and strategy enhancement. With its technical analysis tools and API integration, the project offers a robust platform for quantitative trading and in-depth market analysis.

Features

  • Position Sizing Module:

    • Calculates position sizes based on risk percentage and stop loss percentage.
    • Supports calculation of position size with a specified maximum loss amount.
  • Moving Average Module:

    • Computes simple moving averages (SMA) and exponential moving averages (EMA) for a given window size.
    • Tracks and updates moving averages as new data points are added.
  • Mean Reversion Analysis Module:

    • Analyzes mean reversion using historical price data.
    • Provides methods to calculate mean reversion values, average mean reversion, and identify extreme values.
  • Market Data Analysis Module:

    • Performs various market data analyses on historical price data.
    • Calculates average price, volatility, upward and downward trends, and the relative strength index (RSI).
  • Dynamic Hedging Module:

    • Implements dynamic hedging strategies based on moving averages.
    • Determines short and long moving averages windows for analysis.
    • Outputs moving average values and their changes over time.
  • Correlation Analysis Module:

    • Conducts correlation analysis between two sets of historical price data.
    • Calculates the correlation coefficient to measure the relationship between asset prices.
  • Slippage Modeling Module:

    • Models slippage effects on trading.
    • Considers slippage due to market conditions and trading volume.
    • Adjusts slippage based on trade volume and market volatility.
  • Price History Management:

    • Manages historical price data for various assets.
    • Fetches historical price data using Yahoo Finance API.
    • Stores and organizes data points for analysis.
  • Advanced Simulation:

    • Performs Monte Carlo simulations to assess trading strategy performance.
    • Simulates multiple scenarios with varying initial investments.
  • Time and Date Utilities:

    • Converts between different time representations (POSIX timestamps and human-readable dates).
    • Compares dates and checks their order.
//sys.cpp
int main() {
    
    PriceHistory *snp500History = new PriceHistory("AAPL");
    PriceHistory *eurusdHistory = new PriceHistory("EURUSD=X");
    PriceHistory *euraudHistory = new PriceHistory("EURAUD=X");

    
    snp500History->fetchHistoricalData("2017-12-01", "2017-12-31", "1d");
    eurusdHistory->fetchHistoricalData("2018-01-01", "2018-01-10", "1d");
    euraudHistory->fetchHistoricalData("2018-01-01", "2018-01-10", "1d");

    
    cout << "Historical data for S&P 500 (Dec 2017):" << endl;
    snp500History->printDataPoints();

    
    try {
        PricePoint dataPoint = snp500History->getDataPoint("2017-12-01");
        cout << "Data point at 2017-12-01:" << endl;
        dataPoint.printPricePoint();
    } catch (const exception &e) {
        cerr << e.what() << endl;
    }

    
    cout << "EUR/USD rates (Jan 2018):" << endl;
    eurusdHistory->printDataPoints();

    
    cout << "EUR/AUD rates (Jan 2018):" << endl;
    euraudHistory->printDataPoints();

    
    delete snp500History;
    delete eurusdHistory;
    delete euraudHistory;
}
//position_sizing.cpp
int main() {
    // Create an instance of the PositionSizing class with a risk percentage and stop loss percentage
    PositionSizing positionSizer(2.5, 0.02); // Example risk: 2.5%, stop loss: 2%

    // Calculate position size based on risk percentage and stop loss
    double portfolioSize = 100000; // Example portfolio size: $100,000
    double entryPrice = 50; // Example entry price: $50 per share
    double positionSize = positionSizer.calculatePositionSize(portfolioSize, entryPrice);
    
    std::cout << "Calculated Position Size: " << positionSize << " shares" << std::endl;

    // Modify risk and stop loss percentages
    positionSizer.setRiskPercentage(3.0); // Change risk percentage to 3%
    positionSizer.setStopLossPercentage(0.03); // Change stop loss percentage to 3%

    // Calculate position size with a maximum loss amount
    double maxLossAmount = 2500; // Example maximum allowable loss: $2,500
    double positionSizeWithMaxLoss = positionSizer.calculatePositionSizeWithMaxLoss(portfolioSize, entryPrice, maxLossAmount);
    
    std::cout << "Position Size with Max Loss: " << positionSizeWithMaxLoss << " shares" << std::endl;

    return 0;
}
//moving_averages.cpp
int main() {
    // Create a PriceHistory instance for the "AAPL" asset
    PriceHistory priceHistory("AAPL");

    // Fetch historical data for the specified date range and interval
    priceHistory.fetchHistoricalData("2023-01-01", "2023-08-31", "1d");

    // Define window size for moving averages and EMA smoothing factor
    size_t windowSize = 5;
    double emaSmoothingFactor = 0.2;

    // Calculate and display moving averages for the fetched data
    priceHistory.calculateMovingAverages(windowSize, emaSmoothingFactor);

    return 0;
}
//mean_reversion.cpp
int main() {
    PriceHistory priceHistory("AAPL"); // Create a PriceHistory instance for the "AAPL" asset
    priceHistory.fetchHistoricalData("2023-01-01", "2023-08-31", "1d"); // Fetch historical data

    int movingWindowSize = 10; // Define the moving window size for mean reversion calculation
    MeanReversion meanReversion(priceHistory, movingWindowSize); // Create a MeanReversion instance

    meanReversion.calculateMeanReversion(); // Calculate mean reversion values
    meanReversion.printMeanReversionResults(); // Print mean reversion results

    // Get statistics about mean reversion values
    std::cout << "Average Mean Reversion: " << meanReversion.getAverageMeanReversion() << std::endl;
    std::cout << "Max Mean Reversion Index: " << meanReversion.getMaxMeanReversionIndex() << std::endl;
    std::cout << "Min Mean Reversion Index: " << meanReversion.getMinMeanReversionIndex() << std::endl;

    return 0;
}
//market_data_analysis.cpp
int main() {
    MarketDataAnalysis marketAnalysis("AAPL"); // Create a MarketDataAnalysis instance for "AAPL" asset
    marketAnalysis.priceHistory_.fetchHistoricalData("2023-01-01", "2023-08-31", "1d"); // Fetch historical data

    double avgPrice = marketAnalysis.calculateAveragePrice();
    double volatility = marketAnalysis.calculateVolatility();
    cout << "Average Price: " << avgPrice << endl;
    cout << "Volatility: " << volatility << endl;

    vector<PricePoint> upwardTrends = marketAnalysis.getUpwardTrends();
    vector<PricePoint> downwardTrends = marketAnalysis.getDownwardTrends();
    cout << "Number of Upward Trends: " << upwardTrends.size() << endl;
    cout << "Number of Downward Trends: " << downwardTrends.size() << endl;

    size_t rsiPeriod = 14; // RSI calculation period
    double rsiValue = marketAnalysis.calculateRelativeStrengthIndex(rsiPeriod);
    cout << "RSI for period " << rsiPeriod << ": " << rsiValue << endl;

    return 0;
}
//dynamic_hedging.cpp
int main() {
    string assetSymbol = "AAPL";
    const char* startDate = "2023-01-01";
    const char* endDate = "2023-08-31";
    const char* interval = "1d";

    DynamicHedging dynamicHedging(assetSymbol, startDate, endDate, interval);
    dynamicHedging.performDynamicHedging();

    return 0;
}
```cpp
//correlation_analysis.cpp
int main() {
    string assetSymbolA = "AAPL"; // Asset symbol for the first historical data
    string assetSymbolB = "MSFT"; // Asset symbol for the second historical data

    const char* startDate = "2023-01-01";
    const char* endDate = "2023-08-31";
    const char* interval = "1d";

    // Create PriceHistory instances for both assets and fetch historical data
    PriceHistory historyA(assetSymbolA);
    historyA.fetchHistoricalData(startDate, endDate, interval);

    PriceHistory historyB(assetSymbolB);
    historyB.fetchHistoricalData(startDate, endDate, interval);

    // Create a CorrelationAnalysis instance and calculate correlation
    CorrelationAnalysis correlationAnalysis(historyA, historyB);
    double correlation = correlationAnalysis.calculateCorrelation();

    std::cout << "Correlation between " << assetSymbolA << " and " << assetSymbolB << ": " << correlation << std::endl;

    return 0;
}
//slippage_model
int main() {
    PriceHistory priceHistory("AAPL");
    priceHistory.fetchHistoricalData("2023-01-01", "2023-08-01", "1d");

    SlippageModel slippageModel(priceHistory, 0.01);

    // Convert date strings to time_t using a function like convertDateToEpoch()

    time_t entryDate = convertDateToEpoch("2023-03-15");
    double entryPrice = 150.0;
    time_t exitDate = convertDateToEpoch("2023-06-15");
    double exitPrice = 170.0;
    double tradeVolume = 10000.0;

    double calculatedSlippage = slippageModel.calculateSlippage(entryDate, entryPrice, exitDate, exitPrice, tradeVolume);
    std::cout << "Calculated slippage: " << calculatedSlippage << std::endl;

    return 0;
}

quantx's People

Contributors

teddyoweh avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.