资源加载中... loading...

Futures

exchange.GetPositions


```exchange.GetPositions()```函数请求数据成功时返回{@struct/Position Position}结构数组,请求数据失败时返回空值。
{@struct/Position Position}数组、空值

exchange.GetPositions()
exchange.GetPositions(symbol)

参数```symbol```用于设置所要查询的**交易品种**或者**交易品种的范围**。
不传```symbol```参数时,默认以当前交易对、合约代码所在维度范围请求所有品种的持仓数据。

symbol
false
string

```javascript
/*backtest
start: 2024-05-21 00:00:00
end: 2024-09-05 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

function main() {
    var arrSymbol = ["BTC_USDT.swap", "BTC_USDT.quarter", "ETH_USDT.swap", "ETH_USDT.quarter"]

    for (var symbol of arrSymbol) {
        exchange.CreateOrder(symbol, "buy", -1, 1)
        exchange.CreateOrder(symbol, "sell", -1, 1)
    }

    var defaultPositions = exchange.GetPositions()
    var swapPositions = exchange.GetPositions("USDT.swap")
    var futuresPositions = exchange.GetPositions("USDT.futures")
    var btcUsdtSwapPositions = exchange.GetPositions("BTC_USDT.swap")

    var tbls = []
    var arr = [defaultPositions, swapPositions, futuresPositions, btcUsdtSwapPositions]
    var tblDesc = ["defaultPositions", "swapPositions", "futuresPositions", "btcUsdtSwapPositions"]
    for (var index in arr) {
        var positions = arr[index]
        var tbl = {type: "table", title: tblDesc[index], cols: ["Symbol", "MarginLevel", "Amount", "FrozenAmount", "Price", "Profit", "Type", "ContractType", "Margin"], rows: [] }
        for (var pos of positions) {
            tbl.rows.push([pos.Symbol, pos.MarginLevel, pos.Amount, pos.FrozenAmount, pos.Price, pos.Profit, pos.Type, pos.ContractType, pos.Margin])
        }
        tbls.push(tbl)
    }

    LogStatus("`" + JSON.stringify(tbls) + "`")

    // 打印输出一次信息后返回,防止后续回测时订单成交,影响数据观察
    return
}
'''backtest
start: 2024-05-21 00:00:00
end: 2024-09-05 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
'''

import json

def main():
    arrSymbol = ["BTC_USDT.swap", "BTC_USDT.quarter", "ETH_USDT.swap", "ETH_USDT.quarter"]

    for symbol in arrSymbol:
        exchange.CreateOrder(symbol, "buy", -1, 1)
        exchange.CreateOrder(symbol, "sell", -1, 1)

    defaultPositions = exchange.GetPositions()
    swapPositions = exchange.GetPositions("USDT.swap")
    futuresPositions = exchange.GetPositions("USDT.futures")
    btcUsdtSwapPositions = exchange.GetPositions("BTC_USDT.swap")

    tbls = []
    arr = [defaultPositions, swapPositions, futuresPositions, btcUsdtSwapPositions]
    tblDesc = ["defaultPositions", "swapPositions", "futuresPositions", "btcUsdtSwapPositions"]
    for index in range(len(arr)):
        positions = arr[index]
        tbl = {"type": "table", "title": tblDesc[index], "cols": ["Symbol", "MarginLevel", "Amount", "FrozenAmount", "Price", "Profit", "Type", "ContractType", "Margin"], "rows": []}
        for pos in positions:
            tbl["rows"].append([pos["Symbol"], pos["MarginLevel"], pos["Amount"], pos["FrozenAmount"], pos["Price"], pos["Profit"], pos["Type"], pos["ContractType"], pos["Margin"]])

        tbls.append(tbl)

    LogStatus("`" + json.dumps(tbls) + "`")

    return
/*backtest
start: 2024-05-21 00:00:00
end: 2024-09-05 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

void main() {
    auto arrSymbol = {"BTC_USDT.swap", "BTC_USDT.quarter", "ETH_USDT.swap", "ETH_USDT.quarter"};
    
    for (const auto& symbol : arrSymbol) {
        exchange.CreateOrder(symbol, "buy", -1, 1);
        exchange.CreateOrder(symbol, "sell", -1, 1);
    }
    
    auto defaultPositions = exchange.GetPositions();
    auto swapPositions = exchange.GetPositions("USDT.swap");
    auto futuresPositions = exchange.GetPositions("USDT.futures");
    auto btcUsdtSwapPositions = exchange.GetPositions("BTC_USDT.swap");
    
    json tbls = R"([])"_json;
    std::vector<std::vector<Position>> arr = {defaultPositions, swapPositions, futuresPositions, btcUsdtSwapPositions};
    std::string tblDesc[] = {"defaultPositions", "swapPositions", "futuresPositions", "btcUsdtSwapPositions"};
    for (int index = 0; index < arr.size(); index++) {
        auto positions = arr[index];
        json tbl = R"({
            "type": "table", 
            "cols": ["Symbol", "MarginLevel", "Amount", "FrozenAmount", "Price", "Profit", "Type", "ContractType", "Margin"],
            "rows": []
        })"_json;
        tbl["title"] = tblDesc[index];
    
        for (const auto& pos : positions) {
            json arrJson = R"([])"_json;
    
            arrJson.push_back(pos.Symbol);
            arrJson.push_back(pos.MarginLevel);
            arrJson.push_back(pos.Amount);
            arrJson.push_back(pos.FrozenAmount);
            arrJson.push_back(pos.Price);
            arrJson.push_back(pos.Profit);
            arrJson.push_back(pos.Type);
            arrJson.push_back(pos.ContractType);
            arrJson.push_back(pos.Margin);
    
            tbl["rows"].push_back(arrJson);
        }
    
        tbls.push_back(tbl);
    }
    
    LogStatus(_D(), "\n", "`" + tbls.dump() + "`");
    
    return;
}

使用期货交易所对象,对多个不同交易对、合约代码的品种下市价单。按多种方式查询持仓。

加密货币期货合约与加密货币现货不同,现货只有逻辑上的持仓概念。在FMZ量化交易平台的系统中加密货币期货合约具体品种是由交易对合约代码共同标识的。 可以参看{@fun/Account/exchange.SetCurrency exchange.SetCurrency}、{@fun/Futures/exchange.SetContractType exchange.SetContractType}函数。 在GetPositions函数中,symbol参数的使用场景归纳:

交易所对象分类 symbol参数 查询范围 备注
期货 不传symbol参数 查询当前交易对、合约代码维度范围的所有交易品种 假如当前交易对为BTC_USDT,合约代码为swap,即查询所有的USDT本位永续合约。等价于调用GetPositions("USDT.swap")
期货 指定交易品种,symbol参数为:”BTC_USDT.swap” 查询指定的BTC的USDT本位永续合约 对于期货交易所对象,参数symbol格式为:FMZ平台定义的交易对合约代码组合,以字符"."间隔。
期货 指定交易品种范围,symbol参数为:”USDT.swap” 查询所有USDT本位永续合约 -
支持期权的期货交易所 不传symbol参数 查询当前交易对维度范围的所有期权合约 假如当前交易对为BTC_USDT,合约设置为期权合约,例如币安期权合约:BTC-240108-40000-C
支持期权的期货交易所 指定具体交易品种 查询指定的期权合约 例如对于币安期货交易所,symbol参数:BTC_USDT.BTC-240108-40000-C
支持期权的期货交易所 指定交易品种范围,symbol参数为:”USDT.option” 查询所有USDT本位期权合约 -

GetPositions函数中,期货交易所对象查询维度范围归纳:

symbol参数 请求范围定义 备注
USDT.swap USDT本位永续合约范围。 对于交易所API接口不支持的维度,调用时会报错返回空值。
USDT.futures USDT本位交割合约范围。 -
USD.swap 币本位永续合约范围。 -
USD.futures 币本位交割合约范围。 -
USDT.option USDT本位期权合约范围。 -
USD.option 币本位期权合约范围。 -
USDT.futures_combo 差价组合合约范围。 Futures_Deribit交易所
USD.futures_ff 混合保证金交割合约范围。 Futures_Kraken交易所
USD.swap_pf 混合保证金永续合约范围。 Futures_Kraken交易所

兼容exchange.GetPosition()调用,GetPositionGetPositions使用完全一致。

当交易所对象exchange代表的账户在查询范围内指定的交易品种没有持仓时exchange.GetPositions()函数返回空数组,例如:[]

{@struct/Position Position}, {@fun/Account/exchange.SetCurrency exchange.SetCurrency}, {@fun/Futures/exchange.SetContractType exchange.SetContractType}

exchange.SetMarginLevel


exchange.SetMarginLevel(symbol, marginLevel)
exchange.SetMarginLevel(marginLevel)

```symbol```参数用于指定需要调整杠杆值的交易对、合约。```SetMarginLevel()```函数的```symbol```参数的格式与```GetTicker()```函数的```symbol```参数的格式一致。
symbol
false
string
```marginLevel```参数用于设置杠杆值,交易所的杠杆值通常是整数,也支持一些交易所的浮点数杠杆值设置。
marginLevel
true
number

```javascript
function main() {
    exchange.SetMarginLevel(10)
    // 设置BTC的USDT本位永续合约的杠杆为15
    exchange.SetMarginLevel("BTC_USDT.swap", 15)
}
def main():
    exchange.SetMarginLevel(10)
    exchange.SetMarginLevel("BTC_USDT.swap", 15)
void main() {
    exchange.SetMarginLevel(10);
    exchange.SetMarginLevel("BTC_USDT.swap", 15);
}
对于加密货币期货合约来说,由于加密货币期货合约交易所的杠杆机制并不统一。 有些交易所期货合约杠杆值是下单接口中的一个参数,这时调用```exchange.SetMarginLevel()```函数并不产生网络请求,仅设置FMZ系统底层中的杠杆变量(用于下单接口传参)。 有些交易所期货合约杠杆值是交易所的一项设置,是需要通过在交易所网站页面设置或者使用API接口设置。 此时调用```exchange.SetMarginLevel()```函数就会产生网络请求,并且有可能设置杠杆失败。 原因可能有很多,例如:当前有持仓、挂单,导致这个交易对、合约无法再设置新的杠杆值。
不支持```exchange.SetMarginLevel()```函数的交易所:
| 函数名 | 不支持的现货交易所 | 不支持的期货交易所 |
| - | - | - |
| SetMarginLevel | -- | Futures_dYdX / Futures_Deribit |


{@var/EXCHANGE exchange}

### exchange.SetDirection

```exchange.SetDirection()```函数用于设置{@fun/Trade/exchange.Buy exchange.Buy}函数、{@fun/Trade/exchange.Sell exchange.Sell}函数进行期货合约下单时的订单方向。

exchange.SetDirection(direction)

```direction```参数用于设置期货合约下单时的方向,可选值为:```"buy"```、```"closesell"```、```"sell"```、```"closebuy"```。
direction
true
string

```javascript
function main(){
    // 举例设置为OKX期货当周合约
    exchange.SetContractType("this_week")    
    // 设置杠杆为5倍
    exchange.SetMarginLevel(5)
    // 设置下单类型为做多
    exchange.SetDirection("buy")
    // 以10000的价格,合约数量为2张下单
    exchange.Buy(10000, 2)              
    exchange.SetMarginLevel(5)
    exchange.SetDirection("closebuy")
    exchange.Sell(1000, 2)
}
def main():
    exchange.SetContractType("this_week")
    exchange.SetMarginLevel(5)
    exchange.SetDirection("buy")
    exchange.Buy(10000, 2)
    exchange.SetMarginLevel(5)
    exchange.SetDirection("closebuy")
    exchange.Sell(1000, 2)
void main() {
    exchange.SetContractType("this_week");
    exchange.SetMarginLevel(5);
    exchange.SetDirection("buy");
    exchange.Buy(10000, 2);
    exchange.SetMarginLevel(5);
    exchange.SetDirection("closebuy");
    exchange.Sell(1000, 2);
}

|下单函数|SetDirection函数的参数设置的方向|备注|
|-|-|-|
|exchange.Buy|"buy"|买入开多仓|
|exchange.Buy|"closesell"|买入平空仓|
|exchange.Sell|"sell"|卖出开空仓|
|exchange.Sell|"closebuy"|卖出平多仓|


{@fun/Trade/exchange.Buy exchange.Buy}, {@fun/Trade/exchange.Sell exchange.Sell}

### exchange.SetContractType

```exchange.SetContractType()```函数用于设置{@var/EXCHANGE exchange}交易所对象当前的合约代码。

```exchange.SetContractType()```函数返回一个结构,其中包含当前合约代码对应的交易所合约代码。 例如币安期货合约交易所,当前合约代码为```quarter```,该函数的返回值结构为:```{"InstrumentID":"BTCUSD_230630","instrument":"BTCUSD_230630"}```。
object

exchange.SetContractType(symbol)

```symbol```参数用于设置合约代码,可选值为:```"this_week"```、```"next_week"```、```"quarter"```、```"next_quarter"```、```"swap"```等。
加密货币期货合约中**交割合约**代码如无特殊说明一般有:

- ```this_week```:当周合约。
- ```next_week```:次周合约。
- ```quarter```:季度合约。
- ```next_quarter```:次季度合约。
加密货币期货合约中**永续合约**代码如无特殊说明一般有:
- ```swap```:永续合约。

symbol
true
string

```javascript
function main() {
    // 设置为当周合约
    exchange.SetContractType("this_week") 
}
def main():
    exchange.SetContractType("this_week")
void main() {
    exchange.SetContractType("this_week");
}

设置当前合约为当周合约:

function main() {
    // 默认交易对为BTC_USD,设置合约为当周,合约为币本位合约
    exchange.SetContractType("this_week")
    Log("ticker:", exchange.GetTicker())
    
    // 切换交易对,然后设置合约,切换成USDT作为保证金的合约,区别于币本位合约
    exchange.IO("currency", "BTC_USDT")   
    exchange.SetContractType("swap")
    Log("ticker:", exchange.GetTicker())
}
def main():
    exchange.SetContractType("this_week")
    Log("ticker:", exchange.GetTicker())
    exchange.IO("currency", "BTC_USDT")
    exchange.SetContractType("swap")
    Log("ticker:", exchange.GetTicker())
void main() {
    exchange.SetContractType("this_week");
    Log("ticker:", exchange.GetTicker());
    exchange.IO("currency", "BTC_USDT");
    exchange.SetContractType("swap");
    Log("ticker:", exchange.GetTicker());
}

设置USDT作为保证金的合约时,需要在代码中切换交易对(也可以在添加交易所对象时直接设置交易对):

function main(){
    // 设置合约为当周
    var ret = exchange.SetContractType("this_week")     
    // 返回当周合约的信息
    Log(ret)
}
def main():
    ret = exchange.SetContractType("this_week")
    Log(ret)
void main() {
    auto ret = exchange.SetContractType("this_week");
    Log(ret);
}

打印exchange.SetContractType()函数的返回值:

在加密货币期货合约策略中,以切换为BTC_USDT交易对为例: 当使用exchange.SetCurrency("BTC_USDT")或者exchange.IO("currency", "BTC_USDT")函数切换交易对时, 在切换之后需要使用exchange.SetContractType()函数重新设置合约才可以在新交易对下确定当前需要操作的合约。 系统根据交易对来确定是币本位合约或者USDT本位合约。 例如:交易对设置为BTC_USDT时,使用exchange.SetContractType("swap")函数设置合约代码为swap, 此时就设置为BTCUSDT本位的永续合约。如果交易对为BTC_USD,使用exchange.SetContractType("swap")函数设置合约代码为swap, 此时就设置为BTC币本位的永续合约。 详细介绍支持的加密货币期货合约交易所,每个交易所的合约命名如下: - Futures_OKCoin(OKX) 设置为永续合约:exchange.SetContractType("swap") 设置为当周合约:exchange.SetContractType("this_week") 设置为次周合约:exchange.SetContractType("next_week") 设置为月度合约:exchange.SetContractType("month") 设置为次月合约:exchange.SetContractType("next_month") 设置为季度合约:exchange.SetContractType("quarter") 设置为次季合约:exchange.SetContractType("next_quarter")

OKX有盘前交易合约:合约交割日期为固定时间,交易所定义的合约代码举例为:HMSTR-USDT-250207,在发明者平台设置交易对为HMSTR_USDT,然后使用exchange.SetContractType("HMSTR-USDT-250207")设置该合约。 对于支持symbol参数的函数,例如:exchange.GetTicker()exchange.CreateOrder()等。可以指定symbol参数为:HMSTR_USDT.HMSTR-USDT-250207来获取这个合约的行情数据或者下单等操作。 - Futures_HuobiDM(火币期货) 设置为当周合约:exchange.SetContractType("this_week")。 设置为次周合约:exchange.SetContractType("next_week")。 设置为季度合约:exchange.SetContractType("quarter")。 设置为次季合约:exchange.SetContractType("next_quarter")。 设置为永续合约:exchange.SetContractType("swap")。 支持USDT作为保证金的合约,以BTC合约为例:使用exchange.IO("currency", "BTC_USDT")即可切换为使用USDT作为保证金的合约, 或者在配置实盘参数、添加交易所对象时直接设置当前交易对为BTC_USDT。切换交易对后需要重新调用exchange.SetContractType()函数设置合约。 - Futures_BitMEX(BitMEX) 设置为永续合约:exchange.SetContractType("swap")。 Futures_BitMEX交易所交割合约为月度合约,合约代码如下(一月到十二月):

  "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"

设置交割合约:exchange.SetContractType("December")。举例交易对设置为XBT_USDT时,调用exchange.SetContractType("December")函数设置BTC的USDT本位十二月交割的合约(对应的实际合约代码为XBTUSDTZ23)。

Futures_BitMEX合约信息汇总 |Futures_BitMEX定义的合约代码|在FMZ对应的交易对|在FMZ对应的合约代码|备注| | - | - | - | - | | DOGEUSD | DOGE_USD | swap | 美元计价,XBT结算。XBT即BTC。 | | DOGEUSDT | DOGE_USDT | swap | USDT计价,USDT结算。 | | XBTETH | XBT_ETH | swap | ETH计价,XBT结算。 | | XBTEUR | XBT_EUR | swap | 欧元计价(EUR),XBT结算。 | | USDTUSDC | USDT_USDC | swap | USDC计价,XBT结算。 | | ETHUSD_ETH | ETH_USD_ETH | swap | 美元计价,ETH结算。 | | XBTH24 | XBT_USD | March | 到期日:24年3月,月份代码是:H ;美元计价,XBT结算。 | | ETHUSDZ23 | ETH_USD | December | 到期日:23年12月,月份代码是:Z ;美元计价,XBT结算。 | | XBTUSDTZ23 | XBT_USDT | December | 到期日:23年12月,月份代码是:Z ;USDT计价,USDT结算。 | | ADAZ23 | ADA_XBT | December | 到期日:23年12月,月份代码是:Z ;XBT计价,XBT结算。 | | P_XBTETFX23 | USDT_XXX | P_XBTETFX23 | 到期日:23年11月;计价为百分比,USDT结算。 | - Futures_GateIO 设置为当周合约:exchange.SetContractType("this_week")。 设置为次周合约:exchange.SetContractType("next_week")。 设置为季度合约:exchange.SetContractType("quarter")。 设置为次季合约:exchange.SetContractType("next_quarter")。 设置为永续合约:exchange.SetContractType("swap")。 支持USDT作为保证金的合约,以BTC合约为例使用exchange.IO("currency", "BTC_USDT")即可切换为使用USDT作为保证金的合约, 或者在配置实盘参数、添加交易所对象时直接设置当前交易对为BTC_USDT。切换交易对后需要重新调用exchange.SetContractType()函数设置合约。 - Futures_Deribit 设置为永续合约:exchange.SetContractType("swap")。 支持Deribit的USDC合约。 交割合约有:"this_week", "next_week", "month", "quarter", "next_quarter", "third_quarter", "fourth_quarter"。 差价合约(future_combo):"this_week,swap", "next_week,swap", "next_quarter,this_week", "third_quarter,this_week", "month,next_week"有很多种组合。 对于期权合约需要传入交易所定义的具体期权合约代码,详情参看Deribit官网。 - Futures_KuCoin 币本位合约,例如交易对设置为BTC_USD,再设置合约代码,即为币本位合约: 设置为永续合约:exchange.SetContractType("swap")。 设置为当季合约:exchange.SetContractType("quarter")。 设置为次季合约:exchange.SetContractType("next_quarter")

USDT作为保证金的合约: 例如交易对设置为BTC_USDT,再设置合约代码,即为USDT作为保证金的合约。 设置为永续合约:exchange.SetContractType("swap")。 - Futures_Binance 币安期货交易所默认为当前交易对的永续合约,合约代码:swap。 设置为永续合约:exchange.SetContractType("swap"),币安的永续合约有使用USDT作为保证金的合约,举例BTCUSDT本位永续合约,交易对设置为BTC_USDT。币安也支持使用币作为保证金的永续合约,举例BTC的币本位永续合约,交易对设置为BTC_USD。 设置为季度合约:exchange.SetContractType("quarter"),交割合约有币本位合约(即使用币作为保证金),举例BTC的季度合约,交易对设置为:BTC_USD再设置合约exchange.SetContractType("quarter"),就设置为BTC的币本位季度合约。 设置为次季合约:exchange.SetContractType("next_quarter"),举例BTC的币本位次季度合约,交易对设置为:BTC_USD,再设置合约exchange.SetContractType("next_quarter")。 币安支持部分USDT作为保证金的交割合约,以BTC举例交易对设置为BTC_USDT,再设置合约代码即可。

支持币安期权合约: 期权合约代码格式以交易所定义的期权合约代码为准:BTC-241227-15000-CXRP-240112-0.5-CBTC-241227-15000-P。以币安期权合约代码BTC-241227-15000-P为例:BTC为期权币种代码,241227为行权日期,15000为行权价格,P表示看跌期权,C表示看涨期权。 期权类型具体是欧式期权/美式期权具体可以查阅交易所期权合约相关资料。 交易所可能会限制期权卖方,需要单独申请资格。币安期权需要申请卖方资格。 - Futures_Bibox Bibox永续合约的合约代码:swap。 设置为永续合约:exchange.SetContractType("swap")。 - Futures_Bybit 默认为当前交易对的永续合约,合约代码:swap。 当周合约代码:this_week。 次周合约代码:next_week。 第三周合约代码:third_week。 月度合约代码:month。 次月合约代码:next_month。 季度合约代码:quarter。 次季度合约代码:next_quarter。 第三季度合约代码:third_quarter。 - Futures_Kraken 默认为当前交易对的永续合约,合约代码:swap

  ```month```:当月合约。
  ```quarter```:季度合约。
  ```next_quarter```:次季合约。
  ```swap_pf```:混合保证金永续合约。 
  ```quarter_ff```:混合保证金季度合约。 
  ```month_ff```:混合保证金当月合约。 
  ```next_quarter_ff```:混合保证金次季度合约。
- Futures_Bitfinex
  默认为当前交易对的永续合约,合约代码:```swap```。
- Futures_Bitget
  默认为当前交易对的永续合约,合约代码:```swap```。
  交易对设置为```BTC_USD```为币本位合约,交易对设置为```BTC_USDT```为```USDT```结算的合约。模拟合约可以设置交易对为:```SBTC_USD```、```BTC_SUSDT```。
- Futures_dYdX (v4)
  dYdX永续合约的合约代码:```swap```。
  设置为永续合约:```exchange.SetContractType("swap")```,dYdX仅有```USD.swap```品种维度,使用的保证金为USDC。
- Futures_MEXC
  MEXC(抹茶)永续合约的合约代码:```swap```。
  设置为永续合约:```exchange.SetContractType("swap")```。交易对设置为```BTC_USD```为币本位合约,交易对设置为```BTC_USDT```为```USDT```结算的合约。
- Futures_Crypto
  crypto.com交易所的账户中的代币可以折算为USD计价的额度,用于合约交易的保证金。
  设置为永续合约:```exchange.SetContractType("swap")```。举例交易对设置为```BTC_USD```时,调用```exchange.SetContractType("swap")```函数设置BTC的永续合约。
  crypto.com交易所交割合约为月度合约,合约代码如下(一月到十二月):
  ```code
  "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"

设置交割合约:exchange.SetContractType("October")。举例交易对设置为BTC_USD时,调用exchange.SetContractType("October")函数设置BTC的十月交割合约。 当前时刻对应的合约代码为:BTCUSD-231027。 - Futures_WOO Futures_WOO交易所支持USDT本位合约,永续合约代码为swap。举例交易对设置为BTC_USDT时,调用exchange.SetContractType("swap")函数设置当前合约为BTC的USDT本位永续合约。

{@fun/Futures/exchange.GetContractType exchange.GetContractType}, {@fun/Account/exchange.SetCurrency exchange.SetCurrency}

exchange.GetContractType


```exchange.GetContractType()```函数返回FMZ平台定义的合约代码,例如:```this_week```、```swap```等。
string

exchange.GetContractType()

```javascript
function main () {
    Log(exchange.SetContractType("this_week")) 
    Log(exchange.GetContractType())
}
def main():
    Log(exchange.SetContractType("this_week"))
    Log(exchange.GetContractType())
void main() {
    Log(exchange.SetContractType("this_week"));
    Log(exchange.GetContractType());
}

{@fun/Futures/exchange.SetContractType exchange.SetContractType}

exchange.GetFundings


```exchange.GetFundings()```函数请求数据成功时返回{@struct/Funding Funding}结构数组,请求数据失败时返回空值。
{@struct/Funding Funding}数组、空值

exchange.GetFundings()
exchange.GetFundings(symbol)

参数```symbol```用于设置所要查询的**交易品种**或者**交易品种的范围**。 不传```symbol```参数时,默认以当前交易对、合约代码所在维度范围请求所有品种的当期资金费率数据。

symbol
false
string

```javascript
/*backtest
start: 2024-10-01 00:00:00
end: 2024-10-23 00:05:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDC"}]
*/

function main() {
    // LPT_USDT.swap 4小时周期
    var symbols = ["SOL_USDT.swap", "ETH_USDT.swap", "LTC_USDT.swap", "SOL_USDC.swap", "ETH_USDC.swap", "BTC_USD.swap", "BTC_USDT.quarter", "LPT_USDT.swap"]
    for (var symbol of symbols) {
        exchange.GetTicker(symbol)
    }
    
    var arr = []
    var arrParams = ["no param", "LTC_USDT.swap", "USDT.swap", "USD.swap", "USDC.swap", "USDT.futures", "BTC_USDT.quarter"]
    for (p of arrParams) {
        if (p == "no param") {
            arr.push(exchange.GetFundings())
        } else {
            arr.push(exchange.GetFundings(p))
        }
    }
    
    var tbls = []
    var index = 0
    for (var fundings of arr) {
        var tbl = {
            "type": "table",
            "title": arrParams[index],
            "cols": ["Symbol", "Interval", "Time", "Rate"],
            "rows": [],
        }
    
        for (var f of fundings) {
            tbl["rows"].push([f.Symbol, f.Interval / 3600000, _D(f.Time), f.Rate * 100 + " %"])
        }
        tbls.push(tbl)
        index++
    }
    
    LogStatus(_D(), "\n 已经请求过的行情品种:", symbols, "\n`" + JSON.stringify(tbls) + "`")
}
'''backtest
start: 2024-10-01 00:00:00
end: 2024-10-23 00:05:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDC"}]
'''
    
import json
    
def main():
    # LPT_USDT.swap 4小时周期
    symbols = ["SOL_USDT.swap", "ETH_USDT.swap", "LTC_USDT.swap", "SOL_USDC.swap", "ETH_USDC.swap", "BTC_USD.swap", "BTC_USDT.quarter", "LPT_USDT.swap"]
    for symbol in symbols:
        exchange.GetTicker(symbol)
    
    arr = []
    arrParams = ["no param", "LTC_USDT.swap", "USDT.swap", "USD.swap", "USDC.swap", "USDT.futures", "BTC_USDT.quarter"]
    for p in arrParams:
        if p == "no param":
            arr.append(exchange.GetFundings())
        else:
            arr.append(exchange.GetFundings(p))
    
    tbls = []
    index = 0
    for fundings in arr:
        tbl = {
            "type": "table",
            "title": arrParams[index],
            "cols": ["Symbol", "Interval", "Time", "Rate"],
            "rows": [],
        }
    
        for f in fundings:
            tbl["rows"].append([f["Symbol"], f["Interval"] / 3600000, _D(f["Time"]), str(f["Rate"] * 100) + " %"])
    
        tbls.append(tbl)
        index += 1
    
    LogStatus(_D(), "\n 已经请求过的行情品种:", symbols, "\n`" + json.dumps(tbls) + "`")
/*backtest
start: 2024-10-01 00:00:00
end: 2024-10-23 00:05:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDC"}]
*/
    
void main() {
    // LPT_USDT.swap 4小时周期
    json arrSymbol = R"([])"_json;
    std::string symbols[] = {"SOL_USDT.swap", "ETH_USDT.swap", "LTC_USDT.swap", "SOL_USDC.swap", "ETH_USDC.swap", "BTC_USD.swap", "BTC_USDT.quarter", "LPT_USDT.swap"};
    for (const std::string& symbol : symbols) {
        exchange.GetTicker(symbol);
        arrSymbol.push_back(symbol);
    }
    
    std::vector<std::vector<Funding>> arr = {};
    std::string arrParams[] = {"no param", "LTC_USDT.swap", "USDT.swap", "USD.swap", "USDC.swap", "USDT.futures", "BTC_USDT.quarter"};
    for (const std::string& p : arrParams) {
        if (p == "no param") {
            arr.push_back(exchange.GetFundings());
        } else {
            arr.push_back(exchange.GetFundings(p));
        }
    }
    
    json tbls = R"([])"_json;
    int index = 0;
    for (int i = 0; i < arr.size(); i++) {
        auto fundings = arr[i];
    
        json tbl = R"({
            "type": "table", 
            "cols": ["Symbol", "Interval", "Time", "Rate"],
            "rows": []
        })"_json;
        tbl["title"] = arrParams[index];
    
        for (int j = 0; j < fundings.size(); j++) {
            auto f = fundings[j];
            // json arrJson = {f.Symbol, f.Interval / 3600000, _D(f.Time), string(f.Rate * 100) + " %"};
            json arrJson = {f.Symbol, f.Interval / 3600000, _D(f.Time), f.Rate};
            tbl["rows"].push_back(arrJson);
        }
        tbls.push_back(tbl);
        index++;
    }
    
    LogStatus(_D(), "\n 已经请求过的行情品种:", arrSymbol.dump(), "\n`" + tbls.dump() + "`");
}

使用期货交易所对象,在回测系统中调用exchange.GetFundings()函数。调用任何行情函数之前,GetFundings只返回当前默认交易对的Funding数据,调用行情函数之后会返回所有请求过的品种的Funding数据。可以参考以下测试例子:

对于不支持批量查询资金费率数据的期货交易所,如果指定symbol参数为查询范围,例如:USDT.swap或者不传symbol参数时接口会报错。 使用这类期货交易所对象调用GetFundings()函数必须指定symbol参数为具体某个永续合约品种,才能查询到该品种的当期资金费率数据。 exchange.GetFundings()函数支持实盘、回测系统。 不支持批量获取资金费率数据的交易所:Futures_Bitget、Futures_OKX、Futures_MEXC、Futures_Deribit、Futures_Crypto。需要传入symbol参数具体品种代码,例如:ETH_USDT.swap

不支持exchange.GetFundings()函数的交易所:

函数名 不支持的现货交易所 不支持的期货交易所
GetFundings Futures_DigiFinex

{@struct/Funding Funding}

Account NetSettings