Skip to main content

Creating Actionable Signals

A good trading signal is actionable. It tells the trader:
  • Where to enter
  • Where to place the stop loss
  • Where to take profits
Always include Entry, Stop Loss, and at least one Take Profit in your signals.

Signal Structure

Complete BUY Signal

Risk Management

Calculate Risk/Reward

Minimum R:R Requirements

Signals with R:R below 1:1 are generally not worth taking. Consider filtering these out.

Visual Hierarchy

Size Recommendations

Color Consistency

Always use consistent colors:

Label Best Practices

DO

  • Use short labels: BUY, SELL, TP1, SL
  • Be consistent across signals
  • Include level numbers for TPs: TP1, TP2, TP3

DON’T

  • Avoid long labels: Buy Entry Here at Support
  • Don’t use special characters that may not render
  • Don’t mix naming conventions

Time Alignment

Always use the time value from the /bars endpoint. Never calculate timestamps manually.

Multiple Signals on Same Bar

You can place multiple points on the same bar by using the same time value:

Signal Spacing

For visual clarity, add small offsets to prices:

Metadata for Analytics

Include metadata to track signal performance:

Filter Low-Quality Signals

Before submitting, filter out weak signals:

Update Frequency

Don’t update too frequently - it wastes API calls and can cause visual flickering.

Error Handling

Always handle API errors gracefully:

Checklist

Before deploying your indicator:
1

Verify time alignment

Signals appear on the correct candles
2

Check visual hierarchy

Entry is prominent, TPs/SL are secondary
3

Validate R:R ratios

All signals meet minimum R:R requirements
4

Test on multiple timeframes

Indicator works on H1, H4, D1
5

Add error handling

Gracefully handle API errors
6

Include metadata

Track signal performance

Next Steps

Continuous Integration

Set up automated signal updates

Python SDK

Complete Python reference