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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件公式模型编写问题提交 → 循环问题求教

   

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


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

主题:循环问题求教

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


加好友 发短信
等级:新手上路 帖子:17 积分:0 威望:0 精华:0 注册:2015/9/14 10:52:05
循环问题求教  发帖心情 Post By:2015/9/24 10:42:08    Post IP:115.236.13.58[只看该作者]

写了一个网格交易的模型,单行执行没有问题,但是改成循环语句就出问题了,感觉好像不是完全执行完第一个循环再去执行第二个循环,而是整体在执行循环,请问是哪里出了问题?

 

单行是可以执行的:

input: P(2600,0,50000,1), J(3,1,10,1),N(10,1,100,1); //初始价格,网格宽度,每笔手数


 

if TREMAINQTY(1,'','')<=0*n then
tbuy(c>=p-9*j&&tholding2<=9*n,n,lmt,p-9*j);

if TREMAINQTY(1,'','')<=1*n then
tbuy(c>=p-8*j&&tholding2<=8*n,n,lmt,p-8*j);

if TREMAINQTY(1,'','')<=2*n then
tbuy(c>=p-7*j&&tholding2<=7*n,n,lmt,p-7*j);

if TREMAINQTY(1,'','')<=3*n then
tbuy(c>=p-6*j&&tholding2<=6*n,n,lmt,p-6*j);

if TREMAINQTY(1,'','')<=4*n then
tbuy(c>=p-5*j&&tholding2<=5*n,n,lmt,p-5*j);

 

if TREMAINQTY(1,'','')<=5*n then
tbuy(c>=p-4*j&&tholding2<=4*n,n,lmt,p-4*j);

if TREMAINQTY(1,'','')<=6*n then
tbuy(c>=p-3*j&&tholding2<=3*n,n,lmt,p-3*j);

if TREMAINQTY(1,'','')<=7*n then
tbuy(c>=p-2*j&&tholding2<=2*n,n,lmt,p-2*j);

if TREMAINQTY(1,'','')<=8*n then
tbuy(c>=p-j&&tholding2<=n,n,lmt,p-j);

if TREMAINQTY(1,'','')<=9*n then
tbuy(c>=p&&tholding2<=0,n,lmt,p);

 

if TREMAINQTY(4,'','')<=9*n then
tsell(c<=p-8*j&&tholding2>=10*n,n,lmt,p-8*j);

if TREMAINQTY(4,'','')<=8*n then
tsell(c<=p-7*j&&tholding2>=9*n,n,lmt,p-7*j);

if TREMAINQTY(4,'','')<=7*n then
tsell(c<=p-6*j&&tholding2>=8*n,n,lmt,p-6*j);

if TREMAINQTY(4,'','')<=6*n then
tsell(c<=p-5*j&&tholding2>=7*n,n,lmt,p-5*j);

if TREMAINQTY(4,'','')<=5*n then
tsell(c<=p-4*j&&tholding2>=6*n,n,lmt,p-4*j);


if TREMAINQTY(4,'','')<=4*n then
tsell(c<=p-3*j&&tholding2>=5*n,n,lmt,p-3*j);

if TREMAINQTY(4,'','')<=3*n then
tsell(c<=p-2*j&&tholding2>=4*n,n,lmt,p-2*j);

if TREMAINQTY(4,'','')<=2*n then
tsell(c<=p-j&&tholding2>=3*n,n,lmt,p-j);

if TREMAINQTY(4,'','')<=1*n then
tsell(c<=p&&tholding2>=2*n,n,lmt,p);

if TREMAINQTY(4,'','')<=0*n then
tsell(c<=p+j&&tholding2>=n,n,lmt,p+j);

 

循环执行会出现问题:

input: P(2600,0,50000,1), J(3,1,10,1),N(10,1,100,1),M(10,1,30,1); //初始价格,网格宽度,每笔手数,网格数量

FOR i=1 TO M DO

if TREMAINQTY(1,'','')<=(i-1)*n then
tbuy(c>=p-(10-i)*j&&tholding2<=(10-i)*n,n,lmt,p-(10-i)*j);

FOR u=1 TO M DO

if TREMAINQTY(4,'','')<=(10-u)*n then
tsell(c<=p-(9-u)*j&&tholding2>=(11-u)*n,n,lmt,p-(9-u)*j);

 


 


 回到顶部
帅哥哟,离线,有人找我吗?
jinzhe
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:罗宾汉 帖子:46311 积分:50819 威望:0 精华:2 注册:2011/3/23 8:50:25
  发帖心情 Post By:2015/9/24 10:52:43    Post IP:58.246.57.26[只看该作者]

处理中,请稍等


金字塔—专业程序化交易量化投资平台

客户服务部

----------------------------------------------------------- 欢迎您参加我公司的技术培训,具体培训需求请发邮件到service@weistock.com

您的宝贵建议或者投诉,请发往邮箱:weiwei@weistock.com

 回到顶部
帅哥哟,离线,有人找我吗?
wenarm
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


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

循环次数并没有你说的现象。你参考下面的调试代码。使用的debugfile输出的。


input:P(2600,0,50000,1), J(3,1,10,1),N(10,1,100,1),M(10,1,30,1); //初始价格,网格宽度,每笔手数,网格数量

FOR i=1 TO M DO

BEGIN
if TREMAINQTY(1,'','')<=(i-1)*n then
tbuy(c>=p-(10-i)*j&&tholding2<=(10-i)*n,n,lmt,p-(10-i)*j);
DEBUGFILE('D:\cc.TXT','i循环次数%.2f',i);
end

FOR u=1 TO M DO
BEGIN
if TREMAINQTY(4,'','')<=(10-u)*n then
tsell(c<=p-(9-u)*j&&tholding2>=(11-u)*n,n,lmt,p-(9-u)*j);
DEBUGFILE('D:\cc.TXT','u循环次数%.2f',u);
end



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


加好友 发短信
等级:超级版主 帖子:21598 积分:0 威望:0 精华:1 注册:2010/7/31 16:35:30
  发帖心情 Post By:2015/9/24 13:51:48    Post IP:58.246.57.26[只看该作者]

同一条开仓语句在循环体内只会执行一次的,所以和你写很多个if条件里面的开仓交易。

执行结果是不同的


 回到顶部
帅哥哟,离线,有人找我吗?
Prongs
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:17 积分:0 威望:0 精华:0 注册:2015/9/14 10:52:05
  发帖心情 Post By:2015/9/24 14:32:22    Post IP:115.236.13.58[只看该作者]

同一条开仓语句在循环体内只会执行一次是什么意思?是说我循环10次只会执行一次开仓?

现在账户挂单实际的流程是买单挂一张,卖单挂一张,买单挂一张,卖单再挂一张...

而单行执行的话是挂完全部买单再挂全部卖单,所以导致执行结果不同


 回到顶部
帅哥哟,离线,有人找我吗?
fly
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:5082 积分:17642 威望:0 精华:6 注册:2010/7/15 9:05:58
  发帖心情 Post By:2015/9/24 14:53:08    Post IP:58.246.57.26[只看该作者]

1.

现在账户挂单实际的流程是买单挂一张,卖单挂一张,买单挂一张,卖单再挂一张...

 

这个执行结果,是您上面说到的,是吧

input:P(2600,0,50000,1), J(3,1,10,1),N(10,1,100,1),M(10,1,30,1); //初始价格,网格宽度,每笔手数,网格数量

FOR i=1 TO M DO

BEGIN
if TREMAINQTY(1,'','')<=(i-1)*n then
tbuy(c>=p-(10-i)*j&&tholding2<=(10-i)*n,n,lmt,p-(10-i)*j);
DEBUGFILE('D:\cc.TXT','i循环次数%.2f',i);
end

FOR u=1 TO M DO
BEGIN
if TREMAINQTY(4,'','')<=(10-u)*n then
tsell(c<=p-(9-u)*j&&tholding2>=(11-u)*n,n,lmt,p-(9-u)*j);
DEBUGFILE('D:\cc.TXT','u循环次数%.2f',u);
end

 

2.

单行执行的话是挂完全部买单再挂全部卖单

这个结果是那个代码执行的

 

您是要实现哪种结果?

3.您运行在几分钟K线下,

   运行模式是:固定时间间隔吗

[此贴子已经被作者于2015/9/24 15:02:08编辑过]


金字塔—专业程序化交易量化投资平台

客户服务部

-----------------------------------------------------------

欢迎您参加我公司的技术培训,具体培训需求请发邮件到

service@weistock.com

您的宝贵建议或者投诉,请发往邮箱:weiwei@weistock.com

 回到顶部
帅哥哟,离线,有人找我吗?
Prongs
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:17 积分:0 威望:0 精华:0 注册:2015/9/14 10:52:05
  发帖心情 Post By:2015/9/24 15:10:52    Post IP:115.236.13.58[只看该作者]

我需要的是单行执行的效果,就是全部挂完买单再挂卖单,但是循环写法不是这样执行的

我是直接在用分笔数据,固定时间间隔运行


 回到顶部
帅哥哟,离线,有人找我吗?
yukizzc
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:21598 积分:0 威望:0 精华:1 注册:2010/7/31 16:35:30
  发帖心情 Post By:2015/9/25 9:25:37    Post IP:58.246.57.26[只看该作者]

这就是我和你说的,循环体内不会重复执行同一条开仓语句。因为你是分笔周期所以变成了,第一根k执行买卖,然后第二根马上k又买卖了。

要执行重复运行在开仓语句后面加上ALLOWREPEAT。但这个如果你用在分钟周期会导致每次运行都重复报单。


 回到顶部