下单组件挂价发出委托,3秒不成交的话撤单,以对价再发出委托 源码

阅读 作者:股海网时间 2013-09-04 文华财经公式

下面这个下单组件,目的是实现“挂价发出委托,3秒不成交的话撤单,以对价再发出委托”,半年前我曾经发过到论坛,经过一个多星期的讨论和更新,最后文华员工的答复是软件存在BUG,没法实现~

现在不知道能不能实现,上星期再次测试,结果是模型可以发出开、平仓信号,但是没有发出任何具体委托。

因为,我这个下单组件,估计80%用文华实盘的人都会用到,到时候正常使用的话可以写到文华下单组件的示范里面供更多人使用~

源码如下:

VAR Price,M,N;
VAR BKID,SKID,BPID,SPID,SPKID1,BPKID1,SPKID2,BPKID2;//定义BKID,SKID,BPID,SPID
VAR LastWithDrawFinsh;
VAR LastState;
VAR KNALL;//目标总开仓数
VOID MAIN() //
{
//KPN设为按照模型信号
 M=0;//发出信号时,0为挂价委托,1为对价委托,>=2为超价委托
 N=1;//再委托的委托价参数,0为挂价委托,1为对价委托,>=2为超价委托
 Price=Price(F_DealCode());//
 BKID=ReadGlobalStr("BKID");
 SKID=ReadGlobalStr("SKID");
 BPID=ReadGlobalStr("BPID");
 SPID=ReadGlobalStr("SPID");
 BPKID1=ReadGlobalStr("BPKID1");
 SPKID1=ReadGlobalStr("SPKID1");
 BPKID2=ReadGlobalStr("BPKID2");
 SPKID2=ReadGlobalStr("SPKID2");
 KNALL=ReadGlobal("KNALL");
 //下面是3秒没有成交,撤单。
 LastWithDrawFinsh=ReadGlobal("LASTWITHDRAW");
 IF(T_IsNoOrder()!=1 ) //有挂单的情况
 {
 //查询挂单然后进行撤单
  IF(CurrentTime()-LastOrderTime()==3 && LastWithDrawFinsh==1) //如果3秒有委托未成交,全撤,下次进入会重新下委托
  {
   IF(F_Sig()==BK) //如果取出的信号为BP
   {
    IF(T_IsNoOrder()==0)
    {
     MessageOut("BK撤单到了!");
     T_DeleteOrder(BKID);
     LastState=0;
    //
    }
   }
   IF(F_Sig()==SK) //如果取出的信号为SP
   {
    IF(T_IsNoOrder()==0)
    {
     MessageOut("SK撤单到了!");
     T_DeleteOrder(SKID);
     LastState=0;
    }
   }
   IF(F_Sig()==BP) //如果取出的信号为BP
   {
    IF(T_SellPosition(F_DealCode())>0&&T_IsNoOrder()==0)
    {
     MessageOut("BP撤单到了!");
     T_DeleteOrder(BPID);
     LastState=0;
    //
    }
   }
   IF(F_Sig()==SP) //如果取出的信号为SP
   {
    IF(T_BuyPosition(F_DealCode())>0&&T_IsNoOrder()==0)
    {
     MessageOut("SP撤单到了!");
     T_DeleteOrder(SPID);
     LastState=0;
    }
   }


   IF(F_Sig()==SPK) //如果取出的信号为SP
   {
    IF(T_IsNoOrder()==0)
    {
     MessageOut("SPK撤单到了!");
     T_DeleteOrder(SPKID1);
     T_DeleteOrder(SPKID2);
     LastState=0;
    }
   }
   IF(F_Sig()==BPK) //如果取出的信号为BP
   {
    IF(T_IsNoOrder()==0)
    {
     MessageOut("BPK撤单到了!");
     T_DeleteOrder(BPKID1);
     T_DeleteOrder(BPKID2);
     LastState=0;
    //
    }
   }

   LastWithDrawFinsh=0;
  }
 WriteGlobal("LASTWITHDRAW", LastWithDrawFinsh);
 RETURN;
 }
 LastWithDrawFinsh=1;
 IF(F_FreshSig()==1)//刷新现有的信号,有新信号
 {
  SEND();
 }
 ELSE IF(F_FreshSig()==0)//如果是处理过的信号
 {
  IF((T_OrderState(BKID)==2||T_OrderState(SKID)==2||T_OrderState(BPID)==2||T_OrderState(SPID)==2||T_OrderState(BPKID1)==2||T_OrderState(SPKID1)==2||T_OrderState(BPKID2)==2||T_OrderState(SPKID2)==2||T_OrderState(BKID)==3||T_OrderState(SKID)==3||T_OrderState(BPID)==3||T_OrderState(SPID)==3||T_OrderState(BPKID1)==3||T_OrderState(SPKID1)==3||T_OrderState(BPKID2)==3||T_OrderState(SPKID2)==3)&&LastState==0)//如果委托撤单
  {
   RESEND();
   LastState=1;
  }
 }
 WriteGlobalStr("BKID",BKID);
 WriteGlobalStr("SKID",SKID);
 WriteGlobalStr("BPID",BPID);
 WriteGlobalStr("SPID",SPID);
 WriteGlobalStr("BPKID1",BPKID1);
 WriteGlobalStr("SPKID1",SPKID1);
 WriteGlobalStr("BPKID2",BPKID2);
 WriteGlobalStr("SPKID2",SPKID2);
 WriteGlobal("LASTSTATE", LastState);
 WriteGlobal("LASTWITHDRAW", LastWithDrawFinsh);
 WriteGlobal("KNALL",KNALL);

}

VOID SEND()
{
IF(F_Sig()==BPK && F_SigValid()==1) //如果取出的信号为BPK 且信号不是消失状态
 {
  IF(F_SellPosition()!=0)
  {
   MessageOut("信号BPK生效,平掉所有卖仓");
   BPKID1=T_ReduceSellOpiTo(F_DealCode(), Offers(F_DealCode(),"bid1")+MinPrice(F_DealCode())*M,0); //平掉所有空头持仓
  }
  IF(F_BuyPosition()>=0)//
  {
   MessageOut("信号BPK生效,开仓");
                  KNALL=F_SigVol()+F_BuyPosition();
   BPKID2=T_AddBuyOpiTo(F_DealCode(), Offers(F_DealCode(),"bid1")+MinPrice(F_DealCode())*M,F_SigVol()+F_BuyPosition()); //补充持仓
                
  }
 }
IF(F_Sig()==SPK && F_SigValid()==1) //如果取出的信号为SPK 且信号不是消失状态
 {
  IF(F_BuyPosition()!=0)
  {
   SPKID1=T_ReduceBuyOpiTo(F_DealCode(), Offers(F_DealCode(),"ask1")-MinPrice(F_DealCode())*M,0); //平掉所有多头持仓
  }
  IF(F_SellPosition()>=0) //如果买仓为0,不存在止赢止损问题,直接开仓
  {
                  KNALL=F_SigVol()+F_SellPosition();
   SPKID2=T_AddSellOpiTo(F_DealCode(), Offers(F_DealCode(),"ask1")-MinPrice(F_DealCode())*M,F_SigVol()+F_SellPosition()); //补充空头持仓
  } 
 }
IF(F_Sig()==BP && F_SigValid()==1) //如果取出的信号为BP 且信号不是消失状态
 {
  IF(F_SellPosition()!=0)
  {
   MessageOut("信号BP生效,平掉所有卖仓");
   BPID=T_ReduceSellOpiTo(F_DealCode(), Offers(F_DealCode(),"bid1")+MinPrice(F_DealCode())*M,0); //平掉所有空头持仓
  }
 }

IF(F_Sig()==SP && F_SigValid()==1) //如果取出的信号为SP 且信号不是消失状态
 {
  IF(F_BuyPosition()!=0)
  {
   SPID=T_ReduceBuyOpiTo(F_DealCode(), Offers(F_DealCode(),"ask1")-MinPrice(F_DealCode())*M,0); //平掉所有多头持仓
  }
 }


IF(F_Sig()==BK && F_SigValid()==1) //如果取出的信号为BK 且信号不是消失状态
 {
 
  IF(F_BuyPosition()>=0 && F_SellPosition()==0)//判断是不是部分成交
  {
   MessageOut("信号BK生效,开仓");
                  KNALL=F_SigVol()+F_BuyPosition();
   BKID=T_AddBuyOpiTo(F_DealCode(), Offers(F_DealCode(),"bid1")+MinPrice(F_DealCode())*M,F_SigVol()+F_BuyPosition()); //
  }
 }

IF(F_Sig()==SK && F_SigValid()==1) //如果取出的信号为SK 且信号不是消失状态
 {
 
  IF(F_SellPosition()>=0 && F_BuyPosition()==0) //如果买仓为0,不存在止赢止损问题,直接开仓
  {
                  KNALL=F_SigVol()+F_SellPosition();
   SKID=T_AddSellOpiTo(F_DealCode(), Offers(F_DealCode(),"ask1")-MinPrice(F_DealCode())*M,F_SigVol()+F_SellPosition()); //
  } 
 }
}


VOID RESEND()
{
IF(F_Sig()==BPK && F_SigValid()==1) //如果取出的信号为BPK 且信号不是消失状态
 {
  IF(F_SellPosition()!=0)
  {
   MessageOut("信号BPK生效,平掉所有卖仓");
   BPKID1=T_ReduceSellOpiTo(F_DealCode(), Offers(F_DealCode(),"bid1")+MinPrice(F_DealCode())*N,0); //平掉所有空头持仓
  }
  IF(F_BuyPosition()<=KNALL)//判断是不是部分成交
  {
   MessageOut("信号BPK生效,开仓");
   BPKID2=T_AddBuyOpiTo(F_DealCode(), Offers(F_DealCode(),"bid1")+MinPrice(F_DealCode())*N,KNALL); //补充持仓
  }
 }
IF(F_Sig()==SPK && F_SigValid()==1) //如果取出的信号为SPK 且信号不是消失状态
 {
  IF(F_BuyPosition()!=0)
  {
   SPKID1=T_ReduceBuyOpiTo(F_DealCode(), Offers(F_DealCode(),"ask1")-MinPrice(F_DealCode())*N,0); //平掉所有多头持仓
  }
  IF(F_SellPosition()<=KNALL) //如果买仓为0,不存在止赢止损问题,直接开仓
  {
   SPKID2=T_AddSellOpiTo(F_DealCode(), Offers(F_DealCode(),"ask1")-MinPrice(F_DealCode())*N,KNALL); //补充空头持仓
  } 
 }
IF(F_Sig()==BP && F_SigValid()==1) //如果取出的信号为BP 且信号不是消失状态
 {
  IF(F_SellPosition()!=0)
  {
   MessageOut("信号BP生效,平掉所有卖仓");
   BPID=T_ReduceSellOpiTo(F_DealCode(), Offers(F_DealCode(),"bid1")+MinPrice(F_DealCode())*N,0); //平掉所有空头持仓
  }
 }

IF(F_Sig()==SP && F_SigValid()==1) //如果取出的信号为SP 且信号不是消失状态
 {
  IF(F_BuyPosition()!=0)
  {
   SPID=T_ReduceBuyOpiTo(F_DealCode(), Offers(F_DealCode(),"ask1")-MinPrice(F_DealCode())*N,0); //平掉所有多头持仓
  }
 }


IF(F_Sig()==BK && F_SigValid()==1) //如果取出的信号为BK 且信号不是消失状态
 {
 
  IF(F_BuyPosition()<=KNALL && F_SellPosition()==0)//判断是不是部分成交
  {
   MessageOut("信号BK生效,开仓");
   BKID=T_AddBuyOpiTo(F_DealCode(), Offers(F_DealCode(),"bid1")+MinPrice(F_DealCode())*N,KNALL); //补多仓
  }
 }

IF(F_Sig()==SK && F_SigValid()==1) //如果取出的信号为SK 且信号不是消失状态
 {
 
  IF(F_SellPosition()<=KNALL && F_BuyPosition()==0) //如果买仓为0,不存在止赢止损问题,直接开仓
  {
   SKID=T_AddSellOpiTo(F_DealCode(), Offers(F_DealCode(),"ask1")-MinPrice(F_DealCode())*N,KNALL); //补空仓
  } 
 }
}

收藏
全部看法共 0 条
上传会员: 
股海网
上传时间: 
2013-09-04
下载积分: 
-
免责申明: 
请仔细阅读并同意后才能下载
本附件为用户分享上传,股海网没有对文件进行验证,不能保证下载资源的准确性、安全性和完整性,也不保证下载资源能正常安装和使用,且下载后扣除的积分无法退还,除非您充分理解并完全接受本声明,否则您无权下载。
本站对提供下载的软件、指标、资料等不拥有任何权利,其版权归该下载资源的合法拥有者所有。本附件仅供学习和研究,不得用于商业或非法用途,如有侵犯您的版权,请参看 《侵权处理流程》《免责声明条款》
点击下载无反应时,更换手机自带浏览器重登录操作,如华为浏览器,苹果Safari浏览器,第三方浏览器有不兼容现象,或先收藏再到电脑端下载。
同意以上声明才能下载,扣除积分无法退还!
我已知晓! 点我同意 所有条款自愿下载!
如有问题请点关闭提交问题反馈→
关闭

问题反馈 取消