下面这个下单组件,目的是实现“挂价发出委托,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); //补空仓
}
}
}
上一指标公式:7均线交易模型[文华财经]公式 公式源码指标源码
下一指标公式:文华黄经双线买卖[文华财经]公式 源码指标指标源码
☉ 好公式网发布的指标公式主要用于软件技术面分析,仅供参考,勿用于实际操作,据此操作风险自负!
☉ 解压密码:www.goodgongshi.com 就是好公式网域名,希望大家看清楚,切勿输错。
☉ tnc和tni格式指标公式,仅可以用通达信软件引入使用,例如可以用通达信软件引入使用指标公式;
☉ tne格式指标公式,仅可以用通达信软件公式编辑器5.0版导入,高版本兼容低版本;
☉ fnc格式指标公式,可以用大智慧软件新一代高速行情分析系统股票软件使用,少部分可以用分析家软件引入使用;
☉ alg格式指标公式,仅仅可以用飞狐交易师软件引入使用;exp格式指标公式,仅可以用大智慧经典版软件引入使用;
☉ hxf格式指标公式,仅可以用同花顺软件引入使用。
☉ 如果您发现下载软件链接错误,请联系管理员报告错误。
☉ 好公式网欢迎各位网友帮忙宣传转发本站网址,有您的支持,我们会做得更好!
☉ 本文下单组件挂价发出委托3秒不成交的话撤单以对价再发出委托[文华财经]公式 对价下单指标源码仅供学习研究。