2017-05-17 3 views
0

이것은 2 막대기 스윙 차트에 대한 제 Amibroker 코드입니다. 가격이 한 막대의 이전 스윙보다 낮 으면 두 막대 이동으로 처리해야한다는 조건을 추가해야합니다. 내가 가지고있는 문제는 오늘날의 낮은 가격에 대해 점검 할 마지막 스윙 저가 변수를 들고있다. 문제의 줄을 대문자로 주석 처리했습니다. 내가 생각한 것은 작동하지만 스윙 차트에는 상태가 나타나지 않는다. 누군가 내가 잘못하고있는 것을 말해 줄 수 있습니까? 고마워요.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

LowBarPrice에는 배열 인덱서가 없습니다. 또한 null로 초기화하면 초기화 후에 값을 할당하지 않기 때문에 그대로 유지됩니다. L [i] < null 인 경우 기술적으로, 귀하의 상태에서 말하는 것입니다.

루프 밖에서 조건을 작성하십시오. 그러면 루프에서 루프를 참조 할 때까지 가격을 보유 할 배열이 생성됩니다.

따라서, 예를 들어, 다음과 같이 LowBarPrice를 초기화 : 당신은 루프에서 그것을 참조 할 때

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

그 후, 당신은 가격을받을 수 있습니다.

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

이 기사는 AmiBroker에서 반복적으로 반복되는 데 도움이되었습니다. 그것은 당신의 이슈에 대해 약간의 맥락을 줄 수도 있습니다. 귀하의 질문에 구체적으로 관련된 부분은

이름의 LowBarPrice 조금 오해를 불러 일으킬 수있다

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

+0

, 실제로 내부까지 계산되지 않습니다 아래로 마지막 스윙의 저를 필요로 배열 인덱싱 "섹션 아래 루프 (fdnbar) 때 우리가 그것을 트리거하는 2 낮은 막대 있습니다. 나는 진술을 결코 작동하지 것입니다 귀하의 요점을 볼 수 있습니다.이 질문을 나는 배열을 사용하여 및 "for 루프를 사용하여 쓸 수있게 된 이후 "그러나 당신의 도움과 링크에 대해서도 감사합니다 (매우 유익한). – Albert

+0

PlotText와 같은 것들을 사용하기 위해 Amibroker 루핑 만 사용하는 것이 낫습니다. 그렇지 않으면, 배열을 그대로 사용하여 거의 모든 것을 달성 할 수 있습니다. - Iif와 ValueWhen가 매우 올 것입니다. 앤디. – Sethmo011