公式指标平台 股票指标公式源码分享 登录 注册
公式指标平台
未来函数检测
首 页 金钻指标 通达信公式 大智慧公式 同花顺公式 文华财经公式 操盘手公式 东财通公式 飞狐公式 其他公式 公式解答 股票软件 股票池
当前位置:→ 公式指标平台 > 文华财经公式 > 正文 → 正文

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

发布时间:2015/11/3 9:14:54  浏览次数:

下面这个下单组件,目的是实现“挂价发出委托,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); //补空仓
  } 
  }
 }

 

资源下载链接   资源大小:unknow
精品资源推荐

手机移动版 - 关于我们 - 联系我们 - 广告合作 - 下载声明 - 网站帮助 - 友情链接 - 网站地图 - TOP
湘ICP备09016573号 增值电信业务经营ICP许可证:湘B2-20210269 湘公网安备43108102000039号
Copyright © GSZB.COM ,All Rights Reserved.
股票公式,股票指标,股票软件,股票知识