以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  关于信号执行控制  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=73934)

--  作者:投机交易
--  发布时间:2015/1/5 11:15:48
--  关于信号执行控制
老师:我是刚从文华转过来的,开平仓指令用的是老系统中BPK,SPK,SK,BP,BK,SP;执行方式是出信号立即下单(盘中立即下单,不等到K线走完),由于程序中使用了H>AA,BPK;L<BB,SPK;之类的语句,有时行情激烈同一K线会先达到H>AA执行BPK信号,之后价格下行达到L<BB,又得执行SPK信号,但是同时H>AA还是满足的,这样就会不断开平仓直到当根K线走完,在文华8.1版里只要加上一个MONO_SIGNAL;语句就可控制一根K线只执行一个信号,即同一K线里最先出现的信号被执行之后出现的信号被忽略,金字塔里如何才能做到一根K线只执行一个交易信号?谢谢!
--  作者:投机交易
--  发布时间:2015/1/5 11:19:04
--  

另外,我只想用老系统开平语句,不要涉及新系统指令。


--  作者:jinzhe
--  发布时间:2015/1/5 11:22:27
--  

既然转到金字塔,那么就要按照金字塔 的来处理,

希望只出一个信号的,在新交易系统里面加一个开仓条件:holding=0


--  作者:投机交易
--  发布时间:2015/1/5 12:47:27
--  
holding=0是表示没有持仓,这个达不到我的要求,平时我几乎全程在场的,也就是一直有持仓的,只有在很特殊的情况下才有离场空仓,因此多数情况下执行反手指令即SPK或BPK,如果在开平仓指令行加入holding=0条件,即多数情况下不会被执行,只有在离场空仓后出现的信号才会被执行,这样达不到我的目的。例如:K线1之前已经执行了SPK指令,即持有了空头仓位,而行情走到K线1时先到达H>AA,我要求立即执行BPK指令(如果加入holding=0即不会被执行),随着行情变化,之后K线1又到达L<BB,如果不控制一根K线只执行一个信号,即会立即去执行SPK指令,我的要求是在K线1里控制后面的SPK指令不被执行,只执行前面的BPK指令,也就是一根K线里如果同时满足二个方向相反的信号就只执行最先出现的信号,忽略后面出现的信号,但是如果是不在同一根K线里的反向信号那是都要执行的,另外,holding=0只有在逐K线模式下才能使用,而我的程序只在序列模式运行。看看有没有类似文华8.1版的MONO_SIGNAL;或8.2版的MULTSIG_MIN(0,0,1);这样的办法来控制?
--  作者:jinzhe
--  发布时间:2015/1/5 13:29:14
--  
把你文华里面的代码贴出来
--  作者:投机交易
--  发布时间:2015/1/5 13:53:51
--  

AA0,BPK;
MM0,SPK;
WW0,SPK;
YY0,BPK;
PP0 AND YP0,BP;
XX0 AND XP0,SP;
DD0,SPK;
DU0,BPK;
GG0,BPK;
TT0,SPK;
HH0,BPK;
LL0,SPK;
MONO_SIGNAL;
AUTOFILTER;

其中有些反向信号有可能会在同一根K线里出现,我要求一根K线只执行一个信号。


--  作者:jinzhe
--  发布时间:2015/1/5 14:09:24
--  
只有一个信号(只有一个开或者一个平);还是能有一对开平信号
--  作者:投机交易
--  发布时间:2015/1/5 14:34:52
--  
应该是一对,例如,有时可能在同一根K线上先满足AA0之后再满足MM0,如果这种情况发生我要求只执行BPK,之后的SPK忽略,不在同一根K线上的反向信号则要求全部都要执行。
--  作者:jinzhe
--  发布时间:2015/1/5 14:46:44
--  
你这么多条件写出来会很多
--  作者:jinzhe
--  发布时间:2015/1/5 14:52:37
--  

variable:n=0;

if n=0 and holding=0 and (aa0 or yy0 or du0 or gg0 or hh0) then begin
 buy(1,1,market);
 n:=1;
end

if n=0 and holding=0 and (mm0 or ww0 or dd0 or tt0 or ll0) then begin
 buyshort(1,1,market);
 n:=1;
end

if n=1 and enterbars>0 and (aa0 or yy0 or du0 or gg0 or hh0) then begin

    sellshort(1,0,market);

    buy(holding=0,1,market);

end


if n=1 and enterbars>0 and (mm0 or ww0 or dd0 or tt0 or ll0) then begin

    sell(1,0,market);

    buyshort(holding=0,1,market);

end
if PP0 AND YP0 then sellshort(1,0,market);
if XX0 AND XP0 then sell(1,0,market);