DCA (Dollar Cost Averaging)

Dollar Cost Averaging (DCA) allows your Signal Bot to scale into positions with multiple entries, reducing the impact of price volatility on your overall entry price.

What is DCA?

Instead of entering a position with a single order, DCA splits your entry across multiple levels. As price moves against your initial entry, additional orders are placed at lower prices (for longs) or higher prices (for shorts), lowering your average entry price.

Entry Level 1: $50,000 (25% of position)
Entry Level 2: $48,500 (25% of position) - 3% below Level 1
Entry Level 3: $47,000 (25% of position) - 6% below Level 1
Entry Level 4: $45,500 (25% of position) - 9% below Level 1

Average Entry: $47,750 (instead of $50,000)

Enabling DCA

During Bot Creation

  1. Navigate to Signal Bots > Create Bot
  2. Complete the basic configuration steps
  3. In the DCA Settings step, toggle Enable DCA
  4. Configure your entry levels and sizes

For Existing Bots

  1. Go to your Signal Bot's detail page
  2. Click Settings > DCA Settings
  3. Toggle Enable DCA
  4. Configure and save

DCA Configuration

Entry Levels

Define how many entries and at what price deviations:

ParameterDescriptionExample
Level NumberThe entry order (1, 2, 3...)Level 2
Size PercentagePortion of total position25%
Price DeviationDistance from Level 13%

Note: TradeStaq does not place level orders by itself. Each level goes in when your signal source sends the next entry signal, so the price deviation is the plan your alerts follow (see the Pine Script example below).

Example Configuration

Level 1: 25% at entry price (0% deviation)
Level 2: 25% at -3% from entry
Level 3: 25% at -6% from entry
Level 4: 25% at -9% from entry

Maximum Entry Levels

Set the maximum number of DCA entries allowed:

  • 1-10: Conservative, limits exposure
  • 10-50: Moderate scaling
  • 0: Unlimited entries (use with caution)

Warning: Setting max levels to 0 (unlimited) can lead to significant position sizes. Always use proper risk management.

Sending DCA Signals via Webhook

DCA signals are ordinary entry signals: there are no DCA fields. With DCA enabled on the bot, each entry signal is the next level. The first opens the position (level 1), and each further entry on the same side adds the next level instead of being ignored as "already long".

DCA Entry Signal

{
  "ticker": "BTCUSDT",
  "position": "long"
}

Send the same signal again for level 2, level 3 and so on. Close the whole position with "position": "flat".

Level Size

A level's size is the signal's size (or, without one, the bot's position sizing) times that level's Size Percentage. size is an amount in coins; percentages such as "25%" are not supported.

Once Maximum Entry Levels are in, a further entry signal fails with "Max DCA levels reached".

TradingView Pine Script with DCA

//@version=5
strategy("DCA Strategy", overlay=true)

// Entry conditions
longCondition = ta.crossover(ta.sma(close, 10), ta.sma(close, 50))

// DCA conditions (price drops from entry)
dcaLevel2 = strategy.position_size > 0 and close < strategy.position_avg_price * 0.97
dcaLevel3 = strategy.position_size > 0 and close < strategy.position_avg_price * 0.94

// Each entry below is the bot's next DCA level
if longCondition
    strategy.entry("Long", strategy.long,
        alert_message='{"ticker":"{{ticker}}","position":"long"}')

if dcaLevel2
    strategy.entry("DCA2", strategy.long,
        alert_message='{"ticker":"{{ticker}}","position":"long"}')

if dcaLevel3
    strategy.entry("DCA3", strategy.long,
        alert_message='{"ticker":"{{ticker}}","position":"long"}')

Stop-Loss Management

DCA positions require special stop-loss handling since your average entry price changes with each level.

Stop-Loss Modes

The stop-loss mode is configured by the strategy author and determines how your stop-loss adjusts as DCA entries are added:

ModeDescription
NoneNo automatic stop-loss management
StaticKeep the original stop-loss price
AverageMove stop to average entry minus X%
BreakevenMove stop to average entry price
TrailingFollow price by X% distance
ATRVolatility-based stop using ATR indicator

How Stop-Loss Updates Work

  1. Level 1 Entry: Initial stop-loss is set
  2. Level 2 Entry: Average entry recalculated, stop-loss adjusted
  3. Level 3 Entry: Average entry recalculated, stop-loss adjusted
  4. And so on...

Example with Average Mode (2% adjustment):

Level 1: Entry $50,000, Stop $49,000 (2% below)
Level 2: Entry $48,500, Avg $49,250, Stop $48,265 (2% below avg)
Level 3: Entry $47,000, Avg $48,500, Stop $47,530 (2% below avg)

Best Practices

Position Sizing

  • Keep total position size within your risk tolerance
  • Each DCA level adds to your exposure
  • Calculate maximum position: Level 1 Size + Level 2 Size + ... + Level N Size

Deviation Spacing

  • Tight spacing (1-2%): More entries, better average, higher risk
  • Wide spacing (5-10%): Fewer entries, catches larger dips
  • Match spacing to asset volatility

Risk Management

  1. Set maximum levels - Don't allow unlimited entries
  2. Use stop-loss - Protect against trend reversals
  3. Monitor exposure - Track total position size
  4. Test on paper - Validate strategy before live trading

DCA vs Single Entry

AspectSingle EntryDCA
Entry PriceFixed at signalAveraged across levels
Capital UsageAll at onceSpread over time
Risk ExposureFull immediatelyGradual increase
Best ForStrong signalsUncertain entries
ComplexitySimpleMore complex

Monitoring DCA Positions

Dashboard View

Your Signal Bot dashboard shows:

  • Current DCA Level - Which level you're at
  • Average Entry Price - Your weighted average
  • Total Position Size - Sum of all entries
  • Active Stop-Loss - Current stop price

Trade History

Each DCA entry appears as a separate trade linked by a position group ID, allowing you to track the full DCA sequence.

Troubleshooting

DCA Not Triggering

  • Verify DCA is enabled in bot settings
  • Check that max levels hasn't been reached
  • Ensure price deviation conditions are met

Incorrect Average Price

  • Confirm all entry sizes are correct
  • Verify no partial fills affected calculations
  • Check trade history for all entries

Stop-Loss Not Updating

  • Verify stop-loss mode is not set to "None" or "Static"
  • Check that the strategy supports dynamic stop-loss
  • Review stop-loss history in position details

Next Steps