金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 6352|回复: 25

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

[复制链接]

43

主题

198

帖子

198

积分

Rank: 4

等级: 专业版

注册:
2021-10-19
曾用名:
发表于 2023-12-12 14:56 | 显示全部楼层 |阅读模式
需要实现多次开仓,同时每一个开仓价分别对应着一个平仓价,后台系统如何实现这个逻辑?可有范例?
回复

使用道具 举报

0

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
gxx978
发表于 2023-12-12 15:32 | 显示全部楼层
本帖最后由 技术010 于 2023-12-12 15:52 编辑

具体要看你整体的交易思路的,可以参考函数TORDERPRICE,这个可以取前N次的开仓价格的。范例没有哦。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

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

因为这个需求实际需要维护一个不定长的数组,包括数组的增删查改,即平仓的价格从数组里移出,新开的成交价加入到数组里。然后遍历数组里的价格判断是否需要平仓。但是目前PEL操作数组并不是很方便。使用数组策略连续性也不是很好,暂停或者意外终止都会完全丢失数组里保持的数据。  
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

43

主题

198

帖子

198

积分

Rank: 4

等级: 专业版

注册:
2021-10-19
曾用名:
 楼主| 发表于 2023-12-12 16:14 | 显示全部楼层
技术010 发表于 2023-12-12 15:32
具体要看你整体的交易思路的,可以参考函数TORDERPRICE,这个可以取前N次的开仓价格的。范例没有哦。

我已经在图表系统上实现该功能了,就是转成后台出错了,用函数TORDERPRICE取值为何都是同一个?
回复

使用道具 举报

43

主题

198

帖子

198

积分

Rank: 4

等级: 专业版

注册:
2021-10-19
曾用名:
 楼主| 发表于 2023-12-12 16:15 | 显示全部楼层

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

end


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



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

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


//开多单3
  
    if 短多   AND TBUYHOLDINGEX('','',2)=2*SS AND  TENTERBARS>1 then
begin   
      
    多开3:Tbuy(1,SS,MKT);
   kcj3:= TORDERPRICE(1,3);
end
  
  //平多单3
  
     if  H>=TORDERPRICE(1,2)+N*MINDIFF AND  TBUYHOLDINGEX('','',2)=SS*3  then
begin  
  
     目标平多3:TSELL(1,SS,LMT,TORDERPRICE(1,2)+N*MINDIFF);   
   kcj3:= 0;
end

补充内容 (2023-12-12 16:15):
这样的表述有错误吗?需要用超全局变量来定义吗?
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2023-12-12 16:22 | 显示全部楼层

1.类似 kcj3的几个变量,你定义了 也有赋值,但是你都没使用他们去作为判断条件。
2. 你每次平仓的条件之一是判断仓位。这种就是默认 加仓完 之后才运行平仓?
我有可能开仓二次,平仓一次,再加仓最后一次的。当然如果你是固定次数加仓,且平仓是必须加仓后才执行,那这里就无所谓了。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

0

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
gxx978
发表于 2023-12-12 16:23 | 显示全部楼层
这个是取前N次报单价格,你第二次开仓后,把TORDERPRICE(1,2)赋值给KCJ2,这不就是把第一次开仓的价格赋值给第二次开仓的KCJ2了嘛,这些都是代码调试问题,你只能在代码中加debugfile来跟踪调试代码,通过输出的记录来分析代码的执行与预期不符的原因了,没有别的捷径。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

43

主题

198

帖子

198

积分

Rank: 4

等级: 专业版

注册:
2021-10-19
曾用名:
 楼主| 发表于 2023-12-12 16:51 | 显示全部楼层
技术010 发表于 2023-12-12 16:23
这个是取前N次报单价格,你第二次开仓后,把TORDERPRICE(1,2)赋值给KCJ2,这不就是把第一次开仓的价格赋值 ...

好的 我试试看 谢谢!
回复

使用道具 举报

43

主题

198

帖子

198

积分

Rank: 4

等级: 专业版

注册:
2021-10-19
曾用名:
 楼主| 发表于 2023-12-12 17:03 | 显示全部楼层
技术009 发表于 2023-12-12 16:22
1.类似 kcj3的几个变量,你定义了 也有赋值,但是你都没使用他们去作为判断条件。
2. 你每次平仓的条件 ...

因为这样判断的取值结果为0  所以我只能单独用TORDERPRICE了,但是问题就出来了,平仓后的开仓价却不再是我想要的价格了
  //开多单
  
    if 短多  AND TBUYHOLDINGEX('','',2)=0  AND kcj1=0 then
begin   
      
    多开:Tbuy(1 ,SS,MKT);
  kcj1:= TORDERPRICE(1,1);

end


  //平多单
  
     if  H>=kcj1+N*MINDIFF AND  TBUYHOLDINGEX('','',2)=SS AND TORDERPRICE(1,1)>0 then
begin  
  
     目标平多:TSELL(1,SS,LMT,kcj1+N*MINDIFF);   
  
   kcj1:= 0;
end
回复

使用道具 举报

43

主题

198

帖子

198

积分

Rank: 4

等级: 专业版

注册:
2021-10-19
曾用名:
 楼主| 发表于 2023-12-12 17:06 | 显示全部楼层
取值为零是不是因为我下单价格为市价所以为零?
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-22 01:14 , Processed in 0.148762 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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