盈利大于500回到0平仓 (文华财经WH8赢智V8.2)

投资者咨询:盈利大于500回到0平仓 (文华财经WH8赢智V8.2)
来源:文华财经  日期:2018-6-7 14:57
 以下是实现ABC模组,亏损1000止损,盈利大于500回到盈利0平仓!
现在测试是:亏损1000可以实现,但是盈利500回到0并未平仓,请老师找出问题?




VAR Modname[3]; // 模组名称 
//合约名数组
VAR Model[3];
//循环变量
VAR Count;
GLOBAL_VAR YINBIDSTATE[3], YINASKSTATE[3]; // 计算止盈变量
GLOBAL_VAR LASTBIDVOL[3], LASTASKVOL[3]; // 记录上一次持仓量
GLOBAL_VAR YINBIDTHSTATE[3], YINASKTHSTATE[3]; // 到达浮盈1000后止损
//临时的合约名变量
VAR TempModeName;
VAR BuyVol,SellVol,BuyTodayVol,SellTodayVol;
VAR BuyOrderID,SellOrderID;
VAR CodeCount; //
VOID MAIN()
{
   CodeCount = 3;
Modname[0] = "A";
Modname[1] = "B";
Modname[2] = "C";

   
  
   Model[0] = Modname[0].F_DealCode();
   Model[1] = Modname[1].F_DealCode();
   Model[2] = Modname[2].F_DealCode();


   FOR(Count = 0;Count < CodeCount; Count = Count + 1)
   {
 TempModeName = Model[Count];
 IF(LASTBIDVOL[Count] != T_BuyPosition(TempModeName))
 {
LASTBIDVOL[Count] = T_BuyPosition(TempModeName);
YINBIDSTATE[Count] = 0;
YINBIDTHSTATE[Count] = 0;
 }
 IF(LASTASKVOL[Count] != T_SellPosition(TempModeName))
 {
LASTASKVOL[Count] = T_SellPosition(TempModeName);
YINASKSTATE[Count] = 0;
YINASKTHSTATE[Count] = 0;
 }
 CodePing(TempModeName, Count);
 //MessageOut("Count + " + Count + "TempModeName + " + TempModeName);
   }
}
VOID CodePing(VAR CodeName, VAR Count)
{
   //判断是否为上海合约,上海合约先判断今仓,再做老仓处理
   IF(T_IsSHCode(CodeName))
   {
    BuyVol = T_SHBuyPosition(CodeName,0);
    SellVol = T_SHSellPosition(CodeName,0);
IF(T_BuyProfitLoss(CodeName) <= -1000)
{
  IF(BuyVol > 0)
  {
BuyOrderID = T_Deal1(CodeName,1,2,BuyVol,LIMIT_ORDER);
}
BuyVol = T_SHBuyPosition(CodeName,1);
  IF(BuyVol > 0)
  {
BuyOrderID = T_Deal1(CodeName,1,1,BuyVol,LIMIT_ORDER);
  }
    }
IF(T_SellProfitLoss(CodeName) <= -1000)
{
  IF(SellVol > 0)
  {
   SellOrderID = T_Deal1(CodeName,0,2,SellVol,LIMIT_ORDER);
 }
 SellVol = T_SHSellPosition(CodeName,1);
  IF(SellVol > 0)
  {
SellOrderID = T_Deal1(CodeName,0,1,SellVol,LIMIT_ORDER);
 }
    }
   }
   ELSE
   {
    BuyVol = T_BuyPosition(CodeName);
    SellVol = T_SellPosition(CodeName);
    IF(BuyVol != 0)
    {
 IF(T_BuyProfitLoss(CodeName) <= -1000)
 {
 BuyOrderID = T_Deal1(CodeName,1,1,BuyVol,LIMIT_ORDER);
 }
    }
    IF(SellVol != 0)
    {
 IF(T_SellProfitLoss(CodeName) <= -1000)
 {
 SellOrderID = T_Deal1(CodeName,0,1,SellVol,LIMIT_ORDER);
 }
    }
   }
}   
VAR tempState;
VOID CodePing2(VAR CodeName, VAR Count)
{
   // 
   IF(T_BuyProfitLoss(CodeName) > 500 && YINBIDSTATE[Count] == 0)
   {
      YINBIDTHSTATE[Count] = 1;
   }
   IF(T_SellProfitLoss(CodeName) > 500 && YINASKSTATE[Count] == 0)
   {
      YINASKTHSTATE[Count] = 1;
   }
   // 多头止盈全平
   IF(YINBIDSTATE[Count] > 0 || YINBIDTHSTATE[Count] == 1)
   {
      IF(T_BuyProfitLoss(CodeName) <= 0)
      {
         YINBIDTHSTATE[Count] = 0;
         IF(T_IsSHCode(CodeName))
         {
       BuyVol = T_SHBuyPosition(CodeName,0);
IF(BuyVol > 0)
{
  BuyOrderID = T_Deal1(CodeName,1,2,BuyVol,LIMIT_ORDER);
}
BuyVol = T_SHBuyPosition(CodeName,1);
IF(BuyVol > 0)
{
  BuyOrderID = T_Deal1(CodeName,1,1,BuyVol,LIMIT_ORDER);
}
}
ELSE
{
   BuyVol = T_BuyPosition(CodeName);
IF(BuyVol > 0)
{
  BuyOrderID = T_Deal1(CodeName,1,1,BuyVol,LIMIT_ORDER);
}
    }
 }
   }
   // 空头止盈全平
   IF(YINASKSTATE[Count] > 0 || YINASKTHSTATE[Count] == 1)
   {
      IF(T_SellProfitLoss(CodeName) <= 0)
 {
         YINASKTHSTATE[Count] = 0;
    IF(T_IsSHCode(CodeName))
{
       SellVol = T_SHSellPosition(CodeName,0);
IF(SellVol > 0)
{
  SellOrderID = T_Deal1(CodeName,0,2,SellVol,LIMIT_ORDER);
}
SellVol = T_SHSellPosition(CodeName,1);
IF(SellVol > 0)
{
  SellOrderID = T_Deal1(CodeName,0,1,SellVol,LIMIT_ORDER);
}
}
ELSE
{
SellVol = T_SellPosition(CodeName);
IF(SellVol > 0)
{
  SellOrderID = T_Deal1(CodeName,0,1,SellVol,LIMIT_ORDER);
}
}
      }
   }
}
 
投资者咨询:盈利大于500回到0平仓 (文华财经WH8赢智V8.2)
来源:文华财经  日期:2018-6-7 14:57
   VAR Modname[3];
// 模组名称 
//合约名数组
VAR Model[3];
//循环变量
VAR Count;
GLOBAL_VAR YINBIDSTATE[3], YINASKSTATE[3];
// 计算止盈变量
GLOBAL_VAR LASTBIDVOL[3], LASTASKVOL[3];
// 记录上一次持仓量
GLOBAL_VAR YINBIDTHSTATE[3], YINASKTHSTATE[3];
// 到达浮盈1000后止损
//临时的合约名变量
VAR TempModeName;
VAR BuyVol,SellVol,BuyTodayVol,SellTodayVol;
VAR BuyOrderID,SellOrderID;
VAR CodeCount;
//
VOID MAIN()
{
   CodeCount = 3;

Modname[0] = "A";

Modname[1] = "B";

Modname[2] = "C";

   

  
   Model[0] = Modname[0].F_DealCode();
   Model[1] = Modname[1].F_DealCode();
   Model[2] = Modname[2].F_DealCode();


   FOR(Count = 0;Count < CodeCount; Count = Count + 1)
   {

 TempModeName = Model[Count];

 IF(LASTBIDVOL[Count] != T_BuyPosition(TempModeName))

 {

LASTBIDVOL[Count] = T_BuyPosition(TempModeName);

YINBIDSTATE[Count] = 0;

YINBIDTHSTATE[Count] = 0;

 }

 IF(LASTASKVOL[Count] != T_SellPosition(TempModeName))

 {

LASTASKVOL[Count] = T_SellPosition(TempModeName);

YINASKSTATE[Count] = 0;

YINASKTHSTATE[Count] = 0;

 }

 CodePing(TempModeName, Count);

 //MessageOut("Count + " + Count + "TempModeName + " + TempModeName);
   }
}
VOID CodePing(VAR CodeName, VAR Count)
{
   //判断是否为上海合约,上海合约先判断今仓,再做老仓处理
   IF(T_IsSHCode(CodeName))
   {
    BuyVol = T_SHBuyPosition(CodeName,0);
    SellVol = T_SHSellPosition(CodeName,0);
IF(T_BuyProfitLoss(CodeName) <= -1000‖T_BuyProfitLoss(CodeName)>=  500&&T_SellProfitLoss(CodeName) >= 0)
{
  IF(BuyVol > 0)
  {
BuyOrderID = T_Deal1(CodeName,1,2,BuyVol,LIMIT_ORDER);
}
BuyVol = T_SHBuyPosition(CodeName,1);
  IF(BuyVol > 0)
  {
BuyOrderID = T_Deal1(CodeName,1,1,BuyVol,LIMIT_ORDER);
  }
    }
IF(T_SellProfitLoss(CodeName) <= -1000‖T_SellProfitLoss(CodeName) >=  500&&T_SellProfitLoss(CodeName) >= 0)
{
  IF(SellVol > 0)
  {
   SellOrderID = T_Deal1(CodeName,0,2,SellVol,LIMIT_ORDER);
 }
 SellVol = T_SHSellPosition(CodeName,1);
  IF(SellVol > 0)
  {
SellOrderID = T_Deal1(CodeName,0,1,SellVol,LIMIT_ORDER);
 }
    }
   }
   ELSE
   {
    BuyVol = T_BuyPosition(CodeName);
    SellVol = T_SellPosition(CodeName);
    IF(BuyVol != 0)
    {
 IF(T_BuyProfitLoss(CodeName) <= -1000‖T_BuyProfitLoss(CodeName)>=  500&&T_SellProfitLoss(CodeName) >= 0)
 {
 BuyOrderID = T_Deal1(CodeName,1,1,BuyVol,LIMIT_ORDER);
 }
    }
    IF(SellVol != 0)
    {
 IF(T_SellProfitLoss(CodeName) <= -1000‖T_SellProfitLoss(CodeName) >=  500&&T_SellProfitLoss(CodeName) >= 0)
 {
 SellOrderID = T_Deal1(CodeName,0,1,SellVol,LIMIT_ORDER);
 }
    }
   }
}
   
技术人员回复
日期:2018-6-7 15:45
 分析了下,您一楼写法思路是正确的,2楼没有保存曾经盈利大于500的条件而是直接判断,因此不行的

1楼问题在于,盈利回撤的判断语句,您没有写在FOR语句中,同时平仓后判断变量也应该归0

不考虑上期所合约情况下,参考附件


 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看文件名:oo.zip



投资者咨询:盈利大于500回到0平仓 (文华财经WH8赢智V8.2)
来源:文华财经  日期:2018-6-7 14:57
 请老师写个个包括上期所的啊,谢谢
技术人员回复
日期:2018-6-7 21:20
重新看了下编写,3楼模型就行的,已经区分上期所和合约了