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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件公式模型编写问题提交 → [求助]关于采用BARSLAST作为循环起点存在的问题

   

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


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

主题:[求助]关于采用BARSLAST作为循环起点存在的问题

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


加好友 发短信
等级:新手上路 帖子:14 积分:0 威望:0 精华:0 注册:2013/6/22 18:16:46
[求助]关于采用BARSLAST作为循环起点存在的问题  发帖心情 Post By:2013/7/4 12:41:17    Post IP:60.180.169.58[只看该作者]

 序列模式下面

按照下面的程序,测试时发现i一直是等于累计,而不是按照每循环一次i值增加1

        datan:=BARSLAST(FXDD=1 or FXDD=-1);
        aaaa:=DATACOUNT;
        macd4:=0;
        累计:=aaaa-datan;
        for i=累计 to DATACOUNT DO
            BEGIN
                macd1:=macd1+macd[i];
            END;
必须加入i:=i+1,修改成如下i值才会递增
        datan:=BARSLAST(FXDD=1 or FXDD=-1);
        aaaa:=DATACOUNT;
        macd4:=0;
        累计:=aaaa-datan;
        for i=累计 to DATACOUNT DO
            BEGIN
                macd1:=macd1+macd[i];
                i:=i+1
            END;
如果放在飞狐中编译,则直接提示“累计:=aaaa-datan;”这句有问题,编译通不过。

版主,为什么会出现这个情况?
[此贴子已经被作者于2013/7/4 12:42:16编辑过]

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


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

1,代码请帖全

2.飞狐的问题请咨询飞狐的相关工作人员



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

客户服务部

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

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

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


加好友 发短信
等级:新手上路 帖子:14 积分:0 威望:0 精华:0 注册:2013/6/22 18:16:46
  发帖心情 Post By:2013/7/4 15:09:18    Post IP:60.180.169.58[只看该作者]

 我意思是,针对当前最后1k,BARSLAST获取的不应该是一个常数吗?代入到循环里,是什么原因导致i值固定不变。
拿飞狐过来对比,主要是指出同样是BARSLAST导致这个循环不能执行。
源代码太长了,  用这两句代替吧
P:=26;S:=12;M:=9
DIFF := EMA(CLOSE,S) - EMA(CLOSE,P);
DEA  := EMA(DIFF,M);
MACD := 2*(DIFF-DEA), COLORSTICK;
xx:=(ref(h,2)<ref(h,1) and ref(h,1)>h) or (ref(l,2)>ref(l,1) and ref(l,1)<l);
datan:=BARSLAST(xx=1);
aaaa:=DATACOUNT;
macd1:=0;
累计:=aaaa-datan;//飞狐提示这句有问题
for i=累计 to DATACOUNT DO//金字塔在这句i不会自动累加,除非在循环内加上i:=i+1这句
     BEGIN
           macd1:=macd1+macd[i];
           //i:=i+1
     END;
最终问题原因指向datan:=BARSLAST(xx=1);这句赋值
大意,就是找出前面最近一个成立的分形,计算该分形到目前的macd值

 回到顶部
帅哥哟,离线,有人找我吗?
沙隆巴斯
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:14 积分:0 威望:0 精华:0 注册:2013/6/22 18:16:46
  发帖心情 Post By:2013/7/4 15:14:40    Post IP:60.180.169.58[只看该作者]

 按照今天收盘后的1分数据测试,就卡在最近那个分形那里
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看

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


加好友 发短信
等级:新手上路 帖子:14 积分:0 威望:0 精华:0 注册:2013/6/22 18:16:46
  发帖心情 Post By:2013/7/4 15:17:01    Post IP:60.180.169.58[只看该作者]

 图片点击可在新窗口打开查看

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


加好友 发短信
等级:罗宾汉 帖子:46311 积分:50819 威望:0 精华:2 注册:2011/3/23 8:50:25
  发帖心情 Post By:2013/7/4 15:35:03    Post IP:58.246.57.26[只看该作者]

每根k线的datan都不一样啊,这个怎么能固定的


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

客户服务部

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

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

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


加好友 发短信
等级:新手上路 帖子:14 积分:0 威望:0 精华:0 注册:2013/6/22 18:16:46
  发帖心情 Post By:2013/7/4 15:50:19    Post IP:60.180.169.58[只看该作者]

对啊,每一根K的datan是不一样,但对最后1k,必然是一个定值,进入最后那个循环的时候datan必然也是固定的。


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


加好友 发短信
等级:新手上路 帖子:14 积分:0 威望:0 精华:0 注册:2013/6/22 18:16:46
  发帖心情 Post By:2013/7/4 17:32:31    Post IP:60.180.169.58[只看该作者]

 搞不明白,为什么必须得加i:=i+1才能累加出如下效果
图片点击可在新窗口打开查看  图片点击可在新窗口打开查看

图片点击可在新窗口打开查看  图片点击可在新窗口打开查看




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


加好友 发短信
等级:罗宾汉 帖子:11808 积分:20695 威望:0 精华:10 注册:2009/8/18 8:15:13
  发帖心情 Post By:2013/7/4 22:17:37    Post IP:61.174.53.141[只看该作者]

P:=26;S:=12;M:=9
DIFF := EMA(CLOSE,S) - EMA(CLOSE,P);
DEA  := EMA(DIFF,M);
MACD := 2*(DIFF-DEA), COLORSTICK;
xx:=(ref(h,2)<ref(h,1) and ref(h,1)>h) or (ref(l,2)>ref(l,1) and ref(l,1)<l);
datan:=BARSLAST(xx=1);
aaaa:=DATACOUNT;
macd1:=0;
累计:=aaaa-datan;//飞狐提示这句有问题
for i=CONST(累计) to DATACOUNT DO//金字塔在这句i不会自动累加,除非在循环内加上i:=i+1这句
     BEGIN
           macd1:=macd1+macd[i];
           //i:=i+1
     END;

你目前代码在于将一个序列变量赋值到FOR循环中,飞狐自然提示无效,而金字塔由于编译时未对此情况做处理故会出现问题,你可以加上CONST强制变为常数,下个金字塔升级版会针对此情况对变量进行强制转换。

[此贴子已经被作者于2013/7/4 22:19:11编辑过]


金字塔—专业程序化软件提供商

金字塔-技术部

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

工作时间:周一至周五 08:30 - 17:30   周末及法定节假日休息

Email:service@weistock.com
 回到顶部
帅哥哟,离线,有人找我吗?
沙隆巴斯
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:14 积分:0 威望:0 精华:0 注册:2013/6/22 18:16:46
  发帖心情 Post By:2013/7/5 22:06:17    Post IP:60.180.157.135[只看该作者]

 原来如此,谢谢指导

 回到顶部