这是我对于2 bar摆动图表的Amibroker代码,我需要添加一个条件,如果价格在一个柱子中低于之前的摆动低点,那么将其视为两杆移动。我遇到的问题是,持有最后一个低价格变量来检查今天的低点。我已经评论了大写的问题行。我认为我会有所作为,但条件没有出现在秋千图表上。有人能告诉我我做错了什么。谢谢。
_SECTION_BEGIN("2 day swing");
upBar = H>Ref(H,-1);
dnBar = L<Ref(L,-1);
HighBarPrice=LowBarPrice=Null;
inLong=inShort=upCount=dnCount=fupbar=fdnbar=0;
for( i=1; i<BarCount; i++ )
{
if(inLong==0 AND inShort==0)
{
if(upBar[i])
{
upCount=upCount+1;
if(upCount==2)
{
fupbar[i] = 1;
inLong=1;
dnCount=0;
}
}
if(dnBar[i])
{
dnCount=dnCount+1;
if(dnCount==2)
{
fdnbar[i] = 1;
inShort=1;
upCount=0;
}
}
if(inLong==1)
{
if(dnBar[i])
{
dnCount=dnCount+1;
if(L[i]<LowBarPrice) {dnCount=2;} //THIS IS THE PROBLEM
if(dnCount==2)
{
fdnbar[i]=1;
inShort=1;
if(upBar[i])
{
upCount=1;
}
else
{
upCount=0;
}
continue;
}
}
if(upBar[i]) {HighBarPrice=H[i];}
if(upBar[i] AND NOT dnBar[i]){ dnCount=0;}
}
if(inShort==1)
{
if(upBar[i])
{
upCount=upCount+1;
if(H[i]>HighBarPrice) {upCount=2;}
if(upCount==2)
{
fupbar[i]=1;
inLong=1;
if(dnBar[i])
{
dnCount=1;
}
else
{
dnCount=0;
}
continue;
}
}
if(dnBar[i]) {LowBarPrice=L[i];}// DOWN BAR IN SHORT SWING SHOULD GIVE NEW LOW
if(dnBar[i] AND NOT upBar[i]){ upCount=0;}
}
}
// Swing chart drawn here
_SECTION_END();
答案 0 :(得分:0)
你的LowBarPrice上没有数组索引器。此外,您将其初始化为null并保持这种方式,因为您在初始化后从未为其分配任何值。从技术上讲,在你的情况下,你是说,如果L [i]&lt;空。
在循环外写下你的条件。这将创建一个数组,它将保留您的价格,直到您在循环中引用它。
因此,例如,像这样初始化LowBarPrice:
LowBarPrice = ValueWhen(DownBar, Ref(L,-1));
此后,当您在循环中引用它时,您将获得价格。
if(L[i] < LowBarPrice[i])
这篇文章真的帮助我了解了AmiBroker的循环。它可能会为您的问题提供一些背景信息。与您的问题有关的部分位于&#34;数组索引
部分