iCustom에 대한 자세한 설명 - 페이지 2

 
NewCoder47 :


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

내가 쓴거 안읽었어? " 지표를 변경할 필요가 없습니다. ... EA는 단순히 필요한 시프트 값에서 필요한 버퍼에 액세스합니다. "
 
dabbler :
당신은 할 수 없습니다. 방금 시도했습니다. 쉼표 사이에 빈 공간을 남겨두고 매개변수 중 하나를 생략하면 컴파일되지 않습니다.
나는 내가 마지막 말을 정정해야 한다는 것을 알았다. 매개변수 에 대해 쉼표를 제거합니다.
 
ubzen :
나는 내가 마지막 말을 정정해야 한다는 것을 알았다. 매개변수에 대해 쉼표를 제거합니다.

내 표시기 폴더 내에서 이 표시기를 TOR.mqh로 준수했습니다. 그런 다음 Expert 폴더에 다음 코드를 작성했습니다.

 void start(){
     iCustom ( Symbol (), 0 , "TOR" , 0 , 1 );
}
매개 변수 를 전달하지 않고 잘 준수했습니다.
 
ubzen :

내 표시기 폴더 내에서 이 표시기를 TOR.mqh로 준수했습니다. 그런 다음 Expert 폴더에 다음 코드를 작성했습니다.

매개 변수를 전달하지 않고 잘 컴파일 되었습니다.
그러나 실제로 작동합니까?
 
dabbler :
그러나 실제로 작동합니까?
네. 항상. 저는 Extern Values에 대해 이야기하고 있습니다. 그리고 나는 당신이 Buffers에 대해 이야기하고 있다고 생각합니다.
 

도와주셔서 감사합니다. 내일 밤에 제가 알아낼 수 있는 것을 살펴보겠습니다.

감사해요

 

얘들 아. 아직은 좀 어려운 것 같아요.

다음은 코드입니다. 표시기(표시기에서 아무 것도 변경하지 않음)에서 관련 부분이라고 생각하는 것을 보여주고 있습니다. 이것들은 표시기에서 서로 따르지 않는다는 점에 유의하십시오. 제거한 항목이 더 많습니다.

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


//---- 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);
     } 

이제 여기 EA의 코드가 있습니다.

                 double FastMA = iMA ( NULL , 0 ,FastMAPeriod, 0 , 0 , 0 , 0 );
                 double SlowMA = iMA ( NULL , 0 ,SlowMAPeriod, 0 , 0 , 0 , 0 );
                 double      STDBuffer = iCustom (Null, 0 , "SFX" , , , 0 , 0 );
                 double      stddevma = iCustom (Null, 0 , "SFX" , , , 1 , 0 );
                

내가 이해하지 못하는 것은 매개 변수 부분입니다. 여기에 어떤 값을 입력합니까? 이것은 내가 고투하는 부분이다. EA의 아래 테스트에서 STDBuffer 및 stddevma 값을 사용하고 싶습니다. 예를 들어, Pair1(현재 차트로 선언된 지표의 다른 곳에 있음)을 포함합니까? iCustom 시작 시 이미 Null로 선언되었기 때문입니다.

또한 어떤 값이 EA로 전송되고 있는지 물리적으로 확인할 수 있는 방법이 있습니까?

도움을 주시면 감사하겠습니다.

감사해요

 
NewCoder47 :

다음은 코드입니다. 표시기(표시기에서 아무 것도 변경하지 않음)에서 관련 부분이라고 생각하는 것을 보여주고 있습니다. 이것들은 표시기에서 서로 따르지 않는다는 점에 유의하십시오. 제거한 항목이 더 많습니다.

이제 여기 EA의 코드가 있습니다.

내가 이해하지 못하는 것은 매개 변수 부분입니다. 여기에 어떤 값을 입력합니까? 이것은 내가 고투하는 부분이다. EA의 아래 테스트에서 STDBuffer 및 stddevma 값을 사용하고 싶습니다. 예를 들어, Pair1(현재 차트로 선언된 지표의 다른 곳에 있음)을 포함합니까? iCustom 시작 시 이미 Null로 선언되었기 때문입니다.

지표의 관련 부분을 표시 하지 않았습니다 . 모든 extern 문과 그 발생 순서를 표시해야 합니다.

모든 SetIndexBuffer 문을 표시해야 합니다. 이것을 보여줘야 하는 이유를 이해하면 아마도 무엇을 해야 하는지 알게 될 것입니다.

아, 그리고 iCustom 문에서 쉼표 사이에 공백을 둘 수 없습니다. 컴파일되지 않습니다.

원래 러시아어로 작성되었다는 점을 고려하여 iCustom 문서를 다시 읽어보십시오. 주의 깊게 공부해야 합니다.

 
dabbler :

지표의 관련 부분을 표시 하지 않았습니다 . 모든 extern 문과 그 발생 순서를 표시해야 합니다.

모든 SetIndexBuffer 문을 표시해야 합니다. 이것을 보여줘야 하는 이유를 이해하면 아마도 무엇을 해야 하는지 알게 될 것입니다.

아, 그리고 iCustom 문에서 쉼표 사이에 공백을 둘 수 없습니다. 컴파일되지 않습니다.

원래 러시아어로 작성되었다는 점을 고려하여 iCustom 문서를 다시 읽어보십시오. 주의 깊게 공부해야 합니다.

Dabbler님 감사합니다. 전체 EA와 표시기를 첨부했습니다. iCustom에 대한 설명을 읽었고 매개변수 부분을 제외한 모든 것을 이해했지만 매우 모호합니다. EA는 현재 테스트 중이므로 매우 잘립니다.

감사해요,

마이크.

지시자:

 //---- 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 ];
   
          
//---- done
   return ( 0 );
  }

EA:

 //+------------------------------------------------------------------+
//|                                                       Simple.mq4 |
//|                                                       Mike Clegg |
//|                                                                  |
//+------------------------------------------------------------------+

#property copyright "Mike Clegg"


// External variables
extern double LotSize = 1 ;

extern int MagicNumber = 123 ;

extern int FastMAPeriod = 12 ;
extern int SlowMAPeriod = 26 ;


// Global variables
int BuyTicket;
int SellTicket;


// Start function
int start()
        {
                 // Moving averages
                 double FastMA = iMA ( NULL , 0 ,FastMAPeriod, 0 , 0 , 0 , 0 );
                 double SlowMA = iMA ( NULL , 0 ,SlowMAPeriod, 0 , 0 , 0 , 0 );
                 double      STDBuffer = iCustom ( NULL , 0 , "SFX" , 0 , 0 );
       double      stddevma = iCustom ( NULL , 0 , "SFX" , 1 , 0 );
                
                 // Buy order 
                 if (FastMA > SlowMA && BuyTicket == 0 && stddevma > STDBuffer)
                        { PlaySound ( "alert.wav" );
         Alert ( Symbol (), "All Crossing" , Period (), "All Crossing" );
                        }
                                
                 return ( 0 );
        }

EA가 지표의 역할을 하고 있다는 사실을 무시해 주십시오. 제가 말했듯이 저는 현재 테스트 중입니다.

 
NewCoder47 :

Dabbler님 감사합니다. 전체 EA와 표시기를 첨부했습니다. iCustom에 대한 설명을 읽었고 매개변수 부분을 제외한 모든 것을 이해했지만 매우 모호합니다. EA는 현재 테스트 중이므로 매우 잘립니다.

감사해요,

마이크.

지시자:

EA:

EA가 지표의 역할을 하고 있다는 사실을 무시해 주십시오. 제가 말했듯이 저는 현재 테스트 중입니다.


여기에서 좋은 조언을 얻었지만 여전히 어려움을 겪고 있습니다....

iCustom이 표시기와 어떻게 작동하는지 알기 위해 helpEA 또는 helpIndicator를 만들어 표시기의 버퍼 내부에 무엇이 있는지 확인할 수 있습니다.

이렇게 하면 MT4에서 명령을 확인하는 방법을 가장 많이 배울 수 있습니다. 여기 읽기 https://www.mql5.com/en/forum/138379

그와 같은 것을 만들고 그것을 사용하는 방법을 배우게 될 것입니다 ..... 당신이 만들고 싶은 EA에서