Skip to content
Back to skills

Trade Copier Signal Broadcaster

ASecurity

Format and distribute trading signals to MT5 copiers, Telegram bots, Discord bots, and webhook endpoints. Use this skill whenever the user asks about "trade copier", "signal service", "broadcast signals", "Telegram trading bot", "Discord signals", "webhook alerts", "copy trading", "signal distribution", "format trade signal", "MT5 copier", "send signal to Telegram", "signal channel", or any request to distribute trading signals to external systems. Works with realtime-alert-pipeline and execu...

  • 14 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added June 3, 2026
ai-agentspythongo

Security analysis

A100/100

Scanned June 3, 2026

npx -y skills add mahmoud20138/Tradecraft --skill trade-copier-signal-broadcaster --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Trade Copier Signal Broadcaster?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Trade Copier Signal Broadcaster
[![Security: A β€” Skills Directory](https://www.skillsdirectory.com/api/skills/mahmoud20138-trade-copier-signal-broadcaster/badge)](https://www.skillsdirectory.com/skills/mahmoud20138-trade-copier-signal-broadcaster)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: trade-copier-signal-broadcaster
description: >
  Format and distribute trading signals to MT5 copiers, Telegram bots, Discord bots, and
  webhook endpoints. Use this skill whenever the user asks about "trade copier", "signal
  service", "broadcast signals", "Telegram trading bot", "Discord signals", "webhook alerts",
  "copy trading", "signal distribution", "format trade signal", "MT5 copier", "send signal to
  Telegram", "signal channel", or any request to distribute trading signals to external systems.
  Works with realtime-alert-pipeline and execution-algo-trading.
kind: tool
category: trading/infrastructure
status: active
aliases: [signal-broadcaster]
tags: [alerts, broadcaster, copier, discord, hooks, infrastructure, mt5, signal]
related_skills: [discord-webhook, notion-sync, realtime-alert-pipeline, telegram-bot]
---

# Trade Copier & Signal Broadcaster

```python
from dataclasses import dataclass
from datetime import datetime
from typing import Optional
import json

@dataclass
class TradeSignal:
    symbol: str
    direction: str              # "BUY" or "SELL"
    entry_price: float
    stop_loss: float
    take_profit: list[float]    # multiple TP levels
    lot_size: float
    confidence: float           # 0-1
    setup_type: str
    timeframe: str
    notes: str = ""
    timestamp: str = ""

    def __post_init__(self):
        if not self.timestamp:
            self.timestamp = datetime.utcnow().isoformat()

class SignalFormatter:
    """Format signals for different distribution channels."""

    @staticmethod
    def telegram_format(signal: TradeSignal) -> str:
        emoji = "🟒" if signal.direction == "BUY" else "πŸ”΄"
        tp_lines = "\n".join([f"  TP{i+1}: {tp}" for i, tp in enumerate(signal.take_profit)])
        return f"""{emoji} *{signal.direction} {signal.symbol}*
━━━━━━━━━━━━━━━
πŸ“ Entry: `{signal.entry_price}`
πŸ›‘ SL: `{signal.stop_loss}`
{tp_lines}
πŸ“Š Lots: `{signal.lot_size}`
⏱ TF: {signal.timeframe}
🎯 Setup: {signal.setup_type}
πŸ“ˆ Confidence: {signal.confidence*100:.0f}%
{f'πŸ“ {signal.notes}' if signal.notes else ''}
⏰ {signal.timestamp[:16]}"""

    @staticmethod
    def discord_format(signal: TradeSignal) -> dict:
        return {
            "embeds": [{
                "title": f"{'🟒' if signal.direction == 'BUY' else 'πŸ”΄'} {signal.direction} {signal.symbol}",
                "color": 0x00ff00 if signal.direction == "BUY" else 0xff0000,
                "fields": [
                    {"name": "Entry", "value": str(signal.entry_price), "inline": True},
                    {"name": "Stop Loss", "value": str(signal.stop_loss), "inline": True},
                    {"name": "Take Profit", "value": " / ".join(str(tp) for tp in signal.take_profit), "inline": True},
                    {"name": "Lots", "value": str(signal.lot_size), "inline": True},
                    {"name": "Confidence", "value": f"{signal.confidence*100:.0f}%", "inline": True},
                    {"name": "Setup", "value": signal.setup_type, "inline": True}],
                "timestamp": signal.timestamp,
            }]
        }

    @staticmethod
    def mt5_copier_format(signal: TradeSignal) -> str:
        """Format for standard MT5 trade copier protocol."""
        return (f"{signal.direction},{signal.symbol},{signal.entry_price},"
                f"{signal.stop_loss},{signal.take_profit[0] if signal.take_profit else 0},"
                f"{signal.lot_size}")

    @staticmethod
    def mql5_code(signal: TradeSignal) -> str:
        """Generate MQL5 code to execute the signal."""
        sl_points = abs(signal.entry_price - signal.stop_loss)
        tp_points = abs(signal.take_profit[0] - signal.entry_price) if signal.take_profit else 0
        fn = "Buy" if signal.direction == "BUY" else "Sell"
        return f"""#include <Trade\\Trade.mqh>
CTrade trade;
void ExecuteSignal() {{
   trade.{fn}({signal.lot_size}, "{signal.symbol}", 0, {signal.stop_loss}, {signal.take_profit[0] if signal.take_profit else 0}, "{signal.setup_type}");
}}"""

    @staticmethod
    def webhook_payload(signal: TradeSignal) -> dict:
        """Generic webhook JSON payload."""
        return {
            "action": signal.direction.lower(),
            "symbol": signal.symbol,
            "entry": signal.entry_price,
            "sl": signal.stop_loss,
            "tp": signal.take_profit,
            "size": signal.lot_size,
            "confidence": signal.confidence,
            "setup": signal.setup_type,
            "tf": signal.timeframe,
            "timestamp": signal.timestamp,
        }

class SignalBroadcaster:
    """Broadcast signals to multiple channels simultaneously."""

    @staticmethod
    def broadcast(signal: TradeSignal, channels: list[str]) -> dict:
        results = {}
        formatter = SignalFormatter
        for ch in channels:
            if ch == "telegram":
                results["telegram"] = formatter.telegram_format(signal)
            elif ch == "discord":
                results["discord"] = json.dumps(formatter.discord_format(signal))
            elif ch == "mt5_copier":
                results["mt5_copier"] = formatter.mt5_copier_format(signal)
            elif ch == "mql5":
                results["mql5"] = formatter.mql5_code(signal)
            elif ch == "webhook":
                results["webhook"] = json.dumps(formatter.webhook_payload(signal))
        return results
```

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.