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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件公式模型编写问题提交 → 最后两行的加仓没有执行。

   

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


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

主题:最后两行的加仓没有执行。

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


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2019/10/23 10:32:00    Post IP:180.169.30.6[显示全部帖子]

 
 是这样的。
BUYSHORT(B1,0.8*TC,market);//空头加仓
BUYSHORT(B2,0.5*TC,market);//空头加仓
BUYSHORT(B3,0.2*TC,market);//空头加仓

这个加仓不是仅仅按照代码顺序的。是按照B1-B3触发的顺序,并且如果不做互斥限制(互斥是指限制B1-B3不同时触发) 还可能在一个K上同时触发三个条件。这三个条件本身定义上就需要处理好这些限制才行的。



命数如织,当如磐石。
 回到顶部
帅哥哟,离线,有人找我吗?
FireScript
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2019/10/23 10:35:13    Post IP:180.169.30.6[显示全部帖子]

而且这个TC的计算也是变化的吧。也就是加仓仓位本身也是变化的吧。


如果你无法判断是哪个条件加仓的:

b_jc:BUYSHORT(B and holding=0,1*TC,market);//空头开仓
b1_jc:BUYSHORT(B1,0.8*TC,market);//空头加仓

类似这样处理下,就能看到加仓位置是那个语句触发的,这样方便进一步处理问题。


命数如织,当如磐石。
 回到顶部
帅哥哟,离线,有人找我吗?
FireScript
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2019/10/23 10:57:04    Post IP:180.169.30.6[显示全部帖子]

 需要明确下:
1.你的需求是B-B4 顺序加仓?
2.B-B4 具体定义我不知道,但是我需要知道是这个几个条件是否  一个或多个在一个K同时触发。


命数如织,当如磐石。
 回到顶部
帅哥哟,离线,有人找我吗?
FireScript
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2019/10/23 14:24:15    Post IP:180.169.30.6[显示全部帖子]

 稍等,尝试中。


命数如织,当如磐石。
 回到顶部
帅哥哟,离线,有人找我吗?
FireScript
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2019/10/23 14:42:22    Post IP:180.169.30.6[显示全部帖子]

 ATR:=MA(TR,20); //求20个周期内真实波幅的简单移动平均
TC:INTPART((400000*0.01/(MULTIPLIER*ATR)));//根据权益的1%计算下单手数
MTC:=3*TC;//总的持仓头寸

开仓:BUYSHORT(B and holding=0,1*TC,market);//空头开仓
VARIABLE:sx:=0;

if holding<>0 and B1 and SX=0 then //第一次加仓,必须满足B1条件,是否满足B2,B3不管。
begin
jc1:BUYSHORT(B1,0.8*TC,market);//空头加仓
SX:=1;
end

if holding<>0 AND SX=1 and B2 AND NOT(B1) then //第二次加仓必须满足B2,且不满足B1 。
begin
jc2:BUYSHORT(B2,0.5*TC,market);//空头加仓
SX:=2;
end

if holding<>0 AND SX=2 AND B3 and not(B2) AND NOT(B1) then //第三次加仓必须满足B3,且不满足B1,B2 。
begin
jc3:BUYSHORT(B3,0.2*TC,market);//空头加仓
SX:=3;
end

//这里注意下,一旦平仓务必将SX重置成0,否则后续二次开仓之后无法加仓。类似下面这样

if 平仓条件 and  holding<0 then
begin
sellshort(holding<0,holding,market);
SX:=0;    
end

我这里编写时候是限定了B1-B3顺序加仓 B1加仓之后,后面只能等到B2满足再加仓,B3先与B2满足是不加仓的,必须等到B2加仓之后才能B3加仓。


命数如织,当如磐石。
 回到顶部
帅哥哟,离线,有人找我吗?
FireScript
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2019/10/23 15:53:32    Post IP:180.169.30.6[显示全部帖子]

 抱歉,由于时间和精力限制,完整的范例无法提供的,13楼的例子已经提供思路了。你可以先试下。


命数如织,当如磐石。
 回到顶部