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

 
NewCoder47 :

Dabbler님 감사합니다. 전체 EA와 표시기를 첨부했습니다. iCustom에 대한 설명을 읽고 매개변수 부분을 제외한 모든 것을 이해했습니다.

매개변수 에 들어가는 것은 Indicator 의 extern 변수에 사용하려는 값입니다. . . 이 경우 이들 . . .

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

도움말 파일을 다시 살펴보겠습니다.

 double iCustom ( string symbol, int timeframe, string name, ..., int mode, int shift) 
 

... 부분의 정의를 보면.

... - 매개변수 세트(필요한 경우). 전달된 매개변수 및 해당 순서는 선언 순서 및 사용자 지정 표시기 의 extern 변수 유형과 일치해야 합니다.


9개의 extern 변수가 있으므로 올바른 순서와 올바른 유형의 9개의 매개변수가 필요합니다.

     double      STDBuffer = iCustom(Null, 0 , "SFX" , "" , 12 , 0 , 0 , 0 , 3 , 2 , 0 , true , 0 , 0 );
     double      stddevma =  iCustom(Null, 0 , "SFX" , "" , 12 , 0 , 0 , 0 , 3 , 2 , 0 , true , 1 , 0 );

쉬워요.

그런 다음 "또한 어떤 값이 EA로 전송되고 있는지 물리적으로 볼 수 있는 방법이 있습니까?"라고 묻습니다.

확신하는.

 Comment ( "StdBuffer=" + STDBuffer+ "\nstddevma=" + stddevma);
 
dabbler :
 double      STDBuffer = iCustom(Null, 0 , "SFX" , "" , 12 , 0 , 0 , 0 , 3 , 2 , 0 , true , 0 , 0 );
 double      stddevma =  iCustom(Null, 0 , "SFX" , "" , 12 , 0 , 0 , 0 , 3 , 2 , 0 , true , 1 , 0 );

예, Null 이 오타인 것을 제외하고는.

표시기로 시작하여 코드를 생성하십시오.

지시자
EA
확장자가 없는 표시기 파일 이름(있는 경우 공백 포함).
 #define SFX "SFX"
상수이므로 #define. 오타가 없도록 한 번 정의하십시오.
 extern string PairName = "" ;     // Leave blank for ...

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=Sm...
extern int StdDev.MA.Price = 0 ;   // 0 Close price, 1 O...
extern int MA.Fast. Period = 3 ;
extern int MA.Fast.Method = 2 ;   //  0=SMA 1=EMA 2=Sm ...
extern int MA.Fast.Shift = 0 ;

extern bool CheckOncePerBar = true;
string   PairName            = "" ;     
int      StdDev.MA. Period     = 12 ;  
int      StdDev.MA.Shift     =   0 ;    
int      StdDev.MA.Method    =   MODE_SMA ; 
int      StdDev.MA.Price     =   PRICE_CLOSE ;  
int      MA.Fast. Period       =   3 ;
int      MA.Fast.Method      =   MODE_SMMA ;
int      MA.Fast.Shift       =   0 ;
#define CheckOncePerBar        true;
버퍼에 영향을 주지 않는 값은 일정하게 만들 수 있습니다.
   SetIndexBuffer ( 0 , STDBuffer);
   SetIndexBuffer ( 1 , stddevma);
버퍼의 의미를 찾기 위해 코드를 읽어야 할 수도 있습니다. 예
STDBuffer[i]= iStdDev (...)
stddevma[i] = iMAOnArray (
 #define SFX_STD   0
#define SFX_STDMA 1
전화는 다음과 같습니다
 double      STDBuffer = iCustom ( NULL , 0 ,SFX,
                        PairName, StdDev.MA. Period , StdDev.MA.Shift, 
                        StdDev.MA.Method, StdDev.MA.Price, MA.Fast. Period , 
                        MA.Fast.Method, MA.Fast.Shift, CheckOncePerBar,
                                SFX_STD, 0 )
double      stddevma =   iCustom ( NULL , 0 ,SFX,
                        PairName, StdDev.MA. Period , StdDev.MA.Shift, 
                        StdDev.MA.Method, StdDev.MA.Price, MA.Fast. Period , 
                        MA.Fast.Method, MA.Fast.Shift, CheckOncePerBar,
                                SFX_STDMA, 0 )
 

당신의 응답을 주셔서 감사합니다. 그래서


 ExtMapBuffer1[i+ 3 ] = lower_fractal_7b;     could be used as calculated value when reversal fractal is called?

 
ubzen :
네. 항상. 저는 Extern Values에 대해 이야기하고 있습니다. 그리고 나는 당신이 Buffers에 대해 이야기하고 있다고 생각합니다.

네 UBZEN,


나는 또한 당신이 제안한 것을 시도했고 그것은 내 표시기에 명시된 값을 반환했습니다....

매개변수 없이 간단하게 추가하거나 사용하기 쉽습니다. 특히 배열이 있는 매개변수는.......

나는 당신이 아닌 매개 변수를 컴파일하는 데 길을 잃을 수 있습니다 ............. 여기 PRO

정말 감사합니다 .... 나는이 답변을 며칠 동안 찾고있었습니다.

 
WHRoeder : 호출은 다음과 같습니다.
 double      STDBuffer = iCustom ( NULL , 0 ,SFX,
                        PairName, StdDev.MA. Period , StdDev.MA.Shift, 
                        StdDev.MA.Method, StdDev.MA.Price, MA.Fast. Period , 
                        MA.Fast.Method, MA.Fast.Shift, CheckOncePerBar,
                                SFX_STD, 0 )
double      stddevma =   iCustom ( NULL , 0 ,SFX,
                        PairName, StdDev.MA. Period , StdDev.MA.Shift, 
                        StdDev.MA.Method, StdDev.MA.Price, MA.Fast. Period , 
                        MA.Fast.Method, MA.Fast.Shift, CheckOncePerBar,
                                SFX_STDMA, 0 )
그런 다음 캡슐화해야 합니다.
 double getSFX( int eBuf, int iBar = 0 , int eTF=0){ 
   return ( iCustom ( NULL , eTF ,SFX,
                      PairName, StdDev.MA. Period , StdDev.MA.Shift, 
                      StdDev.MA.Method, StdDev.MA.Price, MA.Fast. Period , 
                      MA.Fast.Method, MA.Fast.Shift, CheckOncePerBar,
                   eBuf, iBar) ); 
}
:
double      STDBuffer = getSFX(SFX_STD, 0 );
double      stddevma  = getSFX(SFX_STDMA, 0 );
:
 
RaptorUK :

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

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

친애하는 RaptorUK(및 도움을 줄 수 있는 다른 사람들),


인용된 게시물에서 EA에서 사용자 지정 지표 값을 사용하는 두 가지 방법을 설명합니다. 첫 번째는 이미 알고 있는 iCustom입니다. 두 번째는 이전에 사용자 지정 표시기의 코드를 기본 표시기의 본문에 내부화하려고 시도했지만 성공하지 못했기 때문에 더 자세히 배우고 싶은 것입니다. 표시기를 함수로 바꾸고 가장 최신 값(요소 0의 값)을 반환하도록 하면 항상 계산된 값 자체 대신 이중 변수에 대해 EMPTY_VALUE를 얻습니다. iCustom 기능을 사용하여 시프트를 가장 최근 값인 0으로 설정해 보았습니다. 이 작업을 수행하면 터미널은 전문가 탭의 오류 STACK OVERFLOW와 함께 0을 반환하여 시작합니다. 두 번째 틱에서는 값을 반환하지만 인쇄된 [0] 값이 두 번 나올 때마다 또 다른 STACK OVERFLOW 오류가 발생하여 계속 반복됩니다. iCustom은 첫 번째 초기화 시 값 0과 STACK OVERFLOW를 반환하기 때문에(올바른 값을 제공하기 시작한 후에만) Start()가 활성화되고 여러 개를 호출할 때마다 다른 기호에 대해 icustom을 호출하기 때문에 내 EA에서 icustom을 사용할 수 없습니다. 이를 위한 맞춤형 지표. 이로 인해 EA가 충돌합니다. icustom이 가장 최근 값 [0]을 반환하기를 원할 때마다 STACK OVERFLOW 오류가 발생하는 이유를 이해하지 못하지만 확실히 알고 싶습니다. 그러나 호출되는 모든 표시기의 코드를 기본 표시기 내부의 함수로 변환하여 내부화하는 것을 선호합니다. 배열을 사용하고 "시리즈 방식"으로 처리하는 방법에 대해 말씀하셨습니다. 자세히 설명해 주시겠습니까?

클래식 ADX.mq4 표시기의 mq4 파일을 추가했습니다. ADX 값 내부는 두 번 인쇄됩니다. Icustom에 의해 한 번, 두 번째로 ADX 내부에서 기능으로 전환된 ADX 코드에 의해. Icustom(ADX)은 값을 반환하지만 ADX(symbol,timeframe)는 반환하지 않습니다. 동일한 EMPTY_VALUE 247456457457 또는 무언가를 계속 반복해서 반환합니다. 이것이 발생하는 이유와 mq4 사용자 지정 표시기 파일에서와 같이 EA 템플릿에서 이 두 가지를 모두 해결할 수 있는 방법을 설명하십시오.


미리 감사드립니다.


추신: 첨부 파일이 작동하지 않는 것 같습니다. 그러나 http://www.forexfactory.com/showthre...37#post8569537 (내 이름은 Codix)에서 ADX 사용자 지정 표시기로 CallicustomvsFunction 예제 표시기를 모두 다운로드할 수 있습니다.

 
  1. 이중 게시하지 마십시오
  2. 다른 스레드를 가로채지 마십시오. 귀하의 질문은 iCustom을 사용하는 방법에 관한 것이 아닙니다.
 

위의 게시물( https://www.mql5.com/en/forum/138577/page3#627521https://www.mql5.com/en/forum/138577/page3#797401 )에서 나는 점과 단어를 사용했습니다. 구분자.

2020년 2 3일 이후로는 허용되지 않습니다 .

 
whroeder1 :

밑줄 또는 카멜 케이스를 사용합니다.

나는 그것이 낙타 케이스라고 불리는 것을 결코 알지 못했다. 감사해요!