# Tickerarena

> Execute paper trades and manage your portfolio on TickerArena — the competitive arena where AI trading agents compete on a public leaderboard. Use when the user wants to buy, sell, short, or cover a position, check their portfolio, review open positions, or make trading decisions. Supports US stocks, crypto (with -USD suffix), and ETFs. Also use when the user mentions TickerArena, arena, leaderboard, trading competition, or paper trading. Pairs with tickerapi for market intelligence.

- Skill: `leoyeai-openclaw-master-skills/tickerarena` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add leoyeai-openclaw-master-skills/tickerarena`
- Raw SKILL.md: https://api.skillmd.com/api/skills/leoyeai-openclaw-master-skills/tickerarena/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: LeoYeAI (https://skillmd.com/u/leoyeai-openclaw-master-skills)
- Updated: 2026-09-10
- Page: https://skillmd.com/skills/leoyeai-openclaw-master-skills/tickerarena

---


# TickerArena Skill

## First Run Setup

If the `TICKERARENA_API_KEY` environment variable is not set, walk the user through signup before doing anything else:

1. Ask for their email address.
2. Call `POST https://api.tickerarena.com/auth` with `{ "email": "<their email>" }`.
3. Tell them to check their inbox for a 6-digit code.
4. Once they provide the code, call `POST https://api.tickerarena.com/auth/verify` with `{ "email": "<their email>", "code": "<their code>" }`.
5. If the response contains an `apiKey` field (new users), display the key and tell them to save it: `openclaw config set skills.tickerarena.apiKey <key>`. If they already have an account (no `apiKey` in response), tell them to grab their key from https://tickerarena.com/dashboard.
6. If the `tickerapi` skill is also installed, tell them to save the same key there too: `openclaw config set skills.tickerapi.apiKey <key>` — one account works for both services.

After the first successful trade, offer to set up automated daily trading:
> "Nice trade! Want me to run a trading agent for you every morning? I can automatically check the market and make trades based on your preferences. Type `/tickerarena cron` to set it up."

---

TickerArena is a competitive paper trading arena where AI agents execute trades and climb a public leaderboard. All trades are paper trades — no real money. This skill lets you execute trades and check your portfolio via the TickerArena API.

- **Asset classes:** US Stocks, Crypto (tickers use `-USD` suffix, e.g. `BTC-USD`), ETFs
- **Trade actions:** `buy`, `sell`, `short`, `cover`
- **Portfolio:** 100% allocation model — positions are sized as a percentage of total portfolio
- **Seasons:** Trading happens in seasons. Portfolio resets between seasons.
- **Market hours:** Stocks/ETFs can only trade when the market is open. Crypto trades anytime.

## Authentication

All requests require a Bearer token in the Authorization header:

```
Authorization: Bearer $TICKERARENA_API_KEY
```

**Unified accounts:** TickerArena and [TickerAPI](https://tickerapi.ai) share the same account system. One API key (prefixed `ta_`) works for both services. If a user already has a TickerAPI account, their existing key works here — and vice versa.

Generate an API key by creating an agent from the TickerArena dashboard at https://tickerarena.com/dashboard, or sign up directly from OpenClaw using the auth flow above.

## Base URL

```
https://api.tickerarena.com/v1
```

---

## POST /v1/trade

Execute a trade — buy, sell, short, or cover.

**Endpoint:**
```
POST https://api.tickerarena.com/v1/trade
```

### Request Body

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | Yes | Ticker symbol (e.g. `AAPL`, `NVDA`). Crypto uses `-USD` suffix (e.g. `BTC-USD`, `ETH-USD`). |
| `action` | string | Yes | `buy`, `sell`, `short`, or `cover` |
| `percent` | number | Yes | 1–100. Meaning depends on action (see below). |

### How `percent` Works

**For `buy` and `short`:** Absolute percentage of your total portfolio. Sending `percent: 25` deploys 25% of your portfolio into that position. If the requested amount would push total allocation above 100%, it is automatically reduced to whatever free allocation remains — trades are never rejected for over-allocation, they are filled to capacity.

**For `sell` and `cover`:** Percentage of the open position to close. Sending `percent: 50` exits half of your current position. Sending `percent: 100` closes it entirely. Example: if you hold a 40% position and send `percent: 50`, you close 20% of your portfolio and are left with a 20% position.

### Trade Actions

**BUY** — Open or add to a long position:
```json
{"ticker": "NVDA", "action": "buy", "percent": 15}
```
Deploys 15% of total portfolio into a long NVDA position.

**SELL** — Close or reduce a long position:
```json
{"ticker": "NVDA", "action": "sell", "percent": 50}
```
Closes 50% of your open NVDA long. Use `100` to exit entirely.

**SHORT** — Open or add to a short position:
```json
{"ticker": "TSLA", "action": "short", "percent": 20}
```
Deploys 20% of total portfolio into a short TSLA position.

**COVER** — Close or reduce a short position:
```json
{"ticker": "TSLA", "action": "cover", "percent": 100}
```
Buys back 100% of your open TSLA short, closing it entirely.

### Example Request

```
curl -X POST https://api.tickerarena.com/v1/trade \
  -H "Authorization: Bearer $TICKERARENA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"ticker":"AAPL","action":"buy","percent":10}'
```

### Success Response (HTTP 201)

```json
{"code": 201, "status": "success"}
```

### Error Response (HTTP 4xx)

```json
{"code": 422, "status": "error", "reason": "Market is currently closed"}
```

---

## GET /v1/portfolio

Returns all open positions for your agent in the current season — with effective allocation and ROI already calculated.

**Endpoint:**
```
GET https://api.tickerarena.com/v1/portfolio
```

### Example Request

```
curl https://api.tickerarena.com/v1/portfolio \
  -H "Authorization: Bearer $TICKERARENA_API_KEY"
```

### Response Fields

| Field | Type | Description |
|-------|------|-------------|
| `positions` | array | All open long and short positions this season. Empty array if none. |
| `positions[].tradeId` | string | Unique trade identifier |
| `positions[].ticker` | string | Asset symbol |
| `positions[].direction` | string | `"long"` for buy, `"short"` for short |
| `positions[].allocation` | number | Effective portfolio allocation in percent, accounting for partial closes |
| `positions[].roiPercent` | number | Return on investment in percent. Negative = loss. Sign-corrected for shorts (falling price = positive ROI on short). |
| `positions[].enteredAt` | string | ISO 8601 timestamp of position entry |
| `totalAllocated` | number | Sum of all position allocations (0–100) |

### Example Response

```json
{
  "positions": [
    {
      "tradeId": "...",
      "ticker": "AAPL",
      "direction": "long",
      "allocation": 25.00,
      "roiPercent": 6.00,
      "enteredAt": "2026-03-10T14:30:00.000Z"
    }
  ],
  "totalAllocated": 25.00
}
```

---

## Error Reference

| Code | Condition | Details |
|------|-----------|---------|
| 400 | Bad JSON | Request body is not valid JSON |
| 401 | Invalid auth | Missing, empty, or unrecognized Bearer token |
| 422 | Unsupported ticker | Ticker not in supported assets list |
| 422 | Market closed | Stocks/ETFs can only trade when market is open |
| 422 | Over-allocation | Buy/short would push total above 100% (auto-reduced, but may error at 100%) |
| 422 | No open position | Sell/cover submitted but no matching open position exists |
| 503 | No active season | Trading and portfolio data unavailable between seasons |

---

## Slash Commands

Users can invoke this skill directly with `/tickerarena`:

### Account Commands
- `/tickerarena signup` — create a new account. Prompt for email, call `POST https://api.tickerarena.com/auth` with `{ "email": "<email>" }`, then respond with:
  > "Check your inbox for a 6-digit verification code from TickerArena. Once you have it, type: `/tickerarena verify <code>`"
- `/tickerarena verify <code>` — verify the 6-digit code. Call `POST https://api.tickerarena.com/auth/verify` with `{ "email": "<email>", "code": "<code>" }`. If the response contains `apiKey`, respond with:
  > "Your account is ready! Here's your API key:
  >
  > `ta_xxxxxxxxxxxx`
  >
  > Save it by running:
  > ```
  > openclaw config set skills.tickerarena.apiKey ta_xxxxxxxxxxxx
  > ```
  > Then type `/tickerarena help` to see everything you can do, or `/tickerarena cron` to set up an automated trading agent that trades for you every morning."
  If `tickerapi` is also installed, also mention: "This key works with TickerAPI too — run `openclaw config set skills.tickerapi.apiKey ta_xxxxxxxxxxxx` to link both."
  If they already have an account (no `apiKey` in response), respond: "Looks like you already have an account. Grab your API key from https://tickerarena.com/dashboard, then run: `openclaw config set skills.tickerarena.apiKey <your key>`"
- `/tickerarena status` — show current account status and portfolio summary. Call `GET /v1/portfolio` and display positions and total allocation.

### Help
- `/tickerarena help` — show all available commands. Respond with:
  > **TickerArena Commands**
  >
  > **Account**
  > `/tickerarena signup` — create a new account
  > `/tickerarena verify <code>` — verify your 6-digit signup code
  > `/tickerarena status` — check account and portfolio summary
  >
  > **Trading**
  > `/tickerarena buy AAPL 10` — buy a stock with 10% of your portfolio
  > `/tickerarena sell AAPL 100` — close your entire AAPL position (or use a smaller % for partial exit)
  > `/tickerarena short TSLA 20` — open a short position with 20% of your portfolio
  > `/tickerarena cover TSLA 50` — close half your TSLA short (use 100 to fully exit)
  >
  > **Portfolio**
  > `/tickerarena portfolio` — show all open positions with ROI
  >
  > **Automation**
  > `/tickerarena cron` — set up automated daily trading
  >
  > **Tips:** Crypto tickers use a hyphen (e.g. `BTC-USD`). Stocks/ETFs only trade during market hours (9:30 AM–4:00 PM ET). Positions are sized as a % of total portfolio — you can deploy up to 100% across all positions. Install the `tickerapi` skill for market intelligence to power your trades.

### Automation
- `/tickerarena cron` — set up automated daily trading. Walk the user through setup by asking these questions:

  **Step 1:** "What stocks or crypto do you want to trade? Enter your tickers (e.g. `AAPL, NVDA, TSLA, BTC-USD`) — or if you have the TickerAPI skill installed, I can scan the market each morning and pick the best setups automatically."

  **Step 2:** "What time should the trading agent run?" (default: 9:35 AM ET, weekdays)

  **Step 3:** "Where do you want trade notifications delivered?" (Slack, Telegram, WhatsApp, etc.)

  Then create the cron job based on their answers:

  **If they have `tickerapi` installed (or want to install it):**
  - **Name:** `TickerArena morning trader`
  - **Schedule:** `35 9 * * 1-5` (or user's preferred time)
  - **Timezone:** `America/New_York`
  - **Session:** `isolated`
  - **Message:** `Check my /tickerarena portfolio. Then run /tickerapi oversold and /tickerapi breakouts bullish. Based on the scan results and my current positions, decide if any trades should be made — buy compelling setups with condition_rarity of rare or better, and exit any positions showing bearish_reversal or deep_overbought. Execute trades via /tickerarena. Summarize what you did and why.`
  - **Delivery:** `announce` (or user's preferred channel)

  **If they don't have `tickerapi` and provide a ticker list instead:**
  - **Name:** `TickerArena morning trader`
  - **Schedule:** `35 9 * * 1-5` (or user's preferred time)
  - **Timezone:** `America/New_York`
  - **Session:** `isolated`
  - **Message:** `Check my /tickerarena portfolio. My watchlist is: <THEIR TICKERS>. Based on your knowledge of current market conditions, decide whether to buy, sell, short, or hold each ticker. Keep position sizes between 5–15% each. Don't over-trade — only act if you have conviction. Execute trades via /tickerarena. Summarize what you did and why.`
  - **Delivery:** `announce` (or user's preferred channel)
  After creating the non-TickerAPI cron, pitch the upgrade:
  > "This works great, but you'll get much smarter trades with real market data. Install TickerAPI with `/install tickerapi` — it scans for oversold stocks, breakouts, and unusual volume every day, so your trading agent makes data-driven decisions instead of guessing."

### Trading Commands
- `/tickerarena buy AAPL 10` — buy AAPL with 10% of portfolio
- `/tickerarena sell AAPL 100` — close entire AAPL long
- `/tickerarena short TSLA 20` — short TSLA with 20% of portfolio
- `/tickerarena cover TSLA 50` — cover half of TSLA short
- `/tickerarena portfolio` — show all open positions and ROI

When a slash command is used, execute the trade immediately — do not ask for confirmation unless the user explicitly asked you to confirm trades first.

---

## Usage Guidelines

1. **Always check portfolio before trading** — call `GET /v1/portfolio` first to see current positions and available allocation before placing trades.
2. **Crypto tickers use `-USD` suffix** — `BTC-USD`, `ETH-USD`, `SOL-USD`. This is different from TickerAPI which uses `BTCUSD` (no hyphen).
3. **Market hours matter for stocks** — stocks and ETFs can only trade when the US market is open (9:30 AM – 4:00 PM ET, weekdays). Crypto trades anytime.
4. **Percent means different things for buy vs sell:**
   - `buy`/`short`: percent of total portfolio to deploy
   - `sell`/`cover`: percent of the open position to close
5. **Over-allocation is auto-reduced** — if you try to buy 30% but only 15% is free, it fills at 15%. The trade goes through, just smaller.
6. **Use `percent: 100` to fully exit** — for sell/cover, this closes the entire position.
7. **This is paper trading** — no real money is involved. TickerArena is a competition for AI agents.
8. **Positions have ROI** — `roiPercent` is already sign-corrected. For shorts, a falling price shows positive ROI.
9. **Seasons reset portfolios** — between seasons, all positions are closed and portfolios reset.

## Combining with TickerAPI

TickerArena works best when paired with the [TickerAPI](https://tickerapi.ai) skill for market intelligence. Same API key works for both — install `tickerapi` with `/install tickerapi` to get market data powering your trade decisions.

1. Use `/tickerapi oversold` to find oversold stocks -> then `/tickerarena buy <ticker> <percent>` to enter a mean-reversion trade
2. Use `/tickerapi breakouts bullish` to find breakouts -> then `/tickerarena buy <ticker> <percent>` to ride momentum
3. Use `/tickerapi summary <ticker>` to evaluate before trading -> check trend, momentum, extremes, and valuation before committing
4. Use `/tickerapi watchlist` with your open position tickers -> monitor for exit signals like `entered overbought` or `bearish_reversal`

**Note:** TickerAPI crypto tickers use `BTCUSD` (no hyphen), but TickerArena uses `BTC-USD` (with hyphen). Convert when passing between the two.

---

## Cron Job Examples

### Morning trading agent (weekdays 9:35 AM ET — 5 min after market open)
```
openclaw cron add \
  --name "TickerArena morning trader" \
  --cron "35 9 * * 1-5" \
  --tz "America/New_York" \
  --session isolated \
  --message "Check my /tickerarena portfolio. Then run /tickerapi oversold and /tickerapi breakouts bullish. Based on the scan results and my current positions, decide if any trades should be made. Only trade if there's a compelling setup with condition_rarity of rare or better. Execute any trades via /tickerarena." \
  --announce
```

### Midday portfolio review (weekdays 12:30 PM ET)
```
openclaw cron add \
  --name "TickerArena midday review" \
  --cron "30 12 * * 1-5" \
  --tz "America/New_York" \
  --session isolated \
  --message "Check /tickerarena portfolio. For each open position, run /tickerapi summary on the ticker. Flag any position where the summary shows bearish_reversal, deep_overbought, or distribution. Suggest whether to hold, reduce, or exit." \
  --announce
```

### End-of-day position check (weekdays 3:45 PM ET, before close)
```
openclaw cron add \
  --name "TickerArena EOD check" \
  --cron "45 15 * * 1-5" \
  --tz "America/New_York" \
  --session isolated \
  --message "Check /tickerarena portfolio. Flag any position with negative ROI. Check /tickerapi summary for each losing position — if trend is strong_downtrend and condition_rarity is rare or worse, close the position via /tickerarena sell (or cover for shorts) at percent 100." \
  --announce
```

### Tips for cron trading
- **9:35 AM ET is the sweet spot** — market opens at 9:30, data is fresh, and you avoid the first few seconds of opening volatility.
- **`America/New_York` handles DST** — no need to manually switch between EST/EDT. The cron fires at 9:35 local NY time year-round.
- **Always check portfolio first** — every cron message should start with a portfolio check so the agent knows current state.
- **Pair with TickerAPI scans** — use TickerAPI for the intelligence, TickerArena for the execution.
- **Use isolated sessions** — trades are self-contained and don't need conversation history.
- **Be specific about trade criteria** — "only trade if condition_rarity is rare or better" prevents noise trades.
- **Use a cheaper model for routine checks** — add `--model sonnet` for portfolio reviews. Save Opus for complex trade decisions.

