麻烦看看下面的组件为什么没有正确执行? [赢顺期货]
- 咨询内容:
组件的目的:挂价开、平仓,30秒不能成交撤单对价追单。
VAR Price,KPN,M;
VAR BKID,SKID,BPID,SPID;//定义BKID,SKID,BPID,SPID
VAR LastWithDrawFinsh;VOID MAIN() //
{KPN=1;//定义开平仓手数为1手
M=0;//
Price=Price(F_DealCode());//IF (F_Sig()==BK) //如果信号是买开信号
BKID=T_Deal(F_DealCode(),0,0,KPN,Offers( F_DealCode(),"bid1")+0*MinPrice(F_DealCode()));//
IF (F_Sig()==SK) //如果信号是卖开信号
SKID=T_Deal(F_DealCode(),1,0,KPN,Offers( F_DealCode(),"ask1")-0*MinPrice(F_DealCode()));//
IF (F_Sig()==BP) //如果信号是买平信号
{
IF (F_SellPosition()>0 && F_SellPosition()<KPN)//如果当前模型空头持仓大于0小于KPN
BPID=T_Deal(F_DealCode(),0,1,F_SellPosition(),Offers( F_DealCode(),"bid1")+0*MinPrice(F_DealCode()));//
//
ELSE IF (F_SellPosition()>=KPN)//
BPID=T_Deal(F_DealCode(),0,1,KPN,Offers( F_DealCode(),"bid1")+0*MinPrice(F_DealCode()));//发出KPN手平空指令
ELSE IF (F_SellPosition()==0)//
MessageOut ("当前没有空头持仓");
}
IF (F_Sig()==SP) //如果信号是卖平信号
{
IF (F_BuyPosition()>0 && F_BuyPosition()<KPN)//如果当前模型多头持仓小于KPN大于0
SPID=T_Deal(F_DealCode(),1,1,F_BuyPosition(),Offers( F_DealCode(),"ask1")-0*MinPrice(F_DealCode()));//
//
ELSE IF (F_BuyPosition()>=KPN)//如果当前模型多头持仓大于等于KPN手
SPID=T_Deal(F_DealCode(),1,1,KPN,Offers( F_DealCode(),"ask1")-0*MinPrice(F_DealCode()));//
ELSE IF (F_BuyPosition()==0)//如果当前持仓为0
MessageOut ("当前没有多头持仓");
}
IF (F_Sig()==BPK) //如果信号是买平开信号
{
IF (F_SellPosition()>0 && F_SellPosition()<KPN)//如果当前模型空头持仓大于0小于KPN
{
T_Deal(F_DealCode(),0,1,F_SellPosition(),Offers( F_DealCode(),"bid1")+0*MinPrice(F_DealCode()));//以当前模型空头持仓手数发出买平委托
T_Deal(F_DealCode(),0,0,KPN,Offers( F_DealCode(),"bid1")+0*MinPrice(F_DealCode()));//以KPN手发出买开委托
}
ELSE IF (F_SellPosition()>=KPN)//如果当前空头持仓大于等于KPN手
{
T_Deal(F_DealCode(),0,1,KPN,Offers( F_DealCode(),"bid1")+0*MinPrice(F_DealCode()));//以KPN手发出买平委托
T_Deal(F_DealCode(),0,0,KPN,Offers( F_DealCode(),"bid1")+0*MinPrice(F_DealCode()));//以KPN手发出买开委托
}
ELSE IF (F_SellPosition()==0)//空头持仓为0
{
MessageOut ("当前没有空头持仓");
T_Deal(F_DealCode(),0,0,KPN,Offers( F_DealCode(),"bid1")+0*MinPrice(F_DealCode()));//以KPN手发出买开委托
}
}
IF (F_Sig()==SPK) //如果信号是卖平开信号
{
IF (F_BuyPosition()>0 && F_BuyPosition()<KPN)//如果当前模型多头持仓大于0小于KPN
{
T_Deal(F_DealCode(),1,1,F_BuyPosition(),Offers( F_DealCode(),"ask1")-0*MinPrice(F_DealCode()));//以当前模型多头持仓手数发出卖平委托
T_Deal(F_DealCode(),1,0,KPN,Offers( F_DealCode(),"ask1")-0*MinPrice(F_DealCode()));
}
ELSE IF (F_BuyPosition()>=KPN)
{
T_Deal(F_DealCode(),1,1,KPN,Offers( F_DealCode(),"ask1")-0*MinPrice(F_DealCode()));
T_Deal(F_DealCode(),1,0,KPN,Offers( F_DealCode(),"ask1")-0*MinPrice(F_DealCode()));
}
ELSE IF (F_BuyPosition()==0)//多头持仓为0
{
MessageOut ("当前没有多头持仓");
T_Deal(F_DealCode(),1,0,KPN,Offers( F_DealCode(),"ask1")-0*MinPrice(F_DealCode()));
}
}
//下面是30秒没有成交,撤单。
//IF(CurrentTime()-LastOrderTime()<2 && LastOrderTime()!=0)
// RETURN; //控制组件的执行频率 两秒执行一次
//icount=F_SigCount();
LastWithDrawFinsh=ReadGlobal("LASTWITHDRAW");
IF(T_IsNoOrder()!=1 ) //有挂单的情况
{
//查询挂单然后进行撤单
//need added code
IF(CurrentTime()-LastOrderTime()>30 && LastWithDrawFinsh==1) //如果30秒有委托未成交,全撤,下次进入会重新下委托
{
T_DeleteOrderAll();//撤掉所有未成交委托。
LastWithDrawFinsh=0;
}
WriteGlobal("LASTWITHDRAW", LastWithDrawFinsh);
RETURN;
}
LastWithDrawFinsh=1;
F_FreshSig(); //刷新现有的信号
IF (F_Sig()==BK) //如果信号是买开信号(以对价+M倍最少波动),保证成交
BKID=T_Deal(F_DealCode(),0,0,KPN,Offers( F_DealCode(),"ask1")+M*MinPrice(F_DealCode()));//以最新价+0个最小表动价位发出KPN手的买开委托
IF (F_Sig()==SK) //如果信号是卖开信号(以对价-M倍最少波动),保证成交
SKID=T_Deal(F_DealCode(),1,0,KPN,Offers( F_DealCode(),"bid1")-M*MinPrice(F_DealCode()));//以最新价-0个最小表动价位发出KPN手的卖开委托
IF (F_Sig()==BP) //如果信号是买平信号
{
IF (F_SellPosition()>0 && F_SellPosition()<KPN)
BPID=T_Deal(F_DealCode(),0,1,F_SellPosition(),Offers( F_DealCode(),"ask1")+M*MinPrice(F_DealCode()));
ELSE IF (F_SellPosition()>=KPN)//如果当前空头持仓大于KPN手
BPID=T_Deal(F_DealCode(),0,1,KPN,Offers( F_DealCode(),"ask1")+M*MinPrice(F_DealCode()));
ELSE IF (F_SellPosition()==0)//空头持仓为0
MessageOut ("当前没有空头持仓");
}
IF (F_Sig()==SP)
{
IF (F_BuyPosition()>0 && F_BuyPosition()<KPN)
SPID=T_Deal(F_DealCode(),1,1,F_BuyPosition(),Offers( F_DealCode(),"bid1")-M*MinPrice(F_DealCode()));
ELSE IF (F_BuyPosition()>=KPN)
SPID=T_Deal(F_DealCode(),1,1,KPN,Offers( F_DealCode(),"bid1")-M*MinPrice(F_DealCode()));
ELSE IF (F_BuyPosition()==0)//如果当前持仓为0
MessageOut ("当前没有多头持仓");
}
IF (F_Sig()==BPK) //如果信号是买平开信号
{
IF (F_SellPosition()>0 && F_SellPosition()<KPN)
{
T_Deal(F_DealCode(),0,1,F_SellPosition(),Offers( F_DealCode(),"ask1")+M*MinPrice(F_DealCode()));
T_Deal(F_DealCode(),0,0,KPN,Offers( F_DealCode(),"ask1")+M*MinPrice(F_DealCode()));//
}
ELSE IF (F_SellPosition()>=KPN)//如果当前空头持仓大于等于KPN手
{
T_Deal(F_DealCode(),0,1,KPN,Offers( F_DealCode(),"ask1")+M*MinPrice(F_DealCode()));//
T_Deal(F_DealCode(),0,0,KPN,Offers( F_DealCode(),"ask1")+M*MinPrice(F_DealCode()));//
}
ELSE IF (F_SellPosition()==0)//空头持仓为0
{
MessageOut ("当前没有空头持仓");
T_Deal(F_DealCode(),0,0,KPN,Offers( F_DealCode(),"ask1")+M*MinPrice(F_DealCode()));//以KPN手发出买开委托
}
}
IF (F_Sig()==SPK) //
{
IF (F_BuyPosition()>0 && F_BuyPosition()<KPN)//
{
T_Deal(F_DealCode(),1,1,F_BuyPosition(),Offers( F_DealCode(),"bid1")-M*MinPrice(F_DealCode()));//
T_Deal(F_DealCode(),1,0,KPN,Offers( F_DealCode(),"bid1")-M*MinPrice(F_DealCode()));//
}
ELSE IF (F_BuyPosition()>=KPN)//
{
T_Deal(F_DealCode(),1,1,KPN,Offers( F_DealCode(),"bid1")-M*MinPrice(F_DealCode()));//
T_Deal(F_DealCode(),1,0,KPN,Offers( F_DealCode(),"bid1")-M*MinPrice(F_DealCode()));//
}
ELSE IF (F_BuyPosition()==0)//
{
MessageOut ("当前没有多头持仓");
T_Deal(F_DealCode(),1,0,KPN,Offers( F_DealCode(),"bid1")-M*MinPrice(F_DealCode()));//
}
}
WriteGlobal("LASTWITHDRAW", LastWithDrawFinsh);
}
- 赢顺技术人员:
老师们吃饭去了?
- 赢顺客服:
组件不发委托的原因有很多,不光是编写的问题,向您咨询下,您加载的是什么合约,所有的信号都没有委托?还是第一根信号没有委托?是否进行了仓位初始化的设定?
- 网友回复:
用了这个下单组件,下午出现开仓信号后不断帮我开仓,一秒一次开仓信号,直到没有资金。。。。。。。。。我在下单参数里面选择了“等K线走完下单“,应该对此没有什么影响啊
原来同样的模型,用软件自身的下单设置,没有使用过滤也是用得好好的啊~
- 网友回复: 是组件问题还是模型问题呢?
如果以上指标公式不适用于您常用的行情软件
或者您想改编成选股公式,以便快速选出某种形态个股的话,
- 上一篇:赢顺出来了后,一键通什么时候不通?
- 下一篇:没有了!
相关文章
-
没有相关内容