以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://222.73.7.161/bbs/index.asp) -- 公式模型编写问题提交 (http://222.73.7.161/bbs/list.asp?boardid=4) ---- [求助]帮忙看看程序是否正确 (http://222.73.7.161/bbs/dispbbs.asp?boardid=4&id=171257) |
-- 作者:llcly -- 发布时间:2019/7/24 10:54:14 -- [求助]帮忙看看程序是否正确 需求:在TRIX(6,10)金叉内,每次DMA(6,10,6)金叉时,开多。 每次DMA死叉时,如果有盈利,平仓,否则等TRIX死叉时平仓。 程序: VARIABLE: FLAG1=0; //DMA(S,P,M)二线 DDD:=(MA(CLOSE,S)-MA(CLOSE,P)); AMA:=MA(DDD,M); //TRIX(N1,M1)线 TR3:= EMA(EMA(EMA(CLOSE,N1),N1),N1); TRIX3 : (TR3-REF(TR3,1))/REF(TR3,1)*100,LINETHICK0; TRML3 : MA(TRIX3,M1),LINETHICK0; DMA金叉 := CROSS(DDD,AMA); DMA死叉 := CROSS(AMA,DDD); TRIX3金叉 := CROSS(TRIX3,TRML3); TRIX3死叉 := CROSS(TRML3,TRIX3); IF TRIX3金叉=1 THEN
FLAG1 :=1; IF TRIX3死叉=1 THEN
FLAG1 :=0; IF FLAG1=1 THEN BEGIN
IF DMA金叉=1 THEN
BEGIN
开多1:BUY(HOLDING=0,NUM,MARKET);
FLAG1:=0; END; END; IF DMA死叉=1 THEN BEGIN IF NUMPROFIT(1)>0 THEN 平多1: SELL(HOLDING>0,NUM,MARKET);
ELSE
BEGIN
IF TRIX3死叉=1 THEN
平多2: SELL(HOLDING>0,NUM,MARKET);
END; END;
|
-- 作者:wenarm -- 发布时间:2019/7/24 13:24:05 -- 不对的几点地方如下: 1,TRIX3金叉 := CROSS(TRIX3,TRML3); CROSS返回的是交叉时的状态(某根k上是1,不能代码一个范围),所以在交叉之后,TRIX3>TRML3的情况下,TRIX3金叉 := CROSS(TRIX3,TRML3);返回值一样是0. 2.您说的盈利指的应该是持仓的浮动盈亏,不是平仓盈亏,所以NUMPROFIT(1)是不合理的,他只能返回上次平仓时的结果。 注:下面修改中使用OPENPROFIT函数,并且规定了大于0。 3.根据第一点,所以不需要使用全局变量进行标记。
代码修改如下: //DMA(S,P,M)二线 //TRIX(N1,M1)线
if TRIX3金叉=1 and DMA金叉=1 then begin
|
-- 作者:llcly -- 发布时间:2019/7/25 9:18:28 -- 非常感谢 |