//————————————————————————
// 简称: zhuijia
// 名称: 追价算法交易模型确保成交
// 类别: 公式应用
// 类型: 用户应用
// 输出: v
//————————————————————————
//模型满足开仓条件发出委托信号后,因行情变动快,加之下单手数多等原因,可能无法快速成交。通过加载追价算法交易模型,可及时将没有成交的部分进行自动撤单,然后自动按照编写的价格方式重新发出委托,如果出现价差过大或长时间无法成交等情况则放弃本次交易。源码如下:
//追价示例
//Data
// data0:”m1709″;
Params
Numeric N(3);//下单手数
Numeric T_jiange(1); //时间间隔
bool KC(True); //开仓条件
Vars
NumericSeries NOW; //当前时间
Numeric dd;
//Global
Numeric BKFLG(0); //买开标志
Numeric BKDEL(0); //买开撤单标志
Numeric BKM(0); //买开委托手数
Numeric BKT(0); //买开委托发出时间
Numeric BKID(0); //买开委托
Begin
// 预处理模块
————————————————————————————————————————————————–
If(!CallAuctionFilter()) Return;// 集合竞价和小节休息过滤
If(Data0.o==InvalidNumeric )
{ Commentary(“判断数据是否存在”);
Return;//判断当前数据是都存在//判断数据是否有效&&Data0.vol[1]<1&&Data1.vol[1]<1
}
If(c==Q_UpperLimit() or c==Q_LowerLimit() ) //判断是否涨跌停//停板情况下不允许建仓;这句可以不用,不然和回测不符合,但是系统设置”防止自成交”打勾+监控器开启。
{ //提醒注意涨跌停
If(c==Q_UpperLimit()) Alert(data0.SymbolName+”涨停”);
If(data0.c==Q_LowerLimit()) Alert(data0.SymbolName+”跌停”);
Commentary(“涨停返回”);
Return;
}
If(AccountDataExist==true)
{
BKFLG=GetGlobalVar(0);
BKDEL=GetGlobalVar(1);
BKM=GetGlobalVar(2);
BKT=GetGlobalVar(3);
BKID=GetGlobalVar(4);
NOW = CurrentTime()*1000000; //当前时间
//———————-成交判断——————–//
if(BKFLG == 1) //如果有买开委托
{ PlotNumeric(“(NOW-BKT) “,(NOW-BKT) );
if(A_OrderStatus(BKID) == Enum_Filled) //如果买开委托成交
{
Commentary(“【做多:买开委托成交!】”);
BKFLG = 0; //买开标志归0
BKDEL = 0; //买开撤单标志归0
SetGlobalVar(0,BKFLG);
SetGlobalVar(1,BKDEL);
}
else if(A_OrderStatus(BKID) == Enum_Declared || A_OrderStatus(BKID) == Enum_FillPart) //如果买开委托全部挂单或部分成交
{
if((NOW-BKT) > T_jiange && BKDEL == 0) //如果时间间隔T秒,且未撤单
{
Commentary(“【做多:买开委托撤单!】”);
A_DeleteOrder(A_OrderContractNo(BKID)); //撤掉买开委托挂单
BKDEL = 1; //已发出撤掉买开委托挂单
SetGlobalVar(1,BKDEL);
if(A_OrderFilledLot(BKID) > 0) //如果买开委托部分成交
{
BKM = BKM – A_OrderFilledLot(BKID); //买开委托手数自减成交手数
SetGlobalVar(2,BKM);
}
if(BKM > 0) //如果买开委托手数大于0
{
Commentary(“【做多:买开委托追价!】”);
A_SendOrder(Enum_Buy,Enum_Entry,BKM,data0.Q_AskPrice+0*MinMove*PriceScale); //以对价发出买开委托手数的买开委托
BKT = NOW; //买开委托发出时间设为当前时间
SetGlobalVar(3,BKT);
}
}
BKDEL = 0; //买开撤单标志归0
}
SetGlobalVar(1,BKDEL);
}
//———————-委托处理——————–//
BKFLG=GetGlobalVar(0);
if(BKFLG == 0) //如果没有买开委托
{ PlotNumeric(“BKFLG”,BKFLG);
if(KC == True) //如果满足开仓条件
{
Commentary(“【做多:买开委托发出!】”);
BKM = N; //买开委托手数设为N手
A_SendOrder(Enum_Buy,Enum_Entry,BKM,data0.Q_BidPrice-50*MinMove*PriceScale); //以排队价发出买开委托手数的买开委托
BKT = NOW; //买开委托发出时间设为当前时间
BKFLG = 1; //已发出买开委托
BKID= 0;//A_GetLastOrderIndex(Enum_Buy,Enum_Entry);
SetGlobalVar(0,BKFLG);
SetGlobalVar(2,BKM);
SetGlobalVar(3,BKT);
SetGlobalVar(4,BKID);
}
}
PlotNumeric(“A_GetLastOrderIndex(Enum_Buy,Enum_Entry)”,A_GetLastOrderIndex(Enum_Buy,Enum_Entry));
PlotNumeric(“A_GetLastOpenOrderIndex(Enum_Buy,Enum_Entry)”,A_GetLastOpenOrderIndex(Enum_Buy,Enum_Entry));
PlotNumeric(“A_OrderFilledLot(BKID)”,A_OrderFilledLot(BKID));
PlotNumeric(“A_OrderStatus”,A_OrderStatus(BKID));
//dd=A_GetLastOrderIndex(Enum_Buy,Enum_Deleted);A_GetLastOpenOrderIndex
//PlotNumeric(“A_OrderStatus1”,A_OrderStatus(dd));
PlotNumeric(“jiange”,(NOW-BKT) );
PlotNumeric(“BKT”,BKT);
PlotNumeric(“BKFLG”,BKFLG);
PlotNumeric(“BKDEL”,BKDEL);
PlotNumeric(“BKID”,BKID);
PlotNumeric(“BKM”,BKM);
PlotBool(“A_OrderStatus(BKID) == Enum_Declared”,A_OrderStatus(BKID) == Enum_Declared);
PlotBool(“A_OrderStatus(BKID) == Enum_Declare”,A_OrderStatus(BKID) == Enum_Declare);
PlotNumeric(“Enum_Deleted”,Enum_Deleted);//6
PlotNumeric(” Enum_Canceled”, Enum_Canceled());//3
PlotNumeric(“Enum_Canceling”,Enum_Canceling);//2
PlotNumeric(“Enum_Filled”,Enum_Filled);//10
PlotNumeric(” Enum_FillPart”, Enum_FillPart);//11
PlotNumeric(” Enum_Entry”, Enum_Entry);//7
PlotNumeric(” Enum_Buy”, Enum_Buy);//0
PlotNumeric(” Enum_Sell”, Enum_Sell);//1
PlotNumeric(” Enum_Exit”, Enum_Exit);//8
PlotNumeric(” Enum_ExitToday”, Enum_ExitToday);//9
PlotNumeric(” Enum_Declare”, Enum_Declare);//4
PlotNumeric(” Enum_Declared”, Enum_Declared);//5
}
End
//算法交易模型执行效果,在第一次委托没有成交时,算法交易模型对委托进行了撤单,撤单后重新追价,确保了委托的成交。
发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/68632
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!