<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:e="http://schema.dxfeed.com/event" elementFormDefault="qualified" targetNamespace="http://schema.dxfeed.com/event" version="1.0">

  <xs:element name="Candle" type="e:candle"/>

  <xs:element name="Configuration" type="e:configuration"/>

  <xs:element name="Greeks" type="e:greeks"/>

  <xs:element name="Message" type="e:message"/>

  <xs:element name="Order" type="e:order"/>

  <xs:element name="Profile" type="e:profile"/>

  <xs:element name="Quote" type="e:quote"/>

  <xs:element name="Series" type="e:series"/>

  <xs:element name="SpreadOrder" type="e:spreadOrder"/>

  <xs:element name="Summary" type="e:summary"/>

  <xs:element name="TheoPrice" type="e:theoPrice"/>

  <xs:element name="TimeAndSale" type="e:timeAndSale"/>

  <xs:element name="Trade" type="e:trade"/>

  <xs:element name="TradeETH" type="e:tradeETH"/>

  <xs:element name="Underlying" type="e:underlying"/>

  <xs:complexType name="candle">
    <xs:sequence>
      <xs:element minOccurs="0" name="eventSymbol" type="xs:string"/>
      <xs:element name="eventTime" type="xs:long"/>
      <xs:element name="eventFlags" type="xs:int"/>
      <xs:element name="index" type="xs:long"/>
      <xs:element minOccurs="0" name="time" type="xs:dateTime"/>
      <xs:element name="sequence" type="xs:int"/>
      <xs:element name="count" type="xs:long"/>
      <xs:element name="open" type="xs:double"/>
      <xs:element name="high" type="xs:double"/>
      <xs:element name="low" type="xs:double"/>
      <xs:element name="close" type="xs:double"/>
      <xs:element name="volume" type="xs:double"/>
      <xs:element name="vwap" type="xs:double"/>
      <xs:element name="bidVolume" type="xs:double"/>
      <xs:element name="askVolume" type="xs:double"/>
      <xs:element name="impVolatility" type="xs:double"/>
      <xs:element name="openInterest" type="xs:double"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="order">
    <xs:complexContent>
      <xs:extension base="e:orderBase">
        <xs:sequence>
          <xs:element minOccurs="0" name="marketMaker" type="xs:string"/>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="orderBase">
    <xs:complexContent>
      <xs:extension base="e:marketEvent">
        <xs:sequence>
          <xs:element name="eventFlags" type="xs:int"/>
          <xs:element name="index" type="xs:long"/>
          <xs:element minOccurs="0" name="time" type="xs:string"/>
          <xs:element name="timeNanoPart" type="xs:int"/>
          <xs:element name="sequence" type="xs:int"/>
          <xs:element minOccurs="0" name="source" type="xs:string"/>
          <xs:element minOccurs="0" name="action" type="e:orderAction"/>
          <xs:element minOccurs="0" name="actionTime" type="xs:string"/>
          <xs:element name="orderId" type="xs:long"/>
          <xs:element name="auxOrderId" type="xs:long"/>
          <xs:element minOccurs="0" name="price" type="xs:string"/>
          <xs:element minOccurs="0" name="size" type="xs:string"/>
          <xs:element minOccurs="0" name="executedSize" type="xs:string"/>
          <xs:element name="count" type="xs:long"/>
          <xs:element minOccurs="0" name="exchangeCode" type="xs:string"/>
          <xs:element minOccurs="0" name="side" type="e:side"/>
          <xs:element minOccurs="0" name="scope" type="e:scope"/>
          <xs:element name="tradeId" type="xs:long"/>
          <xs:element minOccurs="0" name="tradePrice" type="xs:string"/>
          <xs:element minOccurs="0" name="tradeSize" type="xs:string"/>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType abstract="true" name="marketEvent">
    <xs:sequence>
      <xs:element minOccurs="0" name="eventSymbol" type="xs:string"/>
      <xs:element name="eventTime" type="xs:long"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="profile">
    <xs:complexContent>
      <xs:extension base="e:marketEvent">
        <xs:sequence>
          <xs:element minOccurs="0" name="description" type="xs:string"/>
          <xs:element minOccurs="0" name="shortSaleRestriction" type="e:shortSaleRestriction"/>
          <xs:element minOccurs="0" name="tradingStatus" type="e:tradingStatus"/>
          <xs:element minOccurs="0" name="statusReason" type="xs:string"/>
          <xs:element name="haltStartTime" type="xs:long"/>
          <xs:element name="haltEndTime" type="xs:long"/>
          <xs:element minOccurs="0" name="highLimitPrice" type="xs:string"/>
          <xs:element minOccurs="0" name="lowLimitPrice" type="xs:string"/>
          <xs:element minOccurs="0" name="high52WeekPrice" type="xs:string"/>
          <xs:element minOccurs="0" name="low52WeekPrice" type="xs:string"/>
          <xs:element minOccurs="0" name="beta" type="xs:string"/>
          <xs:element minOccurs="0" name="earningsPerShare" type="xs:string"/>
          <xs:element minOccurs="0" name="dividendFrequency" type="xs:string"/>
          <xs:element minOccurs="0" name="exDividendAmount" type="xs:string"/>
          <xs:element name="exDividendDayId" type="xs:int"/>
          <xs:element minOccurs="0" name="shares" type="xs:string"/>
          <xs:element minOccurs="0" name="freeFloat" type="xs:string"/>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="quote">
    <xs:complexContent>
      <xs:extension base="e:marketEvent">
        <xs:sequence>
          <xs:element name="sequence" type="xs:int"/>
          <xs:element name="timeNanoPart" type="xs:int"/>
          <xs:element minOccurs="0" name="bidTime" type="xs:dateTime"/>
          <xs:element minOccurs="0" name="bidExchangeCode" type="xs:string"/>
          <xs:element minOccurs="0" name="bidPrice" type="xs:string"/>
          <xs:element minOccurs="0" name="bidSize" type="xs:string"/>
          <xs:element minOccurs="0" name="askTime" type="xs:dateTime"/>
          <xs:element minOccurs="0" name="askExchangeCode" type="xs:string"/>
          <xs:element minOccurs="0" name="askPrice" type="xs:string"/>
          <xs:element minOccurs="0" name="askSize" type="xs:string"/>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="spreadOrder">
    <xs:complexContent>
      <xs:extension base="e:orderBase">
        <xs:sequence>
          <xs:element minOccurs="0" name="spreadSymbol" type="xs:string"/>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="summary">
    <xs:complexContent>
      <xs:extension base="e:marketEvent">
        <xs:sequence>
          <xs:element name="dayId" type="xs:int"/>
          <xs:element minOccurs="0" name="dayOpenPrice" type="xs:string"/>
          <xs:element minOccurs="0" name="dayHighPrice" type="xs:string"/>
          <xs:element minOccurs="0" name="dayLowPrice" type="xs:string"/>
          <xs:element minOccurs="0" name="dayClosePrice" type="xs:string"/>
          <xs:element minOccurs="0" name="dayClosePriceType" type="e:priceType"/>
          <xs:element name="prevDayId" type="xs:int"/>
          <xs:element minOccurs="0" name="prevDayClosePrice" type="xs:string"/>
          <xs:element minOccurs="0" name="prevDayClosePriceType" type="e:priceType"/>
          <xs:element minOccurs="0" name="prevDayVolume" type="xs:string"/>
          <xs:element name="openInterest" type="xs:long"/>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="timeAndSale">
    <xs:complexContent>
      <xs:extension base="e:marketEvent">
        <xs:sequence>
          <xs:element name="eventFlags" type="xs:int"/>
          <xs:element name="index" type="xs:long"/>
          <xs:element name="time" type="xs:long"/>
          <xs:element name="timeNanoPart" type="xs:int"/>
          <xs:element name="sequence" type="xs:int"/>
          <xs:element minOccurs="0" name="exchangeCode" type="xs:string"/>
          <xs:element minOccurs="0" name="price" type="xs:string"/>
          <xs:element minOccurs="0" name="size" type="xs:string"/>
          <xs:element minOccurs="0" name="bidPrice" type="xs:string"/>
          <xs:element minOccurs="0" name="askPrice" type="xs:string"/>
          <xs:element minOccurs="0" name="exchangeSaleConditions" type="xs:string"/>
          <xs:element minOccurs="0" name="tradeThroughExempt" type="xs:string"/>
          <xs:element minOccurs="0" name="aggressorSide" type="e:side"/>
          <xs:element name="spreadLeg" type="xs:boolean"/>
          <xs:element name="extendedTradingHours" type="xs:boolean"/>
          <xs:element name="validTick" type="xs:boolean"/>
          <xs:element minOccurs="0" name="type" type="e:timeAndSaleType"/>
          <xs:element minOccurs="0" name="buyer" type="xs:string"/>
          <xs:element minOccurs="0" name="seller" type="xs:string"/>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="trade">
    <xs:complexContent>
      <xs:extension base="e:tradeBase">
        <xs:sequence/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType abstract="true" name="tradeBase">
    <xs:complexContent>
      <xs:extension base="e:marketEvent">
        <xs:sequence>
          <xs:element minOccurs="0" name="time" type="xs:dateTime"/>
          <xs:element name="timeNanoPart" type="xs:int"/>
          <xs:element name="sequence" type="xs:int"/>
          <xs:element minOccurs="0" name="exchangeCode" type="xs:string"/>
          <xs:element minOccurs="0" name="price" type="xs:string"/>
          <xs:element minOccurs="0" name="change" type="xs:string"/>
          <xs:element minOccurs="0" name="size" type="xs:string"/>
          <xs:element name="dayId" type="xs:int"/>
          <xs:element minOccurs="0" name="dayVolume" type="xs:string"/>
          <xs:element minOccurs="0" name="dayTurnover" type="xs:string"/>
          <xs:element minOccurs="0" name="tickDirection" type="e:direction"/>
          <xs:element name="extendedTradingHours" type="xs:boolean"/>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="tradeETH">
    <xs:complexContent>
      <xs:extension base="e:tradeBase">
        <xs:sequence/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="configuration">
    <xs:sequence>
      <xs:element minOccurs="0" name="eventSymbol" type="xs:string"/>
      <xs:element name="eventTime" type="xs:long"/>
      <xs:element name="version" type="xs:int"/>
      <xs:any namespace="##other" processContents="skip"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="message">
    <xs:sequence>
      <xs:element minOccurs="0" name="eventSymbol" type="xs:string"/>
      <xs:element name="eventTime" type="xs:long"/>
      <xs:any namespace="##other" processContents="skip"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="greeks">
    <xs:complexContent>
      <xs:extension base="e:marketEvent">
        <xs:sequence>
          <xs:element name="eventFlags" type="xs:int"/>
          <xs:element name="index" type="xs:long"/>
          <xs:element minOccurs="0" name="time" type="xs:dateTime"/>
          <xs:element name="sequence" type="xs:int"/>
          <xs:element name="price" type="xs:double"/>
          <xs:element name="volatility" type="xs:double"/>
          <xs:element name="delta" type="xs:double"/>
          <xs:element name="gamma" type="xs:double"/>
          <xs:element name="theta" type="xs:double"/>
          <xs:element name="rho" type="xs:double"/>
          <xs:element name="vega" type="xs:double"/>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="series">
    <xs:complexContent>
      <xs:extension base="e:marketEvent">
        <xs:sequence>
          <xs:element name="eventFlags" type="xs:int"/>
          <xs:element name="index" type="xs:long"/>
          <xs:element minOccurs="0" name="time" type="xs:string"/>
          <xs:element name="sequence" type="xs:int"/>
          <xs:element name="expiration" type="xs:int"/>
          <xs:element name="volatility" type="xs:double"/>
          <xs:element name="callVolume" type="xs:double"/>
          <xs:element name="putVolume" type="xs:double"/>
          <xs:element name="putCallRatio" type="xs:double"/>
          <xs:element name="forwardPrice" type="xs:double"/>
          <xs:element name="dividend" type="xs:double"/>
          <xs:element name="interest" type="xs:double"/>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="theoPrice">
    <xs:complexContent>
      <xs:extension base="e:marketEvent">
        <xs:sequence>
          <xs:element name="eventFlags" type="xs:int"/>
          <xs:element name="index" type="xs:long"/>
          <xs:element minOccurs="0" name="time" type="xs:dateTime"/>
          <xs:element name="sequence" type="xs:int"/>
          <xs:element name="price" type="xs:double"/>
          <xs:element name="underlyingPrice" type="xs:double"/>
          <xs:element name="delta" type="xs:double"/>
          <xs:element name="gamma" type="xs:double"/>
          <xs:element name="dividend" type="xs:double"/>
          <xs:element name="interest" type="xs:double"/>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="underlying">
    <xs:complexContent>
      <xs:extension base="e:marketEvent">
        <xs:sequence>
          <xs:element name="eventFlags" type="xs:int"/>
          <xs:element name="index" type="xs:long"/>
          <xs:element minOccurs="0" name="time" type="xs:dateTime"/>
          <xs:element name="sequence" type="xs:int"/>
          <xs:element name="volatility" type="xs:double"/>
          <xs:element name="frontVolatility" type="xs:double"/>
          <xs:element name="backVolatility" type="xs:double"/>
          <xs:element name="callVolume" type="xs:double"/>
          <xs:element name="putVolume" type="xs:double"/>
          <xs:element name="putCallRatio" type="xs:double"/>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:simpleType name="orderAction">
    <xs:restriction base="xs:string">
      <xs:enumeration value="UNDEFINED"/>
      <xs:enumeration value="NEW"/>
      <xs:enumeration value="REPLACE"/>
      <xs:enumeration value="MODIFY"/>
      <xs:enumeration value="DELETE"/>
      <xs:enumeration value="PARTIAL"/>
      <xs:enumeration value="EXECUTE"/>
      <xs:enumeration value="TRADE"/>
      <xs:enumeration value="BUST"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="side">
    <xs:restriction base="xs:string">
      <xs:enumeration value="UNDEFINED"/>
      <xs:enumeration value="BUY"/>
      <xs:enumeration value="SELL"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="scope">
    <xs:restriction base="xs:string">
      <xs:enumeration value="COMPOSITE"/>
      <xs:enumeration value="REGIONAL"/>
      <xs:enumeration value="AGGREGATE"/>
      <xs:enumeration value="ORDER"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="shortSaleRestriction">
    <xs:restriction base="xs:string">
      <xs:enumeration value="UNDEFINED"/>
      <xs:enumeration value="ACTIVE"/>
      <xs:enumeration value="INACTIVE"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="tradingStatus">
    <xs:restriction base="xs:string">
      <xs:enumeration value="UNDEFINED"/>
      <xs:enumeration value="HALTED"/>
      <xs:enumeration value="ACTIVE"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="priceType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="REGULAR"/>
      <xs:enumeration value="INDICATIVE"/>
      <xs:enumeration value="PRELIMINARY"/>
      <xs:enumeration value="FINAL"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="timeAndSaleType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="NEW"/>
      <xs:enumeration value="CORRECTION"/>
      <xs:enumeration value="CANCEL"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="direction">
    <xs:restriction base="xs:string">
      <xs:enumeration value="UNDEFINED"/>
      <xs:enumeration value="DOWN"/>
      <xs:enumeration value="ZERO_DOWN"/>
      <xs:enumeration value="ZERO"/>
      <xs:enumeration value="ZERO_UP"/>
      <xs:enumeration value="UP"/>
    </xs:restriction>
  </xs:simpleType>
</xs:schema>
