欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件公式模型编写问题提交 → [求助]帮忙看看程序是否正确

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有2708人关注过本帖树形打印复制链接

主题:[求助]帮忙看看程序是否正确

帅哥哟,离线,有人找我吗?
llcly
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:17 积分:0 威望:0 精华:0 注册:2015/4/23 17:19:09
[求助]帮忙看看程序是否正确  发帖心情 Post By:2019/7/24 10:54:14    Post IP:117.28.251.178[只看该作者]

需求:在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
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:26632 积分:0 威望:0 精华:7 注册:2015/4/9 14:59:07
  发帖心情 Post By:2019/7/24 13:24:05    Post IP:180.169.30.6[只看该作者]

不对的几点地方如下:

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)二线
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金叉 := TRIX3>TRML3;
TRIX3死叉 := TRML3>TRIX3;

 

 

if TRIX3金叉=1 and DMA金叉=1 then begin
 开多1:BUY(HOLDING=0,NUM,MARKET);
end


if DMA死叉=1 and ( OPENPROFIT>0 or TRIX3死叉=1 ) then begin
 平多1: SELL(HOLDING>0,NUM,MARKET);
end



编程无捷径,技巧靠积累。
 回到顶部
帅哥哟,离线,有人找我吗?
llcly
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:17 积分:0 威望:0 精华:0 注册:2015/4/23 17:19:09
  发帖心情 Post By:2019/7/25 9:18:28    Post IP:117.28.251.178[只看该作者]

非常感谢

 回到顶部