以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://www.weistock.com/bbs/index.asp)
--  金字塔软件问题提交  (http://www.weistock.com/bbs/list.asp?boardid=2)
----  商品除权数据自动更新的建议  (http://www.weistock.com/bbs/dispbbs.asp?boardid=2&id=67597)

--  作者:soler
--  发布时间:2014/7/19 17:56:45
--  商品除权数据自动更新的建议
前段时间的菜油和焦炭因为金字塔没有及时推送除权数据,导致连续合约在换月的时候大幅跳空,造成空单的无端止损。金字塔技术人员建议采用指数合约,并映射连续合约的方法进行交易,但此方法有2个弊端。
第一:指数合约是金字塔服务器计算后推送给客户端的,而连续合约数据是CTP订阅的,势必在响应速度方面指数合约会慢于连续合约,我初步对照了一下,可能会慢0.5秒到1秒,因此在交易中会造成不必要的滑点.
第二:因为交易的是连续合约,而测试的是指数合约并通过映射连续合约交易,势必会造成回测结果跟实际交易结果的一定误差,虽然可能不大。


初步询问了一下金字塔技术人员,据说除权数据是人工计算好推送的,对技术力量强大的金字塔公司而言,实在难以想象。我个人觉的实现自动计算除权并自动推送的技术应该不难实现。

下面提供一些个人的思路,仅供金字塔技术人员参考。

第一步:开盘获取当月合约,代码如下(以pta为例,其他品种类同)

if  time=090300 and ISLASTBAR then begin


连续量:=CALLSTOCK(STKLABEL,vtVOL,6,-1);
量1:=CALLSTOCK(\'TA01\',vtvol,6,-1);
量3:=CALLSTOCK(\'TA02\',vtvol,6,-1);
量5:=CALLSTOCK(\'TA03\',vtvol,6,-1);
量7:=CALLSTOCK(\'TA04\',vtvol,6,-1);
量9:=CALLSTOCK(\'TA05\',vtvol,6,-1);
量11:=CALLSTOCK(\'TA06\',vtvol,6,-1);
y量1:=CALLSTOCK(\'TA07\',vtvol,6,-1);
y量3:=CALLSTOCK(\'TA08\',vtvol,6,-1);
y量5:=CALLSTOCK(\'TA09\',vtvol,6,-1);
y量7:=CALLSTOCK(\'TA10\',vtvol,6,-1);
y量9:=CALLSTOCK(\'TA11\',vtvol,6,-1);
y量11:=CALLSTOCK(\'TA12\',vtvol,6,-1);

if 连续量=量1 then WRITEINIFILESTRING(\'d:\\商品.ini\',\'pta\',\'当月\',\'TA01\');

if 连续量=量3 then WRITEINIFILESTRING(\'d:\\商品.ini\',\'pta\',\'当月\',\'TA02\');

if 连续量=量5 then WRITEINIFILESTRING(\'d:\\商品.ini\',\'pta\',\'当月\',\'TA03\');

if 连续量=量7 then WRITEINIFILESTRING(\'d:\\商品.ini\',\'pta\',\'当月\',\'TA04\');

if 连续量=量9 then WRITEINIFILESTRING(\'d:\\商品.ini\',\'pta\',\'当月\',\'TA05\');

if 连续量=量11 then WRITEINIFILESTRING(\'d:\\商品.ini\',\'pta\',\'当月\',\'TA06\');
if 连续量=y量1 then WRITEINIFILESTRING(\'d:\\商品.ini\',\'pta\',\'当月\',\'TA07\');

if 连续量=y量3 then WRITEINIFILESTRING(\'d:\\商品.ini\',\'pta\',\'当月\',\'TA08\');

if 连续量=y量5 then WRITEINIFILESTRING(\'d:\\商品.ini\',\'pta\',\'当月\',\'TA09\');

if 连续量=y量7 then WRITEINIFILESTRING(\'d:\\商品.ini\',\'pta\',\'当月\',\'TA10\');

if 连续量=y量9 then WRITEINIFILESTRING(\'d:\\商品.ini\',\'pta\',\'当月\',\'TA11\');

if 连续量=y量11 then WRITEINIFILESTRING(\'d:\\商品.ini\',\'pta\',\'当月\',\'TA12\');






end;


第二步:尾盘获取当日换月的合约

换月:=getINIFILE(\'d:\\商品.ini\',\'pta\',\'换月\');

 if 换月=0 and CURRENTTIME>145800 and time=150000 and islastbar then BEGIN

量1:=CALLSTOCK(\'TA01\',vtvol,6,0);
量2:=CALLSTOCK(\'TA02\',vtvol,6,0);
量3:=CALLSTOCK(\'TA03\',vtvol,6,0);
量4:=CALLSTOCK(\'TA04\',vtvol,6,0);
量5:=CALLSTOCK(\'TA05\',vtvol,6,0);
量6:=CALLSTOCK(\'TA06\',vtvol,6,0);
量7:=CALLSTOCK(\'TA07\',vtvol,6,0);
量8:=CALLSTOCK(\'TA08\',vtvol,6,0);
量9:=CALLSTOCK(\'TA09\',vtvol,6,0);
量10:=CALLSTOCK(\'TA10\',vtvol,6,0);
量11:=CALLSTOCK(\'TA11\',vtvol,6,0);
量12:=CALLSTOCK(\'TA12\',vtvol,6,0);
连续量:=CALLSTOCK(STKLABEL,vtVOL,6,0);
if 量1>连续量 and valid(连续量) and valid(量1) then begin
WRITEINIFILE(\'d:\\商品.ini\',\'pta\',\'换月\',1);
WRITEINIFILESTRING(\'d:\\商品.ini\',\'pta\',\'下月\',\'TA01\');
end;
if 量2>连续量 and valid(连续量) and valid(量2) then begin
WRITEINIFILE(\'d:\\商品.ini\',\'pta\',\'换月\',1);
WRITEINIFILESTRING(\'d:\\商品.ini\',\'pta\',\'下月\',\'TA02\');
end;
if 量3>连续量 and valid(连续量) and valid(量3) then begin
WRITEINIFILE(\'d:\\商品.ini\',\'pta\',\'换月\',1);
WRITEINIFILESTRING(\'d:\\商品.ini\',\'pta\',\'下月\',\'TA03\');
end;
if 量4>连续量 and valid(连续量) and valid(量4) then begin
WRITEINIFILE(\'d:\\商品.ini\',\'pta\',\'换月\',1);
WRITEINIFILESTRING(\'d:\\商品.ini\',\'pta\',\'下月\',\'TA04\');
end;
if 量5>连续量 and valid(连续量) and valid(量5) then begin
WRITEINIFILE(\'d:\\商品.ini\',\'pta\',\'换月\',1);
WRITEINIFILESTRING(\'d:\\商品.ini\',\'pta\',\'下月\',\'TA05\');
end;
if 量6>连续量 and valid(连续量) and valid(量6) then begin
WRITEINIFILE(\'d:\\商品.ini\',\'pta\',\'换月\',1);
WRITEINIFILESTRING(\'d:\\商品.ini\',\'pta\',\'下月\',\'TA06\');
end;
if 量7>连续量 and valid(连续量) and valid(量7) then begin
WRITEINIFILE(\'d:\\商品.ini\',\'pta\',\'换月\',1);
WRITEINIFILESTRING(\'d:\\商品.ini\',\'pta\',\'下月\',\'TA07\');
end;
if 量8>连续量 and valid(连续量) and valid(量8) then begin
WRITEINIFILE(\'d:\\商品.ini\',\'pta\',\'换月\',1);
WRITEINIFILESTRING(\'d:\\商品.ini\',\'pta\',\'下月\',\'TA08\');
end;
if 量9>连续量 and valid(连续量) and valid(量9) then begin
WRITEINIFILE(\'d:\\商品.ini\',\'pta\',\'换月\',1);
WRITEINIFILESTRING(\'d:\\商品.ini\',\'pta\',\'下月\',\'TA09\');
end;
if 量10>连续量 and valid(连续量) and valid(量10) then begin
WRITEINIFILE(\'d:\\商品.ini\',\'pta\',\'换月\',1);
WRITEINIFILESTRING(\'d:\\商品.ini\',\'pta\',\'下月\',\'TA10\');
end;
if 量11>连续量 and valid(连续量) and valid(量11) then begin
WRITEINIFILE(\'d:\\商品.ini\',\'pta\',\'换月\',1);
WRITEINIFILESTRING(\'d:\\商品.ini\',\'pta\',\'下月\',\'TA11\');
end;
if 量12>连续量 and valid(连续量) and valid(量12) then begin
WRITEINIFILE(\'d:\\商品.ini\',\'pta\',\'换月\',1);
WRITEINIFILESTRING(\'d:\\商品.ini\',\'pta\',\'下月\',\'TA12\');
end;

end;

第三:此上面两步已经获取了当月合约和下月合约的代码,只要在第二天开盘时候处理好前一天当月合约和下月合约收盘价差,就可以自动计算除权数据 :代码如下


换月:=getINIFILE(\'d:\\商品.ini\',\'pta\',\'换月\');

if 换月 then BEGIN

当月:=getINIFILESTRING(\'d:\\商品.ini\',\'pta\',\'当月\');
下月:=getINIFILESTRING(\'d:\\商品.ini\',\'pta\',\'下月\');

当月收:=CALLSTOCKEX(当月,vtclose,6,-1,5);

下月收:=CALLSTOCKEX(下月,vtclose,6,-1,5);



除权价差:=下月收-当月收;

end;


以上是个人的一点愚见,希望金字塔技术人员为用户着想,早日实现自动推送除权数据。祝金字塔越来越强大。




--  作者:wplovelm
--  发布时间:2014/7/19 21:14:09
--  
这个必须顶
图片点击可在新窗口打开查看图片点击可在新窗口打开查看图片点击可在新窗口打开查看图片点击可在新窗口打开查看图片点击可在新窗口打开查看图片点击可在新窗口打开查看图片点击可在新窗口打开查看图片点击可在新窗口打开查看

--  作者:soler
--  发布时间:2014/7/21 8:43:28
--  
图片点击可在新窗口打开查看
--  作者:FexTel
--  发布时间:2014/7/21 9:06:46
--  

初步询问了一下金字塔技术人员,据说除权数据是人工计算好推送的,对技术力量强大的金字塔公司而言,实在难以想象。我个人觉的实现自动计算除权并自动推送的技术应该不难实现。

 

 

1,除权数据一直是自动生成然后每日自动推送至用户本地

2,人工核实是指历史的除权数据处理,自动处理后再次人工对照。确保其正确性

3,上次除权数据没有正常推送,是服务器推送存在问题,已经修正

 


--  作者:raidsan
--  发布时间:2014/7/21 10:34:46
--  
请问今天的橡胶连续 除权 正常吗? 
今天启动后看到有引入除权, 但是后来程序崩溃, 再次进来看到橡胶连续没有除权 (不确定未崩溃前除权是否正常)

手动删除 setting\\option.ini 里的updatepower 
或者手动导入除权文件: temp\\power.pwr  
都未能正确除权

--  作者:soler
--  发布时间:2014/7/21 10:41:54
--  
橡胶数据又出错了
--  作者:FexTel
--  发布时间:2014/7/21 10:50:40
--  

1,查看了下服务器后台数据,除权数据都是存在的

2,除权数据是走的HTTP协议,同一文件推送那边有限制,有时自动下载上次的传送状态,我们这边处理下。给大家带来的不便深感歉意