盘中平仓问题! (文华财经WH6赢顺V6.7)

投资者咨询:盘中平仓问题! (文华财经WH6赢顺V6.7)
来源:文华财经  日期:2018-5-31 10:49
 由于加载多个盘口,那就会出现模组有平仓时每个盘口都出信号平仓照成废单,那如何解决!

1.取得交易账户中是否有该合约的持仓来平,
2.根据盘口开仓信号来平!
老师是否可以写1.取得交易账户中是否有对应的该合约的持仓来平,


VOID DoBP()
{

   IF(tModel.F_Sig() == BP) //
   {
      IF(T_IsSHCode(tCode) == 1) // 
      {
         IF(T_SHSellRemainPosition(tCode, 0) > 0)
         {
            MessageOut(tCode + "市价平空");
            BPID = T_Deal(tCode, 0, 2, T_SHSellRemainPosition(tCode, 0), T_GetRiseLimit(tCode));
         }
      }
      ELSE
      {
         IF(T_SellRemainPosition(tCode) > 0)
         {
            MessageOut(tCode + "市价平空");
            BPID = T_Deal(tCode, 0, 1, T_SellRemainPosition(tCode), T_GetRiseLimit(tCode));
         }
      }
   }
}

VOID DoSP()
{

   IF(tModel.F_Sig() == SP)
   {
      IF(T_IsSHCode(tCode) == 1) // 
      {
         IF(T_SHBuyRemainPosition(tCode, 0) > 0)
         {
            MessageOut(tCode + "市价平多");
            BPID = T_Deal(tCode, 1, 2, T_SHBuyRemainPosition(tCode, 0), T_GetFallLimit(tCode));
         }
      }
      ELSE
      {
         IF(T_BuyRemainPosition(tCode) > 0)
         {
            MessageOut(tCode + "市价平多");
            SPID = T_Deal(tCode, 1, 1, T_BuyRemainPosition(tCode), T_GetFallLimit(tCode));
         }
      }
   }
}

VOID DoCloseOut()
{
   IF(tModel.F_Sig() == CLOSEOUT)
   {
      IF(T_IsSHCode(tCode) == 1) // 
      {
         IF(T_SHSellRemainPosition(tCode, 0) > 0)
         {
            MessageOut(tCode + "市价平空");
            CLOSEOUTID = T_Deal(tCode, 0, 2, T_SHSellRemainPosition(tCode, 0), T_GetRiseLimit(tCode));
         }
         IF(T_SHBuyRemainPosition(tCode, 0) > 0)
         {
            MessageOut(tCode + "市价平多");
            CLOSEOUTID = T_Deal(tCode, 1, 2, T_SHBuyRemainPosition(tCode, 0), T_GetFallLimit(tCode));
         }
      }
      ELSE
      {
         IF(T_SellRemainPosition(tCode) > 0)
         {
            MessageOut(tCode + "市价平空");
            CLOSEOUTID = T_Deal(tCode, 0, 1, T_SellRemainPosition(tCode), T_GetRiseLimit(tCode));
         }
         IF(T_BuyRemainPosition(tCode) > 0)
         {
            MessageOut(tCode + "市价平多");
            CLOSEOUTID = T_Deal(tCode, 1, 1, T_BuyRemainPosition(tCode), T_GetFallLimit(tCode));
         }    
      }
   }
}
 
 
技术人员回复
日期:2018-5-31 11:15
 1.您说的组件同时发出多个平仓委托,形成废单,不是编写问题

编写中平仓时就是根据当时可用持仓下单的,您需要删除部分组件的模组平仓部分,避免这种情况

2.平仓信号改成根据组件盘口开仓信号来平,需要您说下具体平仓思路,当前就是接受模组信号平的,看不出您开仓思路
投资者咨询:盘中平仓问题! (文华财经WH6赢顺V6.7)
来源:文华财经  日期:2018-5-31 10:49
VAR Model[];
VAR nNum;
VAR i;
VAR SS;
VAR M1;
VAR N,X,BID,BVL,TID,TVL; //ADD
VAR tModel, tCode;
GLOBAL_VAR BKID, SKID, BPID, SPID,CLOSEOUTID; //
VAR newPrice;//最新价
VAR mMinPrice;//最小变动价位
GLOBAL_VAR ID; //



VOID MAIN()
{
   Model[0] = "A";
   Model[1] = "B";
   Model[2] = "C";
   Model[3] = "D";



 FOR(i = 0; i < nNum; i = i + 1)
   {
      ID = i ; //
      tModel = Model[i];
      tCode = tModel.F_DealCode();
      SS=tModel.F_Variant("M1", 0);//
      IF(tModel.F_FreshSig() == 1 && tModel.F_SigValid() == 1)
      {
         DoSK();
         DoBK();
         DoBP();
         DoSP();
         DoCloseOut();          
      }
   }
}

VOID DoSK()
{
   VAR SelVol;
   SelVol = AL_SellPosition(tCode);
   IF(tModel.F_Sig() == SK)
         {
            IF(SelVol == 0 )
            {
               SKID = T_Deal(tCode, 1, 0, tModel.F_SigVol(), T_GetFallLimit(tCode));
               RETURN;
            }
         }
      }


VOID DoBK()
{
   VAR BuyVol;
   BuyVol = AL_BuyPosition(tCode);
   IF(tModel.F_Sig() == BK)

         {
            IF(BuyVol == 0 )
            {
               BKID = T_Deal(tCode, 0, 0, tModel.F_SigVol(), T_GetRiseLimit(tCode));
               RETURN;
            }
         }
      }


VOID DoBP()
{

   IF(tModel.F_Sig() == BP) //
   {
      IF(T_IsSHCode(tCode) == 1) // 
      {
         IF(T_SHSellRemainPosition(tCode, 0) > 0)
         {
            MessageOut(tCode + "市价平空");
            BPID = T_Deal(tCode, 0, 2, T_SHSellRemainPosition(tCode, 0), T_GetRiseLimit(tCode));
         }
      }
      ELSE
      {
         IF(T_SellRemainPosition(tCode) > 0)
         {
            MessageOut(tCode + "市价平空");
            BPID = T_Deal(tCode, 0, 1, T_SellRemainPosition(tCode), T_GetRiseLimit(tCode));
         }
      }
   }
}

VOID DoSP()
{

   IF(tModel.F_Sig() == SP)
   {
      IF(T_IsSHCode(tCode) == 1) // 
      {
         IF(T_SHBuyRemainPosition(tCode, 0) > 0)
         {
            MessageOut(tCode + "市价平多");
            BPID = T_Deal(tCode, 1, 2, T_SHBuyRemainPosition(tCode, 0), T_GetFallLimit(tCode));
         }
      }
      ELSE
      {
         IF(T_BuyRemainPosition(tCode) > 0)
         {
            MessageOut(tCode + "市价平多");
            SPID = T_Deal(tCode, 1, 1, T_BuyRemainPosition(tCode), T_GetFallLimit(tCode));
         }
      }
   }
}

VOID DoCloseOut()
{
   IF(tModel.F_Sig() == CLOSEOUT)
   {
      IF(T_IsSHCode(tCode) == 1) // 
      {
         IF(T_SHSellRemainPosition(tCode, 0) > 0)
         {
            MessageOut(tCode + "市价平空");
            CLOSEOUTID = T_Deal(tCode, 0, 2, T_SHSellRemainPosition(tCode, 0), T_GetRiseLimit(tCode));
         }
         IF(T_SHBuyRemainPosition(tCode, 0) > 0)
         {
            MessageOut(tCode + "市价平多");
            CLOSEOUTID = T_Deal(tCode, 1, 2, T_SHBuyRemainPosition(tCode, 0), T_GetFallLimit(tCode));
         }
      }
      ELSE
      {
         IF(T_SellRemainPosition(tCode) > 0)
         {
            MessageOut(tCode + "市价平空");
            CLOSEOUTID = T_Deal(tCode, 0, 1, T_SellRemainPosition(tCode), T_GetRiseLimit(tCode));
         }
         IF(T_BuyRemainPosition(tCode) > 0)
         {
            MessageOut(tCode + "市价平多");
            CLOSEOUTID = T_Deal(tCode, 1, 1, T_BuyRemainPosition(tCode), T_GetFallLimit(tCode));
         }    
      }
   }
}

   模组有平仓信号后,是否可以取得交易账户持仓中是否有该合约来对应平仓!    


1.实现有平仓信号一定要可以平仓,
2。要对应合约去平仓!
 
技术人员回复
日期:2018-5-31 11:26
 您提供的都是接受模组信号,开平

您具体说下您组件开仓后,针对组件开仓如何平仓

另外由于算法模型,编写困难,较复杂的思路需要专门开发工程师编写,需要时间较长,预计一个月时间
投资者咨询:盘中平仓问题! (文华财经WH6赢顺V6.7)
来源:文华财经  日期:2018-5-31 10:49
3楼已经提供完整盘口代码!

而现在是我加载了2个盘口:一个是取得ABCD模组的盘口,另外一个是EFGH模组的盘口,这样出现平仓同时发出出现废单,我想去老师解决这个同时委托出现废单的问题!

应该是去对应相应的模组去平仓!

要实现有平仓一定要发出,而且只能是该ABCD模组盘口对应ABCD模组合约去平!
 
技术人员回复
日期:2018-5-31 11:34
1.我们这里拿您的模型测试,模型FOR语句部分,我们建立模组时是调用不了的,麻烦说下您的测试方式

或者说您隐藏了部分代码,请您重新看下是否代码有缺省部分

2.您说的废单情况我们需要看下,算法运行的日志截图,针对处理下,麻烦您提供下,谢谢合作



图片点击可在新窗口打开查看
投资者咨询:盘中平仓问题! (文华财经WH6赢顺V6.7)
来源:文华财经  日期:2018-5-31 10:49
 其实这个就是因为平仓语句照成的,俩个盘口的平仓语句都取得了平仓,照成了的废单,这需要如何解决呢?

只要老师把平仓语句修改成取得对应的合约的平仓语句即可!


这个成功了
23:36:31(本机时间  ): 委托发出(sn1809,162760,1,买,平今)
23:36:31(本机时间  ): 委托成功(sn1809,委托号:2LS111614)
23:36:31(本机时间  ): 成交(sn1809,154090,买,平今,1,委托编号:2LS111614)



这个继续委托,照成失败废单!!!
23:36:31(本机时间  ): 委托发出(sn1809,162760,1,买,平今)
23:36:31(本机时间  ): 委托失败(sn1809,原因:可平仓数量不足)




老师不需要纠结完整代码,因为这个本身就是简单的取得BK和SK信号去开仓,然后是BP和SP信号去平仓!并不复杂!随便一个盘口加载俩个:使用上面的BK和BK和BP和SP都会出现同时委托照成废单的!

现在问题在于无论哪个盘口有BP和SP俩个盘口都取会得了。
俩个盘口加载的模组合约是不一样的,所以BK和SK完全没有问题,
而BP和SP却俩个都同时取得了,一个已经平完,一个继续委托,这样照成的废单!

所以,如何解决量盘口同时取得平仓信号!!!为什么加载的盘口中模组合约不一样,可平仓的却是同时取得信号?所以这里关键是如何让量盘口的平仓分别对应自己的信号!



VOID DoBP()
{

   IF(tModel.F_Sig() == BP) //
   {
      IF(T_IsSHCode(tCode) == 1) // 
      {
         IF(T_SHSellRemainPosition(tCode, 0) > 0)
         {
            MessageOut(tCode + "市价平空");
            BPID = T_Deal(tCode, 0, 2, T_SHSellRemainPosition(tCode, 0), T_GetRiseLimit(tCode));
         }
      }
      ELSE
      {
         IF(T_SellRemainPosition(tCode) > 0)
         {
            MessageOut(tCode + "市价平空");
            BPID = T_Deal(tCode, 0, 1, T_SellRemainPosition(tCode), T_GetRiseLimit(tCode));
         }
      }
   }
}

VOID DoSP()
{

   IF(tModel.F_Sig() == SP)
   {
      IF(T_IsSHCode(tCode) == 1) // 
      {
         IF(T_SHBuyRemainPosition(tCode, 0) > 0)
         {
            MessageOut(tCode + "市价平多");
            BPID = T_Deal(tCode, 1, 2, T_SHBuyRemainPosition(tCode, 0), T_GetFallLimit(tCode));
         }
      }
      ELSE
      {
         IF(T_BuyRemainPosition(tCode) > 0)
         {
            MessageOut(tCode + "市价平多");
            SPID = T_Deal(tCode, 1, 1, T_BuyRemainPosition(tCode), T_GetFallLimit(tCode));
         }
      }
   }
}
                     
技术人员回复
日期:2018-6-1 9:01
应该与您的编写逻辑有关,我们这里先分析下

预计17点之前给您回复
投资者咨询:盘中平仓问题! (文华财经WH6赢顺V6.7)
来源:文华财经  日期:2018-5-31 10:49
 好的,谢谢
技术人员回复
日期:2018-6-1 13:42
 按照您意思,取模型持仓了

VOID DoBP()
{

   IF(tModel.F_Sig() == BP) //
   {
      IF(T_IsSHCode(tCode) == 1) // 
      {
         IF(F_SellRemainPosition(tCode, 0) > 0)
         {
            MessageOut(tCode + "市价平空");
            BPID = T_Deal(tCode, 0, 2, F_SellRemainPosition(tCode, 0), T_GetRiseLimit(tCode));
         }
      }
      ELSE
      {
         IF(F_SellRemainPosition(tCode) > 0)
         {
            MessageOut(tCode + "市价平空");
            BPID = T_Deal(tCode, 0, 1, F_SellRemainPosition(tCode), T_GetRiseLimit(tCode));
         }
      }
   }
}

VOID DoSP()
{

   IF(tModel.F_Sig() == SP)
   {
      IF(T_IsSHCode(tCode) == 1) // 
      {
         IF(F_BuyRemainPosition(tCode, 0) > 0)
         {
            MessageOut(tCode + "市价平多");
            BPID = T_Deal(tCode, 1, 2, F_BuyRemainPosition(tCode, 0), T_GetFallLimit(tCode));
         }
      }
      ELSE
      {
         IF(F_BuyRemainPosition(tCode) > 0)
         {
            MessageOut(tCode + "市价平多");
            SPID = T_Deal(tCode, 1, 1, F_BuyRemainPosition(tCode), T_GetFallLimit(tCode));
         }
      }
   }
}