Agent skill

Machine Learning Trading Strategy

by HKUDS in HKUDS/Vibe-Trading

Trains scikit-learn models with walk-forward validation on features from OHLCV data to predict return direction and turn the predictions into trading signals.

MITAuto-check passedData & Analytics

Install Machine Learning Trading Strategy

skills CLI
$ npx skills add HKUDS/Vibe-Trading --skill ml-strategy -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install HKUDS/Vibe-Trading ml-strategy --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/HKUDS/Vibe-Trading.git skills-src && mkdir -p .claude/skills && cp -r skills-src/agent/src/skills/ml-strategy .claude/skills/ml-strategy && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
ml-strategy
GitHub stars
35k
Token cost
~3.2k tokens
SKILL.md length
576 words
Files
1
Skills in repo
89
Repo updated
First seen
Licence
MIT

At a glance

Trains scikit-learn models with walk-forward validation on features from OHLCV data to predict return direction and turn the predictions into trading signals.

  • Works in 5 steps: Validate input: check OHLCV columns,… → Feature engineering: build… → Label construction: future N-day return… → …
  • Building a walk-forward machine learning signal engine for any OHLCV data
  • SKILL.md covers Purpose, Signal Logic, Complete SignalEngine Example and Feature Engineering Reference, plus 5 more sections
  • Calls pip

What it does

The skill predicts the direction of future returns with RandomForest, GradientBoosting or Ridge models from scikit-learn. The pipeline validates the OHLCV input, builds features such as momentum, volatility, RSI, moving-average ratios and volume ratio with guards against infinities and division by zero, labels each row by whether the future N-day return is positive, and trains with an expanding or sliding window on past data only.

Predictions are mapped to signals between -1.0 and 1.0 from predicted probabilities, or to discrete -1, 0 and 1, with the output guaranteed free of NaN and clipped to range. A complete SignalEngine example is provided as the recommended pipeline, followed by a table of the default features, with build_features() as the place to customize them, and a model selection guide.

When your agent uses it

  • Building a walk-forward machine learning signal engine for any OHLCV data
  • Adding or changing features in build_features()
  • Avoiding future data leakage when training a trading model
  • Choosing between RandomForest, GradientBoosting and Ridge for a signal

Example prompts

  • “Write a SignalEngine that trains a RandomForest walk-forward on daily OHLCV data.”
  • “Add a Bollinger Band position feature to build_features().”
  • “How do I make sure my model training never sees future data?”
  • “Switch the signal from probabilities to discrete -1, 0 and 1 outputs.”

Requirements

  • Python with scikit-learn, pandas and numpy
  • OHLCV price data

Workflow steps

5 steps, taken from the first numbered list in SKILL.md.

  1. Validate input: check OHLCV columns, minimum row count, NaN ratio — skip symbols that fail
  2. Feature engineering: build multi-dimensional factors from raw OHLCV data (momentum, volatility, RSI, moving-average ratios, volume ratio…
  3. Label construction: future N-day return > 0 is the positive class (1), < 0 is the negative class (0)
  4. Walk-forward training: use an expanding or sliding window, train on historical data only, and roll forward day by day for prediction
  5. Signal generation: map predict_proba[:, 1] to [-1.0, 1.0], or use discrete signals from predict in {-1, 0, 1}. Output is guaranteed clean…

What it can do on your machine

Read from SKILL.md and the folder at commit e532650. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • pip

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use pip, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Machine Learning Trading Strategy loads about 3.2k tokens when it runs. Until then it costs about 40 tokens; SKILL.md has 576 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~40
When it runs · the whole SKILL.md, loaded when a task matches
~3.2k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from HKUDS/Vibe-Trading at commit e532650, republished under its MIT licence (© HKUDS). 576 words, ~3,164 tokens.

Download SKILL.mdSave it as .claude/skills/ml-strategy/SKILL.md (or your agent's skills folder).
name
ml-strategy
description
Machine-learning predictive strategy based on sklearn walk-forward training, feature engineering, and signal generation. Suitable for any OHLCV data.
category
strategy

Machine-Learning Predictive Strategy

Purpose

Use sklearn machine-learning models (RandomForest / GradientBoosting / Ridge) to predict the direction of future returns and generate trading signals. Walk-forward training is used to avoid future data leakage, and feature engineering extracts useful factors from OHLCV data.

Signal Logic

  1. Validate input: check OHLCV columns, minimum row count, NaN ratio — skip symbols that fail
  2. Feature engineering: build multi-dimensional factors from raw OHLCV data (momentum, volatility, RSI, moving-average ratios, volume ratio, and more). All features are sanitized (inf removed, division-by-zero guarded)
  3. Label construction: future N-day return > 0 is the positive class (1), < 0 is the negative class (0)
  4. Walk-forward training: use an expanding or sliding window, train on historical data only, and roll forward day by day for prediction
  5. Signal generation: map predict_proba[:, 1] to [-1.0, 1.0], or use discrete signals from predict in {-1, 0, 1}. Output is guaranteed clean (no NaN, clipped to range)

Complete SignalEngine Example

This is the recommended full pipeline. Copy and customise — safety is built in.

python
import numpy as np
import pandas as pd
from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScaler


def validate_data(df: pd.DataFrame, min_rows: int = 300) -> bool:
    """Check that OHLCV data meets minimum quality for ML training.

    Args:
        df: DataFrame with DatetimeIndex.
        min_rows: Minimum number of rows required.

    Returns:
        True if data is usable.
    """
    required = {"open", "high", "low", "close", "volume"}
    if not required.issubset(df.columns):
        return False
    if len(df) < min_rows:
        return False
    if df["close"].isnull().mean() > 0.2:
        return False
    return True


def build_features(df: pd.DataFrame) -> pd.DataFrame:
    """Build a machine-learning feature matrix from OHLCV data.

    All features are guarded against division-by-zero and sanitized
    (inf replaced with NaN) so downstream code never sees inf values.

    Args:
        df: DataFrame containing open, high, low, close, and volume columns.

    Returns:
        DataFrame with feature columns prefixed by 'f_'.
    """
    c = df["close"]
    v = df["volume"]
    ret = c.pct_change(fill_method=None)

    features = pd.DataFrame(index=df.index)
    features["f_ret_5d"] = c.pct_change(5, fill_method=None)
    features["f_ret_20d"] = c.pct_change(20, fill_method=None)
    features["f_vol_20d"] = ret.rolling(20).std()
    features["f_ma_ratio"] = c / c.rolling(20).mean()
    features["f_volume_ratio"] = v / v.rolling(20).mean()

    # RSI(14) — guard: loss=0 in zero-volatility periods produces inf
    delta = c.diff()
    gain = delta.clip(lower=0).rolling(14).mean()
    loss = (-delta.clip(upper=0)).rolling(14).mean()
    rs = gain / loss.replace(0, np.nan)
    features["f_rsi_14"] = 100 - (100 / (1 + rs))

    # Bollinger Band position — guard: bb_upper == bb_lower when std=0
    ma20 = c.rolling(20).mean()
    std20 = c.rolling(20).std()
    bb_upper = ma20 + 2 * std20
    bb_lower = ma20 - 2 * std20
    bb_range = (bb_upper - bb_lower).replace(0, np.nan)
    features["f_bb_position"] = (c - bb_lower) / bb_range

    # Intraday features
    features["f_high_low_ratio"] = (df["high"] - df["low"]) / c
    features["f_close_open_ratio"] = (c - df["open"]) / df["open"]
    features["f_skew_20d"] = ret.rolling(20).skew()

    # Sanitize: replace all inf with NaN (NaN handled by walk-forward)
    features = features.replace([np.inf, -np.inf], np.nan)
    return features


def walk_forward_predict(
    features: pd.DataFrame,
    labels: pd.Series,
    min_train_size: int = 252,
    retrain_freq: int = 20,
    model_type: str = "random_forest",
    window_type: str = "expanding",
    sliding_size: int = 504,
    prediction_horizon: int = 5,
) -> pd.Series:
    """Walk-forward training and prediction to avoid future data leakage.

    Args:
        features: Feature matrix aligned with labels by row index.
        labels: Binary labels (0/1), representing the direction of future N-day returns.
        min_train_size: Minimum training-set size in trading days.
        retrain_freq: Retrain the model every N days.
        model_type: One of "random_forest" / "gradient_boosting" / "ridge".
        window_type: "expanding" uses all history; "sliding" uses a fixed lookback.
        sliding_size: Lookback window size when window_type is "sliding".
        prediction_horizon: Number of bars each target label looks ahead.

    Returns:
        Predicted signal series with range [-1.0, 1.0], no NaN values.
    """
    predictions = pd.Series(0.0, index=features.index)
    model = None
    scaler = None

    if prediction_horizon < 1:
        raise ValueError("prediction_horizon must be >= 1")

    for i in range(min_train_size, len(features)):
        # Retrain every retrain_freq days
        if model is None or (i - min_train_size) % retrain_freq == 0:
            # A label at row t is observable only once t + horizon <= i.
            train_stop = max(0, i - prediction_horizon + 1)
            start = (
                max(0, train_stop - sliding_size)
                if window_type == "sliding"
                else 0
            )
            X_train = features.iloc[start:train_stop].values
            y_train = labels.iloc[start:train_stop].values

            # Drop rows with NaN
            valid = ~(np.isnan(X_train).any(axis=1) | np.isnan(y_train))
            X_train = X_train[valid]
            y_train = y_train[valid]

            # Too few rows, or a single class (a sustained one-directional
            # trend, which crashes fit()/predict_proba() on every model type
            # below): skip the retrain. The previous model keeps serving; before
            # the first model there is no prediction.
            if len(X_train) >= 50 and len(np.unique(y_train)) >= 2:
                # Standardization: fit only on training set
                scaler = StandardScaler()
                X_train = scaler.fit_transform(X_train)

                # Build the model
                if model_type == "random_forest":
                    model = RandomForestClassifier(
                        n_estimators=100, max_depth=5, random_state=42,
                    )
                elif model_type == "gradient_boosting":
                    model = GradientBoostingClassifier(
                        n_estimators=100, max_depth=3, learning_rate=0.05,
                        random_state=42,
                    )
                elif model_type == "ridge":
                    model = LogisticRegression(penalty="l2", C=1.0, random_state=42)
                else:
                    raise ValueError(f"Unsupported model_type: {model_type}")

                model.fit(X_train, y_train)

        if model is None:
            continue

        # Predict today
        X_today = features.iloc[i : i + 1].values
        if np.isnan(X_today).any():
            predictions.iloc[i] = 0.0
            continue

        X_today = scaler.transform(X_today)

        if hasattr(model, "predict_proba"):
            prob = model.predict_proba(X_today)[0, 1]
            predictions.iloc[i] = prob * 2 - 1  # [0,1] -> [-1,1]
        else:
            predictions.iloc[i] = float(model.predict(X_today)[0])

    # Output contract: no NaN, clipped to [-1, 1]
    predictions = predictions.fillna(0.0).clip(-1.0, 1.0)
    return predictions


class SignalEngine:
    """Complete ML strategy with built-in data validation and safety."""

    def generate(self, data_map: dict) -> dict:
        """Generate signals for each symbol.

        Args:
            data_map: code -> OHLCV DataFrame.

        Returns:
            code -> signal Series in [-1.0, 1.0].
        """
        signals = {}
        for code, df in data_map.items():
            if not validate_data(df):
                print(f"[WARN] {code}: data quality insufficient, skipping")
                continue

            features = build_features(df)
            prediction_horizon = 5
            future_returns = (
                df["close"].shift(-prediction_horizon) / df["close"] - 1
            )
            labels = (future_returns > 0).astype(float).where(future_returns.notna())
            signal = walk_forward_predict(
                features,
                labels,
                prediction_horizon=prediction_horizon,
            )
            signals[code] = signal

        return signals

Feature Engineering Reference

The table below lists all default features. Add or remove features as needed — build_features() is the customisation point.

Feature NameFormulaMeaning
ret_5dclose.pct_change(5, fill_method=None)Past 5-day return (short-term momentum)
ret_20dclose.pct_change(20, fill_method=None)Past 20-day return (medium-term momentum)
vol_20dreturns.rolling(20).std()20-day volatility
rsi_14See RSI formula in codeRelative Strength Index (division-by-zero guarded)
ma_ratioclose / close.rolling(20).mean()Degree of deviation from the 20-day moving average
volume_ratiovolume / volume.rolling(20).mean()Volume ratio (current volume vs 20-day average)
bb_position(close - bb_lower) / (bb_upper - bb_lower)Bollinger Band position (zero-bandwidth guarded)
high_low_ratio(high - low) / closeIntraday range ratio
close_open_ratio(close - open) / openIntraday return
skew_20dreturns.rolling(20).skew()Return skewness

Model Selection Guide

ModelAdvantagesDisadvantagesApplicable Scenario
RandomForestClassifierHard to overfit, robust to hyperparameters, can output feature importanceWeaker at capturing trend-style featuresDefault first-choice model, medium data size
GradientBoostingClassifierHigh accuracy, captures complex nonlinear relationshipsEasy to overfit, slow to train, requires careful tuningSufficient data and tuning experience
Ridge / LogisticRegressionFast training, interpretable, difficult to overfitCaptures only linear relationshipsFast baseline, few features, small dataset
Show full SKILL.md (235 more words)Show less

Parameters

ParameterDefaultDescription
model_type"random_forest"Model type: random_forest / gradient_boosting / ridge
min_train_size252Minimum training-set size (starting length of the expanding window)
retrain_freq20Retraining frequency (every N trading days)
prediction_horizon5Prediction horizon (future N-day return)
n_estimators100Number of trees for tree-based models
max_depth5Maximum tree depth (prevents overfitting)
threshold0.0Signal filtering threshold (abs(signal) < threshold is set to 0)
window_type"expanding"Training window: expanding (all history) or sliding (fixed lookback)
sliding_size504Lookback size for sliding window (2 years of trading days)

Common Pitfalls

The pipeline code above already handles data leakage, standardization leakage, inf/NaN propagation, and retraining frequency. The following pitfalls still require your judgement:

  1. Overfitting: trees that are too deep (max_depth > 10), too many features, or too small a training set. Keep max_depth=3~5 and feature count < 15
  2. Class imbalance: in bull markets the up/down ratio may be 7:3, so the model may prefer predicting the majority class. Use class_weight="balanced" or SMOTE if needed
  3. Look-ahead bias (non-leakage form): computing features from today's close and predicting today's signal. Make sure features use only data from T-1 and earlier

Dependencies

bash
pip install scikit-learn pandas numpy

Signal Convention

  • predict_proba[:, 1] mapped through prob * 2 - 1 to [-1.0, 1.0] (continuous-strength signal)
  • Or discrete signals from predict() in {-1, 0, 1} (short, neutral, long)
  • Positive values = bullish direction, negative values = bearish direction, absolute value = confidence strength
  • Output is guaranteed: no NaN, no inf, clipped to [-1.0, 1.0]

© HKUDS, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in agent/src/skills/ml-strategy of HKUDS/Vibe-Trading.

Open the folder on GitHubat commit e532650

Compare with similar skills

Machine Learning Trading Strategy next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Machine Learning Trading Strategy compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Machine Learning Trading Strategy this skillHKUDS/Vibe-Trading35k—~3.2kAutomated safety check: PassMIT
Senior Data ScientistRaidriar7170/hermes-skilleval1255 repos~1.4kAutomated safety check: PassMIT
Senior Data Scientistalirezarezvani/claude-skills28k1 repos~2.3kAutomated safety check: PassMIT
Scikit Learn Machine Learningjaechang-hits/SciAgent-Skills3711 repos~4kAutomated safety check: PassBSD-3-Clause
Statistical Data Analysislingzhi227/agent-research-skills386—~886Automated safety check: PassNone
Optimize For GPUK-Dense-AI/scientific-agent-skills48k1 repos~3.4kAutomated safety check: PassMIT

Similar skills

  • Senior Data Scientist

    Raidriar7170/hermes-skilleval

    World-class data science skill for statistical modeling, experimentation, causal inference, and advanced analytics.

    125 GitHub starsUsed in 5 repos~1.4k tokens
    Data & AnalyticsAuto-check passed
  • Senior Data Scientist

    alirezarezvani/claude-skills

    World-class senior data scientist skill specialising in statistical modeling, experiment design, causal inference, and predictive analytics.

    28k GitHub starsUsed in 1 repo~2.3k tokens
    Data & AnalyticsAuto-check passed
  • Scikit Learn Machine Learning

    jaechang-hits/SciAgent-Skills

    Classical ML in Python: classification, regression, clustering, dim reduction, evaluation, tuning, preprocessing pipelines.

    371 GitHub starsUsed in 1 repo~4k tokens
    Data & AnalyticsAuto-check passed
  • Statistical Data Analysis

    lingzhi227/agent-research-skills

    Writes statistical analysis code for experimental data, runs it through a four-round review, and reports effect sizes, p-values and confidence intervals.

    386 GitHub stars~886 tokensUpdated 7 mo ago
    Data & AnalyticsAuto-check passed
  • Optimize For GPU

    K-Dense-AI/scientific-agent-skills

    GPU-accelerates scientific Python on NVIDIA hardware and verifies that the result is correct and faster.

    48k GitHub starsUsed in 1 repo~3.4k tokens
    Data & AnalyticsAuto-check passed
  • Plot ML Figure

    probabl-ai/skills

    Pick how to write a figure before custom plot code. An agent skill from probabl-ai/skills.

    138 GitHub stars~785 tokensUpdated today
    Data & AnalyticsAuto-check passed

More from HKUDS/Vibe-Trading

All 89 skills in this repo
  • Eastmoney Market Data

    HKUDS/Vibe-Trading

    Index of Eastmoney's free, no-token market data interfaces for China A-shares and Hong Kong stocks: fund flows, dragon-tiger lists, margin trading, reports and news.

    35k GitHub stars~1k tokensUpdated today
    Auto-check passed
  • OKX Market Data

    HKUDS/Vibe-Trading

    Retrieves public OKX cryptocurrency market data such as spot prices, candlesticks, funding rates and open interest through the OKX V5 REST API, with no authentication.

    35k GitHub stars~1.3k tokensUpdated today
    Auto-check passed
  • SEC EDGAR Filings Fetcher

    HKUDS/Vibe-Trading

    Fetches U.S. SEC EDGAR data: resolves tickers to CIK numbers, lists recent 10-K, 10-Q and 8-K filings with document URLs, and pulls XBRL financial series.

    35k GitHub stars~1.4k tokensUpdated today
    Auto-check passed
  • A-Share ST Risk Screener

    HKUDS/Vibe-Trading

    Predicts whether a mainland China A-share company risks an ST or *ST warning after its next annual report, using financial thresholds and Sina penalty records.

    35k GitHub stars~4.9k tokensUpdated today
    Auto-check passed
  • Breaks a structural trend such as AI infrastructure into its physical supply chain and ranks lesser-known listed companies sitting on each bottleneck.

    35k GitHub stars~2.7k tokensUpdated today
    Auto-check passed
  • Plans and drafts an eight-part, roughly 120k-word investigative series on one company, built around a strict fact-check pass rather than fast drafting.

    35k GitHub stars~2.4k tokensUpdated today
    Auto-check passed

Questions about Machine Learning Trading Strategy

What does Machine Learning Trading Strategy do?

Trains scikit-learn models with walk-forward validation on features from OHLCV data to predict return direction and turn the predictions into trading signals. The skill predicts the direction of future returns with RandomForest, GradientBoosting or Ridge models from scikit-learn. The pipeline validates the OHLCV input, builds features such as momentum, volatility, RSI, moving-average ratios and volume ratio with guards against infinities and division by zero, labels each row by whether the future N-day return is positive, and trains with an expanding or sliding window on past data only.

When should I use Machine Learning Trading Strategy?

Machine Learning Trading Strategy fits situations like: building a walk-forward machine learning signal engine for any OHLCV data; adding or changing features in build_features(); avoiding future data leakage when training a trading model; choosing between RandomForest, GradientBoosting and Ridge for a signal.

How do I install Machine Learning Trading Strategy in Claude Code?

Run `npx skills add HKUDS/Vibe-Trading --skill ml-strategy -a claude-code`. Or copy the skill folder (agent/src/skills/ml-strategy in HKUDS/Vibe-Trading) into .claude/skills/ml-strategy in your project. Claude Code loads it when a task matches its description.

How do I install Machine Learning Trading Strategy in Codex?

Run `npx skills add HKUDS/Vibe-Trading --skill ml-strategy -a codex`. Or copy the skill folder (agent/src/skills/ml-strategy in HKUDS/Vibe-Trading) into .agents/skills/ml-strategy in your project. Codex loads it when a task matches its description.

Can I use Machine Learning Trading Strategy in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add HKUDS/Vibe-Trading --skill ml-strategy -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/ml-strategy, .gemini/skills/ml-strategy, .github/skills/ml-strategy and .opencode/skills/ml-strategy in your project.

What does Machine Learning Trading Strategy need to run?

Going by SKILL.md and its folder, Machine Learning Trading Strategy needs the command-line tools its instructions call (pip). Our summary lists: Python with scikit-learn, pandas and numpy; OHLCV price data.

Does Machine Learning Trading Strategy access the network?

SKILL.md contains no URLs. Its commands use pip, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Machine Learning Trading Strategy safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Machine Learning Trading Strategy use?

Machine Learning Trading Strategy is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Machine Learning Trading Strategy use?

About 3.2k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Machine Learning Trading Strategy?

Skills that share tags, products or a category with Machine Learning Trading Strategy: Senior Data Scientist (Raidriar7170/hermes-skilleval, 125 stars), Senior Data Scientist (alirezarezvani/claude-skills, 28k stars), Scikit Learn Machine Learning (jaechang-hits/SciAgent-Skills, 371 stars) and Statistical Data Analysis (lingzhi227/agent-research-skills, 386 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Machine Learning Trading Strategy?

HKUDS (a GitHub organization) maintains it in HKUDS/Vibe-Trading, which has 35,043 GitHub stars. The repository holds 89 skills in this directory. The repository was last updated on October 8, 2026.

Source: HKUDS/Vibe-Trading on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.