NAV Navbar
python
  • 介绍
  • 认证
  • 公开接口
  • 行情接口
  • 账户接口
  • 合约交易接口
  • 仓位接口
  • ws接口
  • 自动交易
  • 介绍

    通过了解以下信息,您可以方便的使用 FMex 提供的 API 来接入 FMex 交易平台。

    真实交易API域名:api.fmex.com

    模拟交易API域名:api.fmextest.net

    API访问地址:https://api.fmex.com/,请注意我们仅支持https访问,不支持http访问。

    API请求:仅支持GET或POST请求。

    如果为GET请求,所有请求参数以queryString方式传入,例如:/v1/contracts/orders/open?symbol=BTCUSD_P

    如果为POST请求,所有请求参数以JSON形式作为Request Body传入。请求类型必须为Content-Type: application/json。

    认证

    FMex 使用 FCoin 的 API key 和 API secret 进行验证,请访问 设置中心,获取 API key 和 API secret。

    FMex 使用 FCoin 的 API 请求,除公开的 API 外都需要携带 API key 以及签名

    访问限制

    目前访问频率为每个用户 100次 / 10秒,未来会按照业务区分访问频率限制。

    API 签名

    签名前准备的数据如下:

    HTTP_METHOD + HTTP_REQUEST_URI + TIMESTAMP + POST_BODY

    连接完成后,进行 Base64 编码,对编码后的数据进行 HMAC-SHA1 签名,并对签名进行二次 Base64 编码,各部分解释如下:

    HTTP_METHOD

    GET, POST, 需要大写

    HTTP_REQUEST_URI

    真实交易地址: https://api.fmex.com/ 为 API 的请求前缀 模拟交易地址 https://api.fmextest.net/ 为 API 的请求前缀

    后面再加上真正要访问的资源路径,如 orders?param1=value1,最终即 https://api.fmex.com/orders?param1=value1

    对于请求的 URI 中的参数,需要按照字母表排序!

    即如果请求的 URI 为 https://api.fmex.com/orders?c=value1&b=value2&a=value3,则进行签名时,应先将请求参数按照字母表排序,最终进行签名的 URI 为 https://XXX/orders?a=value3&b=value2&c=value1, 请注意,原请求 URI 中的三个参数顺序为 c, b, a,排序后为 a, b, c

    TIMESTAMP

    访问 API 时的 UNIX EPOCH 时间戳,需要和服务器之间的时间差少于 30 秒

    POST_BODY

    如果是 POST 请求,POST 请求数据也需要被签名,签名规则如下:

    所有请求的 key 按照字母顺序排序,然后进行 url 参数化,并使用 & 连接。

    如果请求数据为:

    {
      "username": "username",
      "password": "passowrd"
    }
    

    则先将 key 按照字母排序,然后进行 url 参数化,即:

    password=password
    username=username
    

    因为 p 在字母表中的排序在 u 之前,所以 password 要放在 username 之前,然后使用 & 进行连接,即:

    password=password&username=username
    

    完整示例

    对于如下的请求:

    POST https://api.fmex.com/orders
    
    {
      "symbol":"btcusd_p",
      "type":"limit",
      "direction":"short",
      "source":"web",
      "price":5500,
      "quantity":100
    }
    
    timestamp: 1523069544359
    

    签名前的准备数据如下:

    POSThttps://api.fmex.com/v3/contracts/orders1571109222426direction=short&price=5500&quantity=100&source=WEB&symbol=btcusd_p&type=limit
    

    进行 Base64 编码,得到:

    UE9TVGh0dHBzOi8vYXBpLmZtZXguY29tL3YzL2NvbnRyYWN0cy9vcmRlcnMxNTcxMTA5MjIyNDI2ZGlyZWN0aW9uPXNob3J0JnByaWNlPTU1MDAmcXVhbnRpdHk9MTAwJnNvdXJjZT1XRUImc3ltYm9sPWJ0Y3VzZF9wJnR5cGU9bGltaXQ=
    

    拷贝在申请 API Key 时获得的秘钥(API SECRET),下面的签名结果采用 ebfaeef06e2e49e1bc7e535c2766bbe6 作为示例,

    对得到的结果使用秘钥进行 HMAC-SHA1 签名,并对二进制结果进行 Base64 编码,得到:

    s37ML6NwRLqMco75wCqsXFVz5iw=
    

    即生成了用于向 API 服务器进行验证的最终签名

    公开接口

    获取交易所当前所有交易对

    此 API 用于获取交易所当前所有交易对。

    HTTP Request

    GET /v2/public/contracts/symbols

    获取时间

    此 API 用于获取系统时间

    HTTP Request

    GET /v2/public/server-time

    获取币种

    此 API 用于获取币种

    HTTP Request

    GET /v2/public/contracts/currencies

    获取指数列表

    此 API 用于获取指数列表

    HTTP Request

    GET /v2/public/indexes/symbols

    行情接口

    行情概述

    行情是一个全公开的 API, 当前同时提供了 HTTP 和 WebSocket 的 API. 为确保可以更及时的获得行情, 推荐使用 WebSocket 进行接入. 为尽可能保证行情的实时性能, 当前公开部分只能获取最近一段时间的行情, 如果有需要获取全量或者历史行情, 请咨询 support@fmex.com

    所有 HTTP 请求的 URL base 为: https://api.fmex.com/

    所有 WebSocket 请求的 URL 为: wss://api.fmex.com/v2/ws

    下文会统一术语:

    WebSocket 首次建立连接

    连接成功服务器会发送一个欢迎信息

    连接成功后服务器返回信息:

    {
      "type":"hello",
      "ts":1523693784042
    }
    
    • ts: 推送服务器当前的时间.

    WebSocket 连接保持 - heartbeat

    # WebSocket 向服务端发送 ping 维持心跳
    import time
    import fcoin
    
    api = fcoin.authorize('key', 'secret', timestamp)
    now_ms = int(time.time())
    api.market.ping(now_ms)
    

    WebSocket 客户端和 WebSocket 服务器建立连接之后,推荐 WebSocket Client 每隔 10s 向服务器发起一次 ping 请求,如果服务器长时间没有接收到客户端的 ping 请求将会主动断开连接。

    WebSocket 请求

    发送 ping 指令: {"cmd":"ping","args":[$client_ts],"id":"$client_id"}

    ping 指令请求示例:

    {"cmd":"ping","args":[1540557696867],"id":"sample.client.id"}
    

    ping 指令成功服务器返回:

    {
      "id":"sample.client.id",
      "type":"ping",
      "ts":1523693784042,
      "gap":112
    }
    
    • gap: 推送服务器处理此语句的时间和客户端传输的时间差.
    • ts: 推送服务器当前的时间.

    WebSocket 订阅

    发送 sub 指令: {"cmd":"sub","args":["$topic", ...],"id":"$client_id"}

    sub 指令请求示例(单 topic):

    {"cmd":"sub","args":["ticker.ethbtc"]}
    

    sub 指令请求示例(多 topic):

    {"cmd":"sub","args":["ticker.ethbtc", "ticker.btcusdt"]}
    

    订阅成功的响应结果如下:

    {
      "type": "topics",
      "topics": ["ticker.ethbtc", "ticker.btcusdt"]
    }
    

    订阅失败的响应结果如下:

    {
      "id":"invalid_topics_sample",
      "status":41002,
      "msg":"invalid sub topic, xxx.M1.xxx"
    }
    

    获取 ticker 数据

    为了使得 ticker 信息组足够小和快, 我们强制使用了列表格式.

    ticker 列表对应字段含义说明:

    [
      "最新成交价",
      "最近一笔成交的成交量",
      "最大买一价",
      "最大买一量",
      "最小卖一价",
      "最小卖一量",
      "24小时前成交价",
      "24小时内最高价",
      "24小时内最低价",
      "24小时合约成交张数",
      "24小时合约成交BTC数量"
    ]
    

    HTTP 请求

    GET https://api.fmex.com/v2/market/ticker/$symbol

    HTTP 请求响应结果如下:

    {
      "status": 0,
      "data": {
        "type": "ticker.btcusdt",
        "seq": 680035,
        "ticker": [
          7140.890000000000000000,
          1.000000000000000000,
          7131.330000000,
          233.524600000,
          7140.890000000,
          225.495049866,
          7140.890000000,
          7140.890000000,
          7140.890000000,
          1.000000000,
          7140.890000000000000000
        ]
      }
    }
    

    WebSocket 订阅

    发送 sub 指令,topic: ticker.$symbol (请参考 WebSocket 订阅)

    WebSocket 订阅的通知消息结果如下:

    {
      "type": "ticker.btcusdt",
      "seq": 680035,
      "ticker": [
        7140.890000000000000000,
        1.000000000000000000,
        7131.330000000,
        233.524600000,
        7140.890000000,
        225.495049866,
        7140.890000000,
        7140.890000000,
        7140.890000000,
        1.000000000,
        7140.890000000000000000
      ]
    }
    

    获取 所有交易对的ticker 数据

    HTTP 请求

    GET https://api.fmex.com/v2/market/all-tickers

    HTTP 请求响应结果如下:

    {
        "status": 0,
        "data": {
            "type": "all-tickers",
            "ts": 1578466373871,
            "tickers": [
                {
                    "symbol": "btcusd_p",
                    "seq": 1516333243320,
                    "ticker": [
                        8325,
                        1,
                        8325,
                        49517,
                        8325.5,
                        11207,
                        7867.5,
                        8456.5,
                        7731,
                        94200972,
                        11635.419473734316223965
                    ]
                }
            ]
        }
    }
    

    获取最新的深度明细

    HTTP 请求

    GET https://api.fmex.com/v2/market/depth/$level/$symbol

    $level 包含的种类(大小写敏感):

    类型 说明
    L20 20 档行情深度.
    L150 150 档行情深度.

    其中 L20 的推送时间会略早于 L150, 推送频次会略多于 L150, 看具体的压力和情况. 此处请按需使用.

    HTTP 请求响应结果如下:

    {
      "status":0,
      "data":{
        "type": "depth.L20.ethbtc",
        "ts": 1523619211000,
        "seq": 120,
        "bids": [0.000100000, 1.000000000, 0.000010000, 1.000000000],
        "asks": [1.000000000, 1.000000000]
      }
    }
    

    WebSocket 订阅

    发送 sub 指令,topic: depth.$level.$symbol (请参考 WebSocket 订阅)

    WebSocket 订阅的通知消息结果如下:

    {
      "type": "depth.L20.ethbtc",
      "ts": 1523619211000,
      "seq": 120,
      "bids": [0.000100000, 1.000000000, 0.000010000, 1.000000000],
      "asks": [1.000000000, 1.000000000]
    }
    

    bids 和 asks 对应的数组一定是偶数条目, 买(卖)1价, 买(卖)1量, 依次往后排列.

    获取增量深度

    通过WebSocket订阅增量深度

    发送 sub 指令,topic: depth-delta.$level.$symbol (请参考 WebSocket 订阅)

    WebSocket 订阅的通知消息结果如下:

    订阅后的第一次返回为完整深度信息

    { 
        "type":"depth.l20.btcusd_p”, 
        "seq":1809245699, 
        "ts":1580782260172, 
        "asks":[ 
            9291.5, 
            48417, 
            9292, 
            477 
        ], 
        "bids":[ 
            9291, 
            28800, 
            9290.5, 
            34, 
            9290, 
            20 
        ] 
    } 
    

















    接下来返回的增量深度信息:

    { 
        "type":"depth-delta.l20.btcusd_p", 
        "seq":1809245710, # 当前深度seq 
        "pre_seq":1809245699,  # 上一条深度seq, 如果与上一次收到的深度seq不符,请重新订阅增量深度,并检查网络状况与程序是否有问题 
        "ts":1580782260238, 
        "asks":[ 
            9294, # 价格 
            4057, # 相应价格的volume更新为该值 
            9296, 
            4621, 
            9298, 
            237, 
            9300, 
            0 # 相应价格的volume如果为0,表示移除该条深度信息 
        ], 
        "bids":[ 
        ] 
    }
    

    获取最新的成交明细

    通过对比其中的成交 id 大小才能决定是否是更新的成交.{trade id} 需要注意, 常规由于 trade 到 transaction 过程的存在, 公开行情的成交 id 并不实际对应清算系统中的成交 id. 即使成交是一条记录, 也无法保证最新成交在重新获取时候 id 永远保持一致.

    PS: 历史行情中, 是可以保证成交 id 保持恒定. {transaction id} 此处只作为行情更新通知, 不应依赖归档使用.

    HTTP 请求

    GET https://api.fmex.com/v2/market/trades/$symbol

    查询参数(HTTP 请求)

    参数 默认值 描述
    before 查询某个 id 之前的 Trade
    limit 默认为 20 条

    WebSocket 请求

    发送 req 指令: {"cmd":"req", "args":["$topic", limit],"id":"$client_id"}

    WebSocket 请求成功的响应结果如下:

    {
      "id":null,
      "ts":1523693400329,
      "data":[
        {
          "amount":1.000000000,
          "ts":1523419946174,
          "id":76000,
          "side":"sell",
          "price":4.000000000
        },
        {
          "amount":1.000000000,
          "ts":1523419114272,
          "id":74000,
          "side":"sell",
          "price":4.000000000
        },
        {
          "amount":1.000000000,
          "ts":1523415182356,
          "id":71000,
          "side":"sell",
          "price":3.000000000
        }
      ]
    }
    

    WebSocket 订阅

    发送 sub 指令,topic: trade.$symbol (请参考 WebSocket 订阅)

    WebSocket 订阅的通知消息结果如下:

    {
      "type":"trade.ethbtc",
      "id":76000,
      "amount":1.000000000,
      "ts":1523419946174,
      "side":"sell",
      "price":4.000000000
    }
    

    获取 Candle 信息

    HTTP 请求

    GET https://api.fmex.com/v2/market/candles/$resolution/$symbol

    查询参数(HTTP 请求)

    参数 默认值 描述
    before 查询某个 id 之前的 Candle
    limit 默认为 20 条

    $resolution 包含的种类(大小写敏感):

    类型 说明
    M1 1 分钟
    M3 3 分钟
    M5 5 分钟
    M15 15 分钟
    M30 30 分钟
    H1 1 小时
    H4 4 小时
    H6 6 小时
    D1 1 日
    W1 1 周
    MN 1 月

    WebSocket 请求

    发送 req 指令: {"cmd":"req","args":["$topic",limit,before],"id":"$client_id"}

    WebSocket 请求成功的响应结果如下:

    {
      "id":"candle.M15.btcusdt",
      "data":[
        {
          "id":1540809840,
          "seq":24793830600000,
          "high":6491.74,  #最高价
          "low":6489.24,   #最低价
          "open":6491.24,  #开盘价
          "close":6490.07, #收盘价
          "count":26,      #成交笔数
          "base_vol":53371.531286,#成交usd
          "quote_vol":8.2221#成交btc
        },
        {
          "id":1540809900,
          "seq":24793879800000,
          "high":6490.47,
          "low":6487.62,
          "open":6490.09,
          "close":6487.62,
          "count":23,
          "base_vol":70430.840624,
          "quote_vol":10.8527
        }
      ]
    }
    

    WebSokcet 订阅

    发送 sub 指令,topic: candle.$resolution.$symbol (请参考 WebSocket 订阅)

    WebSocket 订阅的通知消息结果如下:

    {
      "type":"candle.M1.ethbtc",
      "id":1523691480,
      "seq":11400000,
      "open":2.000000000,
      "close":2.000000000,
      "high":2.000000000,
      "low":2.000000000,
      "count":0,
      "base_vol":0,
      "quote_vol":0
    }
    

    获取当前系统指数所有指数

    HTTP 请求

    GET https://api.fmex.com/v2/market/indexes

    指数含义:

    .btcins1d 风险准备金1D

    .btcins1h 风险准备金1H

    .btcusd_spot 指数价格

    .btcusdfair 标记价格

    .btcusdfr 预估资金费率

    .btcusdfr8h 资金费率8H

    .btcusdlr1d 利息差率指数

    .btcusdpi 溢价指数

    .btcusdpi8h 溢价8H指数

    .btcusdpimax 最大溢价边界值指数

    获取某个指数的最近历史值

    HTTP 请求

    GET https://api.fmex.com/v2/market/indexes/$indexname

    获取汇率

    HTTP 请求

    GET https://api.fmex.com/v2/market/fex

    账户接口

    查询当前用户账户余额

    此api用于查询用户资产

    HTTP Request

    API路径:GET /v3/contracts/accounts

    API请求参数:无

    API响应:

    {
      "status":0,
      "data":
            {币种: [可用余额, 订单冻结金额, 仓位保证金金额]
              "BTC":[2.796888254907565438,0E-18,0E-18]
              }
            }
    }
    

    保证金转出至钱包

    HTTP Request

    API路径:POST /v3/contracts/transfer/out/request

    请求参数

    字段名称 是否必须 描述
    currency Y 币种名称,例如"BTC"
    transfer_from Y 转账来源,必须为"contracts"
    transfer_to Y 转账目标,必须为"wallet"
    amount Y 转账金额,例如:1.024

    请求示例:

    {
        "currency":"BTC",
        "transfer_from":"CONTRACTS",
        "transfer_to":"WALLET",
        "amount":1,
    }
    

    API响应:

    {
      "status": 0,
      "data": {
        "transfer_from": "contracts",
        "transfer_to": "wallet",
        "amount": 0.1,
        "transfer_id": "179363219767363",
        "currency": "BTC"
      }
    }
    
    
    

    查询一个转出操作(合约->钱包)的当前执行状态

    API路径:GET /v3/contracts/transfer/out/{transferId}/status

    API请求参数:无

    API响应:

    {
      'status': 0,
      'data': {
        'transfer_id': '179364285120578',
        'transfer_from': 'contracts',
        'transfer_to': 'wallet',
        'amount': 0.1,
        'done': True,
        'created_at': 1567682689265,
        'updated_at': 1567682689473,
        'error': False,
        'currency': 'BTC'
      }
    }
    

    查询转账日志

    API路径:GET /v3/contracts/transfer/logs

    API请求参数:无

    API响应:

    {
      'status': 0,
      'data': {
        'hasMore': False,
        'nextOffsetId': 0,
        'results': [
          {
            'transfer_id': '167600369696833',
            'transfer_from': 'CONTRACTS',
            'transfer_to': 'WALLET',
            'amount': 0.01,
            'done': True,
            'created_at': 1566280321419,
            'updated_at': 1566280321851,
            'error': False,
            'currency': 'BTC'
          }
        ]
      }
    }
    

    合约交易接口

    订单模型说明

    订单模型由以下属性构成:

    属性 类型 含义解释
    id long 订单ID
    sequence_id long 定序ID
    margin_currency_id long 保证金Currency ID
    direction enum 仓位方向LONG/SHORT
    type enum 订单类型LIMIT/MARKET
    status enum 参见订单状态说明
    features long 订单特性,每个bit表示一种特性:0x01=FOK,0x02=post_only,0x04=Hidden,0x08=IOC,0x8000=爆仓单
    price decimal 限价单价格(若为市价单,此处为市价单价格上限或下限)
    quantity long 订单数量
    fill_price decimal 成交均价
    unfilled_quantity long 未成交数量
    maker_fee_rate decimal 作为Maker的费率
    taker_fee_rate decimal 作为Taker的费率
    fee decimal 该订单累计已收取的手续费
    trigger_on decimal Stop订单的触发价格,非Stop订单触发价格始终为0
    trailing_base_price decimal TrailingStop订单的基准价格,非此类型订单则始终为0
    trailing_distance decimal TrailingStop订单的触发价格距离,非此类型订单则始终为0
    created_at long 订单创建时间
    updated_at long 订单最后修改时间

    订单状态说明:

    属性 含义解释
    PENDING 等待成交
    PARTIAL_FILLED 部分成交
    FULLY_FILLED 完全成交
    PARTIAL_CANCELLED 部分取消
    FULLY_CANCELLED 全部取消
    STOP_PENDING stop订单正在等待触发
    STOP_FAILED stop订单被触发,但执行失败(例如:冻结失败)
    STOP_CANCELLED stop订单未被触发而取消

    创建新的订单

    此 API 用于创建新的订单。

    HTTP Request

    POST /v3/contracts/orders

    请求参数

    参数 是否必须 描述
    symbol Y 合约代码,例如"BTCUSD_P"
    type Y 订单类型,参见OrderType
    direction Y 订单方向,参见Direction
    source "" 订单来源标识,例如"WEB", "APP",字母和数字组合
    price 仅限价单 限价单报价,只支持1位小数
    quantity Y 订单数量,整数,最小为1
    trigger_on N 止盈止损订单触发价格
    trigger_direction N 止盈止损订单触发条件,"long","short"
    trailing_distance N 追踪止损订单触发距离
    fill_or_kill N 类型为string,是否设置FOK订单,全部成交或全部取消
    immediate_or_cancel N 类型为string,是否设置IOC订单,立即成交或全部取消
    post_only N 类型为string,是否设置post_only订单
    hidden N 类型为string,是否设置隐藏订单
    reduce_only N 类型为string,是否设置只减仓订单

    请注意:

    订单类型如果为LIMIT,则必须填写price;

    trigger_on与trailing_distance不能同时填写

    若fill_or_kill=true,则无法设置immediate_or_cancel、post_only、hidden和reduce_only;

    若immediate_or_cancel=true,则无法设置fill_or_kill、post_only、hidden和reduce_only;

    若post_only=true,则无法设置fill_or_kill、immediate_or_cancel和reduce_only;

    若hidden=true,则无法设置fill_or_kill和immediate_or_cancel;

    只有MARKET订单与IOC订单可以设置reduce_only=true。

    举例说明 普通止盈止损订单:

    {

    type: "MARKET",

    quantity: 10,

    trigger_on: 8000,

    trigger_direction: "LONG",

    direction: "LONG",

    ... }

    在此示例中,当价格大于等于8000,一个10张合约的市价多单委托将被提交至市场。 如果trigger_direction为short,则表示价格小于等于8000时,一个10张合约的市价空单委托将被提交至市场。

    追踪止损:

    {

    type: "MARKET",

    quantity: 10,

    trailing_distance: 100,

    trigger_direction: "SHORT",

    direction: "SHORT",

    ... }

    一旦用户提交此类型的委托,10张合约的市价买委托将在当前市场价格下跌超过追踪价距100时被提交。

    然而,如果市场价格上涨,那么此委托将会追踪此价格,并在市场价格至最高点下跌超过追踪价距100时被执行。

    如果trigger_direction和direction同时为long,则表示:一旦用户提交此类型的委托,10张合约的市价买委托将在当前市场价格上涨超过追踪价距100时被提交。

    API响应:

    {
      "status": 0,
      "data": {
        "id": 167624805711936,  #由API计算的分布式ID
        "sequenceId": 260087,  #由sequence计算的sequenceId
        "type": "LIMIT",  #订单类型LIMIT/MARKET
        "status": "PENDING",  #订单状态
        "direction": "SHORT", #订单方向LONG/SHORT
        "features": 0,        #订单属性,按bit组合:FOK/IOC/HIDDEN/post_only
        "price": 100.0,     #限价价格,仅限LIMIT单
        "quantity": 200,    #数量
        "unfilled_quantity": 200, #未成交数量
        "maker_fee_rate": -0.00025,#maker费率
        "taker_fee_rate": 0.001,   #taker费率
        "fee": 0,                #订单已累积收取的fee
        "trigger_direction": "LONG",#触发方向
        "trigger_on": 0,
        "trailing_base_price": 0,#触发基础价格
        "trailing_distance": 0,#触发距离
        "created_at": 1566283234499, #订单创建时间戳
        "updated_at": 1566283234499, #更新时间戳
        "frozen_margin": 0.034188034188034184,#冻结margin
        "frozen_quantity": 20000,#冻结数量
        "hidden": false #是否隐藏
      }
    }
    

    取消订单

    此 API 用于取消订单

    HTTP Request

    POST /v3/contracts/orders/<order_id>/cancel

    说明: order_id为订单id

    请求参数

    API响应:

    {
      "status": 0,
      "data": {
        "id": 167624805711936,  #由API计算的分布式ID
        "sequenceId": 260087,  #由sequence计算的sequenceId
        "type": "LIMIT",  #订单类型LIMIT/MARKET
        "status": "PENDING",  #订单状态
        "direction": "SHORT", #订单方向LONG/SHORT
        "features": 0,        #订单属性,按bit组合:FOK/IOC/HIDDEN/post_only
        "price": 100.0,     #限价价格,仅限LIMIT单
        "quantity": 200,    #数量
        "unfilled_quantity": 200, #未成交数量
        "maker_fee_rate": -0.00025,#maker费率
        "taker_fee_rate": 0.001,   #taker费率
        "fee": 0,                #订单已累积收取的fee
        "trigger_direction": "LONG",#触发方向
        "trigger_on": 0,
        "trailing_base_price": 0,#触发基础价格
        "trailing_distance": 0,#触发距离
        "created_at": 1566283234499, #订单创建时间戳
        "updated_at": 1566283234499, #更新时间戳
        "frozen_margin": 0.034188034188034184,#冻结margin
        "frozen_quantity": 20000,#冻结数量
        "hidden": false, #是否隐藏
        "trailing": false
      }
    }
    

    查询活动订单

    此 API 用于查询活动订单

    HTTP Request

    GET /v3/contracts/orders/open

    请求参数

    API响应:

    {
      'status': 0,
      'data': {
        'results': [
          {
            "id": 203090171912,
            "features": 0,
            "price": 1127.00,
            "fee": -0.000196850393700787,
            "fill_price": 1127.0,
            "quantity": 200,
            "unfilled_quantity": 100,
            "maker_fee_rate": -0.000250000000000000,
            "taker_fee_rate": 0.000650000000000000,
            "type": "limit",
            "status": "partial_filled",
            "direction": "long",
            "trigger_direction": "long",
            "trigger_on": 0,
            "trailing_base_price": 0,
            "trailing_distance": 0,
            "created_at": 1577158837098,
            "updated_at": 1577167476836,
            "symbol": "BTCUSD_P",
            "trailing": false
          }
        ]
      }
    }
    

    查询活动订单详情

    此 API 用于查询订单详情

    HTTP Request

    GET /v3/contracts/orders/open/<order_id>

    说明: order_id为订单id

    请求参数

    API响应:

    {
      'status': 0,
      'data': {
        'id': 20309017941912,
        'features': 0,
        'price': 126.0,
        'fee': 0,
        'fill_price': 0.0,
        'quantity': 200,
        'unfilled_quantity': 200,
        'maker_fee_rate': -0.00025,
        'taker_fee_rate': 0.00065,
        'type': 'limit',
        'status': 'pending',
        'direction': 'long',
        'trigger_direction': 'long',
        'trigger_on': 0,
        'trailing_base_price': 0,
        'trailing_distance': 0,
        'created_at': 1577158837767,
        'updated_at': 1577158837767,
        'symbol': 'BTCUSD_P',
        'trailing': False
      }
    }
    

    通过订单id获取订单详情

    此 API 用于查询所有订单的详情

    HTTP Request

    GET /v3/contracts/orders/<order_id>

    说明: order_id为订单id

    请求参数

    API响应:

    {
      'status': 0,
      'data': {
        'id': 20309017941912,
        'features': 0,
        'price': 126.0,
        'fee': 0,
        'fill_price': 0.0,
        'quantity': 200,
        'unfilled_quantity': 200,
        'maker_fee_rate': -0.00025,
        'taker_fee_rate': 0.00065,
        'type': 'limit',
        'status': 'pending',
        'direction': 'long',
        'trigger_direction': 'long',
        'trigger_on': 0,
        'trailing_base_price': 0,
        'trailing_distance': 0,
        'created_at': 1577158837767,
        'updated_at': 1577158837767,
        'symbol': 'BTCUSD_P',
        'trailing': False
      }
    }
    

    查询历史订单

    此 API 用于查询历史订单

    HTTP Request

    GET /v3/contracts/orders/closed

    请求参数

    参数 是否必须 描述
    range N 查询月份,格式为YYYYMM,例如"201907",默认为空,表示当前月份。
    symbol N 用于过滤查询条件,仅筛选指定symbol的订单,默认为空,表示所有symbol。
    offsetId N 传入当前页的起始id,默认为0,表示第一页。
    limit N 返回结果集的最大记录数量,范围1~100,默认为100。

    API响应:

    {
      'status': 0,
      'data': {
        'range': '201908',
        'hasMore': True,
        'nextOffsetId': 163466438508609,
        'results': [
          {
            'id': 163466455285825,
            'sequenceId': 79260,
            'type': 'LIMIT',
            'status': 'FULLY_FILLED',
            'direction': 'SHORT',
            'features': 0,
            'price': 5286.0,
            'quantity': 332,
            'unfilled_quantity': 0,
            'maker_fee_rate': -0.00025,
            'taker_fee_rate': 0.001,
            'fee': -1.570185395384e-05,
            'trigger_direction': 'LONG',
            'trigger_on': 0.0,
            'trailing_base_price': 0.0,
            'trailing_distance': 0.0,
            'created_at': 1565787520849,
            'updated_at': 1565787520849
          },
          {...}
        ]
      }
    }
    

    全部撤单

    POST /v3/contracts/orders/cancel

    此 API 用于撤销全部交易对的委托单 如果需要撤销某个交易对的委托单,则在url中加入symbol 举例:https://api.fmex.com/v3/contracts/orders/cancel?symbol=btcusd_p

    API响应:

    {
      "status": 0,
      "data": {
        "cancelled": 0
      }
    }
    

    查询订单成交历史

    此 API 用于查询订单成交历史

    HTTP Request

    GET /v3/contracts/orders/<order_id>/matches

    说明: order_id为订单id

    请求参数

    API响应:

    {
      'status': 0,
      'data': {
        'results': [
          {
            'taker': False,
            'price': 13403.0,
            'quantity': 994.0,
            'fee': -1.8540625233156e-05,
            'created_at': 1566275534853
          }
        ]
      }
    }
    

    分页查询合约每日交易量

    GET /v3/broker/auth/contracts/trade_volumes

    请求参数

    属性 类型 是否必须 含义
    has_prev Boolean N 是否包含前一页,该参数由前端控制,原样返回
    id String N 最后一次分页的ID,非必传
    page_size Integer N 请求数量(1-40),默认为40
    symbol String N 交易对,例如 BTCUSD_P, 如果指定symbol,查询的是某symbol日交易量,如果不指定symbol则查询所有symbol日交易量

    响应结果

    请求参数示例:
     1. 指定symbol
    {
        "status": "ok",
        "data": {
            "content": [
                {       
                    "id": "1574352000000", # 分页id, 也代表时间
                    "base_vol":"2.4853453948753947", # 交易量,指定symbol时返回
                    "quote_vol":"30", # 合约张数,指定symbol时返回
                    "amount": "0.141933059938008458" # 交易量折合(单位btc)
                }
            ],
            "current_elements": 1,
            "has_prev": false,
            "has_next": false,
            "next_page_id": "1574352000000" # 下一页id
        }
    }
    
    2.未指定symbol
    {
        "status": "ok",
        "data": {
            "content": [
                {       
                    "id": "1574352000000", # 分页id, 也代表时间
                    "amount": "0.141933059938008458" # 交易量折合(单位btc)
                }
            ],
            "current_elements": 1,
            "has_prev": false,
            "has_next": false,
            "next_page_id": "1574352000000" # 下一页id
        }
    }
    

    分页查询合约每日手续费

    GET /v3/broker/auth/contracts/user_fees

    请求参数

    属性 是否必须 含义
    has_prev N 是否包含前一页,该参数由调用方提供,原样返回
    id N 最后一次分页的ID
    page_size N 请求数量(1-40),默认为40
    symbol N 交易对,例如 BTCUSD_P, 如果指定symbol,查询的是某symbol日手续费(指定symbol时还会返回手续费详情),如果不指定symbol则查询所有symbol日手续费

    响应结果

    返回参数示例:
     1. 指定symbol
        {
            "status": "ok",
            "data": {
                "content": [
                    {
                     "id": 1574352000000 # 分页id, 也代表时间
                     "currency": btc,      # 币种
                     "in_fees": 0.00000059938,         # maker 手续费
                     "in_fees_amount": 0.00000059938,  #  maker 手续费折合(单位btc)
                     "out_fees": 0.000060059938,       # taker 手续费
                     "out_fees_amount": 0.000060059938 # taker 手续费折合(单位btc)
                    }
                ],
                "current_elements": 1,
                "has_prev": false,
                "has_next": false,
                "next_page_id": "1574352000000"
            }
        }
    
    2.未指定symbol
       {
            "status": "ok",
            "data": {
                "content": [
                    {
                     "id": 1574352000000 # 分页id, 也代表时间
                     "in_fees_amount": 0.00000059938,  # maker 手续费折合(单位btc)
                     "out_fees_amount": 0.000060059938 # taker 手续费折合(单位btc)
                    }
                ],
                "current_elements": 1,
                "has_prev": false,
                "has_next": false,
                "next_page_id": "1574352000000"
            }
        }
    

    根据时间查询手续费详情

    GET /v3/broker/auth/contracts/user_fees/{timestamp}

    URL 参数 timestamp : 每日开始时间戳,单位毫秒

    响应结果

        {
          "status": "ok"
          "data": [
            {
              "currency": btc,     # 币种
               "in_fees": 0.00000059938,         # maker 手续费
             "in_fees_amount": 0.00000059938,  #  maker 手续费折合(单位btc)
             "out_fees": 0.000060059938,       # taker 手续费
             "out_fees_amount": 0.000060059938 # taker 手续费折合(单位btc)
              "symbol": btcusd_p   # symbol
            }
          ]
        }
    

    仓位接口

    获取仓位列表

    此 API 获取仓位列表。

    HTTP Request

    GET /v3/broker/auth/contracts/positions

    请求参数

    API响应:

    {
      'status': 'ok',
      'data': {
        'results': [
          {
            'direction': 'SHORT',  #仓位方向
            'updated_at': 1566271860000,  #仓位最近修改的毫秒时间戳
            'quantity': 0,  #持有合约数量,必须为正,若为0,表示已全部平仓
            'leverage': 0, #仓位设定杠杆率,不一定等于实际杠杆率
            'margin_leverage':0, #实际杠杆率
            'riskLevel': 0, #风险等级
            'max_quantity': 100000, #持有合约数量最大值
            'realized_pnl': -0.036307524734501204, #已实现盈亏,已实现盈亏仅作为统计展示给用户,表示自开仓以来该仓位的盈亏
            'unrealized_pnl':0,#未实现盈亏
            'taker_fee_rate': 0.001, #开仓时确定的仓位平仓taker费率
            'margin': 0.0, #仓位保证金,必须为正 
            'bankruptcy_price': 0.0, #破产价格,以该价格平仓,扣除taker手续费后,其权益恰好为0
            'liquidation_price': 0.0, #强平价格,以该价格平仓,扣除taker手续费后,其剩余权益恰好为仓位价值 x 维持保证金率
            'entry_price': 11017.0, #开仓均价,每次仓位增加或减少时,开仓均价都会调整
            'symbol': 'BTCUSD_P', #仓位合约代码,例如BTCUSD_P
            'closed': True, #仓位是否关闭
            'minimum_maintenance_margin_rate': 0.005 #最小维持保证金,如果仓位保证金降低到此,将立刻触发强平
          }
        ]
      }
    }
    

    设置仓位杠杆

    HTTP Request

    POST /v3/contracts/positions/$symbol/leverage

    symbol:URL参数,该仓位的Symbol名称

    请求参数

    参数 是否必须 描述
    leverage 必填 0~最大允许值,0=全仓,1~最大允许值=逐仓杠杆倍数

    请求示例

    { 'leverage': 0 }

    API响应:

    {
      'status': 0,
      'data': {
        'direction': 'long',
        'updated_at': 1578539682369,
        'quantity': 26754,
        'leverage': 5,
        'risk_level': 1,
        'max_quantity': 1200,
        'realized_pnl': 0.000795757420283452,
        'taker_fee_rate': 0.00045,
        'margin': 10.0,
        'bankruptcy_price': 2022.7359651164236,
        'liquidation_price': 2032.845095833183,
        'entry_price': 8276.33114284172,
        'symbol': 'BTCUSD_P',
        'closed': False,
        'minimum_maintenance_margin_rate': 0.005
      }
    }
    

    设置仓位保证金

    HTTP Request

    POST /v3/contracts/positions/$symbol/margin

    symbol:URL参数,该仓位的Symbol名称

    请求参数

    参数 是否必须 描述
    margin 必填 设置的新的仓位保证金

    请求示例

    { 'margin': 0 }

    API响应:

    {
      'status': 0,
      'data': {
        'direction': 'long',
        'updated_at': 1578539682369,
        'quantity': 26754,
        'leverage': 5,
        'risk_level': 1,
        'max_quantity': 1200,
        'realized_pnl': 0.000795757420283452,
        'taker_fee_rate': 0.00045,
        'margin': 10.0,
        'bankruptcy_price': 2022.7359651164236,
        'liquidation_price': 2032.845095833183,
        'entry_price': 8276.33114284172,
        'symbol': 'BTCUSD_P',
        'closed': False,
        'minimum_maintenance_margin_rate': 0.005
      }
    }
    

    设置仓位风险等级

    HTTP Request

    POST /v3/contracts/positions/$symbol/riskLevel

    symbol:URL参数,该仓位的Symbol名称

    请求参数

    参数 是否必须 描述
    risk_level 必填 0~最大允许值

    请求示例

    { 'risk_level': 0 }

    API响应:

    {
      'status': 0,
      'data': {
        'risk_level': 0
      }
    }
    

    ws接口

    签名方式:
    1.只对http地址进行签名
    举例,只对这个字符串签名:GEThttps://api.fmex.com/v2/user/ws1579154149629,得到签名结果,签名方法与http请求相同
    2.将签名结果通过ws传递给服务器
    例如:wss://api.fmex.com/v2/user/ws?FC-ACCESS-KEY=f8wersd4sdfc7121cbdd81986&FC-ACCESS-TIMESTAMP=1579147466690&FC-ACCESS-SIGNATURE=aKx/DMQ6j75JwegtfDVuJaXRxoxA=
    3.连接成功后,就可以通过ws发送命令,获取相应信息

    其中,http地址:https://api.fmex.com/v2/user/ws
    ws地址:wss://api.fmex.com/v2/user/ws

    注:此接口为增量推送,即在订阅成功后,有变化时,才会有信息推送给用户

    获取账户信息

    websocket 请求的数据为:

    发送 sub 指令,topic: account (请参考 WebSocket 订阅)

    {
        "id":"11111",
        "cmd":"sub",
        "args":["account"],
    }
    

    WebSocket 请求成功的响应结果如下:

    
    {
        "type": "account", 
        "account": 
        {
            "currency": "BTC", 
            "available": 1.34242880408925, 
            "frozen": 0.0, 
            "position": 9.747280117178e-06, 
            "updated_at": 1580802053643
        }, 
        "ts": 1580802053662  # 更新时间
    }
    

    获取订单

    websocket 请求的数据为:

    发送 sub 指令,topic: order.$symbol (请参考 WebSocket 订阅)

    {
        "id":"11111",
        "cmd":"sub",
        "args":["order.btcusd_p"],
    }
    

    WebSocket 请求成功的响应结果如下:

    {
        "type": "order.btcusd_p", 
        "order": 
        {
            "id": 849758102002, 
            "quantity": 1, 
            "direction": "LONG", 
            "features": 8, 
            "price": 10210, 
            "fill_price": 9288.0, 
            "unfilled_quantity": 0, 
            "symbol": "BTCUSD_P", 
            "margin_currency": "BTC", 
            "fee": 4.8449612403e-08, 
            "type": "MARKET", 
            "status": "FULLY_FILLED", 
            "trigger_direction": "LONG", 
            "trigger_on": 0, 
            "trailing_base_price": 0, 
            "trailing_distance": 0, 
            "created_at": 1580802204215
            }, 
        "ts": 1580802204232
    }
    

    获取仓位

    websocket 请求的数据为:

    发送 sub 指令,topic: position.$symbol (请参考 WebSocket 订阅)

    {
        "id":"11111",
        "cmd":"sub",
        "args":["position.btcusd_p"],
    }
    

    WebSocket 请求成功的响应结果如下:

    {
        "type": "position.btcusd_p", 
        "position": 
        {
             "symbol": "BTCUSD_P", 
             "quantity": 1, 
             "direction": "LONG", 
             "leverage": 50, 
             "risk_level": 0, 
             "margin": 9.749658727683e-06,
              "taker_fee_rate": 0.00045, 
              "realized_pnl": -4.8499218623e-08, 
              "entry_price": 9278.5, 
              "liquidation_price": 9363.483892761602, 
              "bankruptcy_price": 8512.606170669584, 
              "minimum_maintenance_margin_rate": 0.1, 
              "updated_at": 1580802507384
        },
         "ts": 1580802507401
    }
    

    自动交易

    以下是支持 FMex 的自动交易软件和服务。