exchange.GetPositions
获取持仓信息。GetPositions()是交易所对象exchange的成员函数,只作用于该交易所对象绑定的账户(多账户时用exchanges[i].GetPositions()指定账户)。
exchange.GetPositions()
exchange.GetPositions(symbol)示例
-
查询持仓(不传参数时按默认范围)并逐条打印。
javascriptfunction main() { var positions = exchange.GetPositions() if (!positions) return // 获取失败时为null,没有持仓时为空数组 for (var pos of positions) { Log(pos.Symbol, "数量", pos.Amount, "均价", pos.Price, "浮动盈亏", pos.Profit) } // 输出:每个持仓一行,依次为品种代码、持仓量、持仓均价、浮动盈亏 }pythondef main(): positions = exchange.GetPositions() if positions is None: return for pos in positions: Log(pos["Symbol"], "数量", pos["Amount"], "均价", pos["Price"], "浮动盈亏", pos["Profit"]) # 输出:每个持仓一行,依次为品种代码、持仓量、持仓均价、浮动盈亏rustfn 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) + "`") returnrust/*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; }
返回值
| 类型 | 描述 |
| 成功时返回 |
参数
| 名称 | 类型 | 必填 | 描述 |
symbol | string | 否 | 要查询的品种(例如 |
参考
备注
加密货币期货合约与加密货币现货不同,现货仅有逻辑上的持仓概念。在FMZ量化交易平台的系统中,加密货币期货合约的具体品种由**交易对**、**合约代码**共同标识。可参阅exchange.SetCurrency、exchange.SetContractType函数。
范围写法(USDT.swap、USD.futures、USDT.option等)与不传symbol时的缺省范围见品种代码;交易所接口不支持的范围会报错并返回空值。
兼容exchange.GetPosition()调用,GetPosition与GetPositions的用法完全一致。
当交易所对象exchange所代表的账户在查询范围内或指定的交易品种上没有持仓时,exchange.GetPositions()函数返回空数组,例如:[]。