【问题标题】:Adding a condition to Amibroker code向 Amibroker 代码添加条件
【发布时间】:2017-05-17 02:46:26
【问题描述】:

这是我的 2 柱摆动图的 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();

【问题讨论】:

    标签: for-loop amibroker


    【解决方案1】:

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

    在循环之外写出你的条件。这将创建一个数组,该数组将保存您的价格,直到您在循环中引用它。

    例如,像这样初始化 LowBarPrice:

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

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

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

    这篇文章确实帮助我了解了在 AmiBroker 中的循环。它可能会为您的问题提供一些背景信息。与您的问题特别相关的部分位于“数组索引”部分下

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

    【讨论】:

    • LowBarPrice 这个名字有点误导,我实际上需要最后一次向下摆动的低点,直到在循环 (fdnbar) 内部,当我们有 2 个较低的柱线触发它时才计算。但是,我确实看到您的观点,即按原样进行的陈述永远不会奏效。自从提出这个问题以来,我已经能够仅使用数组而不是“for循环”来编写程序,但感谢您的帮助和链接(非常有用)。
    • 不客气。我发现最好只使用 Amibroker 循环来使用 PlotText 之类的东西,否则,使用数组几乎可以实现任何事情 - Iif 和 ValueWhen 非常方便。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多