aerodrome
Use when creating, validating, backtesting, deploying, sizing, or troubleshooting Aerodrome/Base spot trading strategies through…
Use when writing, validating, or troubleshooting a recurring scheduled buy strategy (DCA, dollar-cost averaging, weekly buys, daily buys, monthly accumulation, accumulator) on Superior Trade — especially anything that should "buy more of the same pair" on a calendar trigger
$ npx -y skills add Superior-Trade/superior-skills --skill dca-weekly --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/dca-weeklyContext preview
The summary Claude sees to decide when to auto-load this skill.
Use when writing, validating, or troubleshooting a recurring scheduled buy strategy (DCA, dollar-cost averaging, weekly buys, daily buys, monthly accumulation, accumulator) on Superior Trade — especially anything that should "buy more of the same pair" on a calendar trigger
name: dca-weekly description: Use when writing, validating, or troubleshooting a recurring scheduled buy strategy (DCA, dollar-cost averaging, weekly buys, daily buys, monthly accumulation, accumulator) on Superior Trade — especially anything that should "buy more of the same pair" on a calendar trigger rather than a price trigger. metadata: version: 0.1.0 updated: 2026-05-07
A user asks to "buy X every week", "DCA into BTC", "scheduled buy", "accumulator", "monthly buy", or any variation that means *open a position once, then keep adding to it on a calendar cadence*. **Not** for "buy when price drops" — that's grid trading (see `grid-trading`).
| Window | `BTC/USDC` 1d, 2025-11-15 → 2026-05-01 (auto-narrowed to data availability, ~10 weeks) | |---|---| | Trades | 1 (still open at end, force-closed) | | Entry orders inside the trade | **10** (1 initial + 9 weekly DCA, tagged `weekly_dca`) | | Stake per buy | ~$36.87 | | Total invested | ~$365 of $10,000 wallet | | Per-trade PnL | +10.0% | | Wallet PnL | +0.37% / +$36.61 | | Holding | 66 days | | Backtest ID | `01kqyz1ysdy9dyw7tbdrhz5gek` |
The `(rejected_signals: 9)` warning in logs is normal: `populate_entry_trend` keeps emitting Monday flags even while a trade is open, but `adjust_trade_position` does the actual buys.
These four flags are the difference between v1 (1 trade ever, the rest rejected) and v2 (a real ladder of fills). All four are required:
position_adjustment_enable = True max_entry_position_adjustment = 26 # cap on number of weekly adds max_dca_multiplier = 27.0 # 1 initial + 26 adds
Plus two callbacks:
from freqtrade.strategy import IStrategy
from freqtrade.persistence import Trade
from datetime import datetime
import pandas as pd
class WeeklyDcaBtcStrategy(IStrategy):
minimal_roi = {"0": 100.0} # never exit on profit target
stoploss = -0.99 # never exit on stop
trailing_stop = False
timeframe = "1d"
process_only_new_candles = True
startup_candle_count = 5
can_short = False
# The piece naive translations miss.
position_adjustment_enable = True
max_entry_position_adjustment = 26 # ~6 months of weekly buys
max_dca_multiplier = 27.0 # 1 initial + 26 weekly adds
def populate_indicators(self, dataframe: pd.DataFrame, metadata: dict) -> pd.DataFrame:
dataframe["dow"] = pd.to_datetime(dataframe["date"]).dt.dayofweek
return dataframe
def populate_entry_trend(self, dataframe: pd.DataFrame, metadata: dict) -> pd.DataFrame:
# Initial entry on the first Monday encountered.
dataframe.loc[(dataframe["dow"] == 0) & (dataframe["volume"] > 0), "enter_long"] = 1
return dataframe
def populate_exit_trend(self, dataframe: pd.DataFrame, metadata: dict) -> pd.DataFrame:
return dataframe
def custom_stake_amount(self, pair: str, current_time: datetime, current_rate: float,
proposed_stake: float, min_stake, max_stake: float,
leverage: float, entry_tag, side: str, **kwargs) -> float:
# Reserve room for the future weekly adds.
return proposed_stake / self.max_dca_multiplier
def adjust_trade_position(self, trade: Trade, current_time: datetime,
current_rate: float, current_profit: float,
min_stake, max_stake: float,
current_entry_rate: float, current_exit_rate: float,
current_entry_profit: float, current_exit_profit: float,
**kwargs):
if trade.has_open_orders:
return None
if current_time.weekday() != 0: # Monday only
return None
# Skip the Monday on which the initial entry was placed (Freqtrade
# calls adjust_trade_position on the same candle as the initial
# entry; without this guard you double-buy on week 1).
filled = trade.select_filled_orders(trade.entry_side)
if filled:
last_dt = filled[-1].order_filled_utc
if last_dt and last_dt.date() == current_time.date():
return None
# Buy the same notional as the initial entry every Monday.
first_stake = filled[0].stake_amount_filled if filled else (min_stake or 10)
return (first_stake, "weekly_dca"){
"exchange": { "name": "hyperliquid", "pair_whitelist": ["BTC/USDC"] },
"stake_currency": "USDC",
"stake_amount": 1000,
"dry_run_wallet": {"USDC": 10000},
"timeframe": "1d",
"max_open_trades": 1,
"stoploss": -0.99,
"minimal_roi": { "0": 100.0 },
"entry_pricing": { "price_side": "same" },
"exit_pricing": { "price_side": "same" },
"pairlists": [{ "method": "StaticPairList" }]
}`stake_amount` is the **post-division** budget the user wants per buy times `max_dca_multiplier`. With `stake_amount: 1000` and `max_dca_multiplier: 27`, each Monday buy is ~$37; total budget is ~$1000.
`dry_run_wallet` must be ≥ `stake_amount` (Freqtrade keeps
Trading strategies and intelligence tools for Superior Trade — natural-language strategy authoring, backtesting, and autonomous deployment on Hyperliquid, Lighter, and Polymarket.
Use when creating, validating, backtesting, deploying, sizing, or troubleshooting Aerodrome/Base spot trading strategies through…
Use when running, interpreting, or designing backtests on Superior Trade — anything about backtest windows, trade-count…
Use when the user asks for spot-perp basis trade, basis arbitrage, cash-and-carry, perp discount, or any setup that reads the…
Use when writing a symmetric Bollinger-band mean-reversion strategy on the 4h timeframe — BB reverter, range trader, chop…
Use when writing a swing/intraday breakout strategy on Superior Trade — anything described as breakout, momentum, trend…
Use when a Polymarket prediction-market thesis rests on an external event — CPI, Fed, elections, court rulings, ETF decisions —…