欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件交易策略发布专区 → [原创]多个后台程序模拟盘测试中,持续更新

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有6733人关注过本帖树形打印复制链接

主题:[原创]多个后台程序模拟盘测试中,持续更新

帅哥哟,离线,有人找我吗?
量化资产
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:16 积分:0 威望:0 精华:0 注册:2018/5/6 14:33:55
[原创]多个后台程序模拟盘测试中,持续更新  发帖心情 Post By:2018/5/6 15:16:43 [只看该作者]

市场就是江湖,买卖双方永远在博弈, 这是交易过程中永恒的主题。买方也就是所谓的buy-side, 而做市商是sell-side, 
因此我们不仿把高频(HFT)策略分为买方策略和做市商策略。这两方互为对手。
//玉米做市
//抢最好的买价和最好的卖价。//市场平稳时开仓。
//参考日线决定今天是否处于交易区间,决定当前交易日是否运行该程序。
//日内的时候,看均线是否走平,内盘与外盘接近。//后台分笔数据
myaccount:='623450';stklabel1:='C09';手数:=8;MINDIFF1:=1;
 INPUT:委小(200,50,300,50); INPUT:委大(1000,500,1500,500);
//开仓
//时机//DYNAINFO( 18)委买DYNAINFO( 19)委卖 很小时主动开仓//内盘DYNAINFO( 22)//外盘DYNAINFO( 23)
//价格//DYNAINFO( 20)委买价DYNAINFO( 21)委卖价
开多挂:tisremainex(1,myaccount,stklabel1);平多挂:tisremainex(2,myaccount,stklabel1);
开空挂:tisremainex(3,myaccount,stklabel1);平空挂:tisremainex(4,myaccount,stklabel1);
空持:=tsellholdingex(myaccount,stklabel1,0);多持:=tbuyholdingex(myaccount,stklabel1,0);
持:=空持+多持;挂:=开多挂+平多挂+开空挂+平空挂;
委托开仓条件:=DYNAINFO( 19)>委大 and DYNAINFO( 18)>委大;//平稳期挂单
tbuy (委托开仓条件 and 持=0 and 挂=0,手数,lmt,DYNAINFO( 20),0,myaccount,stklabel1);//买1价开多  
tbuyshort (委托开仓条件 and 持=0 and 挂=0,手数,lmt,DYNAINFO( 21),0,myaccount,stklabel1);//卖1价开空
多持价:=TAVGENTERPRICEEX(myaccount ,stklabel1 );
空持价:=TAVGENTERPRICEEX(myaccount ,stklabel1 );
//有一方向单成交,未成交的反向开仓单,立即撤单
if 多持>0  then tcancelex(1,1,myaccount,stklabel1);
if 空持>0  then tcancelex(1,3,myaccount,stklabel1);
//平仓
if 多持>0 THEN  
if 平多挂=0 then tsell (平多挂=0,手数,lmt, 多持价+MINDIFF1,0,myaccount,stklabel1); //止盈挂单
//对手价止损
else  begin 
tcancelex(1,2,myaccount,stklabel1);//撤止盈挂单
tsell (DYNAINFO( 20)<空持价 or (DYNAINFO( 20)=空持价 and DYNAINFO( 19)<委小),手数,lmt, DYNAINFO( 20),0,myaccount,stklabel1); //止损
end

if 空持>0 THEN  
if 平空挂=0 then tsellshort (平空挂=0,手数,lmt, 空持价-MINDIFF1,0,myaccount,stklabel1); //止盈挂单
//对手价止损
else begin 
tcancelex(1,4,myaccount,stklabel1);//撤止盈挂单
tsellshort (DYNAINFO( 21)>多持价 or (DYNAINFO( 21)=多持价 and DYNAINFO( 18)<委小) ,手数,lmt, DYNAINFO( 21),0,myaccount,stklabel1); //8平空
end


玉米炒单
//在高频交易中,挂单是坚决不允许的,挂单就意味着被动等成交。
//抢单,大委量差,开仓。下单手法,对手价开仓,方向委托量很小的方向。
//关键点//委差//卖一//买一//外盘和内盘
//挂单量大的一方为强//买一卖一
//被成交一方为弱//买卖成交量对比
//买卖盘定大方向,下单方向保持一致。//若外盘数量大于内盘,则表现买方力量较强,若 内盘数量大于外盘则说明卖方力量较强。
//内盘:以买入价成交的交易,买入成交数量统计加入内盘。DYNAINFO( 22)
//外盘:以卖出价成交的交易。卖出量统计加入外盘。DYNAINFO( 23)
myaccount:='623450';stklabel1:='C09';手数:=8;MINDIFF1:=1;
 INPUT:委小(200,50,300,50); INPUT:委大(1000,500,1500,500);
空持:=tsellholdingex(myaccount,stklabel1,0);多持:=tbuyholdingex(myaccount,stklabel1,0);
持:=空持+多持;
多持价:=TAVGENTERPRICEEX(myaccount ,stklabel1 );
空持价:=TAVGENTERPRICEEX(myaccount ,stklabel1 );
//挂单全撤
if tisremainex(0,myaccount,stklabel1) then tcancelex(1,0,myaccount,stklabel1); 
//开仓
//方向//内盘DYNAINFO( 22)//外盘DYNAINFO( 23)
//时机//DYNAINFO( 18)委买DYNAINFO( 19)委卖 很小时主动开仓
//价格//DYNAINFO( 20)委买价DYNAINFO( 21)委卖价
if 持=0 then begin 
tbuy (DYNAINFO( 22)<DYNAINFO( 23) and DYNAINFO( 19)<委小 and DYNAINFO( 18)>委大,
手数,lmt,DYNAINFO( 21),0,myaccount,stklabel1);//卖1价开多  
tbuyshort (DYNAINFO( 22)>DYNAINFO( 23) and DYNAINFO( 19)>委大 and DYNAINFO( 18)>委小,
手数,lmt,DYNAINFO( 20),0,myaccount,stklabel1);//买1价开空
end
//平仓
多持价:=TAVGENTERPRICEEX(myaccount ,stklabel1 );
空持价:=TAVGENTERPRICEEX(myaccount ,stklabel1 );
//止损
if 多持>0 THEN tsell (多持价-DYNAINFO( 20)>=2*MINDIFF1 and DYNAINFO( 18)<委小*2,手数,lmt, DYNAINFO( 20),0,myaccount,stklabel1); //9平多
if 空持>0 THEN tsellshort (DYNAINFO( 21)-空持价>=2*MINDIFF1 and DYNAINFO( 19)<委小*2,手数,lmt, DYNAINFO( 21),0,myaccount,stklabel1); //8平空
//止盈
if 多持>0 THEN tsell (DYNAINFO( 20)-多持价>=3*MINDIFF1 ,手数,lmt, DYNAINFO( 20),0,myaccount,stklabel1); //9平多
if 空持>0 THEN tsellshort (空持价-DYNAINFO( 21)>=3*MINDIFF1 ,手数,lmt, DYNAINFO( 21),0,myaccount,stklabel1); //8平空



版主评定:好评,获得10个金币奖励好评,获得10个金币奖励
(理由:好文章)
 回到顶部
帅哥哟,离线,有人找我吗?
无为剑
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:2437 积分:0 威望:0 精华:0 注册:2016/3/5 22:53:41
  发帖心情 Post By:2018/5/7 15:10:33 [只看该作者]

感谢提供策略源码,为了让更多用户看到您的帖子,我们稍后会将此贴转移至策略发布区


 回到顶部
帅哥哟,离线,有人找我吗?
量化资产
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:16 积分:0 威望:0 精华:0 注册:2018/5/6 14:33:55
  发帖心情 Post By:2018/5/7 17:02:40 [只看该作者]

玉米做市程序,今日测试后,发现如下问题:
1、持仓不正确,有止盈挂单之后,影响结果。修改后,选择参数2。空持:=tsellholdingex(myaccount,stklabel1,0);多持:=tbuyholdingex(myaccount,stklabel1,0);
用法:TBUYHOLDINGEX(AC,STOCK,N),AC为指定的帐户名,若为空表示取当前默认帐户
STOCK为指定的品种,若空表示当前品种。
N表示类型,0表示取当日可用买持(股票为可用持仓),1表示取全部可用买持(不包含未成交平多单),2表示取全部买持(包含未成交平多单),3表示取未成交单平多单.
2、开仓后一直发平仓单,止损过小,下移一跳。如果在买一价1740卖一价1741,开始分别挂单。1740买开成交后,止盈为1741立即挂单,止损为1739买一量很小时立即成交,突然下杀,也以买一价成交.
3、持仓价无需区分多空。多持价:=TAVGENTERPRICEEX(myaccount ,stklabel1 );空持价:=TAVGENTERPRICEEX(myaccount ,stklabel1 );
4、账户和品种,指定繁琐无用。去除。
总体修改如下:
手数:=8;MINDIFF1:=1;
 INPUT:委小(200,50,300,50); INPUT:委大(800,500,1500,100);
 //委小200,遇到大单,赶不上反应,可能出现瞬间的2跳差价。
//开仓
//时机//DYNAINFO( 18)委买DYNAINFO( 19)委卖 很小时主动开仓//内盘DYNAINFO( 22)//外盘DYNAINFO( 23)
//价格//DYNAINFO( 20)委买价DYNAINFO( 21)委卖价
开多挂:=tisremain(1);平多挂:=tisremain(2);开空挂:=tisremain(3);平空挂:=tisremain(4);
空持:=tbuyholdingex('','',2);多持:=tbuyholdingex('','',2);
持:=空持+多持;挂:=开多挂+平多挂+开空挂+平空挂;
委托开仓条件:=DYNAINFO( 19)>委大 and DYNAINFO( 18)>委大;//平稳期挂单
tbuy (委托开仓条件 and 持=0 and 挂=0,手数,lmt,max(DYNAINFO( 20),DYNAINFO( 21)-MINDIFF1),0);//买1价开多
tbuyshort (委托开仓条件 and 持=0 and 挂=0,手数,lmt,min(DYNAINFO( 21),DYNAINFO( 20)+MINDIFF1),0);//卖1价开空
持价:=TAVGENTERPRICE;DEBUGOUT('持价 %.0f', 持价);
//有一方向单成交,未成交的反向开仓单,立即撤单
tcancel(多持>0,3);tcancel(空持>0,1);
//平仓
if 多持>0 then begin
tsell (DYNAINFO(20)=持价 and 平多挂=0,手数,lmt,持价+MINDIFF1,0); //平多一跳止盈挂单
if DYNAINFO( 20)<持价-MINDIFF1 or (DYNAINFO( 20)=持价-MINDIFF1 and DYNAINFO( 18)<委小) then begin
tcancel(平多挂>0,2);//平多撤止盈挂单//有挂单//买一价小于持仓价
TSELL(1,TBUYHOLDING(0),lmt,DYNAINFO( 20),0);//平多止损//买一价小于持仓价
end
end
if 空持>0 then begin
tsellshort (DYNAINFO( 20)=持价 and 平空挂=0,手数,lmt, 持价-MINDIFF1,0); //平空止盈挂单
if DYNAINFO( 21)>持价+MINDIFF1 or (DYNAINFO( 21)=持价+MINDIFF1 and DYNAINFO( 19)<委小) then begin
tcancel(平空挂>0 and DYNAINFO( 21)>持价,4);//撤平空止盈挂单
tsellshort(1 ,TSELLHOLDING(0),lmt,DYNAINFO( 21),0); //平空止损
end
end


 回到顶部
帅哥哟,离线,有人找我吗?
量化资产
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:16 积分:0 威望:0 精华:0 注册:2018/5/6 14:33:55
  发帖心情 Post By:2018/5/7 17:23:26 [只看该作者]

玉米炒单程序,按市价的方式更新。
手数:=8;MINDIFF1:=1;
 INPUT:委小(200,50,300,50); INPUT:委大(1000,500,1500,500);
空持:=tbuyholdingex('','',2);多持:=tbuyholdingex('','',2);持:=空持+多持;
持价:=TAVGENTERPRICE;DEBUGOUT('持价 %.0f', 持价);
tcancel(tisremain(0),0); //挂单全撤
//开仓//抢单,大委量差//外盘数量大于内盘,则表现买方力量较强,若内盘数量大于外盘则说明卖方力量较强。
if 持=0 then begin 
tbuy(DYNAINFO( 22)<DYNAINFO( 23) and DYNAINFO( 19)<委小 and DYNAINFO( 18)>委大,手数,lmt,DYNAINFO( 21),0);//卖1价开多  
tbuyshort(DYNAINFO( 22)>DYNAINFO( 23) and DYNAINFO( 19)>委大 and DYNAINFO( 18)>委小,手数,lmt,DYNAINFO( 20),0);//买1价开空
end
持价:=TAVGENTERPRICE;DEBUGOUT('持价 %.0f', 持价);
//对手价平仓
if 多持>0 THEN begin
tsell(DYNAINFO( 20)-持价>=3*MINDIFF1 ,手数,lmt, DYNAINFO( 20),0);//止盈
tsell(持价-DYNAINFO( 20)>=2*MINDIFF1 and DYNAINFO( 18)<委小*2,手数,lmt, DYNAINFO( 20),0);//止损
end
if 空持>0 THEN begin
tsellshort (持价-DYNAINFO( 21)>=3*MINDIFF1 ,手数,lmt, DYNAINFO( 21),0); //止盈
tsellshort (DYNAINFO( 21)-持价>=2*MINDIFF1 and DYNAINFO( 19)<委小*2,手数,lmt, DYNAINFO( 21),0);//止损
end

 回到顶部
帅哥哟,离线,有人找我吗?
量化资产
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:16 积分:0 威望:0 精华:0 注册:2018/5/6 14:33:55
  发帖心情 Post By:2018/5/10 15:10:47 [只看该作者]

做市商套利算法的核心盈利目标是赚取市场上买一盘口和卖一盘口中的价差。这种算法能够成立的前提是交易成本足够低、成交速度足够快,主力合约的流动性足够好。通过主力合约与非主力合约组合操作,达到的效果是吸收各个合约上的盘口流动性利润,同时锁定主力合约与次主力合约,来回避系统性风险和时间风险。

myaccount:='623450';手数:=1;MINDIFF1:=10;

主力合约:='CU07';合约06:='CU06';合约08:='CU08';

//合约06

//绝对持仓

多持合约06:=tbuyholdingex (myaccount,合约06,2);空持合约06:=tsellholdingex(myaccount,合约06,2) ;持合约06:=多持合约06+空持合约06;

合约06买一价:=DYNAINFO2( 20,合约06);合约06卖一价:=DYNAINFO2( 21,合约06);合约06盘口差价:=合约06卖一价-合约06买一价;

//买卖差价缩小,则开仓挂单撤单

GLOBALVARIABLE:合约06买开价=0;GLOBALVARIABLE:合约06卖开价=0;

tcancelex(合约06盘口差价>MINDIFF1 and tisremainex(1,myaccount,合约06)>0 and 合约06买开价<合约06买一价,1,myaccount,合约06); 

tcancelex(合约06盘口差价>MINDIFF1 and tisremainex(3,myaccount,合约06)>0 and 合约06卖开价>合约06卖一价,3,myaccount,合约06); 

//开仓//无仓和无挂单时买1价开多//无仓和无挂单时卖1价开空//盘口差价大于1

if 持合约06=0 and 合约06盘口差价>MINDIFF1 and tisremainex(1,myaccount,合约06)=0 then begin

tbuy (1,手数,lmt,合约06买一价,0,myaccount,合约06);

合约06买开价:=合约06买一价;

end

if 持合约06=0 and 合约06盘口差价>MINDIFF1 and tisremainex(3,myaccount,合约06)=0 then begin

tbuyshort (1,手数,lmt,合约06卖一价,0,myaccount,合约06);

合约06卖开价:=合约06卖一价;

end

//空头持仓撤开多单//多头持仓撤开空单

tcancelex(空持合约06>0,1,myaccount,合约06); tcancelex(多持合约06>0,3,myaccount,合约06); 

//平仓价向持仓方向反向运动,则平仓挂单撤单,以后重开。单边持仓风险由主力合约对冲。

GLOBALVARIABLE:合约06平多价=0;GLOBALVARIABLE:合约06平空价=0;

tcancelex(tisremainex(2,myaccount,合约06)>0 and 合约06平多价>合约06卖一价,2,myaccount,合约06); //撤平多单

tcancelex(tisremainex(4,myaccount,合约06)>0 and 合约06平空价<合约06买一价,4,myaccount,合约06); //撤平空单

//平仓//保持最优价格平仓//有多仓和无挂平多单时卖1价平多//有空仓和无挂平空单时买1价平空

if 多持合约06>0 and tisremainex(2,myaccount,合约06)=0 then begin

tsell (1,多持合约06,lmt,合约06卖一价,0,myaccount,合约06);

合约06平多价:=合约06卖一价;

end

if 空持合约06>0 and tisremainex(4,myaccount,合约06)=0 then begin

tsellshort (1,空持合约06,lmt,合约06买一价,0,myaccount,合约06);

合约06平空价:=合约06买一价;

end

//合约08

//绝对持仓

多持合约08:=tbuyholdingex (myaccount,合约08,2);空持合约08:=tsellholdingex(myaccount,合约08,2) ;持合约08:=多持合约08+空持合约08;

合约08买一价:=DYNAINFO2( 20,合约08);合约08卖一价:=DYNAINFO2( 21,合约08);合约08盘口差价:=合约08卖一价-合约08买一价;

//买卖差价缩小,则开仓挂单撤单

GLOBALVARIABLE:合约08买开价=0;GLOBALVARIABLE:合约08卖开价=0;

tcancelex(合约08盘口差价>MINDIFF1 and tisremainex(1,myaccount,合约08)>0 and 合约08买开价<合约08买一价,1,myaccount,合约08); 

tcancelex(合约08盘口差价>MINDIFF1 and tisremainex(3,myaccount,合约08)>0 and 合约08卖开价>合约08卖一价,3,myaccount,合约08); 

//开仓//无仓和无挂单时买1价开多//无仓和无挂单时卖1价开空//盘口差价大于1

if 合约08盘口差价>MINDIFF1 and 持合约08=0 and tisremainex(1,myaccount,合约08)=0 then begin

tbuy (1,手数,lmt,合约08买一价,0,myaccount,合约08);

合约08买开价:=合约08买一价;

end

if 合约08盘口差价>MINDIFF1 and 持合约08=0 and tisremainex(3,myaccount,合约08)=0 then begin

tbuyshort (1,手数,lmt,合约08卖一价,0,myaccount,合约08);

合约08卖开价:=合约08卖一价;

end

//空头持仓撤开多单//多头持仓撤开空单

tcancelex(空持合约08>0,1,myaccount,合约08);tcancelex(多持合约08>0,3,myaccount,合约08); 

//平仓价向持仓方向反向运动,则平仓挂单撤单,以后重开。单边持仓风险由主力合约对冲。

GLOBALVARIABLE:合约08平多价=0;GLOBALVARIABLE:合约08平空价=0;

tcancelex(tisremainex(2,myaccount,合约08)>0 and 合约08平多价>合约08卖一价,2,myaccount,合约08); 

tcancelex(tisremainex(4,myaccount,合约08)>0 and 合约08平空价<合约08买一价,4,myaccount,合约08); 

//平仓//有多仓和无挂平多单时卖1价平多//有空仓和无挂平空单时买1价平空

if 多持合约08>0 and tisremainex(2,myaccount,合约08)=0 then begin

tsell (1,多持合约08,lmt,合约08卖一价,0,myaccount,合约08);

合约08平多价:=合约08卖一价;

end

if 空持合约08>0 and tisremainex(4,myaccount,合约08)=0 then begin

tsellshort (1,空持合约08,lmt,合约08买一价,0,myaccount,合约08);

合约08平空价:=合约08买一价;

end

//有持仓变动就改变主力持仓,

空持非主力合约:=空持合约06+空持合约08;多持非主力合约:=多持合约06+多持合约08;//+空持合约09;//+多持合约09;

非主仓差:=多持非主力合约-空持非主力合约;

//主力合约填补多空缺口//对手价开平仓

多持主力合约:=tbuyholdingex (myaccount,主力合约,2);空持主力合约:tsellholdingex (myaccount,主力合约,2);

主仓差:=多持主力合约-空持主力合约;

平衡仓差:=主仓差+非主仓差;DEBUGOUT('平衡仓差 %.0f', 平衡仓差);

if 平衡仓差<0 then begin

tcancelex( tisremainex(1,myaccount,主力合约)>0 ,1,myaccount,主力合约);

tcancelex( tisremainex(4,myaccount,主力合约)>0 ,4,myaccount,主力合约);

tbuy (空持主力合约=0 and tisremainex(1,myaccount,主力合约)=0,1,lmt,DYNAINFO2( 21,主力合约),0,myaccount,主力合约);//卖1价开多

tsellshort (空持主力合约>0 and tisremainex(4,myaccount,主力合约)=0,1,lmt,DYNAINFO2( 21,主力合约),0,myaccount,主力合约);//卖1价平空

end

if 平衡仓差>0 then begin

tcancelex( tisremainex(3,myaccount,主力合约)>0 ,3,myaccount,主力合约);

tcancelex( tisremainex(2,myaccount,主力合约)>0 ,2,myaccount,主力合约);

tbuyshort (多持主力合约=0 and tisremainex(3,myaccount,主力合约)=0,1,lmt,DYNAINFO2( 20,主力合约),0,myaccount,主力合约);//买1价开空

tsell (多持主力合约>0 and tisremainex(2,myaccount,主力合约)=0,1,lmt,DYNAINFO2( 20,主力合约),0,myaccount,主力合约);//买1价平多

end



 回到顶部
帅哥哟,离线,有人找我吗?
量化资产
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:16 积分:0 威望:0 精华:0 注册:2018/5/6 14:33:55
  发帖心情 Post By:2018/5/10 23:02:21 [只看该作者]

市商套利算法 文章来源http://www.818qihuo.com/book/qihuocelue2/2475.html

做市商套利算法的核心盈利目标是赚取市场上买一盘口和卖一盘口中的价差。这种算法能够成立的前提是交易成本足够低、成交速度足够快,主力合约的流动性足够好。

为了解该算法,我们先来看下面的这个例子:

白糖期货的交易中,主力合约是9月合约,次主力合约是11月合约,其他有交易的合约还有7个,总共有9个合约在交易。要想从盘口的点差中获利,有以下思路(以下设想全部通过电脑程序自动完成,并且按照做市商的条件来计算,所以交易费用可以忽略不计)。

糖1109是主力合约,盘口报价紧度高,一般只相差一个价位。如果价格能停留在7249~7250之间的话,我们可以这样设计:

(1)当价格在7249时挂多开单,7250时挂空开单。

(2)如果7249的多开单有成交的话,马上挂相应单量的7250空平单;同理如果7250空开单有成交的话,马上挂相应单量的7249多平单;

(3)循环(1)、(2)的操作,直至操作需要结束的时候,将剩余未平仓锁单对敲平仓,将单边净仓位按第五篇的“盘口主动型算法交易指令流”方式平仓。

(4)该操作的利润趋近于10 x成交手数/2

实际操作中,价格一般不会长期停留在7249~7250之间,我们需要用某种思路锁定价格整体波动的风险从而获得稳定的点差收益。

糖1205是非主力合约,盘口价差常常会有2~5个点的空档。如果买一卖一盘口的中间价稳定在6887-6889之间的话,我们可以在主力合约思路上做进一步延伸:

(1)在6886挂多开单,6890挂空开单。

(2)如果6886的多开单有成交的话,马上挂相应单量的6890空平单;同理如果6890空开单有成交的话,马上挂相应单量的6886多平单。

(3)由于非主力合约成交相对稀少,挂6886多开单或多平单,均要等待之前别人在6886上挂的多单18手,所以可以再挂6887多开单;同样,也可以再挂6889空开单。

(4)如果6887的多开单有成交的话,马上挂相应单量的6889空平单;同理如果6889空开单有成交的话,马上挂相应单量的688*7多平单。

(5)循环(1)、(2)以及(3)、(4)的操作,直至操作需要结束的时候,将剩余未平仓锁单对敲平仓。净仓位利用主动型算法逐渐平仓。

(6)该操作的利润趋近于10x平均点差x成交手数/2但是当净仓位需要平仓却遭遇到流动性不足的问题时,不能简单用该合约“主动型算法交易指令流”方式平仓,而是要借助主力合约的流动性。

如前所述,如果价格能稳定在一个很小的区间内,就可以通过来回挂买挂卖获得点差收益,但是价格如果出现波动怎么办?

我们可以用套利思路来回避价格趋势波动的风险。这种思路简单地说就是不求价格波动的趋势收益,只赚取波动中投机者为了成交而支付给我们的点差收益。具体操作如下:

(1)在非主力合约1205上,以6886挂多开单,6890挂空开单。

(2)如果1205合约6886价位的多开单有成交的话,马上挂相应单量的1205合约上的6890空平单,同时也挂1109合约上相应单量的7249空开单;同理,如果1205合约的6890空开单有成交的话,马上挂相应单量的1205合约上的6886多平单,同时也挂1109合约上相应单量的7250多开单。

(3)由于1109合约是主动成交,能保证7249的空开单一定成交,这样手中就同时持有了1109合约的7249空单和1205合约的6886多单。

(4)如果价格上涨,则1205合约的6890空平单会成交,这个时候马上以卖一盘口价挂1109合约多平。此时,卖一盘口价可能为7250、7251、7252、7253(假设1109合约和1205合约的中间价的基差保持不变)。这样平仓收益=(1205合约盈利点差-1109合约损失点差)x成交量/2

(5)如果价格下跌,主力1109合约的买一价从7249变成了 7249-n,则在1205合约上的卖平仓单也相应从6890调整成6890-n~6888-n0如果继续下跌则重复操作,直到卖平单成交。卖平单一旦成交,则主力1109合约报当时的卖一盘口价买平。这样的收益和(4)一样。

我们可以看到,这里虽然用套利形式回避了品种整体上涨下跌的系统性风险,但实际上,合约基差也不是一成不变的。要回避基差波动带来的风险,就需要多个合约联合操作或计算好合约的无风险套利区间。

?主力盘口与次主力盘口的利润之和,如图7-15所示。

这样的做法与非主力合约的做法相似,不过由于运用了次主力合约,合约的流动性增强,操作性也更高。缺陷在于单笔交易利润较小。能否盈利要仰赖于算法的执行效果。

(1)在次主力合约1201合约上,以6906挂多开单,6907挂空开单。

(2)如果1201合约的6906多开单有成交的话,马上挂相应单量的1201合约上的6907空平单,同时也在1109合约上按照“盘口主动型算法交易指令流”开相应单量的空开单;同理如果1201合约的6907空开单有成交的话,马上挂相应单量的1201合约上的6906多平单,也在1109合约上按照“盘口主动型算法交易指令流”开相应单量的多开单。

(3)由于1109合约是以算法指令形式挂单,并不一定能马上成交。因此如果1201合约上的6907空平单优先于算法指令成交,则算法自动撤单。如果算法优先成交,则手中就同时持有了1109合约的空单和1201合约的6906多单。

(4)如果价格上涨,贝U1201合约的6907空平单会成交,这时候1109合约的空单就按照“盘口主动型算法交易指令流”平仓相应单量。

(5)如果价格下跌,则1201合约的6907空平单撤单,并以6907-n继续往下报价,直到该空平单成交。成交之后,1109合约的空单就按照“盘口主动型算法交易指令流”平仓相应单量。

由于次主力合约有一定的流动性,且基差比较稳定,该操作方式的交易量可以比较大。实际的收益来源于主力合约与次主力合约双边盘口利润。虽然这种方式的单笔利润很小,但是可以持续累积。一般做法是,每日收盘前,用算法清理所有仓位,以保证每日持仓为0,结算绝对收益。

实际操作中,可以将之前的几个思路联合起来一起操作。最终取得一个总的算法收益。当然,这样的操作靠人工是不可能完成的,必须借助精密的计算机程序和相当通畅的网络。

(1)选择一系列的合约进行操作。对象应该至少是有少量成交量的合约,或者是几个活跃合约的中间月份合约(中间月份的合约虽然有的成交量不大,但是可以通过蝶式套利的形式回避合约基差风险)。如图7-16所示,主力选择了糖1107合约至1205合约。

(2)指定一个参考系合约。一般为主力合约,即1109合约。如果考虑到主力合约与其他合约的成交量相差太大,也可以把参照系设置为次主力合约1201。如果考虑到次主力合约的盘中报单量未必比主力合约少,则取主力合约和次主力合约两者报单量较小者为参照系合约。

(3)按加权平均法或者回归分析法定义各合约在盘中的合理基差。在合理基差范围内,1107合约、1111合约、1203合约、1205合约的买一卖一盘口挂单量均按1201合约的挂单量补足。如果1201合约由于挂撤单、成交等因素导致挂单量瞬间变化,其他合约也通过挂撤单的形式相应做出变化,迅速达到与1201合约相同的挂单量。

(4)如果在合理基差以外的区域,只按算法挂单不易成交的一方。

(5)如果1107合约挂单被成交,则按套利算法锁定1109合约;如果1111合约被成交,则按套利算法蝶式锁定1109合约与1201合约;如果1201合约被成交,则按套利算法锁定1109合约;如果1203和1205合约被成交,也按套利算法锁定1109和1201合约。

通过这样复杂的组合操作,最终达到的效果是吸收各个合约上的盘口流动性利润,同时锁定主力合约与次主力合约,来回避系统性风险和时间风险。有兴趣的朋友可以根据这样的思路编译计算机语言,测试效果。

做市商算法为市场提供了大量的流动性,使得各合约都能在买一卖一盘上有充足的订单,有助于市场整体活跃度提高,同时还可以极大消除市场噪音。发达国家对做市商已有了较完备的制度法规,我国如果能引进做市商制度,将有助于市场的长期健康发展。


模拟盘测试无法对委托挂单产生影响,虚拟盘的成交全部集中在TICK成交点上,如图所示。能否获得利润,无法测试,反正一晚上亏了一万四了
图片点击可在新窗口打开查看此主题相关图片如下:图片1.png
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:图片2.png
图片点击可在新窗口打开查看


 回到顶部
帅哥哟,离线,有人找我吗?
量化资产
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:16 积分:0 威望:0 精华:0 注册:2018/5/6 14:33:55
  发帖心情 Post By:2018/5/10 23:09:04 [只看该作者]

最新源码。多合约配对,开撤平无误,测试成功
myaccount:='623450';手数:=1;MINDIFF1:=10;
//全合约:='CU06','CU07','CU08','CU09','CU10','CU11','CU12','CU01','CU02','CU03','CU04';
主力合约:='CU07';
//非主力合约:='CU01','CU02','CU03','CU04','CU05','CU06','CU08','CU09','CU10','CU11','CU12';
//合约01:='CU01';合约02:='CU02';合约03:='CU03';合约04:='CU04';合约05:='CU05';合约06:='CU06';
//合约07:='CU07';合约08:='CU08';合约09:='CU09';合约10:='CU10';合约11:='CU11';合约12:='CU12';
合约06:='CU11';合约08:='CU12';合约09:='CU01';合约10:='CU10';
//合约06
//绝对持仓
多持合约06:=tbuyholdingex (myaccount,合约06,2);空持合约06:=tsellholdingex(myaccount,合约06,2) ;持合约06:=多持合约06+空持合约06;
合约06买一价:=DYNAINFO2( 20,合约06);合约06卖一价:=DYNAINFO2( 21,合约06);合约06盘口差价:=合约06卖一价-合约06买一价;
//买卖差价缩小,则开仓挂单撤单
GLOBALVARIABLE:合约06买开价=0;GLOBALVARIABLE:合约06卖开价=0;
tcancelex(合约06盘口差价>MINDIFF1 and tisremainex(1,myaccount,合约06)>0 and 合约06买开价<合约06买一价,1,myaccount,合约06); 
tcancelex(合约06盘口差价>MINDIFF1 and tisremainex(3,myaccount,合约06)>0 and 合约06卖开价>合约06卖一价,3,myaccount,合约06); 
//开仓//无仓和无挂单时买1价开多//无仓和无挂单时卖1价开空//盘口差价大于1
if 持合约06=0 and 合约06盘口差价>MINDIFF1 and tisremainex(1,myaccount,合约06)=0 then begin
tbuy(1,手数,lmt,合约06买一价,0,myaccount,合约06);
合约06买开价:=合约06买一价;
end
if 持合约06=0 and 合约06盘口差价>MINDIFF1 and tisremainex(3,myaccount,合约06)=0 then begin
tbuyshort(1,手数,lmt,合约06卖一价,0,myaccount,合约06);
合约06卖开价:=合约06卖一价;
end
//空头持仓撤开多单//多头持仓撤开空单
tcancelex(空持合约06>0,1,myaccount,合约06); tcancelex(多持合约06>0,3,myaccount,合约06); 
//平仓价向持仓方向反向运动,则平仓挂单撤单,以后重开。单边持仓风险由主力合约对冲。
GLOBALVARIABLE:合约06平多价=0;GLOBALVARIABLE:合约06平空价=0;
tcancelex(tisremainex(2,myaccount,合约06)>0 and 合约06平多价>合约06卖一价,2,myaccount,合约06); //撤平多单
tcancelex(tisremainex(4,myaccount,合约06)>0 and 合约06平空价<合约06买一价,4,myaccount,合约06); //撤平空单
//平仓//保持最优价格平仓//有多仓和无挂平多单时卖1价平多//有空仓和无挂平空单时买1价平空
if 多持合约06>0 and tisremainex(2,myaccount,合约06)=0 then begin
tsell(1,多持合约06,lmt,合约06卖一价,0,myaccount,合约06);
合约06平多价:=合约06卖一价;
end
if 空持合约06>0 and tisremainex(4,myaccount,合约06)=0 then begin
tsellshort(1,空持合约06,lmt,合约06买一价,0,myaccount,合约06);
合约06平空价:=合约06买一价;
end
//合约08
//绝对持仓
多持合约08:=tbuyholdingex (myaccount,合约08,2);空持合约08:=tsellholdingex(myaccount,合约08,2) ;持合约08:=多持合约08+空持合约08;
合约08买一价:=DYNAINFO2( 20,合约08);合约08卖一价:=DYNAINFO2( 21,合约08);合约08盘口差价:=合约08卖一价-合约08买一价;
//买卖差价缩小,则开仓挂单撤单
GLOBALVARIABLE:合约08买开价=0;GLOBALVARIABLE:合约08卖开价=0;
tcancelex(合约08盘口差价>MINDIFF1 and tisremainex(1,myaccount,合约08)>0 and 合约08买开价<合约08买一价,1,myaccount,合约08); 
tcancelex(合约08盘口差价>MINDIFF1 and tisremainex(3,myaccount,合约08)>0 and 合约08卖开价>合约08卖一价,3,myaccount,合约08); 
//开仓//无仓和无挂单时买1价开多//无仓和无挂单时卖1价开空//盘口差价大于1
if 合约08盘口差价>MINDIFF1 and 持合约08=0 and tisremainex(1,myaccount,合约08)=0 then begin
tbuy(1,手数,lmt,合约08买一价,0,myaccount,合约08);
合约08买开价:=合约08买一价;
end
if 合约08盘口差价>MINDIFF1 and 持合约08=0 and tisremainex(3,myaccount,合约08)=0 then begin
tbuyshort (1,手数,lmt,合约08卖一价,0,myaccount,合约08);
合约08卖开价:=合约08卖一价;
end
//空头持仓撤开多单//多头持仓撤开空单
tcancelex(空持合约08>0,1,myaccount,合约08);tcancelex(多持合约08>0,3,myaccount,合约08); 
//平仓价向持仓方向反向运动,则平仓挂单撤单,以后重开。单边持仓风险由主力合约对冲。
GLOBALVARIABLE:合约08平多价=0;GLOBALVARIABLE:合约08平空价=0;
tcancelex(tisremainex(2,myaccount,合约08)>0 and 合约08平多价>合约08卖一价,2,myaccount,合约08); 
tcancelex(tisremainex(4,myaccount,合约08)>0 and 合约08平空价<合约08买一价,4,myaccount,合约08); 
//平仓//有多仓和无挂平多单时卖1价平多//有空仓和无挂平空单时买1价平空
if 多持合约08>0 and tisremainex(2,myaccount,合约08)=0 then begin
tsell(1,多持合约08,lmt,合约08卖一价,0,myaccount,合约08);
合约08平多价:=合约08卖一价;
end
if 空持合约08>0 and tisremainex(4,myaccount,合约08)=0 then begin
tsellshort (1,空持合约08,lmt,合约08买一价,0,myaccount,合约08);
合约08平空价:=合约08买一价;
end
//合约09
//绝对持仓
多持合约09:=tbuyholdingex (myaccount,合约09,2);空持合约09:=tsellholdingex(myaccount,合约09,2) ;持合约09:=多持合约09+空持合约09;
合约09买一价:=DYNAINFO2( 20,合约09);合约09卖一价:=DYNAINFO2( 21,合约09);合约09盘口差价:=合约09卖一价-合约09买一价;
//买卖差价缩小,则开仓挂单撤单
GLOBALVARIABLE:合约09买开价=0;GLOBALVARIABLE:合约09卖开价=0;
tcancelex(合约09盘口差价>MINDIFF1 and tisremainex(1,myaccount,合约09)>0 and 合约09买开价<合约09买一价,1,myaccount,合约09); 
tcancelex(合约09盘口差价>MINDIFF1 and tisremainex(3,myaccount,合约09)>0 and 合约09卖开价>合约09卖一价,3,myaccount,合约09); 
//开仓//无仓和无挂单时买1价开多//无仓和无挂单时卖1价开空//盘口差价大于1
if 合约09盘口差价>MINDIFF1 and 持合约09=0 and tisremainex(1,myaccount,合约09)=0 then begin
tbuy(1,手数,lmt,合约09买一价,0,myaccount,合约09);
合约09买开价:=合约09买一价;
end
if 合约09盘口差价>MINDIFF1 and 持合约09=0 and tisremainex(3,myaccount,合约09)=0 then begin
tbuyshort(1,手数,lmt,合约09卖一价,0,myaccount,合约09);
合约09卖开价:=合约09卖一价;
end
//空头持仓撤开多单//多头持仓撤开空单
tcancelex(空持合约09>0,1,myaccount,合约09);tcancelex(多持合约09>0,3,myaccount,合约09); 
//平仓价向持仓方向反向运动,则平仓挂单撤单,以后重开。单边持仓风险由主力合约对冲。
GLOBALVARIABLE:合约09平多价=0;GLOBALVARIABLE:合约09平空价=0;
tcancelex(tisremainex(2,myaccount,合约09)>0 and 合约09平多价>合约09卖一价,2,myaccount,合约09); 
tcancelex(tisremainex(4,myaccount,合约09)>0 and 合约09平空价<合约09买一价,4,myaccount,合约09); 
//平仓//有多仓和无挂平多单时卖1价平多//有空仓和无挂平空单时买1价平空
if 多持合约09>0 and tisremainex(2,myaccount,合约09)=0 then begin
tsell(1,多持合约09,lmt,合约09卖一价,0,myaccount,合约09);
合约09平多价:=合约09卖一价;
end
if 空持合约09>0 and tisremainex(4,myaccount,合约09)=0 then begin
tsellshort(1,空持合约09,lmt,合约09买一价,0,myaccount,合约09);
合约09平空价:=合约09买一价;
end
//合约10
//绝对持仓
多持合约10:=tbuyholdingex (myaccount,合约10,2);空持合约10:=tsellholdingex(myaccount,合约10,2) ;持合约10:=多持合约10+空持合约10;
合约10买一价:=DYNAINFO2( 20,合约10);合约10卖一价:=DYNAINFO2( 21,合约10);合约10盘口差价:=合约10卖一价-合约10买一价;
//买卖差价缩小,则开仓挂单撤单
GLOBALVARIABLE:合约10买开价=0;GLOBALVARIABLE:合约10卖开价=0;
tcancelex(合约10盘口差价>MINDIFF1 and tisremainex(1,myaccount,合约10)>0 and 合约10买开价<合约10买一价,1,myaccount,合约10); 
tcancelex(合约10盘口差价>MINDIFF1 and tisremainex(3,myaccount,合约10)>0 and 合约10卖开价>合约10卖一价,3,myaccount,合约10); 
//开仓//无仓和无挂单时买1价开多//无仓和无挂单时卖1价开空//盘口差价大于1
if 合约10盘口差价>MINDIFF1 and 持合约10=0 and tisremainex(1,myaccount,合约10)=0 then begin
tbuy(1,手数,lmt,合约10买一价,0,myaccount,合约10);
合约10买开价:=合约10买一价;
end
if 合约10盘口差价>MINDIFF1 and 持合约10=0 and tisremainex(3,myaccount,合约10)=0 then begin
tbuyshort(1,手数,lmt,合约10卖一价,0,myaccount,合约10);
合约10卖开价:=合约10卖一价;
end
//空头持仓撤开多单//多头持仓撤开空单
tcancelex(空持合约10>0,1,myaccount,合约10);tcancelex(多持合约10>0,3,myaccount,合约10); 
//平仓价向持仓方向反向运动,则平仓挂单撤单,以后重开。单边持仓风险由主力合约对冲。
GLOBALVARIABLE:合约10平多价=0;GLOBALVARIABLE:合约10平空价=0;
tcancelex(tisremainex(2,myaccount,合约10)>0 and 合约10平多价>合约10卖一价,2,myaccount,合约10); 
tcancelex(tisremainex(4,myaccount,合约10)>0 and 合约10平空价<合约10买一价,4,myaccount,合约10); 
//平仓//有多仓和无挂平多单时卖1价平多//有空仓和无挂平空单时买1价平空
if 多持合约10>0 and tisremainex(2,myaccount,合约10)=0 then begin
tsell(1,多持合约10,lmt,合约10卖一价,0,myaccount,合约10);
合约10平多价:=合约10卖一价;
end
if 空持合约10>0 and tisremainex(4,myaccount,合约10)=0 then begin
tsellshort (1,空持合约10,lmt,合约10买一价,0,myaccount,合约10);
合约10平空价:=合约10买一价;
end

//有持仓变动就改变主力持仓,
空持非主力合约:=空持合约06+空持合约08+空持合约09+空持合约10;;多持非主力合约:=多持合约06+多持合约08+多持合约09+多持合约10;
非主仓差:=多持非主力合约-空持非主力合约;
//主力合约填补多空缺口//对手价开平仓
多持主力合约:=tbuyholdingex (myaccount,主力合约,2);空持主力合约:tsellholdingex (myaccount,主力合约,2);
主仓差:=多持主力合约-空持主力合约;
平衡仓差:=主仓差+非主仓差;DEBUGOUT('平衡仓差 %.0f', 平衡仓差);
if 平衡仓差<0 then begin
tcancelex( tisremainex(1,myaccount,主力合约)>0 ,1,myaccount,主力合约);
tcancelex( tisremainex(4,myaccount,主力合约)>0 ,4,myaccount,主力合约);
tbuy(空持主力合约=0 and tisremainex(1,myaccount,主力合约)=0,1,lmt,DYNAINFO2( 21,主力合约),0,myaccount,主力合约);//卖1价开多
tsellshort(空持主力合约>0 and tisremainex(4,myaccount,主力合约)=0,1,lmt,DYNAINFO2( 21,主力合约),0,myaccount,主力合约);//卖1价平空
end
if 平衡仓差>0 then begin
tcancelex( tisremainex(3,myaccount,主力合约)>0 ,3,myaccount,主力合约);
tcancelex( tisremainex(2,myaccount,主力合约)>0 ,2,myaccount,主力合约);
tbuyshort(多持主力合约=0 and tisremainex(3,myaccount,主力合约)=0,1,lmt,DYNAINFO2( 20,主力合约),0,myaccount,主力合约);//买1价开空
tsell(多持主力合约>0 and tisremainex(2,myaccount,主力合约)=0,1,lmt,DYNAINFO2( 20,主力合约),0,myaccount,主力合约);//买1价平多
end


 回到顶部
帅哥哟,离线,有人找我吗?
量化资产
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:16 积分:0 威望:0 精华:0 注册:2018/5/6 14:33:55
  发帖心情 Post By:2018/5/12 7:53:19 [只看该作者]

考虑基差风险
myaccount:='623450';手数:=1;MINDIFF1:=10;
//全合约:='CU06','CU07','CU08','CU09','CU10','CU11','CU12','CU01','CU02','CU03','CU04';

//非主力合约:='CU01','CU02','CU03','CU04','CU05','CU06','CU08','CU09','CU10','CU11','CU12';
//合约01:='CU01';合约02:='CU02';合约03:='CU03';合约04:='CU04';合约05:='CU05';合约06:='CU06';
//合约07:='CU07';合约08:='CU08';合约09:='CU09';合约10:='CU10';合约11:='CU11';合约12:='CU12';
//合约06:='CU11';合约08:='CU12';合约09:='CU01';
主力合约:='CU07';
多头均价主力合约:=TAVGENTERPRICEEX2(myaccount ,主力合约 ,0);空头均价主力合约:=TAVGENTERPRICEEX2(myaccount ,主力合约 ,1);
买一价主力合约:=DYNAINFO2( 20,主力合约);卖一价主力合约:=DYNAINFO2( 21,主力合约);盘口差价主力合约:=卖一价主力合约-买一价主力合约;
//合约06
合约06:='CU06';input:基差合约06(-190,-250,-150,10);
多头均价合约06:=TAVGENTERPRICEEX2(myaccount ,合约06 ,0);空头均价合约06:=TAVGENTERPRICEEX2(myaccount ,合约06 ,1);
买一价合约06:=DYNAINFO2( 20,合约06);卖一价合约06:=DYNAINFO2( 21,合约06);盘口差价合约06:=卖一价合约06-买一价合约06;
多持合约06:=tbuyholdingex (myaccount,合约06,2);空持合约06:=tsellholdingex(myaccount,合约06,2) ;持合约06:=多持合约06+空持合约06;//绝对持仓
//开仓条件//基差有一跳利润//盘口有一跳利润
if 持合约06=0 then begin
    买开仓基差差值合约06:买一价合约06-买一价主力合约-基差合约06,NODRAW;卖开仓基差差值合约06:卖一价合约06-卖一价主力合约-基差合约06,NODRAW;
    DEBUGFILE('C:\TEST.TXT','买开仓基差差值合约06小于10 %.0f', 买开仓基差差值合约06);DEBUGFILE('C:\TEST.TXT','卖开仓基差差值合约06大于10 %.0f', 卖开仓基差差值合约06);
    买开仓条件合约06:=买开仓基差差值合约06<MINDIFF1 and 盘口差价合约06>MINDIFF1;卖开仓条件合约06:=卖开仓基差差值合约06>MINDIFF1 and 盘口差价合约06>MINDIFF1;
    tcancelex(买开仓条件合约06=0 and tisremainex(1,myaccount,合约06)>0 ,1,myaccount,合约06); //买一卖一变动后,不满足条件就撤单
    tcancelex(卖开仓条件合约06=0 and tisremainex(3,myaccount,合约06)>0 ,3,myaccount,合约06); 
    //开仓//无仓和无挂单时买1价开多//无仓和无挂单时卖1价开空//盘口差价大于1
    tbuy     (买开仓条件合约06  and tisremainex(1,myaccount,合约06)=0,手数,lmt,买一价合约06,0,myaccount,合约06);
    tbuyshort(卖开仓条件合约06  and tisremainex(3,myaccount,合约06)=0,手数,lmt,卖一价合约06,0,myaccount,合约06);
end
//空头持仓撤开多单//多头持仓撤开空单
tcancelex(空持合约06>0,1,myaccount,合约06);tcancelex(多持合约06>0,3,myaccount,合约06); 
//平仓//平仓条件//基差有一跳利润//盘口有一跳利润
if 多持合约06>0 then begin
    多头基差均价合约06:=多头均价合约06-空头均价主力合约;//实际持仓基差价格
    平多仓基差差值合约06:卖一价合约06-卖一价主力合约-多头基差均价合约06,NODRAW;DEBUGFILE('C:\TEST.TXT','平多仓基差差值合约06大于10 %.0f', 平多仓基差差值合约06);
    平多仓条件合约06:=平多仓基差差值合约06>MINDIFF1;//平仓//有多仓和无挂平多单时卖1价平多//有空仓和无挂平空单时买1价平空
    tcancelex(tisremainex(2,myaccount,合约06)>0 and 平多仓条件合约06=0,2,myaccount,合约06);//买一卖一变动后,不满足条件就撤单
    tsell(平多仓条件合约06 and tisremainex(2,myaccount,合约06)=0,多持合约06,lmt,卖一价合约06,0,myaccount,合约06);
end
if 空持合约06>0 then begin 
    空头基差均价合约06:=空头均价合约06-多头均价主力合约;
    平空仓基差差值合约06:买一价合约06-买一价主力合约-空头基差均价合约06,NODRAW;DEBUGFILE('C:\TEST.TXT','平空仓基差差值合约06大于10 %.0f', 平空仓基差差值合约06);
    平空仓条件合约06:=平空仓基差差值合约06>MINDIFF1;
    tcancelex(tisremainex(4,myaccount,合约06)>0 and 平空仓条件合约06=0,4,myaccount,合约06); 
    tsellshort(平空仓条件合约06 and tisremainex(4,myaccount,合约06)=0,空持合约06,lmt,买一价合约06,0,myaccount,合约06);
end
//合约08
合约08:='CU08';input:基差合约08(180,150,200,10);
多头均价合约08:=TAVGENTERPRICEEX2(myaccount ,合约08 ,0);空头均价合约08:=TAVGENTERPRICEEX2(myaccount ,合约08 ,1);
买一价合约08:=DYNAINFO2( 20,合约08);卖一价合约08:=DYNAINFO2( 21,合约08);盘口差价合约08:=卖一价合约08-买一价合约08;
多持合约08:=tbuyholdingex (myaccount,合约08,2);空持合约08:=tsellholdingex(myaccount,合约08,2) ;持合约08:=多持合约08+空持合约08;//绝对持仓
//开仓条件//基差有一跳利润//盘口有一跳利润
if 持合约08=0 then begin
    买开仓基差差值合约08:买一价合约08-买一价主力合约-基差合约08,NODRAW;卖开仓基差差值合约08:卖一价合约08-卖一价主力合约-基差合约08,NODRAW;
    DEBUGFILE('C:\TEST.TXT','买开仓基差差值合约08小于10 %.0f', 买开仓基差差值合约08);DEBUGFILE('C:\TEST.TXT','卖开仓基差差值合约08大于10 %.0f', 卖开仓基差差值合约08);
    买开仓条件合约08:=买开仓基差差值合约08<MINDIFF1 and 盘口差价合约08>MINDIFF1;卖开仓条件合约08:=卖开仓基差差值合约08>MINDIFF1 and 盘口差价合约08>MINDIFF1;
    tcancelex(买开仓条件合约08=0 and tisremainex(1,myaccount,合约08)>0 ,1,myaccount,合约08); //买一卖一变动后,不满足条件就撤单
    tcancelex(卖开仓条件合约08=0 and tisremainex(3,myaccount,合约08)>0 ,3,myaccount,合约08); 
    //开仓//无仓和无挂单时买1价开多//无仓和无挂单时卖1价开空//盘口差价大于1
    tbuy     (买开仓条件合约08  and tisremainex(1,myaccount,合约08)=0,手数,lmt,买一价合约08,0,myaccount,合约08);
    tbuyshort(卖开仓条件合约08  and tisremainex(3,myaccount,合约08)=0,手数,lmt,卖一价合约08,0,myaccount,合约08);
end
//空头持仓撤开多单//多头持仓撤开空单
tcancelex(空持合约08>0,1,myaccount,合约08);tcancelex(多持合约08>0,3,myaccount,合约08); 
//平仓//平仓条件//基差有一跳利润//盘口有一跳利润
if 多持合约08>0 then begin
    多头基差均价合约08:=多头均价合约08-空头均价主力合约;//实际持仓基差价格
    平多仓基差差值合约08:卖一价合约08-卖一价主力合约-多头基差均价合约08,NODRAW;DEBUGFILE('C:\TEST.TXT','平多仓基差差值合约08大于10 %.0f', 平多仓基差差值合约08);
    平多仓条件合约08:=平多仓基差差值合约08>MINDIFF1;//平仓//有多仓和无挂平多单时卖1价平多//有空仓和无挂平空单时买1价平空
    tcancelex(tisremainex(2,myaccount,合约08)>0 and 平多仓条件合约08=0,2,myaccount,合约08);//买一卖一变动后,不满足条件就撤单
    tsell(平多仓条件合约08 and tisremainex(2,myaccount,合约08)=0,多持合约08,lmt,卖一价合约08,0,myaccount,合约08);
end
if 空持合约08>0 then begin 
    空头基差均价合约08:=空头均价合约08-多头均价主力合约;
    平空仓基差差值合约08:买一价合约08-买一价主力合约-空头基差均价合约08,NODRAW;DEBUGFILE('C:\TEST.TXT','平空仓基差差值合约08大于10 %.0f', 平空仓基差差值合约08);
    平空仓条件合约08:=平空仓基差差值合约08>MINDIFF1;
    tcancelex(tisremainex(4,myaccount,合约08)>0 and 平空仓条件合约08=0,4,myaccount,合约08); 
    tsellshort(平空仓条件合约08 and tisremainex(4,myaccount,合约08)=0,空持合约08,lmt,买一价合约08,0,myaccount,合约08);
end
//合约09
合约09:='CU09';input:基差合约09(350,300,400,10);
多头均价合约09:=TAVGENTERPRICEEX2(myaccount ,合约09 ,0);空头均价合约09:=TAVGENTERPRICEEX2(myaccount ,合约09 ,1);
买一价合约09:=DYNAINFO2( 20,合约09);卖一价合约09:=DYNAINFO2( 21,合约09);盘口差价合约09:=卖一价合约09-买一价合约09;
多持合约09:=tbuyholdingex (myaccount,合约09,2);空持合约09:=tsellholdingex(myaccount,合约09,2) ;持合约09:=多持合约09+空持合约09;//绝对持仓
//开仓条件//基差有一跳利润//盘口有一跳利润
if 持合约09=0 then begin
    买开仓基差差值合约09:买一价合约09-买一价主力合约-基差合约09,NODRAW;卖开仓基差差值合约09:卖一价合约09-卖一价主力合约-基差合约09,NODRAW;
    DEBUGFILE('C:\TEST.TXT','买开仓基差差值合约09小于10 %.0f', 买开仓基差差值合约09);DEBUGFILE('C:\TEST.TXT','卖开仓基差差值合约09大于10 %.0f', 卖开仓基差差值合约09);
    买开仓条件合约09:=买开仓基差差值合约09<MINDIFF1 and 盘口差价合约09>MINDIFF1;卖开仓条件合约09:=卖开仓基差差值合约09>MINDIFF1 and 盘口差价合约09>MINDIFF1;
    tcancelex(买开仓条件合约09=0 and tisremainex(1,myaccount,合约09)>0 ,1,myaccount,合约09); //买一卖一变动后,不满足条件就撤单
    tcancelex(卖开仓条件合约09=0 and tisremainex(3,myaccount,合约09)>0 ,3,myaccount,合约09); 
    //开仓//无仓和无挂单时买1价开多//无仓和无挂单时卖1价开空//盘口差价大于1
    tbuy     (买开仓条件合约09  and tisremainex(1,myaccount,合约09)=0,手数,lmt,买一价合约09,0,myaccount,合约09);
    tbuyshort(卖开仓条件合约09  and tisremainex(3,myaccount,合约09)=0,手数,lmt,卖一价合约09,0,myaccount,合约09);
end
//空头持仓撤开多单//多头持仓撤开空单
tcancelex(空持合约09>0,1,myaccount,合约09);tcancelex(多持合约09>0,3,myaccount,合约09); 
//平仓//平仓条件//基差有一跳利润//盘口有一跳利润
if 多持合约09>0 then begin
    多头基差均价合约09:=多头均价合约09-空头均价主力合约;//实际持仓基差价格
    平多仓基差差值合约09:卖一价合约09-卖一价主力合约-多头基差均价合约09,NODRAW;DEBUGFILE('C:\TEST.TXT','平多仓基差差值合约09大于10 %.0f', 平多仓基差差值合约09);
    平多仓条件合约09:=平多仓基差差值合约09>MINDIFF1;//平仓//有多仓和无挂平多单时卖1价平多//有空仓和无挂平空单时买1价平空
    tcancelex(tisremainex(2,myaccount,合约09)>0 and 平多仓条件合约09=0,2,myaccount,合约09);//买一卖一变动后,不满足条件就撤单
    tsell(平多仓条件合约09 and tisremainex(2,myaccount,合约09)=0,多持合约09,lmt,卖一价合约09,0,myaccount,合约09);
end
if 空持合约09>0 then begin 
    空头基差均价合约09:=空头均价合约09-多头均价主力合约;
    平空仓基差差值合约09:买一价合约09-买一价主力合约-空头基差均价合约09,NODRAW;DEBUGFILE('C:\TEST.TXT','平空仓基差差值合约09大于10 %.0f', 平空仓基差差值合约09);
    平空仓条件合约09:=平多仓基差差值合约09>MINDIFF1;
    tcancelex(tisremainex(4,myaccount,合约09)>0 and 平空仓条件合约09=0,4,myaccount,合约09); 
    tsellshort(平空仓条件合约09 and tisremainex(4,myaccount,合约09)=0,空持合约09,lmt,买一价合约09,0,myaccount,合约09);
end
//合约10
合约10:='CU10';input:基差合约10(530,400,600,10);
多头均价合约10:=TAVGENTERPRICEEX2(myaccount ,合约10 ,0);空头均价合约10:=TAVGENTERPRICEEX2(myaccount ,合约10 ,1);
买一价合约10:=DYNAINFO2( 20,合约10);卖一价合约10:=DYNAINFO2( 21,合约10);盘口差价合约10:=卖一价合约10-买一价合约10;
多持合约10:=tbuyholdingex (myaccount,合约10,2);空持合约10:=tsellholdingex(myaccount,合约10,2) ;持合约10:=多持合约10+空持合约10;//绝对持仓
//开仓条件//基差有一跳利润//盘口有一跳利润
if 持合约10=0 then begin
    买开仓基差差值合约10:买一价合约10-买一价主力合约-基差合约10,NODRAW;卖开仓基差差值合约10:卖一价合约10-卖一价主力合约-基差合约10,NODRAW;
    DEBUGFILE('C:\TEST.TXT','买开仓基差差值合约10小于10 %.0f', 买开仓基差差值合约10);DEBUGFILE('C:\TEST.TXT','卖开仓基差差值合约10大于10 %.0f', 卖开仓基差差值合约10);
    买开仓条件合约10:=买开仓基差差值合约10<MINDIFF1 and 盘口差价合约10>MINDIFF1;卖开仓条件合约10:=卖开仓基差差值合约10>MINDIFF1 and 盘口差价合约10>MINDIFF1;
    tcancelex(买开仓条件合约10=0 and tisremainex(1,myaccount,合约10)>0 ,1,myaccount,合约10); //买一卖一变动后,不满足条件就撤单
    tcancelex(卖开仓条件合约10=0 and tisremainex(3,myaccount,合约10)>0 ,3,myaccount,合约10); 
    //开仓//无仓和无挂单时买1价开多//无仓和无挂单时卖1价开空//盘口差价大于1
    tbuy     (买开仓条件合约10  and tisremainex(1,myaccount,合约10)=0,手数,lmt,买一价合约10,0,myaccount,合约10);
    tbuyshort(卖开仓条件合约10  and tisremainex(3,myaccount,合约10)=0,手数,lmt,卖一价合约10,0,myaccount,合约10);
end
//空头持仓撤开多单//多头持仓撤开空单
tcancelex(空持合约10>0,1,myaccount,合约10);tcancelex(多持合约10>0,3,myaccount,合约10); 
//平仓//平仓条件//基差有一跳利润//盘口有一跳利润
if 多持合约10>0 then begin
    多头基差均价合约10:=多头均价合约10-空头均价主力合约;//实际持仓基差价格
    平多仓基差差值合约10:卖一价合约10-卖一价主力合约-多头基差均价合约10,NODRAW;DEBUGFILE('C:\TEST.TXT','平多仓基差差值合约10大于10 %.0f', 平多仓基差差值合约10);
    平多仓条件合约10:=平多仓基差差值合约10>MINDIFF1;//平仓//有多仓和无挂平多单时卖1价平多//有空仓和无挂平空单时买1价平空
    tcancelex(tisremainex(2,myaccount,合约10)>0 and 平多仓条件合约10=0,2,myaccount,合约10);//买一卖一变动后,不满足条件就撤单
    tsell(平多仓条件合约10 and tisremainex(2,myaccount,合约10)=0,多持合约10,lmt,卖一价合约10,0,myaccount,合约10);
end
if 空持合约10>0 then begin 
    空头基差均价合约10:=空头均价合约10-多头均价主力合约;
    平空仓基差差值合约10:买一价合约10-买一价主力合约-空头基差均价合约10,NODRAW;DEBUGFILE('C:\TEST.TXT','平空仓基差差值合约10大于10 %.0f', 平空仓基差差值合约10);
    平空仓条件合约10:=平多仓基差差值合约10>MINDIFF1;
    tcancelex(tisremainex(4,myaccount,合约10)>0 and 平空仓条件合约10=0,4,myaccount,合约10); 
    tsellshort(平空仓条件合约10 and tisremainex(4,myaccount,合约10)=0,空持合约10,lmt,买一价合约10,0,myaccount,合约10);
end


//主力合约//主力合约填补多空缺口//对手价开平仓
//有持仓变动就改变主力持仓,
多持非主力合约:=多持合约06+多持合约08+多持合约09+多持合约10;空持非主力合约:=空持合约06+空持合约08+空持合约09+空持合约10;//
非主仓差:=多持非主力合约-空持非主力合约;
多持主力合约:=tbuyholdingex (myaccount,主力合约,2);空持主力合约:=tsellholdingex (myaccount,主力合约,2);
主仓差:=多持主力合约-空持主力合约;平衡仓差:=主仓差+非主仓差;
if 平衡仓差<0 then begin
    tcancelex( tisremainex(1,myaccount,主力合约)>0 ,1,myaccount,主力合约);tcancelex( tisremainex(4,myaccount,主力合约)>0 ,4,myaccount,主力合约);
    tbuy(空持主力合约=0 and tisremainex(1,myaccount,主力合约)=0,1,lmt,卖一价主力合约,0,myaccount,主力合约);//卖1价开多
    tsellshort(空持主力合约>0 and tisremainex(4,myaccount,主力合约)=0,1,lmt,卖一价主力合约,0,myaccount,主力合约);//卖1价平空
end
if 平衡仓差>0 then begin
    tcancelex( tisremainex(3,myaccount,主力合约)>0 ,3,myaccount,主力合约);tcancelex( tisremainex(2,myaccount,主力合约)>0 ,2,myaccount,主力合约);
    tbuyshort(多持主力合约=0 and tisremainex(3,myaccount,主力合约)=0,1,lmt,买一价主力合约,0,myaccount,主力合约);//买1价开空
    tsell(多持主力合约>0 and tisremainex(2,myaccount,主力合约)=0,1,lmt,买一价主力合约,0,myaccount,主力合约);//买1价平多
end


 回到顶部
帅哥哟,离线,有人找我吗?
量化资产
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:16 积分:0 威望:0 精华:0 注册:2018/5/6 14:33:55
  发帖心情 Post By:2018/9/24 22:03:48 [只看该作者]

基差与均值兼顾

基差均值:=-272;基差ATR:=7;myaccount:='623450';手数:=1;
主力合约:='SR01';
多头均价主力合约:=TAVGENTERPRICEEX2(myaccount ,主力合约 ,0);空头均价主力合约:=TAVGENTERPRICEEX2(myaccount ,主力合约 ,1);
多持主力合约:=tbuyholdingex (myaccount,主力合约,2);空持主力合约:=tsellholdingex (myaccount,主力合约,2);
买一价主力合约:=DYNAINFO2( 20,主力合约);卖一价主力合约:=DYNAINFO2( 21,主力合约);
//合约06
合约06:='SR11';
多头均价合约06:=TAVGENTERPRICEEX2(myaccount ,合约06 ,0);空头均价合约06:=TAVGENTERPRICEEX2(myaccount ,合约06 ,1);
买一价合约06:=DYNAINFO2( 20,合约06);卖一价合约06:=DYNAINFO2( 21,合约06);
多持合约06:=tbuyholdingex (myaccount,合约06,2);空持合约06:=tsellholdingex(myaccount,合约06,2) ;持合约06:=多持合约06+空持合约06;//绝对持仓
//开多平空条件
开多条件合约06:=买一价合约06-买一价主力合约<基差均值-基差ATR;
//开空平多条件
开空条件合约06:=卖一价合约06-买一价主力合约>基差均值+基差ATR;
//开仓条件
if 持合约06=0 then begin
    tcancelex(开多条件合约06=0 and tisremainex(1,myaccount,合约06)>0 ,1,myaccount,合约06); //买一卖一变动后,不满足条件就撤单
    tcancelex(开空条件合约06=0 and tisremainex(3,myaccount,合约06)>0 ,3,myaccount,合约06); 
    //开仓//无仓和无挂单时买1价开多//无仓和无挂单时卖1价开空//盘口差价大于1
    tbuy     (开多条件合约06  and tisremainex(1,myaccount,合约06)=0,手数,lmt,买一价合约06,0,myaccount,合约06);
    tbuyshort(开空条件合约06  and tisremainex(3,myaccount,合约06)=0,手数,lmt,卖一价合约06,0,myaccount,合约06);
end
//空头持仓撤开多单//多头持仓撤开空单
tcancelex(空持合约06>0,1,myaccount,合约06);tcancelex(多持合约06>0,3,myaccount,合约06); 
//合约06挂单成交后,主力合约反向开仓//合约06满足条件就平仓
if 多持合约06>0 then begin
    if 空持主力合约=0 then tbuyshort(tisremainex(3,myaccount,主力合约)=0,手数,lmt,买一价主力合约,0,myaccount,主力合约);
    else BEGIN
        多头持仓基差:=多头均价合约06-空头均价主力合约;
    平多条件合约06:=卖一价合约06-买一价主力合约>max(基差均值+基差ATR,多头持仓基差+2);
    tcancelex(tisremainex(2,myaccount,合约06)>0 and 开空条件合约06=0,2,myaccount,合约06);//买一卖一变动后,不满足条件就撤单
    tsell(平多条件合约06 and tisremainex(2,myaccount,合约06)=0,多持合约06,lmt,卖一价合约06,0,myaccount,合约06);
    END
end
if 空持合约06>0 then begin 
    if 多持主力合约=0 then tbuy     (tisremainex(1,myaccount,主力合约)=0,手数,lmt,卖一价主力合约,0,myaccount,主力合约);
    else BEGIN
        空头持仓基差:=空头均价合约06-多头均价主力合约;    
    平空条件合约06:=买一价合约06-买一价主力合约<MIN(基差均值-基差ATR,空头持仓基差);
    tcancelex(tisremainex(4,myaccount,合约06)>0 and 开多条件合约06=0,4,myaccount,合约06); 
    tsellshort(平空条件合约06 and tisremainex(4,myaccount,合约06)=0,空持合约06,lmt,买一价合约06,0,myaccount,合约06);
    END
end
//主力平仓
tsell     (持合约06=0 and 多持主力合约>0,多持主力合约,lmt,买一价主力合约,0,myaccount,主力合约);
tsellshort(持合约06=0 and 空持主力合约>0,空持主力合约,lmt,卖一价主力合约,0,myaccount,主力合约);


 回到顶部