OptionsBot Index

Directory / tfrmma/options-vrp-harvester

A

tfrmma/options-vrp-harvester

Options trading bot for Derive.xyz. Captures volatility risk premium by selling short-dated Iron Condors (7-14 DTE) while recycling a portion of the premium into long Calendar Spreads (30-45 DTE) as tail hedges. Includes risk management with circuit breakers, VRP-based signals, and a terminal dashboard. Supports both paper and live modes.

Reviewed Bot 86/100
Not financial advice. A grade measures public repo hygiene only (license, upkeep, tests, paper mode, risk limits, docs). It does not measure returns, safety or suitability. Options trading can lose more than you invest. Read the full policy.
Reviewed. Grok Bot read the code and docs and checked or adjusted each judged factor. Nothing was executed. This is not a human audit. Reviewed on 2026-10-24 against commit 87f42fc, rubric v1.1.

Reviewer summary: Volatility risk premium bot for Derive options with a risk engine, circuit breakers, paper trading as the default loop and a single integration test file.

Facts

Repositoryhttps://github.com/tfrmma/options-vrp-harvester
TypeBot
StrategiesVolatility harvesting, Iron condor, Calendar spreads
BrokersDerive
LicenseMIT
LanguagePython
Last commit2026-07-07 (109 days before the scan)
Last scanned2026-10-24
Stars3 (shown for context, never scored)

Score breakdown

FactorPointsHow it was decided
Risk limits and kill switch 20 / 20
risk/risk_engine.py has position and notional caps, stop loss logic and check_circuit_breakers with a manual reset.
Reviewer confirmed the scanner result.
Scanner evidence (5, automated, can include false matches)
  • main.py:64 [max loss] print(f"\nBest IC: score={c.score:.1f} credit=${c.net_credit:.2f} max_loss=${c.max_loss:.2f}")
  • risk/risk_engine.py:157 [max notional or exposure] max_notional = cfg.total_capital_usd * cfg.max_position_pct
  • risk/risk_engine.py:375 [stop loss] return {**pos, "close_reason": f"stop loss {pnl_pct:.1%}", "urgency": "urgent"}
  • utils/backtester.py:75 [max drawdown] def max_drawdown(self) -> float:
  • core/bot.py:155 [circuit breaker] logger.warning(f"circuit breaker: {reason}")
License 15 / 15
MIT (OSI approved)
Reviewer confirmed the scanner result.
Scanner evidence (1, automated, can include false matches)
Last commit on default branch 8 / 15
109 days since last commit
Fact from the commit date, no judgment involved.
Scanner evidence (1, automated, can include false matches)
  • default branch HEAD 2026-07-07 (109 days ago)
Tests 10 / 15
4 test cases found in 1 test file; CI test step not found
Reviewer confirmed the scanner result.
Scanner evidence (1, automated, can include false matches)
Paper or dry-run mode 15 / 15
documented and code or config switch
Reviewer confirmed the scanner result.
Scanner evidence (2, automated, can include false matches)
  • README.md:5 Strategy: short Iron Condors (7-14 DTE) to harvest the volatility risk premium, with recycled premium funding long Calendar Spreads (30-45 D
  • config.py:62 [paper-mode flag] def is_paper(self) -> bool:
README quality 8 / 10
install steps, config or env vars, explains what it does, 4964 chars
Reviewer confirmed the scanner result.
Scanner evidence (1, automated, can include false matches)
Broker detection 10 / 10
Derive (deps, code, readme)
Reviewer confirmed the scanner result.
Scanner evidence (1, automated, can include false matches)
Total86 / 100Grades: A 85+, B 70+, C 55+, D 40+, F below.

Grades measure public repo hygiene on the scan date. They say nothing about profits, safety or security. We did not run this code. Full rubric and patterns.

Something wrong?

Report a correction Request removal (maintainers)

Corrections and removals are public GitHub issues. We reply within 7 days and every change is in the repo history. Sponsors get no special treatment: see our policy.

Badge for your README

Once the site has a public address, shields.io can read /badge/tfrmma--options-vrp-harvester.json from it. Badges show the grade and whether it was reviewed. Maintainers may use one without asking.