iCustom에 대한 자세한 설명

 

안녕하세요.

저는 코딩을 처음 접하고 많은 것을 배우고 있습니다. 그러나 지금은 머리를 감을 수 없는 것을 발견했습니다. 내 지표 중 하나에서 테스트 결과를 ea로 호출하여 거래를 하기 전에 자체 테스트에 추가할 수 있도록 하려고 합니다. ea는 단순 이동 평균 십자형입니다. 표시기는 추세 또는 범위 표시기입니다. 표시 코드를 첨부했습니다.

도움을 받고 싶습니다. 가능 하면 간단하게 설명 하여 ea가 인식할 수 있도록 표시기 내부에 설정하는 방법에 대해 머리를 숙일 수 있습니다. 지표가 정렬되면 ea로 이동합니다.

표시기에는 iCustom 기능 을 추가하고 싶은 두 가지 테스트가 있습니다. 이 단계에서는 하나의 테스트에만 추가하고 싶습니다. 이해하려고 하기 때문에 어느 것이든 상관없습니다. 기꺼이 도와주고 간단하게 설명하는 사람은 큰 도움이 될 것입니다. 온라인에서 설명하는 것을 찾을 수 없으므로 이해할 수 있습니다. 테스트 결과는 단순히 "true"일 수 있습니다.

시간 내주셔서 미리 감사드립니다.
마이크

 //---- indicator settings
#property  indicator_separate_window
#property  indicator_buffers 2
#property  indicator_color1  Yellow
#property  indicator_color2  Red
#property  indicator_width1   1

//---- indicator parameters
extern string PairName = "" ;   // Leave blank for the pair of the chart, enter other pair name to compare correlated pairs

extern int StdDev.MA. Period = 12 ;   // D1=20
extern int StdDev.MA.Shift= 0 ;     //
extern int StdDev.MA.Method = 0 ; // 0=SMA 1=EMA 2=Smoothed 3=Linear Weighted
extern int StdDev.MA.Price = 0 ;   // 0 Close price, 1 Open price, 2 High price, 3 Low price, 4 Median price, (high+low)/2, 5 Typical price, (high+low+close)/3, 6 Weighted close price, (high+low+close+close)/4

extern int MA.Fast. Period = 3 ;
extern int MA.Fast.Method = 2 ;   //  0=SMA 1=EMA 2=Smoothed 3=Linear Weighted
extern int MA.Fast.Shift = 0 ;

extern bool CheckOncePerBar = true;

int i, limit, counted_bars;
static string Pair1;

datetime CurrentTimeStamp;

//---- indicator buffers
double      STDBuffer[];
double      stddevma[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
  
   IndicatorDigits ( Digits + 1 );
     
//---- drawing settings
   SetIndexStyle ( 0 , DRAW_LINE ); // 
   SetIndexStyle ( 1 , DRAW_LINE );

      
//---- indicator buffers mapping
   SetIndexBuffer ( 0 , STDBuffer);
   SetIndexBuffer ( 1 , stddevma);

   
   if (PairName == "" ) Pair1 = Symbol ();
   else Pair1 = PairName;

//---- name for DataWindow and indicator subwindow label
   IndicatorShortName ( "SFX TOR: " +Pair1+ "(" +StdDev.MA. Period + ")" );
   SetIndexLabel ( 0 , "StdDev" );
   SetIndexLabel ( 1 , "StdDev MA" );

//---- initialization done
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Moving Averages Convergence/Divergence                           |
//+------------------------------------------------------------------+
int start()
  {

   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=limit- 1 ; i>= 0 ; i--){
     STDBuffer[i]= iStdDev (Pair1, 0 ,StdDev.MA. Period , StdDev.MA.Shift, StdDev.MA.Method, StdDev.MA.Price, i);
     }
   for (i=limit- 1 ; i>= 0 ; i--){
     stddevma[i] = iMAOnArray (STDBuffer, 0 , MA.Fast. Period , MA.Fast.Shift, MA.Fast.Method, i);
     } 
    
//Execute on bar Open
     if ( CheckOncePerBar == true ){
       if ( CurrentTimeStamp == Time[ 0 ] )
         return ( 0 );
   }
   
   CurrentTimeStamp = Time [ 0 ];
   
//Tests
        
       if ( STDBuffer[ 1 ] > stddevma[ 1 ] ){
       if ( STDBuffer[ 2 ] <= stddevma[ 2 ]){
         PlaySound ( "alert.wav" );
         Alert ( Symbol (), " M" , Period (), " 30MCrossing" );
         SendMail ( "30MCrossing" , "30MCrossing" );
      }   
   }
   else { // if it's not greater then it is either lesser than or equal
       if ( STDBuffer[ 2 ] >= stddevma[ 2 ]){
         PlaySound ( "alert.wav" );
         Alert ( Symbol (), " M" , Period (), " 30MCrossing" );
         SendMail ( "30MCrossing" , "30MCrossing" );  
      }
   }
          
//---- done
   return ( 0 );
  }
 

iCustom을 사용하면 표시기 버퍼 에 액세스할 수 있습니다. . . 그것은 간단합니다.

예를 들어, 2개의 지표를 기반으로 하는 전략이 있는 EA를 작성하고 있는 경우 EA에 지표 코드를 빌드할 수 있습니다. 가능하지만 지표 버퍼가 EA에서 작동하지 않기 때문에 약간 복잡하므로 다음을 사용해야 합니다. 배열을 만들고 "시리즈" 방식으로 처리합니다. . . 대안은 지표를 실행하고 EA에서 버퍼에 액세스하는 것입니다. . . 이것이 iCustom이 용이하게 하는 것입니다. 지표를 변경할 필요가 없습니다. . . . EA는 단순히 필요한 시프트 값에서 필요한 버퍼에 액세스합니다. iCustom 호출에서 지표를 적용 가능한 것으로 설정하는 데 필요한 모든 외부 변수를 전달할 수도 있습니다.

 
RaptorUK :

iCustom을 사용하면 표시기 버퍼에 액세스할 수 있습니다. . . 그것은 간단합니다.

예를 들어, 2개의 지표를 기반으로 하는 전략이 있는 EA를 작성하고 있는 경우 EA에 지표 코드를 빌드할 수 있습니다. 가능하지만 지표 버퍼가 EA에서 작동하지 않기 때문에 약간 복잡하므로 다음을 사용해야 합니다. 배열을 만들고 "시리즈" 방식으로 처리합니다. . . 대안은 지표를 실행하고 EA에서 버퍼에 액세스하는 것입니다. . . 이것이 iCustom이 용이하게 하는 것입니다. 지표를 변경할 필요가 없습니다. . . . EA는 단순히 필요한 시프트 값에서 필요한 버퍼에 액세스합니다. iCustom 호출에서 지표를 적용 가능한 것으로 설정하는 데 필요한 모든 외부 변수를 전달할 수도 있습니다.


그 RaptorUK에 감사드립니다. 그러나 제가 어려움을 겪고 있는 것은 실제 코딩입니다. 저는 MQL4를 처음 접했고 몇 달 밖에 안 되었고 여전히 배우고 있습니다. 그래서 코딩에 대한 간단한 설명과 표시기에서 설정하는 방법이 필요합니다.

감사해요

마이크

 

RaptorUK :

iCustom 호출에서 지표를 적용 가능한 것으로 설정하는 데 필요한 모든 외부 변수를 전달할 수도 있습니다.

수정 ...

iCustom 에서 호출

해야 하다

또한 해당되는 경우 표시기를 설정하는 데 필요한 모든 외부 변수를 전달합니다.
 
NewCoder47 :


그 RaptorUK에 감사드립니다. 그러나 제가 어려움을 겪고 있는 것은 실제 코딩입니다. 저는 MQL4를 처음 접했고 몇 달 밖에 안 되었고 여전히 배우고 있습니다. 그래서 코딩에 대한 간단한 설명과 표시기에서 설정하는 방법이 필요합니다.

감사해요

마이크

여기서 분명히 누락된 것은 표시기에서 iCustom 을 사용하지 않는다는 것입니다. 표시기는 독립 실행형 코드 조각입니다. EA 는 이제 iCustom 명령을 사용하여 표시기에서 무슨 일이 일어나고 있는지 살짝 엿볼 수 있습니다.

https://docs.mql4.com/indicators/iCustom

https://forum.mql4.com/42002

 
dabbler :

수정 ...

iCustom 에서 호출

해야 하다

또한 해당되는 경우 표시기를 설정하는 데 필요한 모든 외부 변수를 전달합니다.
외부 값을 비워 둘 수 있습니다. 그러면 iCustom() 표시기 가 기본값을 사용합니다.
 
dabbler :

수정 ...

iCustom 에서 호출

해야 하다

또한 해당되는 경우 표시기를 설정하는 데 필요한 모든 외부 변수를 전달합니다.

나는 이것에 관한 다른 진술을 읽었다. . . 저는 iCustom을 사용해 본 적이 없어서 개인적인 경험으로는 말씀드릴 수 없습니다. . . 그러나 기본 extern 변수가 필요한 경우에도 귀하의 진술은 사실입니까?
 
RaptorUK :
나는 이것에 관한 다른 진술을 읽었다. . . 저는 iCustom을 사용해 본 적이 없어서 개인적인 경험으로는 말씀드릴 수 없습니다. . . 그러나 기본 extern 변수가 필요한 경우에도 귀하의 진술은 사실입니까?
네. 문제는 iCustom 의 마지막 두 매개변수 가 중요하므로 아무 것도 생략할 수 없다는 것입니다.
 
dabbler :
네. 문제는 iCustom 의 마지막 두 매개변수가 중요하므로 아무 것도 생략할 수 없다는 것입니다.
당연하지 . . . 감사해요.
 
ubzen :
외부 값을 비워 둘 수 있습니다. 그러면 iCustom() 표시기가 기본값을 사용합니다.
당신은 할 수 없습니다. 방금 시도했습니다. 쉼표 사이에 빈 공간을 남겨 매개변수 중 하나를 생략하면 컴파일되지 않습니다.
 
NewCoder47 :


.... 저는 MQL4를 처음 접했고 몇 달 밖에 안 되었고 여전히 배우고 있습니다. 그래서 코딩에 대한 간단한 설명과 표시기에서 설정하는 방법이 필요합니다....

나는 표시기를 BarrowBoy의 Trend_Or_Range 표시기로 인식합니다. 지표를 이해하는 열쇠는 배열을 이해하는 것입니다. 나는 mql4를 사용할 때 첫날부터 어레이를 사용하고 있다는 것을 깨달을 때까지 어레이에 대한 건전한 두려움을 가지고 있었습니다. OrderSelect() 및 Ma_CrossOver Logics는 EA를 만들기 위해 가장 먼저 이해해야 하는 것 중 일부입니다.

Raptor와 Dabber가 지적했듯이. 그것들은 뒤로 또는 앞으로 계산되는 일련의 숫자일 뿐입니다. 지표는 전문가보다 더 많은 시각적 도구를 활용하는 부가 가치가 있습니다. 이 사용자 지정 지표는 표준 편차 및 이동 평균과 같은 표준 지표를 많이 사용하므로 EA 내에서 이러한 계산을 수행하는 것이 좋습니다.

사유: