exchange.GetPositions

exchange.GetPositions()函数用于获取持仓信息;GetPositions()函数是交易所对象{@var/EXCHANGE exchange}的成员函数。

GetPositions()函数获取交易所对象exchange绑定的交易所账户的持仓信息,exchange对象的成员函数(方法)的用途仅与exchange相关,文档后续不再赘述。

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

} python “‘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```

”`cpp /*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}