> ## Documentation Index
> Fetch the complete documentation index at: https://edgeful.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# SMA performance standard

> Detects price cross-ups and cross-downs against the N-period SMA and measures how long each move lasts and how far it travels. Returns average and maximum bars and performance for up crosses and down crosses, filtered to events lasting at least 5 periods. Configurable via the `period` parameter.



## OpenAPI

````yaml /openapi-public.json get /report_calculation/sma-performance-standard/{market_type}/{ticker}
openapi: 3.1.0
info:
  title: Edgeful API
  description: >-
    Public API reference for Edgeful market analysis calculations. The bearer
    token is your Edgeful API key: paste the key itself in the docs playground.
    Report responses include row-level output in `detailed` only when your plan
    includes row-level detail.
  version: 1.0.0
servers:
  - url: https://api.edgeful.com
    description: Production
security:
  - BearerAuth: []
tags:
  - name: reports
  - name: live data
paths:
  /report_calculation/sma-performance-standard/{market_type}/{ticker}:
    get:
      tags:
        - reports
      summary: SMA performance standard
      description: >-
        Detects price cross-ups and cross-downs against the N-period SMA and
        measures how long each move lasts and how far it travels. Returns
        average and maximum bars and performance for up crosses and down
        crosses, filtered to events lasting at least 5 periods. Configurable via
        the `period` parameter.
      operationId: >-
        sma_performance_standard_report_calculation_sma_performance_standard__market_type___ticker__get
      parameters:
        - name: ticker
          in: path
          required: true
          schema:
            type: string
            description: >-
              ticker symbol. format varies by `market_type`: stocks use a plain
              symbol (e.g., SPY), forex uses a 6-character pair (e.g., EURUSD),
              crypto uses a contract pair (e.g., BTCUSD), futures uses the root
              symbol (e.g., ES).
            examples:
              - SPY
              - EURUSD
              - BTCUSD
              - ES
            title: Ticker
          description: >-
            ticker symbol. format varies by `market_type`: stocks use a plain
            symbol (e.g., SPY), forex uses a 6-character pair (e.g., EURUSD),
            crypto uses a contract pair (e.g., BTCUSD), futures uses the root
            symbol (e.g., ES).
        - name: market_type
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/MarketTypeEnum'
            description: >-
              market venue for the ticker. one of: `forex`, `futures`, `crypto`,
              `stock`. determines supported symbols and whether session-based
              intraday aggregation is available.
            examples:
              - stock
              - forex
          description: >-
            market venue for the ticker. one of: `forex`, `futures`, `crypto`,
            `stock`. determines supported symbols and whether session-based
            intraday aggregation is available.
        - name: start_date
          in: query
          required: true
          schema:
            type: string
            description: >-
              inclusive start date, `YYYY-MM-DD`, interpreted in the request
              `timezone`. sessions on or after this date are included in the
              calculation.
            examples:
              - '2024-01-01'
            title: Start Date
          description: >-
            inclusive start date, `YYYY-MM-DD`, interpreted in the request
            `timezone`. sessions on or after this date are included in the
            calculation.
        - name: end_date
          in: query
          required: true
          schema:
            type: string
            description: >-
              inclusive end date, `YYYY-MM-DD`, interpreted in the request
              `timezone`. sessions on or before this date are included in the
              calculation.
            examples:
              - '2024-12-31'
            title: End Date
          description: >-
            inclusive end date, `YYYY-MM-DD`, interpreted in the request
            `timezone`. sessions on or before this date are included in the
            calculation.
        - name: period
          in: query
          required: false
          schema:
            type: integer
            description: >-
              rolling window length for the SMA. each session's close is
              compared to the prior `period`-session SMA to classify the
              above-versus-below regime.
            default: 50
            title: Period
          description: >-
            rolling window length for the SMA. each session's close is compared
            to the prior `period`-session SMA to classify the above-versus-below
            regime.
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - BearerAuth: []
      x-codeSamples:
        - lang: curl
          label: cURL
          source: |-
            curl --request GET \
              --url 'https://api.edgeful.com/report_calculation/sma-performance-standard/<market_type>/<ticker>?start_date=<start_date>&end_date=<end_date>' \
              --header 'Authorization: Bearer <api-key>'
        - lang: python
          label: Python
          source: >-
            import requests


            url =
            "https://api.edgeful.com/report_calculation/sma-performance-standard/<market_type>/<ticker>?start_date=<start_date>&end_date=<end_date>"

            headers = {"Authorization": "Bearer <api-key>"}


            response = requests.get(url, headers=headers)

            print(response.json())
        - lang: javascript
          label: JavaScript
          source: >-
            const url =
            "https://api.edgeful.com/report_calculation/sma-performance-standard/<market_type>/<ticker>?start_date=<start_date>&end_date=<end_date>";

            const options = {
              method: "GET",
              headers: { Authorization: "Bearer <api-key>" },
            };


            const response = await fetch(url, options);

            const data = await response.json();

            console.log(data);
        - lang: php
          label: PHP
          source: >-
            <?php

            $ch =
            curl_init("https://api.edgeful.com/report_calculation/sma-performance-standard/<market_type>/<ticker>?start_date=<start_date>&end_date=<end_date>");

            curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");

            curl_setopt($ch, CURLOPT_HTTPHEADER, ["Authorization: Bearer
            <api-key>"]);

            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

            $response = curl_exec($ch);

            curl_close($ch);

            echo $response;
        - lang: go
          label: Go
          source: |-
            package main

            import (
                "fmt"
                "io"
                "net/http"
            )

            func main() {
                req, _ := http.NewRequest("GET", "https://api.edgeful.com/report_calculation/sma-performance-standard/<market_type>/<ticker>?start_date=<start_date>&end_date=<end_date>", nil)
                req.Header.Set("Authorization", "Bearer <api-key>")
                resp, _ := http.DefaultClient.Do(req)
                defer resp.Body.Close()
                body, _ := io.ReadAll(resp.Body)
                fmt.Println(string(body))
            }
        - lang: java
          label: Java
          source: >-
            import java.net.URI;

            import java.net.http.HttpClient;

            import java.net.http.HttpRequest;

            import java.net.http.HttpResponse;


            HttpClient client = HttpClient.newHttpClient();

            HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("https://api.edgeful.com/report_calculation/sma-performance-standard/<market_type>/<ticker>?start_date=<start_date>&end_date=<end_date>"))
                .header("Authorization", "Bearer <api-key>")
                .method("GET", HttpRequest.BodyPublishers.noBody())
                .build();
            HttpResponse<String> response = client.send(request,
            HttpResponse.BodyHandlers.ofString());

            System.out.println(response.body());
        - lang: ruby
          label: Ruby
          source: >-
            require "net/http"

            require "uri"


            uri =
            URI("https://api.edgeful.com/report_calculation/sma-performance-standard/<market_type>/<ticker>?start_date=<start_date>&end_date=<end_date>")

            request = Net::HTTP::Get.new(uri)

            request["Authorization"] = "Bearer <api-key>"


            response = Net::HTTP.start(uri.hostname, uri.port, use_ssl:
            uri.scheme == "https") do |http|
              http.request(request)
            end

            puts response.body
components:
  schemas:
    MarketTypeEnum:
      type: string
      enum:
        - forex
        - futures
        - crypto
        - stock
      title: MarketTypeEnum
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
        input:
          title: Input
        ctx:
          type: object
          title: Context
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: API Key
      description: >-
        Use your Edgeful API key as the bearer token. In the API Reference
        authorization drawer, paste only the key (for example,
        `ef_live_<random>`).

````