首页 文章

向Amibroker代码添加条件

提问于
浏览 1122
0

这是我对于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();

1 回答

  • 0

    您的LowBarPrice上没有数组索引器 . 此外,您将其初始化为null并保持这种方式,因为您在初始化后从未为其分配任何值 . 所以在技术上,在你的情况下,你说,如果L [i] <null .

    在循环外写下你的条件 . 这将创建一个数组,它将保持你的价格,直到你在循环中引用它 .

    因此,例如,像这样初始化LowBarPrice:

    LowBarPrice = ValueWhen(DownBar, Ref(L,-1));
    

    此后,当您在循环中引用它时,您将获得价格 .

    if(L[i] < LowBarPrice[i])
    

    这篇文章真的帮助我了解了AmiBroker的循环 . 它可能会为您的问题提供一些背景信息 . 与您的问题具体相关的部分位于“数组索引”部分

    http://www.amibrokerforum.com/index.php?topic=50.0

相关问题