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

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 false string

/*
    注意:GetPositions函数获取的是所有持仓品种的持仓信息,如果没有持仓则返回空数组,所以使用该接口返回的数据前要先判断返回的数据是否为空数组
*/
function main(){
    // 鉴于测试代码,不使用商品期货策略一般架构,这里仅仅判断exchange.IO("status")函数,判断连接期货公司前置机成功后立即执行测试代码。股票证券无需使用exchange.IO("status")判断连接状态
    while(!exchange.IO("status")) {
        Sleep(1000)
    }

    var info = exchange.SetContractType("rb888")
    var ticker = exchange.GetTicker()
    exchange.SetDirection("buy")
    exchange.Buy(ticker.Last + info.PriceTick * 20, 2)
    var position = exchange.GetPositions()
    if(position.length>0){
        Log("Amount:", position[0].Amount, "FrozenAmount:", position[0].FrozenAmount, "Price:",
            position[0].Price, "Profit:", position[0].Profit, "Type:", position[0].Type,
            "ContractType:", position[0].ContractType, "Symbol:", position[0].Symbol)
    }
}
def main():
    while not exchange.IO("status"):
        Sleep(1000)

    info = exchange.SetContractType("rb888")
    ticker = exchange.GetTicker()
    exchange.SetDirection("buy")
    exchange.Buy(ticker["Last"] + info["PriceTick"] * 20, 2)
    position = exchange.GetPositions()
    if len(position) > 0:
        Log("Amount:", position[0]["Amount"], "FrozenAmount:", position[0]["FrozenAmount"], "Price:", 
            position[0]["Price"], "Profit:", position[0]["Profit"], "Type:", position[0]["Type"], 
            "ContractType:", position[0]["ContractType"], "Symbol:", position[0]["Symbol"])
void main() {
    while(exchange.IO("status") == 0) {
        Sleep(1000);
    }

    auto info = exchange.SetContractType("rb888");
    auto ticker = exchange.GetTicker();
    exchange.SetDirection("buy");
    exchange.Buy(ticker.Last + info["PriceTick"].get<double>() * 20, 2);
    auto position = exchange.GetPositions();
    if(position.size() > 0) {
        Log("Amount:", position[0].Amount, "FrozenAmount:", position[0].FrozenAmount, "Price:", 
            position[0].Price, "Profit:", position[0].Profit, "Type:", position[0].Type, 
            "ContractType:", position[0].ContractType, "Symbol:", position[0].Symbol);
    } 
}

商品期货的持仓需要注意:

  • 回测系统 回测系统不区分今仓、昨仓。GetPositions函数返回的持仓数据{@struct/Position Position}结构数组中,Position结构的Type属性仅为PD_LONG或者PD_SHORT
  • 实盘 有交易所区分今仓、昨仓,例如上期所。 有些交易所虽然也区分,但是不能指定平今还是平昨,有今仓优先平今仓。例如IF等一些品种只能先平今仓,所以今仓、昨仓仓位信息合并为一个并且不予区分。

兼容exchange.GetPosition()调用。

exchange.GetPositions()函数不依赖于当前设置的合约代码,不传symbol参数时获取所有合约当前持仓信息。传入symbol参数时获取指定合约的持仓信息。

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

Account exchange.SetMarginLevel