金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
楼主: 105190

多次开仓,同时每一个开仓价分别对应着一个平仓价,后台如何实现这个逻辑?

[复制链接]

0

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
gxx978
发表于 2023-12-12 17:10 | 显示全部楼层
市价报单,报单价会显示为0的,只有成交后,才会在后台的程序化交易明细中显示最后成交的价格,这样获取到开仓价格才不是0。
截图202312121710216598.png
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

43

主题

198

帖子

198

积分

Rank: 4

等级: 专业版

注册:
2021-10-19
曾用名:
 楼主| 发表于 2023-12-18 12:08 | 显示全部楼层
技术009 发表于 2023-12-12 15:50
这种目前在PEL上不好处理,也没有现成的范例。

因为这个需求实际需要维护一个不定长的数组,包括数组的 ...

不是可以用超全局变量储存数组数据吗?
回复

使用道具 举报

0

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
gxx978
发表于 2023-12-18 13:14 | 显示全部楼层
这个只是用全局变量来记录每次的开仓价格,这个维度也是分在不同的K线上的,这种是可以,因为K线数据本身就是一个数组,你可以把这个全局变量看做也是一个数组。不好处理说的是一根K线上记录的一个数组,PEL层面上是这个不好处理这个。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

43

主题

198

帖子

198

积分

Rank: 4

等级: 专业版

注册:
2021-10-19
曾用名:
 楼主| 发表于 2023-12-18 13:24 | 显示全部楼层
variable:kcj=0,kcj2=0;

//开多单
  
    if 短多 AND kcj=0 then
begin   
      
    多开:Tbuy(1 AND TBUYHOLDINGEX('','',2)=0,SS,MKT);

    kcj:=HIGH;

end


  //平多单
  
     if  H>= kcj+N*MINDIFF    then
begin  
  
     平多:TSELL(1 AND  TBUYHOLDINGEX('','',2)=SS AND kcj>0,SS,LMT, kcj+N*MINDIFF);   
      
     kcj:=0;

end


SSD1:kcj2;


//开多单2
  
    if 短多 AND kcj2=0 then
begin   
      
    多开2:Tbuy(1 AND TBUYHOLDINGEX('','',2)=SS AND H<kcj AND   TENTERBARS>1,SS,MKT);

   kcj2:=HIGH;
  
end


  //平多单2
  
     if  H>= kcj2+N*MINDIFF    then
begin  
  
     平多2:TSELL(1 AND  TBUYHOLDINGEX('','',2)=SS*2  AND kcj2>0 ,SS,LMT, kcj2+N*MINDIFF);   
     
     
   kcj2:=0;

end
我这样写可以吗?但是发现回测结果会漏单 这是怎么一回事呢?由于需要在IF判断语句中用到实际后台持仓数量的情况下怎么办?试过了很多办法都不行
在IF条件语句条件语句下,后台持仓数据函数TBUYHOLDINGEX('','',2)=0能够成立,但是TBUYHOLDINGEX('','',2)>0以上都取不到值,条件就不成立,这是怎么一回事啊?
回复

使用道具 举报

43

主题

198

帖子

198

积分

Rank: 4

等级: 专业版

注册:
2021-10-19
曾用名:
 楼主| 发表于 2023-12-18 13:27 | 显示全部楼层
这个红色框里面的部分平仓单并不符合盈利+3变动平仓 问题出在哪里呢?
截图202312181326454155.png
回复

使用道具 举报

0

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
gxx978
发表于 2023-12-18 13:29 | 显示全部楼层
后台上不能使用variable,需要使用globalvariable,二者的初始化方式不同的。至于你要跟踪代码的逻辑计算过程,那需要用debugfile来跟踪测试,这样才能分析你的代码运行是否符合你的预期的,你发给我们看,我们也只是认为逻辑上是可以这样写的,但是实际运行结果你要跟踪调试之后才能知道的。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

43

主题

198

帖子

198

积分

Rank: 4

等级: 专业版

注册:
2021-10-19
曾用名:
 楼主| 发表于 2023-12-18 13:51 | 显示全部楼层
使用globalvariable会造成回测结果异常  附图 使用variable有139笔成交   globalvariable则只有前面的37笔
截图202312181348238118.png
截图202312181349533469.png
回复

使用道具 举报

0

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
gxx978
发表于 2023-12-18 13:59 | 显示全部楼层
这两个函数本身就不同啊,不是通用的啊。只是说后台程序化交易逻辑是建议使用globalvariable的。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

43

主题

198

帖子

198

积分

Rank: 4

等级: 专业版

注册:
2021-10-19
曾用名:
 楼主| 发表于 2023-12-18 14:26 | 显示全部楼层
使用variable大部分时间正常 ,时不时有错误平仓单子跑出来 是不是可能是我代码写错的问题?而使用globalvariable 则严重漏单啊
回复

使用道具 举报

43

主题

198

帖子

198

积分

Rank: 4

等级: 专业版

注册:
2021-10-19
曾用名:
 楼主| 发表于 2023-12-18 14:27 | 显示全部楼层
variable:kcj=0,kcj2=0,kcj3=0,kcj4=0,kcj5=0,kcj6=0,kcj7=0,kcj8=0,kcj9=0,kcj10=0;


RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100;
K:=SMA(RSV,P1,1);
D:=SMA(K,P2,1);
J:=3*K-2*D,NODRAW;



DIFF :=EMA(CLOSE,S) - EMA(CLOSE,P);
DEA  :=EMA(DIFF,M);
MACD1 :=2*(DIFF-DEA), COLORSTICK;
macdjc:cross(diff,dea),NODRAW;//macd金叉
macdsc:cross(dea,diff),NODRAW;
kdjjc:cross(k,d),NODRAW;//kdj金叉
kdjsc:cross(d,k),NODRAW;


短多:= kdjjc OR macdjc;

//开多单
  
    if 短多 AND kcj=0 then
begin   
      
    多开:Tbuy(1 AND TBUYHOLDINGEX('','',2)=0,SS,MKT);

    kcj:=HIGH;

end


  //平多单
  
     if  H>= kcj+N*MINDIFF    then
begin  
  
     平多:TSELL(1 AND  TBUYHOLDINGEX('','',2)=SS AND kcj>0,SS,LMT, kcj+N*MINDIFF);   
      
     kcj:=0;

end


SSD1:kcj2;


//开多单2
  
    if 短多 AND kcj2=0 then
begin   
      
    多开2:Tbuy(1 AND TBUYHOLDINGEX('','',2)=SS AND H<kcj AND   TENTERBARS>1,SS,MKT);

   kcj2:=HIGH;
  
end


  //平多单2
  
     if  H>= kcj2+N*MINDIFF    then
begin  
  
     平多2:TSELL(1 AND  TBUYHOLDINGEX('','',2)=SS*2  AND kcj2>0 ,SS,LMT, kcj2+N*MINDIFF);   
     
     
   kcj2:=0;

end

SSD:kcj2;


//开多单3
  
    if 短多  AND kcj3=0 then
begin   
      
    多开3:Tbuy(1 AND TBUYHOLDINGEX('','',2)=SS*2 AND H<kcj2 AND   TENTERBARS>1,SS,MKT);

   kcj3:=HIGH;
  
end


  //平多单3
  
     if  H>= kcj3+N*MINDIFF    then
begin  
  
     平多3:TSELL(1 AND  TBUYHOLDINGEX('','',2)=SS*3   AND kcj3>0,SS,LMT, kcj3+N*MINDIFF);   
     
     
   kcj3:=0;

end


  
  

//开多单4
  
    if 短多 AND kcj4=0 then
begin   
      
    多开4:Tbuy(1 AND TBUYHOLDINGEX('','',2)=SS*3 AND H<kcj3 AND   TENTERBARS>1,SS,MKT);

   kcj4:=HIGH;
  
end


  //平多单4
  
     if  H>= kcj4+N*MINDIFF   then
begin  
  
     平多4:TSELL(1 AND  TBUYHOLDINGEX('','',2)=SS*4  AND kcj4>0,SS,LMT, kcj4+N*MINDIFF);   
     
     
   kcj4:=0;

end



//开多单5
  
    if 短多  AND kcj5=0 then
begin   
      
    多开5:Tbuy(1 AND TBUYHOLDINGEX('','',2)=SS*4 AND H<kcj4 AND   TENTERBARS>1,SS,MKT);

   kcj5:=HIGH;
  
end


  //平多单5
  
     if  H>= kcj5+N*MINDIFF    then
begin  
  
     平多5:TSELL(1 AND  TBUYHOLDINGEX('','',2)=SS*5  AND kcj5>0 ,SS,LMT, kcj5+N*MINDIFF);   
     
     
   kcj5:=0;

end


  
  
   //开多单6
  
    if 短多  AND kcj6=0 then
begin   
      
    多开6:Tbuy(1 AND TBUYHOLDINGEX('','',2)=SS*5 AND H<kcj5 AND   TENTERBARS>1,SS,MKT);

   kcj6:=HIGH;
  
end


  //平多单6
  
     if  H>= kcj6+N*MINDIFF      then
begin  
  
     平多6:TSELL(1 AND  TBUYHOLDINGEX('','',2)=SS*6 AND kcj6>0 ,SS,LMT, kcj6+N*MINDIFF);   
     
     
   kcj6:=0;

end

  
  
    //开多单7
  
    if 短多  AND kcj7=0 then
begin   
      
    多开7:Tbuy(1 AND TBUYHOLDINGEX('','',2)=SS*6  AND H<kcj6 AND   TENTERBARS>1,SS,MKT);

   kcj7:=HIGH;
  
end


  //平多单7
  
     if  H>= kcj7+N*MINDIFF     then
begin  
  
     平多7:TSELL(1 AND  TBUYHOLDINGEX('','',2)=SS*7  AND kcj7>0,SS,LMT, kcj7+N*MINDIFF);   
     
     
   kcj7:=0;

end


  
      //开多单8
  
    if 短多 AND kcj8=0 then
begin   
      
    多开8:Tbuy(1 AND TBUYHOLDINGEX('','',2)=SS*7  AND H<kcj7 AND   TENTERBARS>1,SS,MKT);

   kcj8:=HIGH;
  
end


  //平多单8
  
     if  H>= kcj8+N*MINDIFF    then
begin  
  
     平多8:TSELL(1 AND  TBUYHOLDINGEX('','',2)=SS*8 AND kcj8>0 ,SS,LMT, kcj8+N*MINDIFF);   
     
     
   kcj8:=0;

end


  
  
       //开多单9
  
    if 短多 AND kcj9=0 then
begin   
      
    多开9:Tbuy(1 AND TBUYHOLDINGEX('','',2)=SS*8  AND H<kcj8 AND   TENTERBARS>1,SS,MKT);

   kcj9:=HIGH;
  
end


  //平多单9
  
     if  H>= kcj9+N*MINDIFF   then
begin  
  
     平多9:TSELL(1 AND  TBUYHOLDINGEX('','',2)=SS*9  AND kcj9>0 ,SS,LMT, kcj9+N*MINDIFF);   
     
     
   kcj9:=0;

end

  
  
  
       //开多单10
  
    if 短多  AND kcj10=0 then
begin   
      
    多开10:Tbuy(1 AND TBUYHOLDINGEX('','',2)=SS*9  AND H<kcj9  AND   TENTERBARS>1,SS,MKT);

   kcj10:=HIGH;
  
end


  //平多单10
  
     if  H>= kcj10+N*MINDIFF  then
begin  
  
     平多10:TSELL(1 AND  TBUYHOLDINGEX('','',2)=SS*10  AND kcj10>0  ,SS,LMT, kcj10+N*MINDIFF);   
     
     
   kcj10:=0;

end
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 微信登录

本版积分规则

手机版|小黑屋|上海金之塔信息技术有限公司 ( 沪ICP备13035422号 )

GMT+8, 2025-8-22 02:41 , Processed in 0.097930 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表