以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (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=69727)

--  作者:dcetrader
--  发布时间:2014/9/9 11:10:22
--  [原创]运行选项选的高频,仓位平掉以后,每隔周期后还在发出平仓指令
首先,我用的是等价线(请斑竹老师不要说不要用等价线实战这样的话,我开仓执行的还挺好,平仓有问题,请帮助修改解决下);

平空:SELLSHORT(ref(PK,1),1,MARKETR);                  //平空信号
开多:BUY(ref(KD,1) AND HOLDING=0,1,MARKETR);          //开多信号
平多:SELL(ref(PD,1),1,MARKETR);                       //平多信号
开空:BUYSHORT(ref(KK,1) AND HOLDING=0,1,MARKETR);     //开空信号

这是我指令公式,用的是突破水平线的逻辑

图片点击可在新窗口打开查看此主题相关图片如下:2014-09-09_110745.jpg
图片点击可在新窗口打开查看
这是我选项

开仓OK,没问题,到了平仓,我用15分钟线,由于是等价线,市场不动的时候,新线也不会生成,所以每隔15分钟后,由于平仓信号还没消失,系统就再平仓一次,实际上我的已经早平过了。。。。

看看能有什么变通的办法,比如在公式上修改下?
比较急,谢谢!
老师不要说等价线仅供参考云云,一切都在进步,都在创新,谢谢!


[此贴子已经被作者于2014/9/9 11:12:08编辑过]

--  作者:dcetrader
--  发布时间:2014/9/9 11:14:15
--  
这里等价线问题不在K线闪嗦变化不定,而在于执行方面,所以和老师们以往所指的“仅供参考”的缘由含义是完全不同的。
--  作者:dcetrader
--  发布时间:2014/9/9 11:16:52
--  
另外,我在想,如果运行选项里的K线走完不按标准时间K线定义,而真正按图表里的K线定义(等价线的k线走完),一切就解决了。目前金魔方飞狐就是按实际K线算的
[此贴子已经被作者于2014/9/9 11:18:18编辑过]

--  作者:FexTel
--  发布时间:2014/9/9 11:32:22
--  

1,这个问题我们再考虑下

2,目前您可以使用变量控制,当K线没变化时不产生平仓信号

例如 VARIABLE:A=0;

IF PINGC BARPOS>A THEN

BEIGIN

SELL();

A:BARPOS;

END

 

对应后面的平仓条件加个BRPOS>A;

[此贴子已经被作者于2014/9/9 11:33:01编辑过]

--  作者:dcetrader
--  发布时间:2014/9/9 11:44:52
--  
fex老师,是这样写就么?
----
平空:SELLSHORT(ref(PK,1),1,MARKETR);                  //平空信号
开多:BUY(ref(KD,1) AND HOLDING=0,1,MARKETR);          //开多信号
平多:SELL(ref(PD,1),1,MARKETR);                       //平多信号
开空:BUYSHORT(ref(KK,1) AND HOLDING=0,1,MARKETR);     //开空信号

VARIABLE:A=0;

IF 平多 BARPOS>A THEN

BEIGIN

SELL();

END


IF 平空 BARPOS>A THEN

BEIGIN

SELLSHORT();

A:BARPOS;

END


另外,SELL()还是SELL(ref(PD,1),1,MARKETR);      ??  或者SELLSHORT(ref(PK,1),1,MARKETR);      ??


--  作者:dcetrader
--  发布时间:2014/9/9 12:31:26
--  
这么写可以把???

--------------------------------------------------------
VARIABLE:A=0;
IF BARPOS>A THEN
BEGIN

 SELLSHORT( PK ,SS,MARKETr);                  //平空信号
 BUY( KD  AND HOLDING=0,SS,MARKETr);         //开多信号
 SELL( PD ,SS,MARKETr);                       //平多信号
 BUYSHORT( KK  AND HOLDING=0,ss,MARKETr);      //开空信号
 
 A:=BARPOS;
END

 
[此贴子已经被作者于2014/9/9 12:32:04编辑过]

--  作者:yukizzc
--  发布时间:2014/9/9 13:09:15
--  

这种不行,BARPOS>A你这样条件那么只会在下一根k生成时进行一次程序化轮询之后A:=BARPOS; 代码就不执行了都

 

必须要这么写,每个开平语句用对应全局变量来限制

if 平空 and barpos>A then begin

sellshort();

A:=barpos;

end

 

 


--  作者:dcetrader
--  发布时间:2014/9/9 13:17:52
--  
YUKI老师,是必须 sellshort();还是用 SELLSHORT( PK ,SS,MARKETr);   也行?
 

--  作者:dcetrader
--  发布时间:2014/9/9 13:24:10
--  
KD:=...;          //开多条件
PD:=...;          //平多条件
KK:=...;          //开空条件
PK:=...;          //平空条件

VARIABLE:A=0;
IF PK AND BARPOS>A   THEN
BEGIN
 SELLSHORT();                  //平空信号
 A:=BARPOS;
END

IF KD AND BARPOS>A  THEN
BEGIN
 BUY();                  //开多信号
 A:=BARPOS;
END

IF PD AND BARPOS>A   THEN
BEGIN
 SELL();                  //平多信号
 A:=BARPOS;
END

IF KK AND BARPOS>A THEN
BEGIN
 BUYSHORT();                  //开空信号
 A:=BARPOS;
END

是这样的么
 
[此贴子已经被作者于2014/9/9 13:24:31编辑过]

--  作者:yukizzc
--  发布时间:2014/9/9 13:24:56
--  

里面的开平语句你自己写啊,这里只是在开平代码外加了个barpos的条件控制,使之按照你等价k的序列来。

barpos的值是你等价k的序列,不会按照你15分钟一根k的固定值