TBQ标准版,请问无法按照真实账户longCurrentVolume平仓,该如何解决?谢谢!

TBQ标准版,买入或卖出开仓后,多次发单,造成图表与真实账户持仓数量不一致,无法调取longCurrentVolume数据,无法按照真实账户longCurrentVolume平仓,请问如何解决?谢谢!

升级1.3.2.2标准版后,无法登陆
主力合约切换后无法平仓怎么解决?
卖出平仓,平掉 账户所有该品种的仓位如何写
公式编译的时候出现如下问题导致无法编译,请问该如何调整?
请问在公式编写中,如何编写按账户资金比例下单?谢谢
提示这种错误导致无法编译该如何处理?
虚拟账户无法支持套利组合交易
虚拟账户和真实账户分不清?添加账户要搞清楚
longcurrentvolume,longcansellvolume获取错误
请问如何获得账户持仓信息

我只能说getposition函数是没问题的,position结构体也是好的,

就算是要帮你改,也必须提供一个可运行的demo来调试,否则就只能你自己调试代码

另外即使我把图表删除,全部改为A函数执行,也无法解决上面的问题。

你们的很多相关问题以及视频教程看了,尝试了没能解决。麻烦老师再看一下另外两张图片。Bool ret = A_Sell(MainSymbol, pos.longCurrentVolume, Q_BidPrice, orders, , );这里面的pos.longCurrentVolume无法获取A_GetPosition读出来的longCurrentVolume实时数据,无法全平多头26手,只会默认平1手,而把pos.longCurrentVolume改为其他常数数据如10,它就能按照常数数据平仓10手。我的主要问题是如何调用longCurrentVolume或shortCurrentVolume实时数据?谢谢!data-href=data-href=data-href=

写了一大堆东西,但是我确实看不明白你想表达什么,有点乱。

这里有一些使用a函数报单的策略编写实例,你看看有没有帮助吧。

https://space.bilibili.com/31053817/channel/seriesdetail?sid=2531821

https://www.bilibili.com/video/BV1Gw411k7bD/?spm_id_from=333.999.0.0

遍历每个账户。

获取每个账户指定符号(MainSymbol)的当前持仓。

检查市场持仓是否为零(即是否有持仓)。

如果市场持仓为多(MarketPosition == 1),并且是Bar的末尾(BarStatus == 2)且尚未发送订单(sendCount == 0),则:

发送一个卖出订单以关闭当前的多头仓位。

将sendCount递增,表示已发送订单。

该代码使用诸如A_GetPosition之类的函数来检索持仓信息,使用A_Sell来发送卖出订单。它还使用Print将信息输出到控制台,用于调试或记录。

以下是代码主要元素的更详细分解:


OnBar(ArrayRef<Integer> indexs):这看起来是在价格图表形成新Bar时调用的主函数。

For i = 0 To A_AccountCount - 1:一个循环,遍历每个账户。

Range[0:DataCount - 1]:这一行不清楚是什么作用,因为它不是标准的构造。它可能是特定于您使用的脚本语言或软件的。

Position pos:一个用于存储持仓信息的变量。

Bool ret = A_GetPosition(MainSymbol, pos, \"\", i):一个函数调用,获取账户i的MainSymbol的当前持仓。函数的结果存储在布尔变量ret中。

Print(\"A_GetPosition:\" + IIFString(ret, \"True\", \"False\") + \",\" + Text(pos)):输出持仓检索结果。

If (ret && MarketPosition != 0):检查持仓检索是否成功且市场持仓不为零。

If (MarketPosition == 1 && BarStatus == 2 && sendCount == 0):检查当前持仓是否为多,是否为Bar的末尾,以及是否尚未发送订单。

A_Sell(MainSymbol, pos.longCurrentVolume, Q_BidPrice, orders, \"\", \"\"):发送一个卖出订单以关闭多头仓位。

Print(\"A_Sell:\" + IIFString(ret, \"True\", \"False\") + \",\" + TextArray(orders)):输出卖出订单的结果。

sendCount = sendCount + 1:递增sendCount,表示已发送订单。

相关代码如下:

OnBar(ArrayRef<Integer> indexs)

   {

       

Integer i;

          For i = 0 To A_AccountCount - 1

           Range[0:DataCount - 1]

          {

              // 获取每个账户的持仓信息

              Position pos;

              //获取指定合约当前仓位

             Bool ret = A_GetPosition(MainSymbol, pos, \"\", i);

             Print(\"A_GetPosition:\" + IIFString(ret, \"True\", \"False\") + \",\" + Text(pos));

           

              If (ret && MarketPosition != 0)

              {

                  // 如果持仓不为零,则平仓

     

               If (MarketPosition == 1 )

               {

             

                   if(BarStatus == 2 && sendCount == 0)

       

                  {//发平仓单

                  Array<Integer> orders;

                  //指定账户指定合约多头平仓

                  Bool ret = A_Sell(MainSymbol, pos.longCurrentVolume, Q_BidPrice, orders, \"\", \"\");

                   Print(\"A_Sell:\" + IIFString(ret, \"True\", \"False\") + \",\" + TextArray(orders));

                   Print(\"pos.longCurrentVolume:\" + IIFString(ret, \"True\", \"False\") + \",\"+ Text(pos.longCurrentVolume));

                   if(ret)

                    {

                         sendCount = sendCount + 1;

                   }

                  }

               

              }

             

         }

OnBar(ArrayRef<Integer> indexs)

   {

       ……

相关代码如下:

// 遍历所有账户

           Integer i;

           For i = 0 To A_AccountCount - 1

            Range[0:DataCount - 1]

           {

               // 获取每个账户的持仓信息

               Position pos;

               //获取指定合约当前仓位

              Bool ret = A_GetPosition(MainSymbol, pos, \"\", i);

              Print(\"A_GetPosition:\" + IIFString(ret, \"True\", \"False\") + \",\" + Text(pos));

             

               If (ret && MarketPosition != 0)

               {

                   // 如果持仓不为零,则平仓

       

                If (MarketPosition == 1 )

                {

               

                    if(BarStatus == 2 && sendCount == 0)

         

                   {//发平仓单

                   Array<Integer> orders;

                   //指定账户指定合约多头平仓

                   Bool ret = A_Sell(MainSymbol, pos.longCurrentVolume, Q_BidPrice, orders, \"\", \"\");

                    Print(\"A_Sell:\" + IIFString(ret, \"True\", \"False\") + \",\" + TextArray(orders));

                    Print(\"pos.longCurrentVolume:\" + IIFString(ret, \"True\", \"False\") + \",\"+ Text(pos.longCurrentVolume));

                    if(ret)

                     {

                          sendCount = sendCount + 1;

                    }

                   }

                 

               }

               

          }