交易所特殊说明

  • 富途证券 支持富途牛牛实盘交易、模拟盘交易,需要下载FutuOpenD软件。 当使用FutuOpenD接入模拟交易时,某些股票代码不受支持而无法交易,但富途牛牛手机APP支持这些股票的模拟交易。 在发明者量化平台上配置交易所对象、运行FutuOpenD软件等操作请参考富途证券配置说明文档

    • 接口调用频率 对于GetOrderGetOrdersGetPositionsGetAccount函数默认使用缓存数据,因此不限制调用频率。 当有新数据时,FutuOpenD会自动更新数据,缓存数据也会同步更新。

    调用exchange.IO("refresh", true)函数可以禁用缓存。如果禁用缓存,则调用频率限制为每30秒内最多请求10次查询,超过频率限制将报错。

    • 股票代码 例如:600519.SH
      • HK 港股
      • US 美股
      • SH 沪股
      • SZ 深股

    策略代码中使用exchange.SetContractType()函数设置股票代码,例如:

    function main() {
        var info = exchange.SetContractType("600519.SH")    // 设置为股票600519.SH即贵州茅台,账户即切换到大陆市场
        Log(info)
        Log(exchange.GetAccount())                          // 当前设置的股票为贵州茅台,此时调用GetAccount函数获取账户资产,获取的为大陆市场账户资产
        Log(exchange.GetTicker())                           // 获取股票贵州茅台当前的价格信息
    }
    
    def main():
        info = exchange.SetContractType("600519.SH")
        Log(info)
        Log(exchange.GetAccount())
        Log(exchange.GetTicker())
    
    void main() {
        auto info = exchange.SetContractType("600519.SH");
        Log(info);
        Log(exchange.GetAccount());
        Log(exchange.GetTicker());
    }
    

    设置交易方向的函数exchange.SetDirection、下单函数exchange.Buy/exchange.Sell、 撤单函数exchange.CancelOrder、查询订单函数exchange.GetOrder等使用方法均与期货市场相同。

    • 账户信息数据格式: 使用TrdMarket定义市场,用以区分香港市场美国市场大陆市场

    摘录自Futu API文档

    const (
        TrdMarket_TrdMarket_Unknown TrdMarket = 0 //未知市场
        TrdMarket_TrdMarket_HK      TrdMarket = 1 //香港市场
        TrdMarket_TrdMarket_US      TrdMarket = 2 //美国市场
        TrdMarket_TrdMarket_CN      TrdMarket = 3 //大陆市场
        TrdMarket_TrdMarket_HKCC    TrdMarket = 4 //香港A股通市场
        TrdMarket_TrdMarket_Futures TrdMarket = 5 //期货市场
    )
    

    获取账户信息数据,exchange.GetAccount()函数返回:

    {
        "Info": [{
            "Header": {
                ...                 // 省略
                "TrdMarket": 1      // Info原始信息中,市场ID,表示该账户资产用于香港市场交易
            },
            "Funds": {              // 账户在该市场的资产信息
                ...
            }
        }, ...],
        "Stocks": 0,
        "FrozenStocks": 0,
        "Balance": 1000000,         // 当前市场的资产数值
        "FrozenBalance": 0
    }
    
    • FutuOpenD根据登录的IP地址作为地区区分 对于非大陆IP地址登录的账户,在获取行情数据时有所限制,具体请查阅FutuOpenD(富途)官方文档。
  • 盈透证券 配置交易所: 使用盈透需要在托管者所在系统环境运行「IB Gateway」或者「TWS (Trader Workstation)」软件,以「TWS」软件为例。运行「TWS」并登录后,在软件右上角点击配置按钮打开软件配置界面。

    • 选择:「配置」->「API」->「设置」,不要勾选「只读API」选项,需要勾选「启用ActiveX和套接字客户端」选项,注意配置中的「套接字端口」(TWS默认端口为7496实盘/7497模拟盘)。
    • 在平台的添加交易所页面「https://www.fmz.com/m/platforms/add」选择**盈透证券(Interactive Brokers)**,配置参数。在「服务器地址」配置项中填写「TWS」软件对应的地址(如127.0.0.1或者localhost)、端口即可,例如:localhost:7496

支持市场: - 目前仅支持美股市场,暂不支持其他期货、外汇等市场。 - 美股市场股票代码格式示例: 苹果公司(Apple Inc.)在纳斯达克(NASDAQ)交易所的股票代码:AAPL.US。 特斯拉公司(Tesla, Inc.)在纳斯达克(NASDAQ)交易所的股票代码:TSLA.US。 - Futures_Binance 支持币安期货双向持仓模式,可以使用exchange.IO切换:

  function main() {
      exchange.IO("dual", true)    // 切换为双向持仓
      exchange.IO("dual", false)   // 切换为单向持仓
  }
  def main():
      exchange.IO("dual", True)
      exchange.IO("dual", False)
  void main() {
      exchange.IO("dual", true);
      exchange.IO("dual", false);
  }

支持逐仓/全仓切换:

  function main() {
      exchange.SetContractType("swap")
      exchange.IO("cross", true)    // 切换为全仓
      exchange.IO("cross", false)   // 切换为逐仓
  }
  def main():
      exchange.SetContractType("swap")
      exchange.IO("cross", True)
      exchange.IO("cross", False)
  void main() {
      exchange.SetContractType("swap");
      exchange.IO("cross", true);
      exchange.IO("cross", false);
  }

支持切换为币安统一账户模式:

  function main() {
      exchange.IO("unified", true)   // 切换为统一账户模式
      exchange.IO("unified", false)  // 切换为普通模式
  }
  def main():
      exchange.IO("unified", True)
      exchange.IO("unified", False)
  void main() {
      exchange.IO("unified", true);
      exchange.IO("unified", false);
  }

支持设置币安现货/期货下单的STP模式:

  function main() {
      // "NONE" 表示禁用STP模式,其他参数有:"EXPIRE_TAKER", "EXPIRE_MAKER", "EXPIRE_BOTH"
      exchange.IO("selfTradePreventionMode", "NONE")
  }
  def main():
      exchange.IO("selfTradePreventionMode", "NONE")
  void main() {
      exchange.IO("selfTradePreventionMode", "NONE");
  }

支持币安的中文交易对:

  function main() {
      let ticker = exchange.GetTicker("币安人生_USDT.swap")
      Log("ticker:", ticker)   // {"Info":{...},"Symbol":"币安人生_USDT.swap","Open":0.29622,"High":0.31661, ...}
  }
  • Futures_HuobiDM

    • 切换地址: 支持修改火币期货参与签名的地址,默认不切换。如需禁用此功能,使用exchange.IO("signHost", "")设置为空字符串即可。 使用exchange.IO("signHost", "https://xxx.xxx.xxx")切换火币期货参与签名验证的基地址。 使用exchange.IO("base", "https://xxx.xxx.xxx")或者exchange.SetBase("https://xxx.xxx.xxx")切换交易所接口的基地址。
    • 切换逐仓/全仓: 当交易对设置为XXX_USDT,使用函数exchange.SetContractType("swap")将合约代码设置为swap永续合约时,使用exchange.IO("cross", true)可以切换为USDT本位永续合约全仓模式。使用exchange.IO("cross", false)可以切换回逐仓模式,初始默认为逐仓模式。
    • 切换持仓单向/双向: 使用exchange.IO("dual", true)切换为双向持仓,使用exchange.IO("dual", false)切换为单向持仓。
    • 切换统一账户: 火币期货使用exchange.IO("unified", true)切换统一账户;使用exchange.IO("unified", false)切换回非统一账户。
  • Huobi

    • 切换特殊交易对: 支持火币现货杠杆代币,例如:LINK*(-3),交易所定义的代码为:link3susdt,在发明者量化交易平台设置该交易对时写作LINK3S_USDT。 也可以在策略中切换交易对:
    function main() {
        exchange.SetCurrency("LINK3S_USDT")
        Log(exchange.GetTicker())
    }
    
    def main():
        exchange.SetCurrency("LINK3S_USDT")
        Log(exchange.GetTicker())
    
    void main() {
        exchange.SetCurrency("LINK3S_USDT");
        Log(exchange.GetTicker());
    }
    
  • Futures_OKX(Futures_OKCoin/Futures_OKEX)

    • 切换模拟盘: OKX期货接口可以切换至OKX期货的模拟盘测试环境,使用exchange.IO("simulate", true)即可切换为模拟盘环境。如需切换为实盘环境,使用exchange.IO("simulate", false)切换为实盘即可,初始默认为实盘环境。
    • 切换逐仓/全仓: 支持切换期货账户保证金模式,使用exchange.IO("cross", true)切换为全仓模式,使用exchange.IO("cross", false)切换为逐仓模式,初始默认为全仓模式。
    • 切换持仓单向/双向: 使用exchange.IO("dual", true)切换为双向持仓,使用exchange.IO("dual", false)切换为单向持仓。
  • OKX(OKCoin/OKEX)

    • 切换模拟盘: 使用exchange.IO("simulate", true)即可切换为模拟盘环境。如需切换为实盘环境,使用exchange.IO("simulate", false)切换为实盘即可,初始默认为实盘环境。
  • Futures_Bibox

    • 切换逐仓/全仓: 使用exchange.IO("cross", true)切换为全仓模式,使用exchange.IO("cross", false)切换为逐仓模式,初始默认为全仓模式。
    • 不支持的接口: 交易所不支持查询当前挂单和查询市场历史成交记录的接口,因此不支持GetOrdersGetTrades函数。
  • Futures_Bitget

    • 切换逐仓/全仓: 使用exchange.IO("cross", true)切换为全仓模式,使用exchange.IO("cross", false)切换为逐仓模式。
    • 切换持仓单向/双向: 使用exchange.IO("dual", true)切换为双向持仓,使用exchange.IO("dual", false)切换为单向持仓。
  • Futures_MEXC

    • 切换逐仓/全仓: 使用exchange.IO("cross", true)切换为全仓模式,使用exchange.IO("cross", false)切换为逐仓模式。
  • Futures_GateIO

    • 切换逐仓/全仓: 使用exchange.IO("cross", true)切换为全仓模式,使用exchange.IO("cross", false)切换为逐仓模式。
    • 切换持仓单向/双向: 使用exchange.IO("dual", true)切换为双向持仓,使用exchange.IO("dual", false)切换为单向持仓。
    • 切换统一账户: GateIO期货使用exchange.IO("unified", true)切换统一账户;使用exchange.IO("unified", false)切换回非统一账户。
  • GateIO

    • 切换统一账户: GateIO现货使用exchange.IO("unified", true)切换统一账户;使用exchange.IO("unified", false)切换回非统一账户。
  • Futures_Bybit

    • 切换逐仓/全仓: 使用exchange.IO("cross", true)切换为全仓模式,使用exchange.IO("cross", false)切换为逐仓模式。
    • 切换统一保证金接口: 使用exchange.IO("unified", true)切换为统一保证金接口,使用exchange.IO("unified", false)切换回普通合约接口。
    • 切换持仓单向/双向: 使用exchange.IO("dual", true)切换为双向持仓,使用exchange.IO("dual", false)切换为单向持仓。
  • Futures_Pionex

    • 切换逐仓/全仓: 使用exchange.IO("cross", true)切换为全仓模式,使用exchange.IO("cross", false)切换为逐仓模式。
    • 切换持仓单向/双向: 使用exchange.IO("dual", true)切换为双向持仓,使用exchange.IO("dual", false)切换为单向持仓。
  • Futures_BitMEX

    • 切换逐仓/全仓: 使用exchange.IO("cross", true)切换为全仓模式,使用exchange.IO("cross", false)切换为逐仓模式。
  • BitMEX

    • 市价单买单 BitMEX现货交易下单接口,市价单买单的下单量为交易币数量,而非金额。
  • Bitfinex

    • 市价单买单 Bitfinex现货交易下单接口,市价单买单的下单量为交易币数量,而非金额。
  • AscendEx

    • 市价单买单 AscendEx现货交易下单接口,市价单买单的下单量为交易币数量,而非金额。
  • Futures_Phemex

    • 切换持仓单向/双向: 使用exchange.IO("dual", true)切换为双向持仓,使用exchange.IO("dual", false)切换为单向持仓。
    • K线接口 该交易所K线接口响应的数据不包含当前Bar数据。
    • 切换逐仓/全仓: 该交易所未提供接口切换全仓/逐仓,需要在交易所网站上设置。
  • Backpack 支持设置Backpack现货下单的STP模式:

    function main() {
      // "Allow" 表示允许自成交, "RejectTaker" "RejectMaker" "RejectBoth" "Allow"
      exchange.IO("selfTradePreventionMode", "Allow")
    }
    
  def main():
      exchange.IO("selfTradePreventionMode", "Allow")
  void main() {
      exchange.IO("selfTradePreventionMode", "Allow");
  }
  • Futures_CoinEx
    • 切换逐仓/全仓: 使用exchange.IO("cross", true)切换为全仓模式,使用exchange.IO("cross", false)切换为逐仓模式。
  • Futures_Aevo
    • 下单需要传入signingKey: 使用钱包连接交易所后,在交易所API密钥管理页面可以复制signingKey私钥。 例如signingKey私钥为xxx,使用exchange.IO("signingKey", "xxx")传入,注意signingKey具有时效性。传入后exchange.IO函数返回signingKey的公钥。
  • Futures_Kraken
    • 切换逐仓/全仓: 仅Futures_Kraken交易所的multi-collateral合约支持全仓、逐仓、杠杆设置。 使用exchange.IO("cross", true)切换为全仓模式,使用exchange.IO("cross", false)切换为逐仓模式。
  • Futures_Crypto
    • 设置accountId: 使用exchange.IO("accountId", "xxx")设置accountId。
  • Gemini
    • 切换子账户: 使用exchange.IO("subAccount", "xxx")切换子账户。
  • Futures_Aevo
    • 订单Id说明: 该交易所订单Id由实际Id和订单时间戳组成,时间戳和实际订单Id使用英文逗号分隔。目的是为了支持exchange.GetOrder(Id)函数查询订单。鉴于交易所返回的数据中订单时间戳会随订单状态变化,如果本地需要记录订单Id等信息,请分离出实际订单Id进行记录。
  • Futures_dYdX 目前支持的是dYdX v4版本,参考dYdX v4 使用指南
  • Futures_WOO
    • 切换逐仓/全仓: 使用exchange.IO("cross", true)切换为全仓模式,使用exchange.IO("cross", false)切换为逐仓模式。
    • 切换持仓单向/双向: 使用exchange.IO("dual", true)切换为双向持仓,使用exchange.IO("dual", false)切换为单向持仓。
  • Futures_KuCoin
    • 切换逐仓/全仓: 使用exchange.IO("cross", true)切换为全仓模式,使用exchange.IO("cross", false)切换为逐仓模式。
  • Futures_Hyperliquid 参考Hyperliquid 使用指南
    • 切换逐仓/全仓: 使用exchange.IO("cross", true)切换为全仓模式,使用exchange.IO("cross", false)切换为逐仓模式。
    • 设置主网/测试网环境 使用exchange.IO("source", "b")切换为测试网环境,使用exchange.IO("source", "a")切换为主网环境。
    • 设置vaultAddress地址 使用exchange.IO("vaultAddress", "0xabc...")设置金库地址,用于金库或子账户下单等交易操作时指定具体的执行账户地址。默认不启用该设置,设置为空字符串""时可禁用该设置。
    • 设置walletAddress地址 使用exchange.IO("walletAddress", "0xabc...")设置钱包地址,用于查询指定账户的订单、持仓、余额等数据。默认为主账户的钱包地址。
    • 设置expiresAfter参数 使用exchange.IO("expiresAfter", 1234567890)设置请求时的expiresAfter参数,用于指定订单的过期时间戳(毫秒)。默认不启用该设置,设置为0时可禁用该设置。
  • Hyperliquid
    • 设置主网/测试网环境 使用exchange.IO("source", "b")切换为测试网环境,使用exchange.IO("source", "a")切换为主网环境。
  • Futures_Backpack 支持设置Backpack期货下单的STP模式。
  • Futures_edgeX 支持计算订单哈希并签名,返回签名字符串:
  function main() {
      var strJson = `{
          "assetIdSynthetic":    "0x4554482d3900000000000000000000",
          "assetIdCollateral":   "0x2ce625e94458d39dd0bf3b45a843544dd4a14b8169045a3a3d15aa564b936c5",
          "assetIdFee":          "0x2ce625e94458d39dd0bf3b45a843544dd4a14b8169045a3a3d15aa564b936c5",
          "isBuyingSynthetic":   true,
          "amountSynthetic":     10000000,
          "amountCollateral":    13020000,
          "amountFee":           6250,
          "nonce":               676432751,
          "accountID":           601416704693633632,
          "expirationTimestamp": 484831
      }`
      var signature = exchange.IO("calcOrderHashAndSign", strJson)
      Log(signature)
  }
  • Futures_Coinw
    • 切换逐仓/全仓: 使用exchange.IO("cross", true)切换为全仓模式,使用exchange.IO("cross", false)切换为逐仓模式。
  • Futures_Aster
    • 切换逐仓/全仓: 使用exchange.IO("cross", true)切换为全仓模式,使用exchange.IO("cross", false)切换为逐仓模式。
    • 切换持仓单向/双向: 使用exchange.IO("dual", true)切换为双向持仓,使用exchange.IO("dual", false)切换为单向持仓。
  • Futures_DeepCoin
    • 切换逐仓/全仓: 使用exchange.IO("cross", true)切换为全仓模式,使用exchange.IO("cross", false)切换为逐仓模式。
    • 切换分仓/合仓: 使用exchange.IO("merge", true)切换为合仓模式,使用exchange.IO("merge", false)切换为分仓模式。