calculate_dema
Compute the Double Exponential Moving Average (DEMA) indicator for technical analysis of financial market price data, enabling trend identification and smoothing calculations.
Instructions
Calculate Double Exponential Moving Average (DEMA).
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| kwargs | Yes |
Implementation Reference
- src/mcp_talib/core/server.py:166-178 (handler)The handler function for the 'calculate_dema' MCP tool. It retrieves the DEMA indicator from the registry, creates MarketData from close prices, calls the indicator's calculate method, and returns the result or error.@mcp.tool() async def calculate_dema(close: List[float], timeperiod: int = 30) -> Dict[str, Any]: try: indicator = registry.get_indicator("dema") if not indicator: raise ValueError("DEMA indicator not found") market_data = MarketData(close=close) result = await indicator.calculate(market_data, {"timeperiod": timeperiod}) if result.success: return {"success": True, "values": result.values, "metadata": result.metadata} return {"success": False, "error": result.error_message} except Exception as e: return {"success": False, "error": str(e)}
- The DEMAIndicator class that performs the actual DEMA calculation using TA-Lib's DEMA function. Used by the tool handler.class DEMAIndicator(BaseIndicator): def __init__(self): super().__init__(name="dema", description="Double Exponential Moving Average (DEMA)") @property def input_schema(self) -> Dict[str, Any]: return { "type": "object", "properties": { "close_prices": {"type": "array", "items": {"type": "number"}}, "timeperiod": {"type": "integer", "default": 30}, }, "required": ["close_prices"], } async def calculate(self, market_data: MarketData, options: Dict[str, Any] = None) -> IndicatorResult: if options is None: options = {} timeperiod = options.get("timeperiod", 30) close = np.asarray(market_data.close, dtype=float) try: out = ta.DEMA(close, timeperiod=timeperiod) return IndicatorResult( indicator_name=self.name, success=True, values={"dema": out.tolist()}, metadata={"timeperiod": timeperiod, "input_points": len(close), "output_points": len(out)}, ) except Exception as e: return IndicatorResult(indicator_name=self.name, success=False, values={}, error_message=str(e))
- src/mcp_talib/indicators/__init__.py:30-30 (registration)Registers the DEMAIndicator in the central indicator registry, allowing it to be retrieved by name 'dema'.registry.register("dema", DEMAIndicator)
- Tool specification schema for 'dema' used in the dynamic MCP server creation, including description, parameters, defaults, and market data argument mapping."dema": { "description": "Double Exponential Moving Average (DEMA)", "params": {"close": List[float], "timeperiod": int}, "defaults": {"timeperiod": 30}, "market_data_args": {"close": "close"}, },