- 精华
- 0
- 在线时间
- 184 小时
- UID
- 51272
- 积分
- 463
- 帖子
- 67
- 阅读权限
- 50
- 注册时间
- 2011-7-3
- 最后登录
- 2016-7-25
- 精华
- 0
- UID
- 51272
- 积分
- 463
- 帖子
- 67
- 主题
- 14
- 阅读权限
- 50
- 注册时间
- 2011-7-3
- 最后登录
- 2016-7-25
|
以铜1206与铜1201为例
当不活跃合约1206盘口价差大于200且1206-1201价差小于等于-200时,同时以高于买价1跳挂买单,成交后立即在1201开空单,然后以低于卖价1跳挂1206平仓单,成交后平1201空单,即完成一个循环。
当1206-1201价差大于等于200时,反向操作。
另外可设置alwaytrade交易模式,即不考虑1206-1206价差,同时挂买单卖单,哪个先成交撤另外一个单子,后续交易过程同上。
代码如下:
//------------------------------------------------------------------------
//如有疑问,请联系:QQ279753247
//------------------------------------------------------------------------
Params
Numeric profit(200);
Numeric noprofit(100);
Numeric buypoint(-200);
Numeric sellpoint(200);
Numeric alwaystrade(1);
Numeric lots(1);
Vars
Bool Condtrade;
bool conddelete;
Bool condbuy;
bool condsell;
Numeric longposition0(0);
Numeric longposition1(0);
Numeric shortposition0(0);
Numeric shortposition1(0);
Numeric madetrade(0);
Begin
//--------------------------------------------
If(date!=date[1])
{
If(low==high) //集合竞价不开仓
return;
}
If (BarStatus == 0)
{
SetGlobalVar(0,0);
SetGlobalVar(1,0);
SetGlobalVar(2,0);
SetGlobalVar(3,0);
SetGlobalVar(4,0);
}
//---------------------------------------------------------------------
longposition0=GetGlobalVar(0);
longposition1=GetGlobalVar(2);
shortposition0=GetGlobalVar(1);
shortposition1=GetGlobalVar(3);
madetrade=GetGlobalVar(4);
//---------------------------------------------------------------------
Condtrade=Data0.Q_AskPrice-Data0.Q_BidPrice>=profit; //挂单条件
conddelete=Data0.Q_AskPrice-Data0.Q_BidPrice<=noprofit;
condsell=Data0.Q_AskPrice-data1.Q_BidPrice>=sellpoint;
condbuy=data0.Q_BidPrice-data1.Q_AskPrice<=buypoint;
//---------------------------------------------------------------------
If(Condtrade&&longposition0==0&&shortposition0==0&&longposition1==0&&shortposition1==0) //挂单
{
If(condbuy)
{
data0.A_SendOrder(Enum_Buy,Enum_Entry,Lots,data0.Q_BidPrice+MinMove*PriceScale);
SetGlobalVar(0,1);
FileAppend("D:\\Formula.log","\n");
FileAppend("D:\\Formula.log",TimeToString(CurrentTime));
FileAppend("D:\\Formula.log","满足价差挂多单! "+" "+Text(data0.Q_BidPrice+MinMove*PriceScale));
}
else If(condsell)
{
data0.A_SendOrder(Enum_Sell,Enum_Entry,Lots,data0.Q_askPrice-MinMove*PriceScale);
SetGlobalVar(1,1);
FileAppend("D:\\Formula.log","\n");
FileAppend("D:\\Formula.log",TimeToString(CurrentTime));
FileAppend("D:\\Formula.log","满足价差挂空单! "+" "+Text(data0.Q_askPrice-MinMove*PriceScale));
}
else If(alwaystrade==1)
{
data0.A_SendOrder(Enum_Buy,Enum_Entry,Lots,data0.Q_BidPrice+MinMove*PriceScale);
data0.A_SendOrder(Enum_Sell,Enum_Entry,Lots,data0.Q_askPrice-MinMove*PriceScale);
SetGlobalVar(1,1);
SetGlobalVar(0,1);
FileAppend("D:\\Formula.log","\n");
FileAppend("D:\\Formula.log",TimeToString(CurrentTime));
FileAppend("D:\\Formula.log","满足价差挂多单和空单! "+" "+Text(data0.Q_BidPrice+MinMove*PriceScale)+" "+Text(data0.Q_askPrice-MinMove*PriceScale));
}
}
If(conddelete&&madetrade==0&&(shortposition0==1||longposition0==1))
{
data0.A_DeleteOrder;
SetGlobalVar(0,0);
SetGlobalVar(1,0);
FileAppend("D:\\Formula.log","\n");
FileAppend("D:\\Formula.log",TimeToString(CurrentTime));
FileAppend("D:\\Formula.log","未成交撤单!");
}
//---------------------------------------------------------------------
If(data0.A_BuyPosition==lots&&shortposition1==0) //不活跃品种多单成交
{
FileAppend("D:\\Formula.log","\n");
FileAppend("D:\\Formula.log",TimeToString(CurrentTime));
FileAppend("D:\\Formula.log",Data0.Symbol+"多头头寸= "+Text(data0.A_BuyPosition));
data1.A_SendOrder(Enum_Sell,Enum_Entry,Lots,data1.Q_bidPrice); //主力开空对冲
SetGlobalVar(3,1);
SetGlobalVar(4,1);
}
If(data0.A_BuyPosition==lots&&data1.A_SellPosition==lots&&longposition0==1)
{
FileAppend("D:\\Formula.log","\n");
FileAppend("D:\\Formula.log",TimeToString(CurrentTime));
FileAppend("D:\\Formula.log",Data1.Symbol+"空头头寸= "+Text(data1.A_SellPosition));
data0.A_DeleteOrder(); //未成交的不活跃空单撤单
FileAppend("D:\\Formula.log","未成交空单撤单并且平不活跃多单");
Data0.A_SendOrder(Enum_Sell,Enum_Exit,Lots,data0.Q_askPrice-MinMove*PriceScale);//平不活跃多单
SetGlobalVar(0,0);
SetGlobalVar(1,0);
}
If(data0.A_BuyPosition==0&&data0.A_sellPosition==0&&shortposition1==1)//平主力空单
{
FileAppend("D:\\Formula.log","\n");
FileAppend("D:\\Formula.log",TimeToString(CurrentTime));
FileAppend("D:\\Formula.log",Data0.Symbol+"多头头寸= "+Text(data0.A_BuyPosition));
data1.A_SendOrder(Enum_buy,Enum_Exit,Lots,data1.Q_askPrice);
SetGlobalVar(3,0);
SetGlobalVar(4,0);
FileAppend("D:\\Formula.log","\n");
FileAppend("D:\\Formula.log",TimeToString(CurrentTime));
FileAppend("D:\\Formula.log",data1.Symbol+"空头头寸= "+Text(shortposition1));
}
//---------------------------------------------------------------------------------------
If(data0.A_sellPosition==lots&&longposition1==0) //不活跃品种空单成交
{
FileAppend("D:\\Formula.log","\n");
FileAppend("D:\\Formula.log",TimeToString(CurrentTime));
FileAppend("D:\\Formula.log",Data0.Symbol+"空头头寸= "+Text(Data0.A_sellPosition));
data1.A_SendOrder(Enum_buy,Enum_Entry,Lots,data1.Q_askPrice);//主力开多对冲
SetGlobalVar(2,1);
SetGlobalVar(4,1);
}
If(data0.A_sellPosition==lots&&data1.A_buyPosition==lots&&shortposition0==1)
{
FileAppend("D:\\Formula.log","\n");
FileAppend("D:\\Formula.log",TimeToString(CurrentTime));
FileAppend("D:\\Formula.log",data1.Symbol+"多头头寸= "+Text(data1.A_buyPosition));
data0.A_DeleteOrder(); //未成交的不活跃多单撤单
data0.A_SendOrder(Enum_buy,Enum_Exit,Lots,data0.Q_bidPrice+MinMove*PriceScale);//平不活跃空单
SetGlobalVar(1,0);
SetGlobalVar(0,0);
}
If(data0.A_sellPosition==0&&data0.A_BuyPosition==0&&longposition1==1)//平主力多单
{
FileAppend("D:\\Formula.log","\n");
FileAppend("D:\\Formula.log",TimeToString(CurrentTime));
FileAppend("D:\\Formula.log",Data0.Symbol+"空头头寸= "+Text(data0.A_sellPosition));
data1.A_SendOrder(Enum_sell,Enum_Exit,Lots,data1.Q_BidPrice);
SetGlobalVar(2,0);
SetGlobalVar(4,0);
FileAppend("D:\\Formula.log","\n");
FileAppend("D:\\Formula.log",TimeToString(CurrentTime));
FileAppend("D:\\Formula.log",data1.Symbol+"多头头寸= "+Text(longposition1));
}
If(time>0.1458) //14时59分撤掉所有未成交单
{
Data0.A_DeleteOrder;
Data1.A_DeleteOrder;
}
End |
|