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

 
honest_knave : 낙타 케이스라고 하는 줄은 몰랐어요. 감사해요!
중재자가 WikiPedia 링크를 가지고 있기 때문에 내 이전 게시물을 삭제한 것 같으므로 WikiPedia(또는 Google)에서 "Camel Case"에 대한 일부 기록 및 세부 정보를 검색하십시오.
 
Fernando Carreiro :
중재자가 WikiPedia 링크를 가지고 있기 때문에 내 이전 게시물을 삭제한 것 같으므로 WikiPedia(또는 Google)에서 "Camel Case"에 대한 일부 기록 및 세부 정보를 검색하십시오.
귀하의 게시물은 이중으로 삭제 되었습니다. 같은 링크가 이미 게시되어 있습니다.
 
#23 에 이어 함수 #26 에 캡슐화하여 이제 MT4와 MT5 모두에서 작동하는 구조체 를 보여줍니다. (포스트 빌드 600의 경우 변수 이름에서 잘못된 점( #29 )을 변경하고 int 를 표준 열거형에 적용했습니다.)
컴파일되지 않았고 테스트되지 않았습니다.
 struct SFX{                            // SFX indicator at #1
   #define SFX_NAME_PATH   "SFX"        // Indicator filename without extension,
                                       // including blanks if any.
   enum SFXbuffer{SFX_STD, SFX_STDMA};
   string                   PairName;
   ENUM_TIMEFRAMES          tf;
   int                      StdDev_MA_Period;
   int                      StdDev_MA_Shift;
   ENUM_MA_METHOD           StdDev_MA_Method;
   ENUM_APPLIED_PRICE       StdDev_MA_Price;
   int                      MA_Fast_Period;
   ENUM_MA_METHOD           MA_Fast_Method;
   int                      MA_Fast_Shift;
   #define CheckOncePerBar true ;
   void SFX()      : PairName( _Symbol ),            tf( PERIOD_CURRENT ),
                     StdDev_MA_Period( 12 ),         StdDev_MA_Shift( 0 ),
                     StdDev_MA_Method( MODE_SMA ),   StdDev_MA_Price( PRICE_CLOSE ),
                     MA_Fast_Period( 3 ),            MA_Fast_Method( MODE_SMMA ),
#ifndef __MQL5__
                     MA_Fast_Shift( 0 ){}
   double get(SFXbuffer buf, int iBar = 0 ){
       return iCustom (PairName, tf, SFX_NAME_PATH,
                     StdDev_MA_Period,             StdDev_MA_Shift,
                     StdDev_MA_Method,             StdDev_MA_Price,
                     MA_Fast_Period,               MA_Fast_Method,
                     MA_Fast_Shift,                CheckOncePerBar,
                     buf, iBar);
   }   // get
#else // MQL5
                     MA_Fast_Shift( 0 ),             Handle( INVALID_HANDLE ){}
   void ~SFX(){   if (Handle != INVALID_HANDLE ) IndicatorRelease (Handle);   }
   double get(SFXbuffer buf, int iBar = 0 ){
       if (Handle == INVALID_HANDLE ){
         Handle = iCustom (PairName, tf, SFX_NAME_PATH,
                     StdDev_MA_Period,             StdDev_MA_Shift,
                     StdDev_MA_Method,             StdDev_MA_Price,
                     MA_Fast_Period,               MA_Fast_Method,
                     MA_Fast_Shift,                CheckOncePerBar);
         if (Handle == INVALID_HANDLE ){
             PrintFormat ( "%s: iCustom(%s) Failed: %i" ,
                         __FUNCTION__ , SFX_NAME_PATH, _LastError );
             return 0 ;
         }
      }
       double  value[ 1 ]; CopyBuffer (Handle, buf, iBar, 1 , value);
       return   value[ 0 ];
   }   // get
 Private:
   int                   Handle;     // MT5 only
#endif   // __MQL5__
}; // SFX
///////////////////////////////////////////////////////////////////////////////
SFX   SFXindicator;
// SFXindicator.StdDev_MA_Period = ...;   // modification of default parameters.
:
double      STDBuffer = SFXindicator.get(SFX_STD,   0 );   // example calls
double      stddevma  = SFXindicator.get(SFX_STDMA, 0 );
컴파일되지 않았고 테스트되지 않았습니다.
 

안녕하세요, 저는 iCustom에 대해 간단하고 희망적인 질문이 있습니다. Ind_A, Ind_B 및 Ind_C라는 3개의 지표가 있고 EA라는 Expert Advisor가 있다고 가정해 보겠습니다.

EA는 icustom을 사용하여 3개의 표시기를 모두 호출하고 인수를 전달하고 해당 버퍼를 인덱싱하여 결과를 얻습니다.

EURUSD 차트 에 3개의 지표를 첨부하고 EA를 실행합니다. 인디케이터 Ind_A에 집중합시다. 그는 인디케이터로 실행 중이지만 동시에 EA에 의해 실행됩니다. 인스턴스가 동일하거나 두 개의 ind_A 인스턴스가 실행 중입니까? (즉, 하나의 인스턴스는 자체적으로 실행되고 다른 인스턴스는 EA 내부에 있습니다).

이러한 경우 각 인스턴스에는 자체 버퍼가 있습니까? 또는 표시기의 모든 인스턴스 간에 버퍼가 공유됩니까?

감사합니다!

 

이 스레드를 다시 깨워서 죄송합니다. 그러나 내 질문이 이 주제에 속한다고 생각했습니다.

사용자 지정 표시기 추세 대상에서 2개의 버퍼에 액세스하려고 합니다. 표시기에는 하나의 입력 = 60이 있고 두 개의 버퍼는 Band UP 및 Band LO입니다.

사용

 double Value1 = iCustom ( Symbol (), 0 ,"TrendTarget.ex4", 60 , 0 , 1 , 0 );



double Value2 = iCustom ( Symbol (), 0 ,"TrendTarget.ex4", 60 , 0 , 0 , 1 ); double Value1 = iCustom ( Symbol (), 0 ,"TrendTarget.ex4", 60 , 0 , 1 , 0 );



Comment (" iCustom returned v1= "+Value1+ " and value2= ",Value2);

이 iCustom에 대한 매개변수를 설정하는 방식이 맞습니까? Band Up 및 Band LO 값이 데이터 감시 패널의 버퍼와 정확하지 않은 것 같기 때문에 첨부된 그림을 확인하십시오. 2 또는 3개의 첫 번째 소수 자릿수 또는 3e 오른쪽만 하지만 FX 견적의 경우 4자리 모두가 정확해야 합니다. 맞습니까?

MQL5의 코더와 숙련된 사용자가 이 문제를 빠르게 수정하는 데 도움이 되기를 바랍니다. 미리 감사드립니다

-------------------------------------------------- -------------------------------------------------- -
표시기가 무엇인지에 따라 5개의 입력과 4개의 버퍼가 있습니다.

 double Value1 = iCustom ( Symbol (), 0 , "indicator" ,a1,a2,a3,a4,a5, 1 , 0 , 0 , 0 );

double Value2 = iCustom ( Symbol (), 0 , "indicator" ,a1,a2,a3,a4,a5, 0 , 2 , 0 , 0 );

double Value3 = iCustom ( Symbol (), 0 , "indicator" ,a1,a2,a3,a4,a5, 0 , 0 , 3 , 0 );

double Value4 = iCustom ( Symbol (), 0 , "indicator" ,a1,a2,a3,a4,a5, 0 , 0 , 0 , 4 );


위와 같이?

 
ntk2017 : 이 스레드를 다시 깨워서 죄송합니다. 하지만

(원본) 게시물을 수정 하고 코드 버튼(Alt-S) 을 사용하세요! (대량의 코드는 첨부합니다. )
포럼의 일반 규칙 및 모범 사례. - 일반 - MQL5 프로그래밍 포럼
메시지 편집기

 
ntk2017 : 표시기에 5개의 입력4개의 버퍼 가 있습니다.
 double Value1 = iCustom ( Symbol (), 0 , "indicator" ,a1,a2,a3,a4,a5, 1 , 0 , 0 , 0 );
double Value2 = iCustom ( Symbol (), 0 , "indicator" ,a1,a2,a3,a4,a5, 0 , 2 , 0 , 0 );
double Value3 = iCustom ( Symbol (), 0 , "indicator" ,a1,a2,a3,a4,a5, 0 , 0 , 3 , 0 );
double Value4 = iCustom ( Symbol (), 0 , "indicator" ,a1,a2,a3,a4,a5, 0 , 0 , 0 , 4 );

위와 같이?

절대적으로하지.

 iCustom ( Symbol (), 0 , "indicator" , a 1,a2 ,a3,a4,a5 , BufferIndex, BarIndex );
 
William Roeder :

절대적으로하지.

나는 이렇게 사용해야한다
 double value1 = iCustom ( Symbol (), 0 , "indicator" , a 1,a2,a3,a4,a5 ,1,0,0,0, 0 ); //with BarIndex=0, when only check on close or 1= when check on every tick;
double value2 = iCustom ( Symbol (), 0 , "indicator" , a 1,a2,a3,a4,a5 ,0,1,0,0, 0 );
double value3 = iCustom( Symbol (), 0 , "indicator" , a 1,a2,a3,a4,a5 ,0,0,1,0, 0 );
double value4 = iCustom( Symbol (), 0 , "indicator" , a 1,a2,a3,a4,a5 ,0,0,0,1, 0 );

수정해 주셔서 감사합니다. 방금 mql5에서 " Combined Use of Programs"( https://book.mql4.com/samples/shared )의 예를 찾았습니다. codig의 예가 제가 필요로 하는 것이라고 생각합니다. 나는 그 부분을 공부할 것이다. 만약 내 프로그래밍에 질문이 있다면 당신이 내가 더 안정적이고 더 많은 이익을 얻을 수 있도록 도와주기를 바란다.

Combined Use of Programs - Simple Programs in MQL4 - MQL4 Tutorial
Combined Use of Programs - Simple Programs in MQL4 - MQL4 Tutorial
  • book.mql4.com
It was said earlier that according to MQL4 rules trade functions cannot be used in custom indicators, that is why for automated trading Expert Advisors or scripts should be used. However, the resource-saving technology used for calculations in indicators (see Creation of Custom Indicators) is widely used when creating trading programs. In most...
 
William Roeder :

절대적으로하지.

이제 이 코드가 있습니다. TrendTarget의 버퍼 1, 2를 볼 수 있습니다(그러나 여전히 4자리 숫자가 모두 정확하지는 않습니다!!!). TrendTarget을 다시 확인하고 싶기 때문에 모든 스틱의 BarsIndex 값을 1로 설정합니다.

   double shortSma, longSma, ShortSL, ShortTP, LongSL, LongTP,Band_UP,Band_LO;

   double Value1,Value2 ;





   Value1 = iCustom ( Symbol (), 0 , "TrendTarget.ex4" , 60 , 1 , 1 );

   Value2 = iCustom ( Symbol (), 0 , "TrendTarget.ex4" , 60 , 2 , 1 );

   Band_UP = Value1;

   Band_LO = Value2;

   Comment ( " !!!!!!! ICUSTOM returned Value1= " +Value1+ " and value2= " ,Value2+ "\n" );

하지만 여전히 문제가 있습니다. 나는 필터처럼 TrendTarget을 사용합니다
 if (tik <= 5 && Ask>Band_UP) ///////////////ONLY can open SELL////////////////
        {
         ////////////////////// TP1 SL1 ///////////////////////////////////
         openOrder( Symbol (), OP_SELLSTOP,LotSize,sellPrice,sellPrice+SL1*point(), sellPrice-TP1*point(), "_Sell_1" ,MagicNumber, exp ,Crimson);
        }

       if (tik <= 5 && Bid<Band_LO)   ///////////////ONLY can open BUY////////////////

        {
         ////////////////////// TP1 SL1 ///////////////////////////////
         openOrder( Symbol (), OP_BUYSTOP,LotSize,buyPrice,buyPrice-SL1*point(), buyPrice+TP1*point(), "_Buy_1" ,MagicNumber, exp ,Navy);
        }
하지만 실행 후 TrendTarget 표시기를 첨부했는데 EA가 여전히 채널 사이에서 많은 거래를 열었습니다!!!!!

그림에서 나는 TrendTarget이 시작된 후 추가합니다. Include TrendTarget( 매개변수 TF=60)이 포함된 테스터 템플릿을 만들 때 채널은 첫 번째 X 막대에만 표시됩니다. 그러면 가격 곡선만 볼 수 있습니다. 그 이유는 무엇입니까?
주문이 열린 위치를 시각적으로 확인하기 위해 Trend Target 표시기를 간단하게 추가하려면 어떻게 해야 합니까?

나는 close의 사용과 유사하게 과거에 value_UP 코드를 사용하는 것을 좋아합니다. before 어제 Close[2], 어제 Close[1], curren close Close[0]? 가능합니까?
파일:
 
scap 테스트 EA에서 여전히 가지고 있는 문제는 다음과 같습니다.

첫 번째 문제:
TrendTarget의 버퍼 1, 2를 볼 수 있습니다(그러나 여전히 4자리 숫자가 모두 정확하지는 않습니다!!!). 중요한가요? for EURUSD 견적 1.0907 저는 가격 값을 TrendTarget 상위 채널 또는 하위 채널과 비교할 때 TrendTarget의 해당 값이 최소 4자리 십진수로 정확해야 한다고 생각했습니다.
TrendTarget을 다시 확인하고 싶기 때문에 모든 스틱의 BarsIndex 값을 1로 설정했습니다.

두 번째 문제:
하지만 여전히 문제가 있습니다. 나는 필터처럼 TrendTarget을 사용합니다.

하지만 실행 후 TrendTarget 표시기를 첨부했는데 EA가 여전히 채널 사이에 많은 거래를 열었습니다!!!!!

세 번째 문제:
첨부된 그림 에서 나는 시작 후 TrendTarget을 추가해야 합니다. 내가 TrendTarget(매개변수 TF=60)을 포함하는 테스터 템플릿을 만들 때 TrendTarget 채널은 첫 번째 X 막대(아마도 100개)에 대해서만 표시되고 가격 곡선만 볼 수 있습니다. 그 이유는 무엇입니까?

네 번째 문제:
주문이 열리는 런타임 시각적 확인을 위해 Trend Target 표시기를 간단하게 추가하려면 어떻게 해야 합니까?

다섯 번째 문제:
나는 close의 사용과 유사하게 과거의 value_UP 코드에서 사용하는 것을 좋아합니다. before 어제 Close[2], 어제 Close[1], 현재 close Close[0]? 가능합니까? 몇 개 이상의 막대 이탈이 있을 수 있기 때문에 이 경우 전략을 돌파 거래로 변경하는 대신 이론만 코딩에서 수행하는 방법을 모릅니다.

여섯 번째 문제:
조건이 터치되면 예를 들어 1개의 주문만 여는 것을 좋아합니다. 가격이 상위 채널 위에 많은 막대를 유지하므로 조건이 항상 맞기 때문에 내 계정이 소진될 때까지 열려 있습니다! 하나의 주문만 보내고 상태가 변경될 때까지 기다리는 방법은 무엇입니까?

일곱 번째 문제:
추세 목표가 무엇인지 아는 사람이 있습니까? 추세선 또는 각 측면에 +/- 1xATR(14)가 추가된 가격의 MA(x)가 맞는 것 같습니다. 누군가에 대한 코드가 있습니까?
사유: