输入/搜索内容
内置函数
Global
Log
Market
Trade
Account
Futures
exchange.SetContractType
exchange.GetContractType
exchange.SetDirection
exchange.SetMarginLevel
exchange.GetPositions
exchange.GetFundings
Exchange
IO
Network
Storage
Threads
TA
Talib
OS
结构体
内置变量与常量
通用约定
交易所

获取持仓信息。GetPositions()是交易所对象exchange的成员函数,只作用于该交易所对象绑定的账户(多账户时用exchanges[i].GetPositions()指定账户)。

exchange.GetPositions()
exchange.GetPositions(symbol)

示例

  • 查询持仓(不传参数时按默认范围)并逐条打印。

    javascript
    function main() { var positions = exchange.GetPositions() if (!positions) return // 获取失败时为null,没有持仓时为空数组 for (var pos of positions) { Log(pos.Symbol, "数量", pos.Amount, "均价", pos.Price, "浮动盈亏", pos.Profit) } // 输出:每个持仓一行,依次为品种代码、持仓量、持仓均价、浮动盈亏 }
    python
    def main(): positions = exchange.GetPositions() if positions is None: return for pos in positions: Log(pos["Symbol"], "数量", pos["Amount"], "均价", pos["Price"], "浮动盈亏", pos["Profit"]) # 输出:每个持仓一行,依次为品种代码、持仓量、持仓均价、浮动盈亏
    rust
    fn main() { let Ok(positions) = exchange.GetPositions(None) else { return }; for pos in &positions { Log!(pos.Symbol, "数量", pos.Amount, "均价", pos.Price, "浮动盈亏", pos.Profit); } // 输出:每个持仓一行,依次为品种代码、持仓量、持仓均价、浮动盈亏 }
  • 使用期货交易所对象,对多个不同交易对、不同合约代码的品种下市价单,并通过多种方式查询持仓信息。

    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
    rust
    /*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"}] */ fn main() { let 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); } let defaultPositions = exchange.GetPositions(None).unwrap(); let swapPositions = exchange.GetPositions("USDT.swap").unwrap(); let futuresPositions = exchange.GetPositions("USDT.futures").unwrap(); let btcUsdtSwapPositions = exchange.GetPositions("BTC_USDT.swap").unwrap(); // Rust SDK 没有JSON序列化,使用format!拼接表格的JSON文本 let mut tbls: Vec<String> = Vec::new(); let arr = [defaultPositions, swapPositions, futuresPositions, btcUsdtSwapPositions]; let tblDesc = ["defaultPositions", "swapPositions", "futuresPositions", "btcUsdtSwapPositions"]; for (index, positions) in arr.iter().enumerate() { let mut rows: Vec<String> = Vec::new(); for pos in positions { rows.push(format!(r#"["{}", {}, {}, {}, {}, {}, {}, "{}", {}]"#, pos.Symbol, pos.MarginLevel, pos.Amount, pos.FrozenAmount, pos.Price, pos.Profit, pos.Type, pos.ContractType, pos.Margin)); } let tbl = format!(r#"{{"type": "table", "title": "{}", "cols": ["Symbol", "MarginLevel", "Amount", "FrozenAmount", "Price", "Profit", "Type", "ContractType", "Margin"], "rows": [{}]}}"#, tblDesc[index], rows.join(",")); tbls.push(tbl); } LogStatus!(format!("`[{}]`", tbls.join(","))); // 打印输出一次信息后返回,防止后续回测时订单成交,影响数据观察 return; }

返回值

类型描述

Position数组 / 空值

成功时返回Position结构数组;失败时返回空值。

参数

名称类型必填描述

symbol

string

否

要查询的品种(例如BTC_USDT.swap)或品种范围(例如USDT.swap)。不传或传空字符串时,查询当前计价币种与合约类型的范围(例如当前品种为BTC_USDT.swap时即USDT.swap)。范围写法与缺省范围的完整规则见品种代码。

参考

备注

加密货币期货合约与加密货币现货不同,现货仅有逻辑上的持仓概念。在FMZ量化交易平台的系统中,加密货币期货合约的具体品种由**交易对**、**合约代码**共同标识。可参阅exchange.SetCurrency、exchange.SetContractType函数。

范围写法(USDT.swap、USD.futures、USDT.option等)与不传symbol时的缺省范围见品种代码;交易所接口不支持的范围会报错并返回空值。

兼容exchange.GetPosition()调用,GetPosition与GetPositions的用法完全一致。

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