포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 253

 
lottamer :

주어진 막대 수에 대한 MACD 표시기의 최소값(그림과 같이)과 최대값을 결정해야 합니다. (이 경우 20).

이 가격에 이 작업을 수행하는 코드를 찾았고 어리석게도 HIGH LOW를 MACD로 바꾸려고 했습니다. 하지만 아무 일도 일어나지 않았다....

필요한 MACDAC 데이터를 massMACD[20] 어레이에 복사하고 이 어레이에서 찾습니다.
최소 ArrayMinimum (massMACD); 그리고
최대 ArrayMaximum(massMACD); 가치.
 
ALXIMIKS :
사용자 정의 macdac의 끝에 붙여넣습니다.

추신 이것이 더 정확하고 더 좋지만:


그렇다면 작동하지 않습니다 ...

double MACDBuffer[];
double SignalBuffer[];

 
 int start()
  {
   int limit;
   int counted_bars=IndicatorCounted();
//---- last counted bar will be recounted
   if (counted_bars> 0 ) counted_bars--;
   limit= Bars -counted_bars;
//---- macd counted in the 1-st buffer
   for ( int i= 0 ; i<limit; i++)
      MACDBuffer[i]= iMA ( NULL , 0 , 12 , 0 , MODE_EMA , PRICE_CLOSE ,i)- iMA ( NULL , 0 , 26 , 0 , MODE_EMA , PRICE_CLOSE ,i);
//---- signal line counted in the 2-nd buffer
   for (i= 0 ; i<limit; i++)
      SignalBuffer[i]=iMAOnArray(MACDBuffer, Bars , 9 , 0 , MODE_SMA ,i);
         //t=MACDBuffer[0];
         //Print(t*10000);
//---- done
  
  
int max,min;
   static double maxlast,minlast;
   max = ArrayMaximum (MACDBuffer, 20 , 1 );
   min = ArrayMinimum (MACDBuffer, 20 , 1 );
   if (MACDBuffer[max]!=maxlast){
      maxlast=MACDBuffer[max];
       ObjectDelete   ( "highline" );   
       ObjectCreate ( "highline" , 1 ,WindowOnDropped( ) , 0 ,MACDBuffer[max], 0 , 0 );
   }
   if (MACDBuffer[min]!=minlast){
      minlast=MACDBuffer[min];
       ObjectDelete   ( "lowline" );   
       ObjectCreate ( "lowline" , 1 ,WindowOnDropped( ) , 0 ,MACDBuffer[min], 0 , 0 );
       Print (min,max);
   }
     return ( 0 );
  }
 
artmedia70 :
필요한 MACDAC 데이터를 massMACD[20] 어레이에 복사하고 이 어레이에서 찾습니다.
최소 ArrayMinimum(massMACD); 그리고
최대 ArrayMaximum(massMACD); 가치.


엄청난.

유일한 질문은 데이터를 어레이에 복사하는 방법입니다. 그래서?

 for ( int i=1; i<20; i++)
      MACDBuffer[i]= iMA ( NULL , 0 , 12 , 0 , MODE_EMA , PRICE_CLOSE ,i)- iMA ( NULL , 0 , 26 , 0 , MODE_EMA , PRICE_CLOSE ,i);

그 쯤?

   MACDLineBuffer[i] = iMACD ( NULL , 0 , 12,26,9, PRICE_CLOSE ,MODE_MAIN,i);
 
lottamer :


그렇다면 작동하지 않습니다 ...

사용자 정의 MACD의 끝으로:

네비게이터 ==> 사용자 지정 표시기 ==> MACD ==> RMB(오른쪽 클릭) ==> 편집 ==>

 
lottamer :


엄청난.

유일한 질문은 데이터를 어레이에 복사하는 방법입니다. 그래서?

그 쯤?


젠장, 똑같 습니다. iMACD 호출에 소스 코드만큼 많은 리소스가 필요 하다는 사실이 아닙니다.

iMACD와 모든 iCostum은 배열 멤버의 값을 반환하므로 추가 참조를 위해 루프를 통해 버퍼에 수집하고 수집해야 합니다.

  MACDLineBuffer[i] = iMACD ( NULL , 0 , 12 , 26 , 9 , PRICE_CLOSE ,MODE_MAIN,i);

하나의 값만 얻고 20이 필요하므로 사실이 아닙니다. 따라서 루프를 사용하십시오.

 for ( int i= 1 ; i< 20 ; i++)
      MACDLineBuffer[i] = iMACD ( NULL , 0 , 12 , 26 , 9 , PRICE_CLOSE ,MODE_MAIN,i);

 
ALXIMIKS :

사용자 정의 MACD의 끝으로:

네비게이터 ==> 사용자 지정 표시기 ==> MACD ==> RMB(오른쪽 클릭) ==> 편집 ==>

작동합니다 :)

그는 물론 내가 필요로 하는 것은 아니지만 나는 그의 모범에서 유익을 얻으려고 노력할 것입니다.

고맙습니다

 

다시 시작합시다.

 int start()
  {
  
    
for ( int i= 0 ; i< 20 ; i++)
MACDBuffer[i] = iMACD ( NULL , 0 , 12 , 26 , 9 , PRICE_CLOSE ,MODE_MAIN,i);

20(19는 중요하지 않음) 지표 값을 배열에 복사하는 것으로 충분합니까?

 
lottamer :

다시 시작합시다.

20(19는 중요하지 않음) 지표 값을 배열에 복사하는 것으로 충분합니까?

누군가가 무언가를 필요로 하고 내가 최소한 무언가를 알고 있다면 기꺼이 이 사람을 도우려 합니다.

하지만 방귀를 뀌고 난 후 그의 엉덩이를 닦지는 않을 것입니다.

예, 정적 배열 double MACDBuffer[20] 를 선언했다면 이것으로 충분하고 동적 배열 double MACDBuffer[] 를 선언했다면 충분하지 않습니다.

artmedia70 이 이렇게 말했습니다.

 
ALXIMIKS :

누군가가 무언가를 필요로 하고 내가 최소한 무언가를 알고 있다면 기꺼이 이 사람을 도우려 합니다.

하지만 방귀를 뀌고 난 후 그의 엉덩이를 닦기 위해 - 아아, 나는 그렇게하지 않을 것입니다.

예, 정적 배열 double MACDBuffer[20] 를 선언했다면 이것으로 충분하고 동적 배열 double MACDBuffer[] 를 선언했다면 충분하지 않습니다.

artmedia70 이 이렇게 말했습니다.


알겠습니다. 정적 상태로 두십시오.

 double MACDBuffer[ 20 ];

double min,max;
 
  
 int start()
  {
 
   for ( int i= 0 ; i< 20 ; i++)
      MACDBuffer[i]= iMA ( NULL , 0 , 12 , 0 , MODE_EMA , PRICE_CLOSE ,i)- iMA ( NULL , 0 , 26 , 0 , MODE_EMA , PRICE_CLOSE ,i);

   min= ArrayMinimum (MACDBuffer);
   max= ArrayMaximum (MACDBuffer);
  
   Print (min, "____" ,max);

왜 19__0을 인쇄합니까???

 
lottamer :


알겠습니다. 정적 상태로 두십시오.

왜 19__0을 인쇄합니까???


제대로 작동하기 때문입니다. 다른 것?