以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (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协议,同一文件推送那边有限制,有时自动下载上次的传送状态,我们这边处理下。给大家带来的不便深感歉意 |