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

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}

Account exchange.SetMarginLevel