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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件公式模型编写问题提交 → 求波幅平均值

   

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


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

主题:求波幅平均值

帅哥哟,离线,有人找我吗?
新华字典1949
  11楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:69 积分:0 威望:0 精华:0 注册:2017/5/25 16:51:06
  发帖心情 Post By:2017/8/7 16:59:33    Post IP:60.191.66.218[只看该作者]

用MA(c,5)交MA(c,5)来代替KD交叉,
想通过类似下面 的方法来代替 ma(FrontBoFu,100),就是说不要直接用MA函数,而是下面的循环来代替,
for i=1 to 100
begin
 pjBoFu:=(pjBoFu*CountBoDuan+FrontBoFu)/(CountBoDuan+1),linethick0;//平均波段值
Countboduan:=Countboduan+1;                                                            //波段计数‘
后面加一根K,前面减一根K,
。。。。。
end

甚至可以先不管KD,因为我可能会用到多种类型的交叉,然后重点是这个循环的代码怎么写?
请教了,谢谢。

 回到顶部
帅哥哟,离线,有人找我吗?
新华字典1949
  12楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:69 积分:0 威望:0 精华:0 注册:2017/5/25 16:51:06
  发帖心情 Post By:2017/8/7 17:04:10    Post IP:60.191.66.218[只看该作者]

甚至可以先不管KD,起始位置也不用去管,因为我可能会用到多种类型的交叉,
中午我在测试过程中好象碰到过一次,现在调不出来,它是不会跟着K线变动的,而是跟着交叉的变动来变化的。
只是,随着时间向后的推移,平均波幅越来越小了。
所以我要限定100个波段求平均,这样来保持它的稳定性。
然后重点是这个循环的代码怎么写?
请教了,谢谢。

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


加好友 发短信
等级:管理员 帖子:26632 积分:0 威望:0 精华:7 注册:2015/4/9 14:59:07
  发帖心情 Post By:2017/8/7 22:53:01    Post IP:180.158.246.145[只看该作者]

抱歉,前面在代码分析方向上有问题,在没有认为增加k线参与计算时,是不会造成起始位置出现变化的。所以前面说的问题不是这个原因影响的。
代码修改部分见红色部分、

RSV:=(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100;
K:SMA(RSV,3,1),LINETHICK1;
D:SMA(K,3,1),LINETHICK1;
J:=3*K-2*D;
//KD金死叉 
bjKDjc:cross(K,D),linethick0;
bjKDsc:cross(D,K),linethick0;
bar:sumbars(bjkdjc=1 or bjkdsc=1,100);//取得100个波段占用的周期数

// KD 平均波段值,同时作为钝化的辅助定义。
BoDuanLLV:ref(llv(l,5),sumbars(bjkdjc,1)),linethick0;                     //波段低点
BoDuanHHV:ref(hhv(h,5),sumbars(bjkdsc,1)),linethick0;          //波段高点
if   bjkdjc or bjkdsc then
 begin
      frontBoFu:=abs(BoDuanHHV-BoDuanLLV),linethick0;
      my_bar:=BARPOS; //记录在金叉或死叉时k线所在位置,作为求平均波段的其中一个计算因子。
 end
else
 BEGIN
  frontBoFu:=0; //非金叉死叉的情况下,序列变量frontBoFu赋值为0.那么求100个波段的总和就是bar个周期范围内非0的总和,而不受k线变化的影响
 end


pjBoFu : sum(frontBoFu,bar)/my_bar;                           //平均波段值
bjKDFrontBoFuMulti: FrontBoFu[my_bar]/pjBoFu,linethick0;       //前一波大于平均波段倍数


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


加好友 发短信
等级:新手上路 帖子:69 积分:0 威望:0 精华:0 注册:2017/5/25 16:51:06
  发帖心情 Post By:2017/8/8 14:21:37    Post IP:60.191.66.218[只看该作者]

这代码我写不出,但我能将就着看懂,写得真的是精炼!
已经通过编译,显示正常。
非常感谢!

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


加好友 发短信
等级:管理员 帖子:26632 积分:0 威望:0 精华:7 注册:2015/4/9 14:59:07
  发帖心情 Post By:2017/8/8 14:35:43    Post IP:180.169.30.6[只看该作者]

什么位置明白的可以直接问,前面的分析方向不对给你造成的不便,深表歉意。
[此贴子已经被作者于2017/8/8 14:35:59编辑过]


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


加好友 发短信
等级:新手上路 帖子:69 积分:0 威望:0 精华:0 注册:2017/5/25 16:51:06
  发帖心情 Post By:2017/8/8 21:01:28    Post IP:60.191.66.218[只看该作者]

没有关系,真得非常感谢了!
晚上我再测试中,bjKDFrontBoFuMulti: FrontBoFu[my_bar]/pjBoFu;
1.这个指标在窗口K线较少时,bjKDFrontBoFuMulti值较小,
   当把窗口K线数量增加后,bjKDFrontBoFuMulti值却会变大,
   从最左边到最右边,可能会大上好几倍 ,明显的左边数值低,右边高的趋势。
   有几处左边的某个波段的波幅明显 非常 大于右边的的某段波幅,可是bjKDFrontBoFuMulti却左边的明显小于右边多倍 。
   这样,就无法达到尽量保证bjKDFrontBoFuMulti稳定性。
2.当取BAR取100个波段时,窗口K线数量较少时,bjKDFrontBoFuMulti无输出。说明这个指标它不会自动从数据库里去读暂没有显示出来的K线数据。
  只有取较小数量比如20个波段,bjKDFrontBoFuMulti才会在右边有少量输出。
无法上传图片,所以只能文字说明。
麻烦再帮我看看有没有可以改进的地方。
[此贴子已经被作者于2017/8/8 21:02:50编辑过]

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


加好友 发短信
等级:管理员 帖子:26632 积分:0 威望:0 精华:7 注册:2015/4/9 14:59:07
  发帖心情 Post By:2017/8/8 22:33:07    Post IP:180.158.246.16[只看该作者]

问题1,不理解什么问题,贴图可以使用ie浏览器
问题2. 这个是数据量不足造成的,需要你扩从数据最低要满足100个波段的数据参与计算,否则自然数值出现




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


加好友 发短信
等级:新手上路 帖子:69 积分:0 威望:0 精华:0 注册:2017/5/25 16:51:06
  发帖心情 Post By:2017/8/9 9:15:36    Post IP:60.191.66.218[只看该作者]

1、打个比方,同样是昨天这一根的K线下面(注意:是在同一根K线下,BAR都取了20个波段平均后):
窗口显示200根K线,bjKDFrontBoFuMulti值为10,,
窗口显示500根K线后,bjKDFrontBoFuMulti值却会变成30,
这是在同一根K线下因为K线数据变化而造成的。
200根K线包括的波段总数已经超过20个波段数了,所以不是波段数的影响

2、按理,bjKDFrontBoFuMulti是一段波幅是平均波幅的倍数,
一般不会超过100倍吧,一般几倍数或几十倍是可能的,
我前天自己在用上市后所有波段取平均后,测试得到有倍数一般是几倍,
可是,您这个代码中,当较多(比如1000根)K线后,从最左边到最右边,
bjKDFrontBoFuMulti的值明显的左边数值低,右边高的趋势。右边最高时看到有几百倍的,估计可能算法有问题。
有几处左边的某个波段的波幅明显 非常 大于右边的的某段波幅,可是bjKDFrontBoFuMulti却左边的明显小于右边多倍,比如左边显示一般为10,右边可能会显示一般为80 ,我是打比方。
   
试了IE,还是无法帖图,只能从网址上传图片,而我的图片在本地无法上传。
[此贴子已经被作者于2017/8/9 9:16:47编辑过]

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


加好友 发短信
等级:管理员 帖子:26632 积分:0 威望:0 精华:7 注册:2015/4/9 14:59:07
  发帖心情 Post By:2017/8/9 11:04:25    Post IP:180.169.30.6[只看该作者]

1.这个问题有回到了sma递归算法问题上去了,使用的数据量不同,sma在之后的返回结果自然会影响到相关变量

2.问题2的原因是因为  my_bar:BARPOS; 这个因为k线数据量不断增加barpos定位的值就越大,造成后面其作为分母参与计算的值pjBoFu越来越小,同时也造成了FrontBoFu[my_bar]/pjBoFu越开越大,反比关系。

 

 

 

[此贴子已经被作者于2017/8/9 11:09:47编辑过]


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


加好友 发短信
等级:新手上路 帖子:69 积分:0 威望:0 精华:0 注册:2017/5/25 16:51:06
  发帖心情 Post By:2017/8/9 13:40:18    Post IP:60.191.66.218[只看该作者]

老师好!
     我做了改变,用MA5和MA10的交叉来代替KD交叉,结果也是这样,
当增加窗口显示K线数量后,近日的倍数值 比 远日的倍数值要大。
K线数量变大前的倍数值要比K线数量变大后的倍数值小。
     假设 MA(c,5)这种函数不属于递归算法,不知道成立不成立?
特请教。

  


Variable: frontBoFu[]=0,
          my_bar=0;

ma5:=ma(c,5),linethick0;
ma10:=ma(c,10),linethick0;
bjmajc:cross(ma5,ma10),linethick0;
bjmasc:cross(ma5,ma10),linethick0;

bar:=sumbars(bjmajc=1 or bjmasc=1,10);//取得10个波段占用的周期数
BoDuanLLV:=ref(llv(l,3),sumbars(bjmajc,1)),linethick0;                     //波段低点
BoDuanHHV:=ref(hhv(h,3),sumbars(bjmasc,1)),linethick0;          //波段高点

if   bjmajc or bjmasc then
 begin
      frontBoFu:=abs(BoDuanHHV-BoDuanLLV),linethick0; 
      my_bar:=BARPOS; //记录在金叉或死叉时k线所在位置,作为求平均波段的其中一个计算因子。
 end
else
 BEGIN
  frontBoFu:=0; //非金叉死叉的情况下,序列变量frontBoFu赋值为0.那么求100个波段的总和就是bar个周期范围内非0的总和,而不受k线变化的影响
 end

pjBoFu : =sum(frontBoFu,bar)/my_bar;//,linethick0;                           //平均波段值
bjKDFrontBoFuMulti: FrontBoFu[my_bar]/pjBoFu;//,linethick0;       //前一波大于平均波段倍数a


 回到顶部
总数 26 上一页 1 2 3 下一页