[ARCHIVE!] 포럼을 어지럽히 지 않도록 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 4. - 페이지 133

 
win_idx - 맞습니까?
 
alsu :
win_idx - 맞습니까?

win_ind가 맞습니다.

ObjectCreate("최대",OBJ_HLINE,win_idx,0,top); 원하는 창에 그리기,


ObjectSet("최대",OBJPROP_COLOR,노란색); 적당한 색으로 칠하다

ObjectSet("최대",OBJPROP_WIDTH,0); 오른쪽 선을 그립니다

그러나 최상위 매개변수를 정의하지 않습니다.

이중 상단=WindowPriceMax(win_idx);

그리고 topBuffer[]는 비어 있습니다.


코드

#속성 표시기_분리_창
#속성 표시기_버퍼 3
#property indicator_color1 라임
#property indicator_color2 빨간색
//--- 버퍼
이중 ExtMapBuffer1[];
이중 ExtMapBuffer2[];
이중 topBuffer[];


bool initFinished=거짓; // 초기화 상태를 기억할 변수를 추가합니다.
// false - 아직 초기화되지 않음
// 사실 - 이전
//+----------------------------------------------- --------------------+
//| 사용자 지정 표시기 초기화 기능 |
//+----------------------------------------------- --------------------+
정수 초기화()
{
//---- 표시기
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexStyle(2,DRAW_NONE);
SetIndexBuffer(2,topBuffer);

표시자숫자(5);
//----
리턴(0);
}
//+----------------------------------------------- --------------------+
//| 사용자 지정 표시기 초기화 해제 기능 |
//+----------------------------------------------- --------------------+
정수 초기화()
{
//----

//----
리턴(0);
}
//+----------------------------------------------- --------------------+
//| 사용자 지정 표시기 반복 기능 |
//+----------------------------------------------- --------------------+
정수 시작()
{
int counted_bars=IndicatorCounted(),
한계;

if(counted_bars>0)
counted_bars--;

제한=막대 개수 계산된 막대기;
//----
for(int i=0;i<limit;i++)

{
ExtMapBuffer1[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i);
ExtMapBuffer2[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i);

if(초기화 완료==거짓)
{
IndicatorShortName("MACD_max-min");

int win_idx=WindowFind("MACD_max-min");
// 표시기의 하위 창 번호를 찾습니다.

if(win_idx<0)
{
// 서브 윈도우 번호가 -1이면 오류가 발생했습니다.
Print("창을 찾을 수 없습니다.");
리턴(0);
}

이중 상단=WindowPriceMax(win_idx);
//현재 차트의 지정된 하위 창의 세로 눈금의 최대값을 찾습니다.


ObjectCreate("최대",OBJ_HLINE,win_idx,0,top);
// 표시기 하위 창에 수평선을 그립니다.

ObjectSet("최대",OBJPROP_COLOR,노란색);
ObjectSet("최대",OBJPROP_WIDTH,0);

창 다시 그리기();
// 라인을 보기 위해 창을 다시 그립니다.

initFinished=참;
// 그리기 완료

}

topBuffer[i]=상단;


}

//----
반환(0);
}
//+----------------------------------------------- --------------------+

 
MK07 :

win_ind가 맞습니다.

ObjectCreate("최대",OBJ_HLINE,win_idx,0,top); 원하는 창에 그리기,


ObjectSet("최대",OBJPROP_COLOR,노란색); 적당한 색으로 칠하다

ObjectSet("최대",OBJPROP_WIDTH,0); 오른쪽 선을 그립니다

그러나 최상위 매개변수를 정의하지 않습니다.

이중 상단=WindowPriceMax(win_idx);

그리고 topBuffer[]는 비어 있습니다.


코드

#속성 표시기_분리_창
#속성 표시기_버퍼 3
#property indicator_color1 라임
#property indicator_color2 빨간색
//--- 버퍼
이중 ExtMapBuffer1[];
이중 ExtMapBuffer2[];
이중 topBuffer[];


bool initFinished=거짓; // 초기화 상태를 기억할 변수를 추가합니다.
// false - 아직 초기화되지 않음
// 사실 - 이전
//+----------------------------------------------- --------------------+
//| 사용자 지정 표시기 초기화 기능 |
//+----------------------------------------------- --------------------+
정수 초기화()
{
//---- 표시기
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexStyle(2,DRAW_NONE);
SetIndexBuffer(2,topBuffer);

표시자숫자(5);
//----
리턴(0);
}
//+----------------------------------------------- --------------------+
//| 사용자 지정 표시기 초기화 해제 기능 |
//+----------------------------------------------- --------------------+
정수 초기화()
{
//----

//----
리턴(0);
}
//+----------------------------------------------- --------------------+
//| 사용자 지정 표시기 반복 기능 |
//+----------------------------------------------- --------------------+
정수 시작()
{
int counted_bars=IndicatorCounted(),
한계;

if(counted_bars>0)
counted_bars--;

제한=막대 개수 계산된 막대기;
//----
for(int i=0;i<limit;i++)

{
ExtMapBuffer1[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i);
ExtMapBuffer2[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i);

if(초기화 완료==거짓)
{
IndicatorShortName("MACD_max-min");

int win_idx=WindowFind("MACD_max-min");
// 표시기의 하위 창 번호를 찾습니다.

if(win_idx<0)
{
// 서브 윈도우 번호가 -1이면 오류가 발생했습니다.
Print("창을 찾을 수 없습니다.");
리턴(0);
}

이중 상단=WindowPriceMax(win_idx);
//현재 차트의 지정된 하위 창의 세로 눈금의 최대값을 찾습니다.


ObjectCreate("최대",OBJ_HLINE,win_idx,0,top);
// 표시기 하위 창에 수평선을 그립니다.

ObjectSet("최대",OBJPROP_COLOR,노란색);
ObjectSet("최대",OBJPROP_WIDTH,0);

창 다시 그리기();
// 라인을 보기 위해 창을 다시 그립니다.

initFinished=참;
// 그리기 완료

}

topBuffer[i]=상단;


}

//----
리턴(0);
}
//+----------------------------------------------- --------------------+



방해해서 죄송합니다

루프 및 그리기에 대해 topBuffer[i]를 사용하려면 다음을 시도하십시오.

 int start()
  {
   int counted_bars= IndicatorCounted (),
       limit;  
       
     if (counted_bars> 0 )
      counted_bars--;
   
      limit= Bars -counted_bars;
//----
   for ( int i= 0 ;i<limit;i++)
       
      { 
        ExtMapBuffer1[i]= iMACD ( 0 , 0 , 12 , 26 , 9 , PRICE_CLOSE ,MODE_MAIN,i);
        ExtMapBuffer2[i]= iMACD ( 0 , 0 , 12 , 26 , 9 , PRICE_CLOSE ,MODE_SIGNAL,i);
        
           if (initFinished==false)
           { 
             int win_idx= WindowFind ( "MACD_max-min" );
             // находим номер подокна нашего индикатора
      
             if (win_idx< 0 )
              {
               // если номер подокна равен -1, то возникла ошибка
                 Print ( "Окно не найдено" );
                 return ( 0 );
              }  
              
             double    top= WindowPriceMax (win_idx); 
               //находим максимальное значение вертикальной шкалы указанного подокна текущего графика
             topBuffer[i]=top;
             Comment ( "\n" , " top = " ,top); 

             ObjectCreate ( "max" , OBJ_HLINE ,win_idx, 0 , 0 );
             // рисуем горизонтальную линию в подокне нашего индикатора
             ObjectSet ( "max" , OBJPROP_PRICE1, top);  
             ObjectSet ( "max" , OBJPROP_COLOR , Yellow );
             ObjectSet ( "max" , OBJPROP_WIDTH , 0 );
 
             WindowRedraw ();      
             // перерисовываем окно, чтобы увидить линиию   
      
             initFinished=true;
             // рисование закончено  
        
           } 
        
            
                
        
      }  
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
 
//Пробуйте с учетом мнения alsu. 
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red
double ExtMapBuffer1[],ExtMapBuffer2[];
int init(){SetIndexStyle(0,DRAW_LINE);SetIndexBuffer(0,ExtMapBuffer1);
SetIndexStyle(1,DRAW_LINE);SetIndexBuffer(1,ExtMapBuffer2);
IndicatorShortName("MACD_max-min");return(0);}
int deinit(){return(0);}
//+------------------------------------------------------------------+
int start(){int counted_bars=IndicatorCounted(),limit,win_idx;double top;
if(counted_bars>0)counted_bars--;limit=Bars-counted_bars;win_idx=WindowFind("MACD_max-min");
for(int i=0;i<limit;i++){ExtMapBuffer1[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i);
  ExtMapBuffer2[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i);}
  top=WindowPriceMax(win_idx);ObjectDelete("max");
  if(ObjectFind("max")!=win_idx){ObjectCreate("max",OBJ_HLINE,win_idx,Time[0],top);
  ObjectSet("max",OBJPROP_COLOR,Yellow);ObjectSet("max",OBJPROP_WIDTH,0);}return(0);}
//+------------------------------------------------------------------+
 
좋은 오후, 저를 도와주세요. 저는 MetaFX를 설치한 초보자이고 데모의 고문이며 모든 것이 작동하지만 원본에서는 원하지 않습니다.
 

안녕하세요 !

올바른 경로에서 pzhl을 푸시합니다.

동일한 유형의 N 외부 변수가 제공됩니다. 코드를 복잡하게 하지 않고 최대값을 선택하는 방법 - MathMax는 최대 2개의 값을 반환합니다. 있는 경우 20 ?

또는 이 데이터에서 배열을 만드는 방법, ArrayMaximum을 적용 하는 방법은 무엇입니까?

extern int A = 10;
extern int .......;

extern int N = 1253;

미리 감사합니다!

 
Roll :

https://docs.mql4.com/en/array/ArrayMaximum

int ArrayMaximum( 이중 배열[], int count=WHOLE_ARRAY, int start=0)
최대값을 가진 요소를 검색합니다. 이 함수는 배열에서 최대 요소의 위치를 반환합니다.
옵션:
array[] - 검색할 숫자 배열입니다.
count - 검색할 요소의 수입니다.
start - 검색할 시작 인덱스입니다.
예시:
이중 num_array[15]={4,1,6,3,9,4,1,6,3,9,4,1,6,3,9};
int maxValueIdx=ArrayMaximum(num_array);
Print("최대값 = ", num_array[maxValueIdx]);


하지만, 형태로

int Max [N] = {A,.....,N};

배열이 생성되지 않습니다.

여기서: A,.......N - 동일한 유형의 지정된 변수. 변수 수 = N

 

외부 변수(스크립트)에서 문자열 배열을 만드는 예:

 extern string sym1= "GBPUSD" ;
extern string sym2= "GBPJPY" ;
extern string sym3= "EURUSD" ;
extern string sym4= "EURJPY" ;
extern string sym5= "AUDUSD" ;
extern string sym6= "AUDJPY" ;
extern string sym7= "NZDUSD" ;
extern string sym8= "USDCAD" ;

string sym[ 8 ];
//+------------------------------------------------------------------+
int init(){sym[ 1 ]=sym1;sym[ 2 ]=sym2;sym[ 3 ]=sym3;sym[ 4 ]=sym4;
   sym[ 5 ]=sym5;sym[ 6 ]=sym6;sym[ 7 ]=sym7;sym[ 8 ]=sym8; return ( 0 );}

int start(){ Alert ( "символ  " ,sym[ 1 ]); return ( 0 );}
 
Roll :

외부 변수(스크립트)에서 문자열 배열을 만드는 예:


고맙습니다 !

작동했지만 수정 사항으로: 대신

int init(){sym[1]=sym1;............

그렇게 하다

int init(){sym[0]=sym1;.......

그런 다음 모든 요소가 고려됩니다.

 
r772ra :

방해해서 죄송합니다

루프 및 그리기에 대해 topBuffer[i]를 사용하려면 다음을 시도하십시오.

귀하의 옵션은 작동하지 않지만 다른 사람들의 문제에 대한 귀하의 관심, 노력 및 이해에 대해 큰 감사를 드립니다.