以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://222.73.7.161/bbs/index.asp)
--  公式模型编写问题提交  (http://222.73.7.161/bbs/list.asp?boardid=4)
----  [求助]Heikin Ashi烛图  (http://222.73.7.161/bbs/dispbbs.asp?boardid=4&id=53823)

--  作者:cool2000
--  发布时间:2013/7/10 15:48:07
--  [求助]Heikin Ashi烛图
有关heikin ashi烛图,请问如下代码:

HaClose:=(Open+High+Low+Close)/4;
IF BARSTATUS=1 THEN haOpen:=OPEN; ELSE 
haOpen:=(REF(haOpen,1)+REF(HaClose,1))/2 ;
HaHigh:=Max(High,Max(haOpen,HaClose));
HaLow:=Min(Low,Min(haOpen,HaClose));
kline(haOpen,HaHigh,HaLow,HaClose,1);

在金字塔里编译可以通过,但是显示不正常。应该如何修改,谢谢

图片点击可在新窗口打开查看此主题相关图片如下:stockgraphout2.jpg
图片点击可在新窗口打开查看

--  作者:王锋
--  发布时间:2013/7/10 16:12:22
--  
别人看你的代码是不知道你心理想什么需要什么的,你把你要想实现的逻辑原理也说一下
--  作者:cool2000
--  发布时间:2013/7/10 17:07:13
--  
关键点在于:

如果是第一根k线,则HaOpen等于第一根k线的open价,若不是第一根k线,则HaOpen等于前一根HaOpen价的一半加上HaClose价的一半,这里有一个递归调用的问题。

若是第一根K线:
HaOpen:=Open

若不是第一根k线:
HaOpen:=(REF(haOpen,1)+REF(HaClose,1))/2 ;

这就是要实现的想法,但是图显示不正常,不知道上面的代码到底对不对。

--  作者:王锋
--  发布时间:2013/7/10 17:16:49
--  

你的问题在于你用了序列模式,应该要用逐K线模式你的思路才能得到正确执行。

 

HaClose:=(Open+High+Low+Close)/4;
haOpen:=OPEN;
Opentmp:=REF(haOpen,1)+REF(HaClose,1);
IF BARSTATUS=1 THEN
begin
haOpen:=OPEN;
end
ELSE
begin
haOpen:=Opentmp/2 ;
HaHigh:=Max(High,Max(haOpen,HaClose));
HaLow:=Min(Low,Min(haOpen,HaClose));
end
kline(haOpen,HaHigh,HaLow,HaClose,1);

上面是帮你改好的代码

 

建议你仔细看看

深度理解金字塔公式系统的工作机理

http://www.weistock.com/bbs/dispbbs.asp?boardid=10&Id=29594

 

里面有这2种运行模式的不同的描述


--  作者:王锋
--  发布时间:2013/7/10 17:21:16
--  

代码又重新改了一下

 

HaClose:=(Open+High+Low+Close)/4;

IF BARSTATUS=1 THEN
begin
haOpen:=OPEN;
end
ELSE
begin
haOpen:=(haOpen[barpos-1]+HaClose[barpos-1])/2 ;
HaHigh:=Max(High,Max(haOpen,HaClose));
HaLow:=Min(Low,Min(haOpen,HaClose));
end
kline(haOpen,HaHigh,HaLow,HaClose,1);

由于REF不能在逐K线模式在IF语句中,可以使用数组的方式解决,这样改的代码就根你之前的逻辑一样了


--  作者:cool2000
--  发布时间:2013/7/10 17:33:43
--  
多谢,让我再消化理解一下。
--  作者:cool2000
--  发布时间:2013/7/10 17:54:29
--  
haOpen:=(haOpen[barpos-1]+HaClose[barpos-1])/2 ;
这行发生数组越界操作错误,

编译通过,显示图形时发生数组越界操作错误

--  作者:王锋
--  发布时间:2013/7/10 18:27:43
--  

我这里可以通过的,你估计是把代码改了吧。

 

金字塔的数组是从1开始的,如果你在代码的第一跟K线上就运行到数组这一行语句是肯定要越界的


--  作者:cool2000
--  发布时间:2013/7/10 21:31:51
--  
代码没改,从5楼拷贝的,直接粘贴到公式编辑区,我的版本是2.9961,编译通过,加载到副图界面,



--  作者:cool2000
--  发布时间:2013/7/10 21:37:20
--  [原创]和昨天相比今天增加或减少的合约


图片点击可在新窗口打开查看此主题相关图片如下:s4.gif
图片点击可在新窗口打开查看