<?php
/**
 * Instrument
 *
 * PHP version 5
 *
 * @category Class
 * @package  Swagger\Client
 * @author   Swagger Codegen team
 * @link     https://github.com/swagger-api/swagger-codegen
 */

/**
 * BitMEX API
 *
 * ## REST API for the BitMEX Trading Platform  _If you are building automated tools, please subscribe to the_ _[BitMEX API RSS Feed](https://blog.bitmex.com/api_announcement/feed/) for changes. The feed will be updated_ _regularly and is the most reliable way to get downtime and update announcements._  [View Changelog](/app/apiChangelog)  -  #### Getting Started  Base URI: [https://www.bitmex.com/api/v1](/api/v1)  ##### Fetching Data  All REST endpoints are documented below. You can try out any query right from this interface.  Most table queries accept `count`, `start`, and `reverse` params. Set `reverse=true` to get rows newest-first.  Additional documentation regarding filters, timestamps, and authentication is available in [the main API documentation](/app/restAPI).  _All_ table data is available via the [Websocket](/app/wsAPI). We highly recommend using the socket if you want to have the quickest possible data without being subject to ratelimits.  ##### Return Types  By default, all data is returned as JSON. Send `?_format=csv` to get CSV data or `?_format=xml` to get XML data.  ##### Trade Data Queries  _This is only a small subset of what is available, to get you started._  Fill in the parameters and click the `Try it out!` button to try any of these queries.  - [Pricing Data](#!/Quote/Quote_get)  - [Trade Data](#!/Trade/Trade_get)  - [OrderBook Data](#!/OrderBook/OrderBook_getL2)  - [Settlement Data](#!/Settlement/Settlement_get)  - [Exchange Statistics](#!/Stats/Stats_history)  Every function of the BitMEX.com platform is exposed here and documented. Many more functions are available.  ##### Swagger Specification  [⇩ Download Swagger JSON](swagger.json)  -  ## All API Endpoints  Click to expand a section.
 *
 * OpenAPI spec version: 1.2.0
 * Contact: support@bitmex.com
 * Generated by: https://github.com/swagger-api/swagger-codegen.git
 * Swagger Codegen version: 2.4.42-SNAPSHOT
 */

/**
 * NOTE: This class is auto generated by the swagger code generator program.
 * https://github.com/swagger-api/swagger-codegen
 * Do not edit the class manually.
 */

namespace Swagger\Client\Model;

use \ArrayAccess;
use \Swagger\Client\ObjectSerializer;

/**
 * Instrument Class Doc Comment
 *
 * @category Class
 * @description Tradeable Contracts, Indices, and History
 * @package  Swagger\Client
 * @author   Swagger Codegen team
 * @link     https://github.com/swagger-api/swagger-codegen
 */
class Instrument implements ModelInterface, ArrayAccess
{
    const DISCRIMINATOR = null;

    /**
      * The original name of the model.
      *
      * @var string
      */
    protected static $swaggerModelName = 'Instrument';

    /**
      * Array of property to type mappings. Used for (de)serialization
      *
      * @var string[]
      */
    protected static $swaggerTypes = [
        'symbol' => 'string',
        'root_symbol' => 'string',
        'state' => 'string',
        'typ' => 'string',
        'listing' => '\DateTime',
        'front' => '\DateTime',
        'expiry' => '\DateTime',
        'settle' => '\DateTime',
        'listed_settle' => '\DateTime',
        'position_currency' => 'string',
        'underlying' => 'string',
        'quote_currency' => 'string',
        'underlying_symbol' => 'string',
        'reference' => 'string',
        'reference_symbol' => 'string',
        'calc_interval' => '\DateTime',
        'publish_interval' => '\DateTime',
        'publish_time' => '\DateTime',
        'max_order_qty' => 'int',
        'max_price' => 'double',
        'lot_size' => 'int',
        'tick_size' => 'double',
        'multiplier' => 'int',
        'settl_currency' => 'string',
        'underlying_to_position_multiplier' => 'int',
        'underlying_to_settle_multiplier' => 'int',
        'quote_to_settle_multiplier' => 'int',
        'is_quanto' => 'bool',
        'is_inverse' => 'bool',
        'init_margin' => 'double',
        'maint_margin' => 'double',
        'risk_limit' => 'int',
        'risk_step' => 'int',
        'limit' => 'double',
        'taxed' => 'bool',
        'deleverage' => 'bool',
        'maker_fee' => 'double',
        'taker_fee' => 'double',
        'settlement_fee' => 'double',
        'funding_base_symbol' => 'string',
        'funding_quote_symbol' => 'string',
        'funding_premium_symbol' => 'string',
        'funding_timestamp' => '\DateTime',
        'funding_interval' => '\DateTime',
        'funding_rate' => 'double',
        'indicative_funding_rate' => 'double',
        'rebalance_timestamp' => '\DateTime',
        'rebalance_interval' => '\DateTime',
        'prev_close_price' => 'double',
        'limit_down_price' => 'double',
        'limit_up_price' => 'double',
        'total_volume' => 'int',
        'volume' => 'int',
        'volume24h' => 'int',
        'prev_total_turnover' => 'int',
        'total_turnover' => 'int',
        'turnover' => 'int',
        'turnover24h' => 'int',
        'home_notional24h' => 'double',
        'foreign_notional24h' => 'double',
        'prev_price24h' => 'double',
        'vwap' => 'double',
        'high_price' => 'double',
        'low_price' => 'double',
        'last_price' => 'double',
        'last_price_protected' => 'double',
        'last_tick_direction' => 'string',
        'last_change_pcnt' => 'double',
        'bid_price' => 'double',
        'mid_price' => 'double',
        'ask_price' => 'double',
        'impact_bid_price' => 'double',
        'impact_mid_price' => 'double',
        'impact_ask_price' => 'double',
        'has_liquidity' => 'bool',
        'open_interest' => 'int',
        'open_value' => 'int',
        'fair_method' => 'string',
        'fair_basis_rate' => 'double',
        'fair_basis' => 'double',
        'fair_price' => 'double',
        'mark_method' => 'string',
        'mark_price' => 'double',
        'indicative_settle_price' => 'double',
        'settled_price_adjustment_rate' => 'double',
        'settled_price' => 'double',
        'instant_pnl' => 'bool',
        'min_tick' => 'double',
        'timestamp' => '\DateTime'
    ];

    /**
      * Array of property to format mappings. Used for (de)serialization
      *
      * @var string[]
      */
    protected static $swaggerFormats = [
        'symbol' => null,
        'root_symbol' => null,
        'state' => null,
        'typ' => null,
        'listing' => 'date-time',
        'front' => 'date-time',
        'expiry' => 'date-time',
        'settle' => 'date-time',
        'listed_settle' => 'date-time',
        'position_currency' => null,
        'underlying' => null,
        'quote_currency' => null,
        'underlying_symbol' => null,
        'reference' => null,
        'reference_symbol' => null,
        'calc_interval' => 'date-time',
        'publish_interval' => 'date-time',
        'publish_time' => 'date-time',
        'max_order_qty' => 'int64',
        'max_price' => 'double',
        'lot_size' => 'int64',
        'tick_size' => 'double',
        'multiplier' => 'int64',
        'settl_currency' => null,
        'underlying_to_position_multiplier' => 'int64',
        'underlying_to_settle_multiplier' => 'int64',
        'quote_to_settle_multiplier' => 'int64',
        'is_quanto' => null,
        'is_inverse' => null,
        'init_margin' => 'double',
        'maint_margin' => 'double',
        'risk_limit' => 'int64',
        'risk_step' => 'int64',
        'limit' => 'double',
        'taxed' => null,
        'deleverage' => null,
        'maker_fee' => 'double',
        'taker_fee' => 'double',
        'settlement_fee' => 'double',
        'funding_base_symbol' => null,
        'funding_quote_symbol' => null,
        'funding_premium_symbol' => null,
        'funding_timestamp' => 'date-time',
        'funding_interval' => 'date-time',
        'funding_rate' => 'double',
        'indicative_funding_rate' => 'double',
        'rebalance_timestamp' => 'date-time',
        'rebalance_interval' => 'date-time',
        'prev_close_price' => 'double',
        'limit_down_price' => 'double',
        'limit_up_price' => 'double',
        'total_volume' => 'int64',
        'volume' => 'int64',
        'volume24h' => 'int64',
        'prev_total_turnover' => 'int64',
        'total_turnover' => 'int64',
        'turnover' => 'int64',
        'turnover24h' => 'int64',
        'home_notional24h' => 'double',
        'foreign_notional24h' => 'double',
        'prev_price24h' => 'double',
        'vwap' => 'double',
        'high_price' => 'double',
        'low_price' => 'double',
        'last_price' => 'double',
        'last_price_protected' => 'double',
        'last_tick_direction' => null,
        'last_change_pcnt' => 'double',
        'bid_price' => 'double',
        'mid_price' => 'double',
        'ask_price' => 'double',
        'impact_bid_price' => 'double',
        'impact_mid_price' => 'double',
        'impact_ask_price' => 'double',
        'has_liquidity' => null,
        'open_interest' => 'int64',
        'open_value' => 'int64',
        'fair_method' => null,
        'fair_basis_rate' => 'double',
        'fair_basis' => 'double',
        'fair_price' => 'double',
        'mark_method' => null,
        'mark_price' => 'double',
        'indicative_settle_price' => 'double',
        'settled_price_adjustment_rate' => 'double',
        'settled_price' => 'double',
        'instant_pnl' => null,
        'min_tick' => 'double',
        'timestamp' => 'date-time'
    ];

    /**
     * Array of property to type mappings. Used for (de)serialization
     *
     * @return array
     */
    public static function swaggerTypes()
    {
        return self::$swaggerTypes;
    }

    /**
     * Array of property to format mappings. Used for (de)serialization
     *
     * @return array
     */
    public static function swaggerFormats()
    {
        return self::$swaggerFormats;
    }

    /**
     * Array of attributes where the key is the local name,
     * and the value is the original name
     *
     * @var string[]
     */
    protected static $attributeMap = [
        'symbol' => 'symbol',
        'root_symbol' => 'rootSymbol',
        'state' => 'state',
        'typ' => 'typ',
        'listing' => 'listing',
        'front' => 'front',
        'expiry' => 'expiry',
        'settle' => 'settle',
        'listed_settle' => 'listedSettle',
        'position_currency' => 'positionCurrency',
        'underlying' => 'underlying',
        'quote_currency' => 'quoteCurrency',
        'underlying_symbol' => 'underlyingSymbol',
        'reference' => 'reference',
        'reference_symbol' => 'referenceSymbol',
        'calc_interval' => 'calcInterval',
        'publish_interval' => 'publishInterval',
        'publish_time' => 'publishTime',
        'max_order_qty' => 'maxOrderQty',
        'max_price' => 'maxPrice',
        'lot_size' => 'lotSize',
        'tick_size' => 'tickSize',
        'multiplier' => 'multiplier',
        'settl_currency' => 'settlCurrency',
        'underlying_to_position_multiplier' => 'underlyingToPositionMultiplier',
        'underlying_to_settle_multiplier' => 'underlyingToSettleMultiplier',
        'quote_to_settle_multiplier' => 'quoteToSettleMultiplier',
        'is_quanto' => 'isQuanto',
        'is_inverse' => 'isInverse',
        'init_margin' => 'initMargin',
        'maint_margin' => 'maintMargin',
        'risk_limit' => 'riskLimit',
        'risk_step' => 'riskStep',
        'limit' => 'limit',
        'taxed' => 'taxed',
        'deleverage' => 'deleverage',
        'maker_fee' => 'makerFee',
        'taker_fee' => 'takerFee',
        'settlement_fee' => 'settlementFee',
        'funding_base_symbol' => 'fundingBaseSymbol',
        'funding_quote_symbol' => 'fundingQuoteSymbol',
        'funding_premium_symbol' => 'fundingPremiumSymbol',
        'funding_timestamp' => 'fundingTimestamp',
        'funding_interval' => 'fundingInterval',
        'funding_rate' => 'fundingRate',
        'indicative_funding_rate' => 'indicativeFundingRate',
        'rebalance_timestamp' => 'rebalanceTimestamp',
        'rebalance_interval' => 'rebalanceInterval',
        'prev_close_price' => 'prevClosePrice',
        'limit_down_price' => 'limitDownPrice',
        'limit_up_price' => 'limitUpPrice',
        'total_volume' => 'totalVolume',
        'volume' => 'volume',
        'volume24h' => 'volume24h',
        'prev_total_turnover' => 'prevTotalTurnover',
        'total_turnover' => 'totalTurnover',
        'turnover' => 'turnover',
        'turnover24h' => 'turnover24h',
        'home_notional24h' => 'homeNotional24h',
        'foreign_notional24h' => 'foreignNotional24h',
        'prev_price24h' => 'prevPrice24h',
        'vwap' => 'vwap',
        'high_price' => 'highPrice',
        'low_price' => 'lowPrice',
        'last_price' => 'lastPrice',
        'last_price_protected' => 'lastPriceProtected',
        'last_tick_direction' => 'lastTickDirection',
        'last_change_pcnt' => 'lastChangePcnt',
        'bid_price' => 'bidPrice',
        'mid_price' => 'midPrice',
        'ask_price' => 'askPrice',
        'impact_bid_price' => 'impactBidPrice',
        'impact_mid_price' => 'impactMidPrice',
        'impact_ask_price' => 'impactAskPrice',
        'has_liquidity' => 'hasLiquidity',
        'open_interest' => 'openInterest',
        'open_value' => 'openValue',
        'fair_method' => 'fairMethod',
        'fair_basis_rate' => 'fairBasisRate',
        'fair_basis' => 'fairBasis',
        'fair_price' => 'fairPrice',
        'mark_method' => 'markMethod',
        'mark_price' => 'markPrice',
        'indicative_settle_price' => 'indicativeSettlePrice',
        'settled_price_adjustment_rate' => 'settledPriceAdjustmentRate',
        'settled_price' => 'settledPrice',
        'instant_pnl' => 'instantPnl',
        'min_tick' => 'minTick',
        'timestamp' => 'timestamp'
    ];

    /**
     * Array of attributes to setter functions (for deserialization of responses)
     *
     * @var string[]
     */
    protected static $setters = [
        'symbol' => 'setSymbol',
        'root_symbol' => 'setRootSymbol',
        'state' => 'setState',
        'typ' => 'setTyp',
        'listing' => 'setListing',
        'front' => 'setFront',
        'expiry' => 'setExpiry',
        'settle' => 'setSettle',
        'listed_settle' => 'setListedSettle',
        'position_currency' => 'setPositionCurrency',
        'underlying' => 'setUnderlying',
        'quote_currency' => 'setQuoteCurrency',
        'underlying_symbol' => 'setUnderlyingSymbol',
        'reference' => 'setReference',
        'reference_symbol' => 'setReferenceSymbol',
        'calc_interval' => 'setCalcInterval',
        'publish_interval' => 'setPublishInterval',
        'publish_time' => 'setPublishTime',
        'max_order_qty' => 'setMaxOrderQty',
        'max_price' => 'setMaxPrice',
        'lot_size' => 'setLotSize',
        'tick_size' => 'setTickSize',
        'multiplier' => 'setMultiplier',
        'settl_currency' => 'setSettlCurrency',
        'underlying_to_position_multiplier' => 'setUnderlyingToPositionMultiplier',
        'underlying_to_settle_multiplier' => 'setUnderlyingToSettleMultiplier',
        'quote_to_settle_multiplier' => 'setQuoteToSettleMultiplier',
        'is_quanto' => 'setIsQuanto',
        'is_inverse' => 'setIsInverse',
        'init_margin' => 'setInitMargin',
        'maint_margin' => 'setMaintMargin',
        'risk_limit' => 'setRiskLimit',
        'risk_step' => 'setRiskStep',
        'limit' => 'setLimit',
        'taxed' => 'setTaxed',
        'deleverage' => 'setDeleverage',
        'maker_fee' => 'setMakerFee',
        'taker_fee' => 'setTakerFee',
        'settlement_fee' => 'setSettlementFee',
        'funding_base_symbol' => 'setFundingBaseSymbol',
        'funding_quote_symbol' => 'setFundingQuoteSymbol',
        'funding_premium_symbol' => 'setFundingPremiumSymbol',
        'funding_timestamp' => 'setFundingTimestamp',
        'funding_interval' => 'setFundingInterval',
        'funding_rate' => 'setFundingRate',
        'indicative_funding_rate' => 'setIndicativeFundingRate',
        'rebalance_timestamp' => 'setRebalanceTimestamp',
        'rebalance_interval' => 'setRebalanceInterval',
        'prev_close_price' => 'setPrevClosePrice',
        'limit_down_price' => 'setLimitDownPrice',
        'limit_up_price' => 'setLimitUpPrice',
        'total_volume' => 'setTotalVolume',
        'volume' => 'setVolume',
        'volume24h' => 'setVolume24h',
        'prev_total_turnover' => 'setPrevTotalTurnover',
        'total_turnover' => 'setTotalTurnover',
        'turnover' => 'setTurnover',
        'turnover24h' => 'setTurnover24h',
        'home_notional24h' => 'setHomeNotional24h',
        'foreign_notional24h' => 'setForeignNotional24h',
        'prev_price24h' => 'setPrevPrice24h',
        'vwap' => 'setVwap',
        'high_price' => 'setHighPrice',
        'low_price' => 'setLowPrice',
        'last_price' => 'setLastPrice',
        'last_price_protected' => 'setLastPriceProtected',
        'last_tick_direction' => 'setLastTickDirection',
        'last_change_pcnt' => 'setLastChangePcnt',
        'bid_price' => 'setBidPrice',
        'mid_price' => 'setMidPrice',
        'ask_price' => 'setAskPrice',
        'impact_bid_price' => 'setImpactBidPrice',
        'impact_mid_price' => 'setImpactMidPrice',
        'impact_ask_price' => 'setImpactAskPrice',
        'has_liquidity' => 'setHasLiquidity',
        'open_interest' => 'setOpenInterest',
        'open_value' => 'setOpenValue',
        'fair_method' => 'setFairMethod',
        'fair_basis_rate' => 'setFairBasisRate',
        'fair_basis' => 'setFairBasis',
        'fair_price' => 'setFairPrice',
        'mark_method' => 'setMarkMethod',
        'mark_price' => 'setMarkPrice',
        'indicative_settle_price' => 'setIndicativeSettlePrice',
        'settled_price_adjustment_rate' => 'setSettledPriceAdjustmentRate',
        'settled_price' => 'setSettledPrice',
        'instant_pnl' => 'setInstantPnl',
        'min_tick' => 'setMinTick',
        'timestamp' => 'setTimestamp'
    ];

    /**
     * Array of attributes to getter functions (for serialization of requests)
     *
     * @var string[]
     */
    protected static $getters = [
        'symbol' => 'getSymbol',
        'root_symbol' => 'getRootSymbol',
        'state' => 'getState',
        'typ' => 'getTyp',
        'listing' => 'getListing',
        'front' => 'getFront',
        'expiry' => 'getExpiry',
        'settle' => 'getSettle',
        'listed_settle' => 'getListedSettle',
        'position_currency' => 'getPositionCurrency',
        'underlying' => 'getUnderlying',
        'quote_currency' => 'getQuoteCurrency',
        'underlying_symbol' => 'getUnderlyingSymbol',
        'reference' => 'getReference',
        'reference_symbol' => 'getReferenceSymbol',
        'calc_interval' => 'getCalcInterval',
        'publish_interval' => 'getPublishInterval',
        'publish_time' => 'getPublishTime',
        'max_order_qty' => 'getMaxOrderQty',
        'max_price' => 'getMaxPrice',
        'lot_size' => 'getLotSize',
        'tick_size' => 'getTickSize',
        'multiplier' => 'getMultiplier',
        'settl_currency' => 'getSettlCurrency',
        'underlying_to_position_multiplier' => 'getUnderlyingToPositionMultiplier',
        'underlying_to_settle_multiplier' => 'getUnderlyingToSettleMultiplier',
        'quote_to_settle_multiplier' => 'getQuoteToSettleMultiplier',
        'is_quanto' => 'getIsQuanto',
        'is_inverse' => 'getIsInverse',
        'init_margin' => 'getInitMargin',
        'maint_margin' => 'getMaintMargin',
        'risk_limit' => 'getRiskLimit',
        'risk_step' => 'getRiskStep',
        'limit' => 'getLimit',
        'taxed' => 'getTaxed',
        'deleverage' => 'getDeleverage',
        'maker_fee' => 'getMakerFee',
        'taker_fee' => 'getTakerFee',
        'settlement_fee' => 'getSettlementFee',
        'funding_base_symbol' => 'getFundingBaseSymbol',
        'funding_quote_symbol' => 'getFundingQuoteSymbol',
        'funding_premium_symbol' => 'getFundingPremiumSymbol',
        'funding_timestamp' => 'getFundingTimestamp',
        'funding_interval' => 'getFundingInterval',
        'funding_rate' => 'getFundingRate',
        'indicative_funding_rate' => 'getIndicativeFundingRate',
        'rebalance_timestamp' => 'getRebalanceTimestamp',
        'rebalance_interval' => 'getRebalanceInterval',
        'prev_close_price' => 'getPrevClosePrice',
        'limit_down_price' => 'getLimitDownPrice',
        'limit_up_price' => 'getLimitUpPrice',
        'total_volume' => 'getTotalVolume',
        'volume' => 'getVolume',
        'volume24h' => 'getVolume24h',
        'prev_total_turnover' => 'getPrevTotalTurnover',
        'total_turnover' => 'getTotalTurnover',
        'turnover' => 'getTurnover',
        'turnover24h' => 'getTurnover24h',
        'home_notional24h' => 'getHomeNotional24h',
        'foreign_notional24h' => 'getForeignNotional24h',
        'prev_price24h' => 'getPrevPrice24h',
        'vwap' => 'getVwap',
        'high_price' => 'getHighPrice',
        'low_price' => 'getLowPrice',
        'last_price' => 'getLastPrice',
        'last_price_protected' => 'getLastPriceProtected',
        'last_tick_direction' => 'getLastTickDirection',
        'last_change_pcnt' => 'getLastChangePcnt',
        'bid_price' => 'getBidPrice',
        'mid_price' => 'getMidPrice',
        'ask_price' => 'getAskPrice',
        'impact_bid_price' => 'getImpactBidPrice',
        'impact_mid_price' => 'getImpactMidPrice',
        'impact_ask_price' => 'getImpactAskPrice',
        'has_liquidity' => 'getHasLiquidity',
        'open_interest' => 'getOpenInterest',
        'open_value' => 'getOpenValue',
        'fair_method' => 'getFairMethod',
        'fair_basis_rate' => 'getFairBasisRate',
        'fair_basis' => 'getFairBasis',
        'fair_price' => 'getFairPrice',
        'mark_method' => 'getMarkMethod',
        'mark_price' => 'getMarkPrice',
        'indicative_settle_price' => 'getIndicativeSettlePrice',
        'settled_price_adjustment_rate' => 'getSettledPriceAdjustmentRate',
        'settled_price' => 'getSettledPrice',
        'instant_pnl' => 'getInstantPnl',
        'min_tick' => 'getMinTick',
        'timestamp' => 'getTimestamp'
    ];

    /**
     * Array of attributes where the key is the local name,
     * and the value is the original name
     *
     * @return array
     */
    public static function attributeMap()
    {
        return self::$attributeMap;
    }

    /**
     * Array of attributes to setter functions (for deserialization of responses)
     *
     * @return array
     */
    public static function setters()
    {
        return self::$setters;
    }

    /**
     * Array of attributes to getter functions (for serialization of requests)
     *
     * @return array
     */
    public static function getters()
    {
        return self::$getters;
    }

    /**
     * The original name of the model.
     *
     * @return string
     */
    public function getModelName()
    {
        return self::$swaggerModelName;
    }

    

    

    /**
     * Associative array for storing property values
     *
     * @var mixed[]
     */
    protected $container = [];

    /**
     * Constructor
     *
     * @param mixed[] $data Associated array of property values
     *                      initializing the model
     */
    public function __construct(array $data = null)
    {
        $this->container['symbol'] = isset($data['symbol']) ? $data['symbol'] : null;
        $this->container['root_symbol'] = isset($data['root_symbol']) ? $data['root_symbol'] : null;
        $this->container['state'] = isset($data['state']) ? $data['state'] : null;
        $this->container['typ'] = isset($data['typ']) ? $data['typ'] : null;
        $this->container['listing'] = isset($data['listing']) ? $data['listing'] : null;
        $this->container['front'] = isset($data['front']) ? $data['front'] : null;
        $this->container['expiry'] = isset($data['expiry']) ? $data['expiry'] : null;
        $this->container['settle'] = isset($data['settle']) ? $data['settle'] : null;
        $this->container['listed_settle'] = isset($data['listed_settle']) ? $data['listed_settle'] : null;
        $this->container['position_currency'] = isset($data['position_currency']) ? $data['position_currency'] : null;
        $this->container['underlying'] = isset($data['underlying']) ? $data['underlying'] : null;
        $this->container['quote_currency'] = isset($data['quote_currency']) ? $data['quote_currency'] : null;
        $this->container['underlying_symbol'] = isset($data['underlying_symbol']) ? $data['underlying_symbol'] : null;
        $this->container['reference'] = isset($data['reference']) ? $data['reference'] : null;
        $this->container['reference_symbol'] = isset($data['reference_symbol']) ? $data['reference_symbol'] : null;
        $this->container['calc_interval'] = isset($data['calc_interval']) ? $data['calc_interval'] : null;
        $this->container['publish_interval'] = isset($data['publish_interval']) ? $data['publish_interval'] : null;
        $this->container['publish_time'] = isset($data['publish_time']) ? $data['publish_time'] : null;
        $this->container['max_order_qty'] = isset($data['max_order_qty']) ? $data['max_order_qty'] : null;
        $this->container['max_price'] = isset($data['max_price']) ? $data['max_price'] : null;
        $this->container['lot_size'] = isset($data['lot_size']) ? $data['lot_size'] : null;
        $this->container['tick_size'] = isset($data['tick_size']) ? $data['tick_size'] : null;
        $this->container['multiplier'] = isset($data['multiplier']) ? $data['multiplier'] : null;
        $this->container['settl_currency'] = isset($data['settl_currency']) ? $data['settl_currency'] : null;
        $this->container['underlying_to_position_multiplier'] = isset($data['underlying_to_position_multiplier']) ? $data['underlying_to_position_multiplier'] : null;
        $this->container['underlying_to_settle_multiplier'] = isset($data['underlying_to_settle_multiplier']) ? $data['underlying_to_settle_multiplier'] : null;
        $this->container['quote_to_settle_multiplier'] = isset($data['quote_to_settle_multiplier']) ? $data['quote_to_settle_multiplier'] : null;
        $this->container['is_quanto'] = isset($data['is_quanto']) ? $data['is_quanto'] : null;
        $this->container['is_inverse'] = isset($data['is_inverse']) ? $data['is_inverse'] : null;
        $this->container['init_margin'] = isset($data['init_margin']) ? $data['init_margin'] : null;
        $this->container['maint_margin'] = isset($data['maint_margin']) ? $data['maint_margin'] : null;
        $this->container['risk_limit'] = isset($data['risk_limit']) ? $data['risk_limit'] : null;
        $this->container['risk_step'] = isset($data['risk_step']) ? $data['risk_step'] : null;
        $this->container['limit'] = isset($data['limit']) ? $data['limit'] : null;
        $this->container['taxed'] = isset($data['taxed']) ? $data['taxed'] : null;
        $this->container['deleverage'] = isset($data['deleverage']) ? $data['deleverage'] : null;
        $this->container['maker_fee'] = isset($data['maker_fee']) ? $data['maker_fee'] : null;
        $this->container['taker_fee'] = isset($data['taker_fee']) ? $data['taker_fee'] : null;
        $this->container['settlement_fee'] = isset($data['settlement_fee']) ? $data['settlement_fee'] : null;
        $this->container['funding_base_symbol'] = isset($data['funding_base_symbol']) ? $data['funding_base_symbol'] : null;
        $this->container['funding_quote_symbol'] = isset($data['funding_quote_symbol']) ? $data['funding_quote_symbol'] : null;
        $this->container['funding_premium_symbol'] = isset($data['funding_premium_symbol']) ? $data['funding_premium_symbol'] : null;
        $this->container['funding_timestamp'] = isset($data['funding_timestamp']) ? $data['funding_timestamp'] : null;
        $this->container['funding_interval'] = isset($data['funding_interval']) ? $data['funding_interval'] : null;
        $this->container['funding_rate'] = isset($data['funding_rate']) ? $data['funding_rate'] : null;
        $this->container['indicative_funding_rate'] = isset($data['indicative_funding_rate']) ? $data['indicative_funding_rate'] : null;
        $this->container['rebalance_timestamp'] = isset($data['rebalance_timestamp']) ? $data['rebalance_timestamp'] : null;
        $this->container['rebalance_interval'] = isset($data['rebalance_interval']) ? $data['rebalance_interval'] : null;
        $this->container['prev_close_price'] = isset($data['prev_close_price']) ? $data['prev_close_price'] : null;
        $this->container['limit_down_price'] = isset($data['limit_down_price']) ? $data['limit_down_price'] : null;
        $this->container['limit_up_price'] = isset($data['limit_up_price']) ? $data['limit_up_price'] : null;
        $this->container['total_volume'] = isset($data['total_volume']) ? $data['total_volume'] : null;
        $this->container['volume'] = isset($data['volume']) ? $data['volume'] : null;
        $this->container['volume24h'] = isset($data['volume24h']) ? $data['volume24h'] : null;
        $this->container['prev_total_turnover'] = isset($data['prev_total_turnover']) ? $data['prev_total_turnover'] : null;
        $this->container['total_turnover'] = isset($data['total_turnover']) ? $data['total_turnover'] : null;
        $this->container['turnover'] = isset($data['turnover']) ? $data['turnover'] : null;
        $this->container['turnover24h'] = isset($data['turnover24h']) ? $data['turnover24h'] : null;
        $this->container['home_notional24h'] = isset($data['home_notional24h']) ? $data['home_notional24h'] : null;
        $this->container['foreign_notional24h'] = isset($data['foreign_notional24h']) ? $data['foreign_notional24h'] : null;
        $this->container['prev_price24h'] = isset($data['prev_price24h']) ? $data['prev_price24h'] : null;
        $this->container['vwap'] = isset($data['vwap']) ? $data['vwap'] : null;
        $this->container['high_price'] = isset($data['high_price']) ? $data['high_price'] : null;
        $this->container['low_price'] = isset($data['low_price']) ? $data['low_price'] : null;
        $this->container['last_price'] = isset($data['last_price']) ? $data['last_price'] : null;
        $this->container['last_price_protected'] = isset($data['last_price_protected']) ? $data['last_price_protected'] : null;
        $this->container['last_tick_direction'] = isset($data['last_tick_direction']) ? $data['last_tick_direction'] : null;
        $this->container['last_change_pcnt'] = isset($data['last_change_pcnt']) ? $data['last_change_pcnt'] : null;
        $this->container['bid_price'] = isset($data['bid_price']) ? $data['bid_price'] : null;
        $this->container['mid_price'] = isset($data['mid_price']) ? $data['mid_price'] : null;
        $this->container['ask_price'] = isset($data['ask_price']) ? $data['ask_price'] : null;
        $this->container['impact_bid_price'] = isset($data['impact_bid_price']) ? $data['impact_bid_price'] : null;
        $this->container['impact_mid_price'] = isset($data['impact_mid_price']) ? $data['impact_mid_price'] : null;
        $this->container['impact_ask_price'] = isset($data['impact_ask_price']) ? $data['impact_ask_price'] : null;
        $this->container['has_liquidity'] = isset($data['has_liquidity']) ? $data['has_liquidity'] : null;
        $this->container['open_interest'] = isset($data['open_interest']) ? $data['open_interest'] : null;
        $this->container['open_value'] = isset($data['open_value']) ? $data['open_value'] : null;
        $this->container['fair_method'] = isset($data['fair_method']) ? $data['fair_method'] : null;
        $this->container['fair_basis_rate'] = isset($data['fair_basis_rate']) ? $data['fair_basis_rate'] : null;
        $this->container['fair_basis'] = isset($data['fair_basis']) ? $data['fair_basis'] : null;
        $this->container['fair_price'] = isset($data['fair_price']) ? $data['fair_price'] : null;
        $this->container['mark_method'] = isset($data['mark_method']) ? $data['mark_method'] : null;
        $this->container['mark_price'] = isset($data['mark_price']) ? $data['mark_price'] : null;
        $this->container['indicative_settle_price'] = isset($data['indicative_settle_price']) ? $data['indicative_settle_price'] : null;
        $this->container['settled_price_adjustment_rate'] = isset($data['settled_price_adjustment_rate']) ? $data['settled_price_adjustment_rate'] : null;
        $this->container['settled_price'] = isset($data['settled_price']) ? $data['settled_price'] : null;
        $this->container['instant_pnl'] = isset($data['instant_pnl']) ? $data['instant_pnl'] : null;
        $this->container['min_tick'] = isset($data['min_tick']) ? $data['min_tick'] : null;
        $this->container['timestamp'] = isset($data['timestamp']) ? $data['timestamp'] : null;
    }

    /**
     * Show all the invalid properties with reasons.
     *
     * @return array invalid properties with reasons
     */
    public function listInvalidProperties()
    {
        $invalidProperties = [];

        if ($this->container['symbol'] === null) {
            $invalidProperties[] = "'symbol' can't be null";
        }
        return $invalidProperties;
    }

    /**
     * Validate all the properties in the model
     * return true if all passed
     *
     * @return bool True if all properties are valid
     */
    public function valid()
    {
        return count($this->listInvalidProperties()) === 0;
    }


    /**
     * Gets symbol
     *
     * @return string
     */
    public function getSymbol()
    {
        return $this->container['symbol'];
    }

    /**
     * Sets symbol
     *
     * @param string $symbol symbol
     *
     * @return $this
     */
    public function setSymbol($symbol)
    {
        $this->container['symbol'] = $symbol;

        return $this;
    }

    /**
     * Gets root_symbol
     *
     * @return string
     */
    public function getRootSymbol()
    {
        return $this->container['root_symbol'];
    }

    /**
     * Sets root_symbol
     *
     * @param string $root_symbol root_symbol
     *
     * @return $this
     */
    public function setRootSymbol($root_symbol)
    {
        $this->container['root_symbol'] = $root_symbol;

        return $this;
    }

    /**
     * Gets state
     *
     * @return string
     */
    public function getState()
    {
        return $this->container['state'];
    }

    /**
     * Sets state
     *
     * @param string $state state
     *
     * @return $this
     */
    public function setState($state)
    {
        $this->container['state'] = $state;

        return $this;
    }

    /**
     * Gets typ
     *
     * @return string
     */
    public function getTyp()
    {
        return $this->container['typ'];
    }

    /**
     * Sets typ
     *
     * @param string $typ typ
     *
     * @return $this
     */
    public function setTyp($typ)
    {
        $this->container['typ'] = $typ;

        return $this;
    }

    /**
     * Gets listing
     *
     * @return \DateTime
     */
    public function getListing()
    {
        return $this->container['listing'];
    }

    /**
     * Sets listing
     *
     * @param \DateTime $listing listing
     *
     * @return $this
     */
    public function setListing($listing)
    {
        $this->container['listing'] = $listing;

        return $this;
    }

    /**
     * Gets front
     *
     * @return \DateTime
     */
    public function getFront()
    {
        return $this->container['front'];
    }

    /**
     * Sets front
     *
     * @param \DateTime $front front
     *
     * @return $this
     */
    public function setFront($front)
    {
        $this->container['front'] = $front;

        return $this;
    }

    /**
     * Gets expiry
     *
     * @return \DateTime
     */
    public function getExpiry()
    {
        return $this->container['expiry'];
    }

    /**
     * Sets expiry
     *
     * @param \DateTime $expiry expiry
     *
     * @return $this
     */
    public function setExpiry($expiry)
    {
        $this->container['expiry'] = $expiry;

        return $this;
    }

    /**
     * Gets settle
     *
     * @return \DateTime
     */
    public function getSettle()
    {
        return $this->container['settle'];
    }

    /**
     * Sets settle
     *
     * @param \DateTime $settle settle
     *
     * @return $this
     */
    public function setSettle($settle)
    {
        $this->container['settle'] = $settle;

        return $this;
    }

    /**
     * Gets listed_settle
     *
     * @return \DateTime
     */
    public function getListedSettle()
    {
        return $this->container['listed_settle'];
    }

    /**
     * Sets listed_settle
     *
     * @param \DateTime $listed_settle listed_settle
     *
     * @return $this
     */
    public function setListedSettle($listed_settle)
    {
        $this->container['listed_settle'] = $listed_settle;

        return $this;
    }

    /**
     * Gets position_currency
     *
     * @return string
     */
    public function getPositionCurrency()
    {
        return $this->container['position_currency'];
    }

    /**
     * Sets position_currency
     *
     * @param string $position_currency position_currency
     *
     * @return $this
     */
    public function setPositionCurrency($position_currency)
    {
        $this->container['position_currency'] = $position_currency;

        return $this;
    }

    /**
     * Gets underlying
     *
     * @return string
     */
    public function getUnderlying()
    {
        return $this->container['underlying'];
    }

    /**
     * Sets underlying
     *
     * @param string $underlying underlying
     *
     * @return $this
     */
    public function setUnderlying($underlying)
    {
        $this->container['underlying'] = $underlying;

        return $this;
    }

    /**
     * Gets quote_currency
     *
     * @return string
     */
    public function getQuoteCurrency()
    {
        return $this->container['quote_currency'];
    }

    /**
     * Sets quote_currency
     *
     * @param string $quote_currency quote_currency
     *
     * @return $this
     */
    public function setQuoteCurrency($quote_currency)
    {
        $this->container['quote_currency'] = $quote_currency;

        return $this;
    }

    /**
     * Gets underlying_symbol
     *
     * @return string
     */
    public function getUnderlyingSymbol()
    {
        return $this->container['underlying_symbol'];
    }

    /**
     * Sets underlying_symbol
     *
     * @param string $underlying_symbol underlying_symbol
     *
     * @return $this
     */
    public function setUnderlyingSymbol($underlying_symbol)
    {
        $this->container['underlying_symbol'] = $underlying_symbol;

        return $this;
    }

    /**
     * Gets reference
     *
     * @return string
     */
    public function getReference()
    {
        return $this->container['reference'];
    }

    /**
     * Sets reference
     *
     * @param string $reference reference
     *
     * @return $this
     */
    public function setReference($reference)
    {
        $this->container['reference'] = $reference;

        return $this;
    }

    /**
     * Gets reference_symbol
     *
     * @return string
     */
    public function getReferenceSymbol()
    {
        return $this->container['reference_symbol'];
    }

    /**
     * Sets reference_symbol
     *
     * @param string $reference_symbol reference_symbol
     *
     * @return $this
     */
    public function setReferenceSymbol($reference_symbol)
    {
        $this->container['reference_symbol'] = $reference_symbol;

        return $this;
    }

    /**
     * Gets calc_interval
     *
     * @return \DateTime
     */
    public function getCalcInterval()
    {
        return $this->container['calc_interval'];
    }

    /**
     * Sets calc_interval
     *
     * @param \DateTime $calc_interval calc_interval
     *
     * @return $this
     */
    public function setCalcInterval($calc_interval)
    {
        $this->container['calc_interval'] = $calc_interval;

        return $this;
    }

    /**
     * Gets publish_interval
     *
     * @return \DateTime
     */
    public function getPublishInterval()
    {
        return $this->container['publish_interval'];
    }

    /**
     * Sets publish_interval
     *
     * @param \DateTime $publish_interval publish_interval
     *
     * @return $this
     */
    public function setPublishInterval($publish_interval)
    {
        $this->container['publish_interval'] = $publish_interval;

        return $this;
    }

    /**
     * Gets publish_time
     *
     * @return \DateTime
     */
    public function getPublishTime()
    {
        return $this->container['publish_time'];
    }

    /**
     * Sets publish_time
     *
     * @param \DateTime $publish_time publish_time
     *
     * @return $this
     */
    public function setPublishTime($publish_time)
    {
        $this->container['publish_time'] = $publish_time;

        return $this;
    }

    /**
     * Gets max_order_qty
     *
     * @return int
     */
    public function getMaxOrderQty()
    {
        return $this->container['max_order_qty'];
    }

    /**
     * Sets max_order_qty
     *
     * @param int $max_order_qty max_order_qty
     *
     * @return $this
     */
    public function setMaxOrderQty($max_order_qty)
    {
        $this->container['max_order_qty'] = $max_order_qty;

        return $this;
    }

    /**
     * Gets max_price
     *
     * @return double
     */
    public function getMaxPrice()
    {
        return $this->container['max_price'];
    }

    /**
     * Sets max_price
     *
     * @param double $max_price max_price
     *
     * @return $this
     */
    public function setMaxPrice($max_price)
    {
        $this->container['max_price'] = $max_price;

        return $this;
    }

    /**
     * Gets lot_size
     *
     * @return int
     */
    public function getLotSize()
    {
        return $this->container['lot_size'];
    }

    /**
     * Sets lot_size
     *
     * @param int $lot_size lot_size
     *
     * @return $this
     */
    public function setLotSize($lot_size)
    {
        $this->container['lot_size'] = $lot_size;

        return $this;
    }

    /**
     * Gets tick_size
     *
     * @return double
     */
    public function getTickSize()
    {
        return $this->container['tick_size'];
    }

    /**
     * Sets tick_size
     *
     * @param double $tick_size tick_size
     *
     * @return $this
     */
    public function setTickSize($tick_size)
    {
        $this->container['tick_size'] = $tick_size;

        return $this;
    }

    /**
     * Gets multiplier
     *
     * @return int
     */
    public function getMultiplier()
    {
        return $this->container['multiplier'];
    }

    /**
     * Sets multiplier
     *
     * @param int $multiplier multiplier
     *
     * @return $this
     */
    public function setMultiplier($multiplier)
    {
        $this->container['multiplier'] = $multiplier;

        return $this;
    }

    /**
     * Gets settl_currency
     *
     * @return string
     */
    public function getSettlCurrency()
    {
        return $this->container['settl_currency'];
    }

    /**
     * Sets settl_currency
     *
     * @param string $settl_currency settl_currency
     *
     * @return $this
     */
    public function setSettlCurrency($settl_currency)
    {
        $this->container['settl_currency'] = $settl_currency;

        return $this;
    }

    /**
     * Gets underlying_to_position_multiplier
     *
     * @return int
     */
    public function getUnderlyingToPositionMultiplier()
    {
        return $this->container['underlying_to_position_multiplier'];
    }

    /**
     * Sets underlying_to_position_multiplier
     *
     * @param int $underlying_to_position_multiplier underlying_to_position_multiplier
     *
     * @return $this
     */
    public function setUnderlyingToPositionMultiplier($underlying_to_position_multiplier)
    {
        $this->container['underlying_to_position_multiplier'] = $underlying_to_position_multiplier;

        return $this;
    }

    /**
     * Gets underlying_to_settle_multiplier
     *
     * @return int
     */
    public function getUnderlyingToSettleMultiplier()
    {
        return $this->container['underlying_to_settle_multiplier'];
    }

    /**
     * Sets underlying_to_settle_multiplier
     *
     * @param int $underlying_to_settle_multiplier underlying_to_settle_multiplier
     *
     * @return $this
     */
    public function setUnderlyingToSettleMultiplier($underlying_to_settle_multiplier)
    {
        $this->container['underlying_to_settle_multiplier'] = $underlying_to_settle_multiplier;

        return $this;
    }

    /**
     * Gets quote_to_settle_multiplier
     *
     * @return int
     */
    public function getQuoteToSettleMultiplier()
    {
        return $this->container['quote_to_settle_multiplier'];
    }

    /**
     * Sets quote_to_settle_multiplier
     *
     * @param int $quote_to_settle_multiplier quote_to_settle_multiplier
     *
     * @return $this
     */
    public function setQuoteToSettleMultiplier($quote_to_settle_multiplier)
    {
        $this->container['quote_to_settle_multiplier'] = $quote_to_settle_multiplier;

        return $this;
    }

    /**
     * Gets is_quanto
     *
     * @return bool
     */
    public function getIsQuanto()
    {
        return $this->container['is_quanto'];
    }

    /**
     * Sets is_quanto
     *
     * @param bool $is_quanto is_quanto
     *
     * @return $this
     */
    public function setIsQuanto($is_quanto)
    {
        $this->container['is_quanto'] = $is_quanto;

        return $this;
    }

    /**
     * Gets is_inverse
     *
     * @return bool
     */
    public function getIsInverse()
    {
        return $this->container['is_inverse'];
    }

    /**
     * Sets is_inverse
     *
     * @param bool $is_inverse is_inverse
     *
     * @return $this
     */
    public function setIsInverse($is_inverse)
    {
        $this->container['is_inverse'] = $is_inverse;

        return $this;
    }

    /**
     * Gets init_margin
     *
     * @return double
     */
    public function getInitMargin()
    {
        return $this->container['init_margin'];
    }

    /**
     * Sets init_margin
     *
     * @param double $init_margin init_margin
     *
     * @return $this
     */
    public function setInitMargin($init_margin)
    {
        $this->container['init_margin'] = $init_margin;

        return $this;
    }

    /**
     * Gets maint_margin
     *
     * @return double
     */
    public function getMaintMargin()
    {
        return $this->container['maint_margin'];
    }

    /**
     * Sets maint_margin
     *
     * @param double $maint_margin maint_margin
     *
     * @return $this
     */
    public function setMaintMargin($maint_margin)
    {
        $this->container['maint_margin'] = $maint_margin;

        return $this;
    }

    /**
     * Gets risk_limit
     *
     * @return int
     */
    public function getRiskLimit()
    {
        return $this->container['risk_limit'];
    }

    /**
     * Sets risk_limit
     *
     * @param int $risk_limit risk_limit
     *
     * @return $this
     */
    public function setRiskLimit($risk_limit)
    {
        $this->container['risk_limit'] = $risk_limit;

        return $this;
    }

    /**
     * Gets risk_step
     *
     * @return int
     */
    public function getRiskStep()
    {
        return $this->container['risk_step'];
    }

    /**
     * Sets risk_step
     *
     * @param int $risk_step risk_step
     *
     * @return $this
     */
    public function setRiskStep($risk_step)
    {
        $this->container['risk_step'] = $risk_step;

        return $this;
    }

    /**
     * Gets limit
     *
     * @return double
     */
    public function getLimit()
    {
        return $this->container['limit'];
    }

    /**
     * Sets limit
     *
     * @param double $limit limit
     *
     * @return $this
     */
    public function setLimit($limit)
    {
        $this->container['limit'] = $limit;

        return $this;
    }

    /**
     * Gets taxed
     *
     * @return bool
     */
    public function getTaxed()
    {
        return $this->container['taxed'];
    }

    /**
     * Sets taxed
     *
     * @param bool $taxed taxed
     *
     * @return $this
     */
    public function setTaxed($taxed)
    {
        $this->container['taxed'] = $taxed;

        return $this;
    }

    /**
     * Gets deleverage
     *
     * @return bool
     */
    public function getDeleverage()
    {
        return $this->container['deleverage'];
    }

    /**
     * Sets deleverage
     *
     * @param bool $deleverage deleverage
     *
     * @return $this
     */
    public function setDeleverage($deleverage)
    {
        $this->container['deleverage'] = $deleverage;

        return $this;
    }

    /**
     * Gets maker_fee
     *
     * @return double
     */
    public function getMakerFee()
    {
        return $this->container['maker_fee'];
    }

    /**
     * Sets maker_fee
     *
     * @param double $maker_fee maker_fee
     *
     * @return $this
     */
    public function setMakerFee($maker_fee)
    {
        $this->container['maker_fee'] = $maker_fee;

        return $this;
    }

    /**
     * Gets taker_fee
     *
     * @return double
     */
    public function getTakerFee()
    {
        return $this->container['taker_fee'];
    }

    /**
     * Sets taker_fee
     *
     * @param double $taker_fee taker_fee
     *
     * @return $this
     */
    public function setTakerFee($taker_fee)
    {
        $this->container['taker_fee'] = $taker_fee;

        return $this;
    }

    /**
     * Gets settlement_fee
     *
     * @return double
     */
    public function getSettlementFee()
    {
        return $this->container['settlement_fee'];
    }

    /**
     * Sets settlement_fee
     *
     * @param double $settlement_fee settlement_fee
     *
     * @return $this
     */
    public function setSettlementFee($settlement_fee)
    {
        $this->container['settlement_fee'] = $settlement_fee;

        return $this;
    }

    /**
     * Gets funding_base_symbol
     *
     * @return string
     */
    public function getFundingBaseSymbol()
    {
        return $this->container['funding_base_symbol'];
    }

    /**
     * Sets funding_base_symbol
     *
     * @param string $funding_base_symbol funding_base_symbol
     *
     * @return $this
     */
    public function setFundingBaseSymbol($funding_base_symbol)
    {
        $this->container['funding_base_symbol'] = $funding_base_symbol;

        return $this;
    }

    /**
     * Gets funding_quote_symbol
     *
     * @return string
     */
    public function getFundingQuoteSymbol()
    {
        return $this->container['funding_quote_symbol'];
    }

    /**
     * Sets funding_quote_symbol
     *
     * @param string $funding_quote_symbol funding_quote_symbol
     *
     * @return $this
     */
    public function setFundingQuoteSymbol($funding_quote_symbol)
    {
        $this->container['funding_quote_symbol'] = $funding_quote_symbol;

        return $this;
    }

    /**
     * Gets funding_premium_symbol
     *
     * @return string
     */
    public function getFundingPremiumSymbol()
    {
        return $this->container['funding_premium_symbol'];
    }

    /**
     * Sets funding_premium_symbol
     *
     * @param string $funding_premium_symbol funding_premium_symbol
     *
     * @return $this
     */
    public function setFundingPremiumSymbol($funding_premium_symbol)
    {
        $this->container['funding_premium_symbol'] = $funding_premium_symbol;

        return $this;
    }

    /**
     * Gets funding_timestamp
     *
     * @return \DateTime
     */
    public function getFundingTimestamp()
    {
        return $this->container['funding_timestamp'];
    }

    /**
     * Sets funding_timestamp
     *
     * @param \DateTime $funding_timestamp funding_timestamp
     *
     * @return $this
     */
    public function setFundingTimestamp($funding_timestamp)
    {
        $this->container['funding_timestamp'] = $funding_timestamp;

        return $this;
    }

    /**
     * Gets funding_interval
     *
     * @return \DateTime
     */
    public function getFundingInterval()
    {
        return $this->container['funding_interval'];
    }

    /**
     * Sets funding_interval
     *
     * @param \DateTime $funding_interval funding_interval
     *
     * @return $this
     */
    public function setFundingInterval($funding_interval)
    {
        $this->container['funding_interval'] = $funding_interval;

        return $this;
    }

    /**
     * Gets funding_rate
     *
     * @return double
     */
    public function getFundingRate()
    {
        return $this->container['funding_rate'];
    }

    /**
     * Sets funding_rate
     *
     * @param double $funding_rate funding_rate
     *
     * @return $this
     */
    public function setFundingRate($funding_rate)
    {
        $this->container['funding_rate'] = $funding_rate;

        return $this;
    }

    /**
     * Gets indicative_funding_rate
     *
     * @return double
     */
    public function getIndicativeFundingRate()
    {
        return $this->container['indicative_funding_rate'];
    }

    /**
     * Sets indicative_funding_rate
     *
     * @param double $indicative_funding_rate indicative_funding_rate
     *
     * @return $this
     */
    public function setIndicativeFundingRate($indicative_funding_rate)
    {
        $this->container['indicative_funding_rate'] = $indicative_funding_rate;

        return $this;
    }

    /**
     * Gets rebalance_timestamp
     *
     * @return \DateTime
     */
    public function getRebalanceTimestamp()
    {
        return $this->container['rebalance_timestamp'];
    }

    /**
     * Sets rebalance_timestamp
     *
     * @param \DateTime $rebalance_timestamp rebalance_timestamp
     *
     * @return $this
     */
    public function setRebalanceTimestamp($rebalance_timestamp)
    {
        $this->container['rebalance_timestamp'] = $rebalance_timestamp;

        return $this;
    }

    /**
     * Gets rebalance_interval
     *
     * @return \DateTime
     */
    public function getRebalanceInterval()
    {
        return $this->container['rebalance_interval'];
    }

    /**
     * Sets rebalance_interval
     *
     * @param \DateTime $rebalance_interval rebalance_interval
     *
     * @return $this
     */
    public function setRebalanceInterval($rebalance_interval)
    {
        $this->container['rebalance_interval'] = $rebalance_interval;

        return $this;
    }

    /**
     * Gets prev_close_price
     *
     * @return double
     */
    public function getPrevClosePrice()
    {
        return $this->container['prev_close_price'];
    }

    /**
     * Sets prev_close_price
     *
     * @param double $prev_close_price prev_close_price
     *
     * @return $this
     */
    public function setPrevClosePrice($prev_close_price)
    {
        $this->container['prev_close_price'] = $prev_close_price;

        return $this;
    }

    /**
     * Gets limit_down_price
     *
     * @return double
     */
    public function getLimitDownPrice()
    {
        return $this->container['limit_down_price'];
    }

    /**
     * Sets limit_down_price
     *
     * @param double $limit_down_price limit_down_price
     *
     * @return $this
     */
    public function setLimitDownPrice($limit_down_price)
    {
        $this->container['limit_down_price'] = $limit_down_price;

        return $this;
    }

    /**
     * Gets limit_up_price
     *
     * @return double
     */
    public function getLimitUpPrice()
    {
        return $this->container['limit_up_price'];
    }

    /**
     * Sets limit_up_price
     *
     * @param double $limit_up_price limit_up_price
     *
     * @return $this
     */
    public function setLimitUpPrice($limit_up_price)
    {
        $this->container['limit_up_price'] = $limit_up_price;

        return $this;
    }

    /**
     * Gets total_volume
     *
     * @return int
     */
    public function getTotalVolume()
    {
        return $this->container['total_volume'];
    }

    /**
     * Sets total_volume
     *
     * @param int $total_volume total_volume
     *
     * @return $this
     */
    public function setTotalVolume($total_volume)
    {
        $this->container['total_volume'] = $total_volume;

        return $this;
    }

    /**
     * Gets volume
     *
     * @return int
     */
    public function getVolume()
    {
        return $this->container['volume'];
    }

    /**
     * Sets volume
     *
     * @param int $volume volume
     *
     * @return $this
     */
    public function setVolume($volume)
    {
        $this->container['volume'] = $volume;

        return $this;
    }

    /**
     * Gets volume24h
     *
     * @return int
     */
    public function getVolume24h()
    {
        return $this->container['volume24h'];
    }

    /**
     * Sets volume24h
     *
     * @param int $volume24h volume24h
     *
     * @return $this
     */
    public function setVolume24h($volume24h)
    {
        $this->container['volume24h'] = $volume24h;

        return $this;
    }

    /**
     * Gets prev_total_turnover
     *
     * @return int
     */
    public function getPrevTotalTurnover()
    {
        return $this->container['prev_total_turnover'];
    }

    /**
     * Sets prev_total_turnover
     *
     * @param int $prev_total_turnover prev_total_turnover
     *
     * @return $this
     */
    public function setPrevTotalTurnover($prev_total_turnover)
    {
        $this->container['prev_total_turnover'] = $prev_total_turnover;

        return $this;
    }

    /**
     * Gets total_turnover
     *
     * @return int
     */
    public function getTotalTurnover()
    {
        return $this->container['total_turnover'];
    }

    /**
     * Sets total_turnover
     *
     * @param int $total_turnover total_turnover
     *
     * @return $this
     */
    public function setTotalTurnover($total_turnover)
    {
        $this->container['total_turnover'] = $total_turnover;

        return $this;
    }

    /**
     * Gets turnover
     *
     * @return int
     */
    public function getTurnover()
    {
        return $this->container['turnover'];
    }

    /**
     * Sets turnover
     *
     * @param int $turnover turnover
     *
     * @return $this
     */
    public function setTurnover($turnover)
    {
        $this->container['turnover'] = $turnover;

        return $this;
    }

    /**
     * Gets turnover24h
     *
     * @return int
     */
    public function getTurnover24h()
    {
        return $this->container['turnover24h'];
    }

    /**
     * Sets turnover24h
     *
     * @param int $turnover24h turnover24h
     *
     * @return $this
     */
    public function setTurnover24h($turnover24h)
    {
        $this->container['turnover24h'] = $turnover24h;

        return $this;
    }

    /**
     * Gets home_notional24h
     *
     * @return double
     */
    public function getHomeNotional24h()
    {
        return $this->container['home_notional24h'];
    }

    /**
     * Sets home_notional24h
     *
     * @param double $home_notional24h home_notional24h
     *
     * @return $this
     */
    public function setHomeNotional24h($home_notional24h)
    {
        $this->container['home_notional24h'] = $home_notional24h;

        return $this;
    }

    /**
     * Gets foreign_notional24h
     *
     * @return double
     */
    public function getForeignNotional24h()
    {
        return $this->container['foreign_notional24h'];
    }

    /**
     * Sets foreign_notional24h
     *
     * @param double $foreign_notional24h foreign_notional24h
     *
     * @return $this
     */
    public function setForeignNotional24h($foreign_notional24h)
    {
        $this->container['foreign_notional24h'] = $foreign_notional24h;

        return $this;
    }

    /**
     * Gets prev_price24h
     *
     * @return double
     */
    public function getPrevPrice24h()
    {
        return $this->container['prev_price24h'];
    }

    /**
     * Sets prev_price24h
     *
     * @param double $prev_price24h prev_price24h
     *
     * @return $this
     */
    public function setPrevPrice24h($prev_price24h)
    {
        $this->container['prev_price24h'] = $prev_price24h;

        return $this;
    }

    /**
     * Gets vwap
     *
     * @return double
     */
    public function getVwap()
    {
        return $this->container['vwap'];
    }

    /**
     * Sets vwap
     *
     * @param double $vwap vwap
     *
     * @return $this
     */
    public function setVwap($vwap)
    {
        $this->container['vwap'] = $vwap;

        return $this;
    }

    /**
     * Gets high_price
     *
     * @return double
     */
    public function getHighPrice()
    {
        return $this->container['high_price'];
    }

    /**
     * Sets high_price
     *
     * @param double $high_price high_price
     *
     * @return $this
     */
    public function setHighPrice($high_price)
    {
        $this->container['high_price'] = $high_price;

        return $this;
    }

    /**
     * Gets low_price
     *
     * @return double
     */
    public function getLowPrice()
    {
        return $this->container['low_price'];
    }

    /**
     * Sets low_price
     *
     * @param double $low_price low_price
     *
     * @return $this
     */
    public function setLowPrice($low_price)
    {
        $this->container['low_price'] = $low_price;

        return $this;
    }

    /**
     * Gets last_price
     *
     * @return double
     */
    public function getLastPrice()
    {
        return $this->container['last_price'];
    }

    /**
     * Sets last_price
     *
     * @param double $last_price last_price
     *
     * @return $this
     */
    public function setLastPrice($last_price)
    {
        $this->container['last_price'] = $last_price;

        return $this;
    }

    /**
     * Gets last_price_protected
     *
     * @return double
     */
    public function getLastPriceProtected()
    {
        return $this->container['last_price_protected'];
    }

    /**
     * Sets last_price_protected
     *
     * @param double $last_price_protected last_price_protected
     *
     * @return $this
     */
    public function setLastPriceProtected($last_price_protected)
    {
        $this->container['last_price_protected'] = $last_price_protected;

        return $this;
    }

    /**
     * Gets last_tick_direction
     *
     * @return string
     */
    public function getLastTickDirection()
    {
        return $this->container['last_tick_direction'];
    }

    /**
     * Sets last_tick_direction
     *
     * @param string $last_tick_direction last_tick_direction
     *
     * @return $this
     */
    public function setLastTickDirection($last_tick_direction)
    {
        $this->container['last_tick_direction'] = $last_tick_direction;

        return $this;
    }

    /**
     * Gets last_change_pcnt
     *
     * @return double
     */
    public function getLastChangePcnt()
    {
        return $this->container['last_change_pcnt'];
    }

    /**
     * Sets last_change_pcnt
     *
     * @param double $last_change_pcnt last_change_pcnt
     *
     * @return $this
     */
    public function setLastChangePcnt($last_change_pcnt)
    {
        $this->container['last_change_pcnt'] = $last_change_pcnt;

        return $this;
    }

    /**
     * Gets bid_price
     *
     * @return double
     */
    public function getBidPrice()
    {
        return $this->container['bid_price'];
    }

    /**
     * Sets bid_price
     *
     * @param double $bid_price bid_price
     *
     * @return $this
     */
    public function setBidPrice($bid_price)
    {
        $this->container['bid_price'] = $bid_price;

        return $this;
    }

    /**
     * Gets mid_price
     *
     * @return double
     */
    public function getMidPrice()
    {
        return $this->container['mid_price'];
    }

    /**
     * Sets mid_price
     *
     * @param double $mid_price mid_price
     *
     * @return $this
     */
    public function setMidPrice($mid_price)
    {
        $this->container['mid_price'] = $mid_price;

        return $this;
    }

    /**
     * Gets ask_price
     *
     * @return double
     */
    public function getAskPrice()
    {
        return $this->container['ask_price'];
    }

    /**
     * Sets ask_price
     *
     * @param double $ask_price ask_price
     *
     * @return $this
     */
    public function setAskPrice($ask_price)
    {
        $this->container['ask_price'] = $ask_price;

        return $this;
    }

    /**
     * Gets impact_bid_price
     *
     * @return double
     */
    public function getImpactBidPrice()
    {
        return $this->container['impact_bid_price'];
    }

    /**
     * Sets impact_bid_price
     *
     * @param double $impact_bid_price impact_bid_price
     *
     * @return $this
     */
    public function setImpactBidPrice($impact_bid_price)
    {
        $this->container['impact_bid_price'] = $impact_bid_price;

        return $this;
    }

    /**
     * Gets impact_mid_price
     *
     * @return double
     */
    public function getImpactMidPrice()
    {
        return $this->container['impact_mid_price'];
    }

    /**
     * Sets impact_mid_price
     *
     * @param double $impact_mid_price impact_mid_price
     *
     * @return $this
     */
    public function setImpactMidPrice($impact_mid_price)
    {
        $this->container['impact_mid_price'] = $impact_mid_price;

        return $this;
    }

    /**
     * Gets impact_ask_price
     *
     * @return double
     */
    public function getImpactAskPrice()
    {
        return $this->container['impact_ask_price'];
    }

    /**
     * Sets impact_ask_price
     *
     * @param double $impact_ask_price impact_ask_price
     *
     * @return $this
     */
    public function setImpactAskPrice($impact_ask_price)
    {
        $this->container['impact_ask_price'] = $impact_ask_price;

        return $this;
    }

    /**
     * Gets has_liquidity
     *
     * @return bool
     */
    public function getHasLiquidity()
    {
        return $this->container['has_liquidity'];
    }

    /**
     * Sets has_liquidity
     *
     * @param bool $has_liquidity has_liquidity
     *
     * @return $this
     */
    public function setHasLiquidity($has_liquidity)
    {
        $this->container['has_liquidity'] = $has_liquidity;

        return $this;
    }

    /**
     * Gets open_interest
     *
     * @return int
     */
    public function getOpenInterest()
    {
        return $this->container['open_interest'];
    }

    /**
     * Sets open_interest
     *
     * @param int $open_interest open_interest
     *
     * @return $this
     */
    public function setOpenInterest($open_interest)
    {
        $this->container['open_interest'] = $open_interest;

        return $this;
    }

    /**
     * Gets open_value
     *
     * @return int
     */
    public function getOpenValue()
    {
        return $this->container['open_value'];
    }

    /**
     * Sets open_value
     *
     * @param int $open_value open_value
     *
     * @return $this
     */
    public function setOpenValue($open_value)
    {
        $this->container['open_value'] = $open_value;

        return $this;
    }

    /**
     * Gets fair_method
     *
     * @return string
     */
    public function getFairMethod()
    {
        return $this->container['fair_method'];
    }

    /**
     * Sets fair_method
     *
     * @param string $fair_method fair_method
     *
     * @return $this
     */
    public function setFairMethod($fair_method)
    {
        $this->container['fair_method'] = $fair_method;

        return $this;
    }

    /**
     * Gets fair_basis_rate
     *
     * @return double
     */
    public function getFairBasisRate()
    {
        return $this->container['fair_basis_rate'];
    }

    /**
     * Sets fair_basis_rate
     *
     * @param double $fair_basis_rate fair_basis_rate
     *
     * @return $this
     */
    public function setFairBasisRate($fair_basis_rate)
    {
        $this->container['fair_basis_rate'] = $fair_basis_rate;

        return $this;
    }

    /**
     * Gets fair_basis
     *
     * @return double
     */
    public function getFairBasis()
    {
        return $this->container['fair_basis'];
    }

    /**
     * Sets fair_basis
     *
     * @param double $fair_basis fair_basis
     *
     * @return $this
     */
    public function setFairBasis($fair_basis)
    {
        $this->container['fair_basis'] = $fair_basis;

        return $this;
    }

    /**
     * Gets fair_price
     *
     * @return double
     */
    public function getFairPrice()
    {
        return $this->container['fair_price'];
    }

    /**
     * Sets fair_price
     *
     * @param double $fair_price fair_price
     *
     * @return $this
     */
    public function setFairPrice($fair_price)
    {
        $this->container['fair_price'] = $fair_price;

        return $this;
    }

    /**
     * Gets mark_method
     *
     * @return string
     */
    public function getMarkMethod()
    {
        return $this->container['mark_method'];
    }

    /**
     * Sets mark_method
     *
     * @param string $mark_method mark_method
     *
     * @return $this
     */
    public function setMarkMethod($mark_method)
    {
        $this->container['mark_method'] = $mark_method;

        return $this;
    }

    /**
     * Gets mark_price
     *
     * @return double
     */
    public function getMarkPrice()
    {
        return $this->container['mark_price'];
    }

    /**
     * Sets mark_price
     *
     * @param double $mark_price mark_price
     *
     * @return $this
     */
    public function setMarkPrice($mark_price)
    {
        $this->container['mark_price'] = $mark_price;

        return $this;
    }

    /**
     * Gets indicative_settle_price
     *
     * @return double
     */
    public function getIndicativeSettlePrice()
    {
        return $this->container['indicative_settle_price'];
    }

    /**
     * Sets indicative_settle_price
     *
     * @param double $indicative_settle_price indicative_settle_price
     *
     * @return $this
     */
    public function setIndicativeSettlePrice($indicative_settle_price)
    {
        $this->container['indicative_settle_price'] = $indicative_settle_price;

        return $this;
    }

    /**
     * Gets settled_price_adjustment_rate
     *
     * @return double
     */
    public function getSettledPriceAdjustmentRate()
    {
        return $this->container['settled_price_adjustment_rate'];
    }

    /**
     * Sets settled_price_adjustment_rate
     *
     * @param double $settled_price_adjustment_rate settled_price_adjustment_rate
     *
     * @return $this
     */
    public function setSettledPriceAdjustmentRate($settled_price_adjustment_rate)
    {
        $this->container['settled_price_adjustment_rate'] = $settled_price_adjustment_rate;

        return $this;
    }

    /**
     * Gets settled_price
     *
     * @return double
     */
    public function getSettledPrice()
    {
        return $this->container['settled_price'];
    }

    /**
     * Sets settled_price
     *
     * @param double $settled_price settled_price
     *
     * @return $this
     */
    public function setSettledPrice($settled_price)
    {
        $this->container['settled_price'] = $settled_price;

        return $this;
    }

    /**
     * Gets instant_pnl
     *
     * @return bool
     */
    public function getInstantPnl()
    {
        return $this->container['instant_pnl'];
    }

    /**
     * Sets instant_pnl
     *
     * @param bool $instant_pnl instant_pnl
     *
     * @return $this
     */
    public function setInstantPnl($instant_pnl)
    {
        $this->container['instant_pnl'] = $instant_pnl;

        return $this;
    }

    /**
     * Gets min_tick
     *
     * @return double
     */
    public function getMinTick()
    {
        return $this->container['min_tick'];
    }

    /**
     * Sets min_tick
     *
     * @param double $min_tick min_tick
     *
     * @return $this
     */
    public function setMinTick($min_tick)
    {
        $this->container['min_tick'] = $min_tick;

        return $this;
    }

    /**
     * Gets timestamp
     *
     * @return \DateTime
     */
    public function getTimestamp()
    {
        return $this->container['timestamp'];
    }

    /**
     * Sets timestamp
     *
     * @param \DateTime $timestamp timestamp
     *
     * @return $this
     */
    public function setTimestamp($timestamp)
    {
        $this->container['timestamp'] = $timestamp;

        return $this;
    }
    /**
     * Returns true if offset exists. False otherwise.
     *
     * @param integer $offset Offset
     *
     * @return boolean
     */
    #[\ReturnTypeWillChange]
    public function offsetExists($offset)
    {
        return isset($this->container[$offset]);
    }

    /**
     * Gets offset.
     *
     * @param integer $offset Offset
     *
     * @return mixed
     */
    #[\ReturnTypeWillChange]
    public function offsetGet($offset)
    {
        return isset($this->container[$offset]) ? $this->container[$offset] : null;
    }

    /**
     * Sets value based on offset.
     *
     * @param integer $offset Offset
     * @param mixed   $value  Value to be set
     *
     * @return void
     */
    #[\ReturnTypeWillChange]
    public function offsetSet($offset, $value)
    {
        if (is_null($offset)) {
            $this->container[] = $value;
        } else {
            $this->container[$offset] = $value;
        }
    }

    /**
     * Unsets offset.
     *
     * @param integer $offset Offset
     *
     * @return void
     */
    #[\ReturnTypeWillChange]
    public function offsetUnset($offset)
    {
        unset($this->container[$offset]);
    }

    /**
     * Gets the string presentation of the object
     *
     * @return string
     */
    public function __toString()
    {
        if (defined('JSON_PRETTY_PRINT')) { // use JSON pretty print
            return json_encode(
                ObjectSerializer::sanitizeForSerialization($this),
                JSON_PRETTY_PRINT
            );
        }

        return json_encode(ObjectSerializer::sanitizeForSerialization($this));
    }
}


