코딩 도움말 - 페이지 726

 

안녕 믈라덴

MT5에서 이것을 코딩하려고하는데 올바른 구현을 사용하지 않고 있다고 생각합니다.

내 생각은 더 많은 지표를 사용하는 것입니다. 저에게 빛을 주세요... ;-)

I need help to make this modular, because I will work with more indicators (6 to 8), 
this is a sample to understand I'm trying to do..

in this sample:
I put only 3 indicadors.

//global variables
bool m_buy = true;
bool m_sell = true;
enum Signal{
   IN_OUT=0,  //in & out
   IN=1,      //in
   OUT=2,     //out
};

I have a EA with indicators that I want to mix and optimize it in BackTest.

//some sample data for signal for In/Out states only for exemplification
iT_InOut = IN_OUT;  //Itrend usage => In & Out
RSI_InOut = IN_;     //RSI usage =>only IN 
MFI_InOut = OUT_;     //MFI usage =>only OUT
//

//this is the complete sequence IF I USE all signals in+out
//only to show the completly sequence (I will not use it)
m_buy=(m_it00[0]>m_it10[0] && m_it00[0]>m_it01[0] && m_rsi0[0]>m_rsi1[0] && m_mfi0[0]>m_mfi1[0]);
// The green is growing and more than red, RSI is growing, MFI is growing
m_sell=(m_it00[0]<m_it10[0] && m_it00[0]<m_it01[0] && m_rsi0[0]<m_rsi1[0] && m_mfi0[0]<m_mfi1[0]);
// The green falls and less than red, RSI falls, MFI falls


//now the skeleton that I'm trying to make work (in future I will use much more indicators)
               
              if(!PositionSelect(Symbol()))   ///No opened it's first entrance
                 {              
                 
                 if (!iT_InOut==OUT_) //Itrend (only options with IN)
                     {
                     m_buy= (m_buy  && m_it00[0]>m_it10[0] && m_it00[0]>m_it01[0]);
                     m_sell=(m_sell && m_it00[0]<m_it10[0] && m_it00[0]<m_it01[0]);
                     }
                  
                 if (!RSI_InOut==OUT_) //RSI (only options with IN)
                     {
                     m_buy =(m_buy  && m_rsi0[0]>m_rsi1[0]);
                     m_sell=(m_sell && m_rsi0[0]<m_rsi1[0]);
                     }                
                
                 if (!MFI_InOut==OUT_) //MFI (only options with IN)
                     {
                     m_buy =(m_buy  && m_mfi0[0]>m_mfi1[0]);
                     m_sell=(m_sell && m_mfi0[0]<m_mfi1[0]);
                     }                 
                  }
                 
                 ///We have opened order it's EXIT
                 else
                 {
                 //Itrend (only options with EXIT)
                 if (!iT_InOut==IN_)
                     {
                     m_buy =(m_buy  && m_it00[0]>m_it10[0] && m_it00[0]>m_it01[0]);
                     m_sell=(m_sell && m_it00[0]<m_it10[0] && m_it00[0]<m_it01[0]);
                     }
                 //RSI (only options with EXIT)
                 if (!RSI_InOut==IN_)
                     {
                     m_buy =(m_buy  && m_rsi0[0]>m_rsi1[0]);
                     m_sell=(m_sell && m_rsi0[0]<m_rsi1[0]);
                     }                     
                 //MFI (only options with EXIT)
                 if (!MFI_InOut==IN_)
                     {
                     m_buy =(m_buy  && m_mfi0[0]>m_mfi1[0]);
                     m_sell=(m_sell && m_mfi0[0]<m_mfi1[0]);
                     }
                 }
 
baraozemo :

안녕 믈라덴

MT5에서 이것을 코딩하려고하는데 올바른 구현을 사용하지 않고 있다고 생각합니다.

내 생각은 더 많은 지표를 사용하는 것입니다. 저에게 빛을 주세요... ;-)

I need help to make this modular, because I will work with more indicators (6 to 8), 
this is a sample to understand I'm trying to do..

in this sample:
I put only 3 indicadors.

//global variables
bool m_buy = true;
bool m_sell = true;
enum Signal{
   IN_OUT=0,  //in & out
   IN=1,      //in
   OUT=2,     //out
};

I have a EA with indicators that I want to mix and optimize it in BackTest.

//some sample data for signal for In/Out states only for exemplification
iT_InOut = IN_OUT;  //Itrend usage => In & Out
RSI_InOut = IN_;     //RSI usage =>only IN 
MFI_InOut = OUT_;     //MFI usage =>only OUT
//

//this is the complete sequence IF I USE all signals in+out
//only to show the completly sequence (I will not use it)
m_buy=(m_it00[0]>m_it10[0] && m_it00[0]>m_it01[0] && m_rsi0[0]>m_rsi1[0] && m_mfi0[0]>m_mfi1[0]);
// The green is growing and more than red, RSI is growing, MFI is growing
m_sell=(m_it00[0]<m_it10[0] && m_it00[0]<m_it01[0] && m_rsi0[0]<m_rsi1[0] && m_mfi0[0]<m_mfi1[0]);
// The green falls and less than red, RSI falls, MFI falls


//now the skeleton that I'm trying to make work (in future I will use much more indicators)
               
              if(!PositionSelect(Symbol()))   ///No opened it's first entrance
                 {              
                 
                 if (!iT_InOut==OUT_) //Itrend (only options with IN)
                     {
                     m_buy= (m_buy  && m_it00[0]>m_it10[0] && m_it00[0]>m_it01[0]);
                     m_sell=(m_sell && m_it00[0]<m_it10[0] && m_it00[0]<m_it01[0]);
                     }
                  
                 if (!RSI_InOut==OUT_) //RSI (only options with IN)
                     {
                     m_buy =(m_buy  && m_rsi0[0]>m_rsi1[0]);
                     m_sell=(m_sell && m_rsi0[0]<m_rsi1[0]);
                     }                
                
                 if (!MFI_InOut==OUT_) //MFI (only options with IN)
                     {
                     m_buy =(m_buy  && m_mfi0[0]>m_mfi1[0]);
                     m_sell=(m_sell && m_mfi0[0]<m_mfi1[0]);
                     }                 
                  }
                 
                 ///We have opened order it's EXIT
                 else
                 {
                 //Itrend (only options with EXIT)
                 if (!iT_InOut==IN_)
                     {
                     m_buy =(m_buy  && m_it00[0]>m_it10[0] && m_it00[0]>m_it01[0]);
                     m_sell=(m_sell && m_it00[0]<m_it10[0] && m_it00[0]<m_it01[0]);
                     }
                 //RSI (only options with EXIT)
                 if (!RSI_InOut==IN_)
                     {
                     m_buy =(m_buy  && m_rsi0[0]>m_rsi1[0]);
                     m_sell=(m_sell && m_rsi0[0]<m_rsi1[0]);
                     }                     
                 //MFI (only options with EXIT)
                 if (!MFI_InOut==IN_)
                     {
                     m_buy =(m_buy  && m_mfi0[0]>m_mfi1[0]);
                     m_sell=(m_sell && m_mfi0[0]<m_mfi1[0]);
                     }
                 }
해당 코드에서는 표시기 사용법이 전혀 표시되지 않습니다(및 값이 해당 배열에 복사되는 방식).
 

안녕하세요 여러분,

정말 도움이 필요합니다. waddah attar 스캘핑 표시기로 전문가를 만들고 있습니다. 논리가 작동하고 있으며 모든 것이 정상입니다.

한 가지를 제외하고 백테스트 스크린샷에서 볼 수 있듯이 각 녹색 막대에서 전문가는 빨간색 막대에 대해 동일한 매수를 엽니다. 색상 변경당 1개의 거래만 원합니다.

내가 원하는 것은 :

표시기가 녹색으로 변함 ---> 매수 열기 ---> 매수 청산 ---> 표시기가 빨간색으로 변함 ---> 매도 열기 ---> 매도 닫기 ---> 반복

색상 변경당 1개의 거래만 원합니다.

여기 내 코드가 있습니다 : (짧게 동일)

//Trading decision.
   bool SendLong = false , SendShort = false ;
  
     double clnowsell = iCustom ( Symbol (),WAScalpingTimeFrame, "Waddah_Attar_Scalping" ,IPeriod,P1,P2, 1 ,clbar);
     double clpresell = iCustom ( Symbol (),WAScalpingTimeFrame, "Waddah_Attar_Scalping" ,IPeriod,P1,P2, 1 ,clbar+ 1 );
  
     double clnowbuy = iCustom ( Symbol (),WAScalpingTimeFrame, "Waddah_Attar_Scalping" ,IPeriod,P1,P2, 0 ,clbar);
     double clprebuy = iCustom ( Symbol (),WAScalpingTimeFrame, "Waddah_Attar_Scalping" ,IPeriod,P1,P2, 0 ,clbar+ 1 );

   //Long trade
  
   //Specific system filters
   //if (some condition) SendLong = true;
  
   if (clnowbuy > 0 ) SendLong = true ;

누군가 간단한 솔루션을 제공할 수 있습니까? 행 1265를 보십시오. 논리가 여기에 있습니다.

정말 감사합니다 !

 
LittleCaro :

안녕하세요 여러분,

정말 도움이 필요합니다. waddah attar 스캘핑 표시기로 전문가를 만들고 있습니다. 논리가 작동하고 있으며 모든 것이 정상입니다.

한 가지를 제외하고 백테스트 스크린샷에서 볼 수 있듯이 각 녹색 막대에서 전문가는 빨간색 막대에 대해 동일한 매수를 엽니다. 색상 변경당 1개의 거래만 원합니다.

내가 원하는 것은 :

표시기가 녹색으로 변함 ---> 매수 열기 ---> 매수 청산 ---> 표시기가 빨간색으로 변함 ---> 매도 열기 ---> 매도 닫기 ---> 반복

색상 변경당 1개의 거래만 원합니다.

여기 내 코드가 있습니다 : (짧게 동일)

//Trading decision.
   bool SendLong = false , SendShort = false ;
  
     double clnowsell = iCustom ( Symbol (),WAScalpingTimeFrame, "Waddah_Attar_Scalping" ,IPeriod,P1,P2, 1 ,clbar);
     double clpresell = iCustom ( Symbol (),WAScalpingTimeFrame, "Waddah_Attar_Scalping" ,IPeriod,P1,P2, 1 ,clbar+ 1 );
  
     double clnowbuy = iCustom ( Symbol (),WAScalpingTimeFrame, "Waddah_Attar_Scalping" ,IPeriod,P1,P2, 0 ,clbar);
     double clprebuy = iCustom ( Symbol (),WAScalpingTimeFrame, "Waddah_Attar_Scalping" ,IPeriod,P1,P2, 0 ,clbar+ 1 );

   //Long trade
  
   //Specific system filters
   //if (some condition) SendLong = true;
  
   if (clnowbuy > 0 ) SendLong = true ;

누군가 간단한 솔루션을 제공할 수 있습니까? 행 1265를 보십시오. 논리가 여기에 있습니다.

정말 감사합니다 !

조건을 다음으로 변경

   if (clnowbuy > 0 && clprebuy == 0 ) SendLong = true ;

반바지도 마찬가지

 

믈라덴 감사합니다!

때때로 우리는 막혀서 우리의 일을 새롭게 바라볼 필요가 있습니다.

다시 한번 감사합니다!

 
LittleCaro :

믈라덴 감사합니다!

때때로 우리는 막혀서 우리의 일을 새롭게 바라볼 필요가 있습니다.

다시 한번 감사합니다!

봉쥬르,

Ravi de voir une Française, tiens moi au courant des tes résultats avec waddah attar ;)

녹색 핍

 

안녕하세요 여러분 저는 4개의 ema 교차가 발생하고 rsi가 > 또는 < 50일 때 위쪽 또는 아래쪽 화살표를 표시할 수 있는 ema-rsi 표시기를 편집하려고 합니다.

내 문제는 이러한 화살표가 표시될 때마다 틱마다 새로 고쳐지지 않는다는 것입니다. 화살표를 표시할 수 있는 조건이 여전히 양호한지 확인하려면 기간을 변경해야 합니다. 어디가 문제인지 알려주실 수 있나요? 나는 코드를 게시합니다.

고맙습니다

#property  indicator_chart_window
#property  indicator_buffers   2
#property  indicator_color1 Green
#property  indicator_color2 Red

#property  indicator_width1  4
#property  indicator_width2  4

double  CrossUp[];
double  CrossDown[];
extern   int  FasterEMA1     =  6 ;
extern   int  SlowerEMA1     =  12 ;
extern   int  FasterEMA2     =  7 ;
extern   int  SlowerEMA2     =  14 ;
extern   int  RSInowPeriod   =  6 ;
extern   int  barsBack       =  2000 ;
extern   bool  AlertsMessage =  true ;
extern   bool  AlertsSound   =  true ;
extern   bool  debug         =  false ;
extern   double  K           =  1.0  ;

bool  EMACrossedUp =  false ;
bool  RSICrossedUp =  false ;
bool  EMACrossedDown =  false ;
bool  RSICrossedDown =  false ;
int  SignalLabeled =  0// 0: initial state; 1: up; 2: down.
int  upalert= false ,downalert= false ;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int  init()
  {
//---- indicators
    SetIndexStyle ( 0DRAW_ARROWEMPTY );
    SetIndexArrow ( 0241 );
    SetIndexBuffer ( 0 , CrossUp);
    SetIndexStyle ( 1DRAW_ARROWEMPTY );
    SetIndexArrow ( 1242 );
    SetIndexBuffer ( 1 , CrossDown);
//----
    return ( 0 );
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int  deinit()
  {
//---- 

//----
    return ( 0 );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int  start() {
    int  limit, i, counter;
    double  fasterEMA1now, slowerEMA1now, fasterEMA1previous, slowerEMA1previous, fasterEMA2now, slowerEMA2now, fasterEMA2previous, slowerEMA2previous;
    double  RSInow;
    double  Range, AvgRange;

    int  counted_bars= IndicatorCounted ();
//---- check for possible errors
    if (counted_bars< 0return (- 1 );
//---- last counted bar will be recounted
    if (counted_bars> 0 ) counted_bars--;

   limit= MathMin ( Bars -counted_bars,barsBack);
   
    for (i = limit; i>= 0 ; i--) {
       
      counter=i;
      Range= 0 ;
      AvgRange= 0 ;
       for  (counter=i ;counter<=i+ 9 ;counter++)
      {
        AvgRange=AvgRange+ MathAbs ( High [counter]- Low [counter]);
      }
      Range=AvgRange/ 10 ;

      fasterEMA1now =  iMA ( NULL0 , FasterEMA1,  0MODE_EMAPRICE_CLOSE , i);
      fasterEMA1previous =  iMA ( NULL0 , FasterEMA1,  0MODE_EMAPRICE_CLOSE , i+ 1 );
      
      fasterEMA2now =  iMA ( NULL0 , FasterEMA2,  0MODE_EMAPRICE_CLOSE , i);
      fasterEMA2previous =  iMA ( NULL0 , FasterEMA2,  0MODE_EMAPRICE_CLOSE , i+ 1 );
      
      slowerEMA1now =  iMA ( NULL0 , SlowerEMA1,  0MODE_EMAPRICE_CLOSE , i);
      slowerEMA1previous =  iMA ( NULL0 , SlowerEMA1,  0MODE_EMAPRICE_CLOSE , i+ 1 );
      
      slowerEMA2now =  iMA ( NULL0 , SlowerEMA2,  0MODE_EMAPRICE_CLOSE , i);
      slowerEMA2previous =  iMA ( NULL0 , SlowerEMA2,  0MODE_EMAPRICE_CLOSE , i+ 1 );
      
      RSInow= iRSI ( NULL , 0 ,RSInowPeriod, PRICE_CLOSE ,i);
      
       if  (RSInow >  50 ) {
          if  (debug) Print ( TimeToStr ( Time [i], TIME_DATE )+ TimeToStr ( Time [i], TIME_SECONDS )+ " RSI UP " );
         RSICrossedUp =  true ;
         RSICrossedDown =  false ;
      }
      
       if  (RSInow <  50 ) {
          if  (debug) Print ( TimeToStr ( Time [i], TIME_DATE )+ TimeToStr ( Time [i], TIME_SECONDS )+ " RSI DOWN " );
         RSICrossedUp =  false ;
         RSICrossedDown =  true ;
      }
      
       if  ((fasterEMA1now >= slowerEMA1now) && (fasterEMA1previous < slowerEMA1previous) && (fasterEMA2now >= slowerEMA2now) && (fasterEMA2previous < slowerEMA2previous) ) {
          if  (debug) Print ( TimeToStr ( Time [i], TIME_DATE )+ TimeToStr ( Time [i], TIME_SECONDS )+ " EMA UP " );
         EMACrossedUp =  true ;
         EMACrossedDown =  false ;
      }

       if  ((fasterEMA1now <= slowerEMA1now) && (fasterEMA1previous > slowerEMA1previous) && (fasterEMA2now <= slowerEMA2now) && (fasterEMA2previous > slowerEMA2previous)) {
          if  (debug) Print ( TimeToStr ( Time [i], TIME_DATE )+ TimeToStr ( Time [i], TIME_SECONDS )+ " EMA DOWN " );
         EMACrossedUp =  false ;
         EMACrossedDown =  true ;
      }

       if  ((EMACrossedUp ==  true ) && (RSICrossedUp ==  true ) && (SignalLabeled !=  1 )) {
         CrossUp[i] =  Low [i] - K*Range;
          if  (debug) Print ( TimeToStr ( Time [i], TIME_DATE )+ TimeToStr ( Time [i], TIME_SECONDS )+ " SIGNAL UP " );
          if (i<= 2  && AlertsMessage && !upalert)
           {
             Alert  ( Symbol (), " " , Period (), "M  BUY SIGNAL " );
             //SendMail("EMA Cross Up on "+Symbol(),"");
            upalert= true ;
            downalert= false ;
           }           
          if (i<= 2  && AlertsSound && !upalert)
           {
             PlaySound ( "alert.wav" );
            upalert= true ;
            downalert= false ;
           }
         SignalLabeled =  1 ;
      }

       else   if  ((EMACrossedDown ==  true ) && (RSICrossedDown ==  true ) && (SignalLabeled !=  2 )) {
         CrossDown[i] =  High [i] + K*Range;
          if  (debug) Print ( TimeToStr ( Time [i], TIME_DATE )+ TimeToStr ( Time [i], TIME_SECONDS )+ " SIGNAL DOWN " );
          if (i<= 2  && AlertsMessage && !downalert)
           {
             Alert  ( Symbol (), " " , Period (), "M  SELL SIGNAL " );
             //SendMail("EMA Cross Down on "+Symbol(),"");
            downalert= true ;
            upalert= false ;
           }
          if (i<= 2  && AlertsSound && !downalert)
           {
             PlaySound ( "alert.wav" );
            downalert= true ;
            upalert= false ;
           }
         SignalLabeled =  2 ;
      }
   }
    return ( 0 );
}
//end
 
mladen :
해당 코드에서는 표시기 사용법이 전혀 표시되지 않습니다(및 값이 해당 배열에 복사되는 방식).

안녕 믈라덴

여기에 일부 코드가 포함된 "sample-ea-modular.mq5"가 있습니다... 그리고 내가 원하는 아이디어가 있는 인터페이스가 있습니다.

나는 그것을 모듈화하려고 노력하고 있는데 아이디어는 각 지표의 안팎을 별도로 최적화하는 것입니다.

"sample-ea-modular.mq5"로 이것을 만들 수 있다면 실제 EA를 변경하겠습니다.

실제 베이스는 Ea-sample.mq5입니다. (나는 모든 지표를 볼 수있는 당신에게만 게시하고 있습니다)

파일:
 
oguz :

친애하는 @mladen,

아래에 언급된 오류를 해결할 수 있다면 매우 기쁘게 생각합니다.

고맙습니다...

"질문 : 차트에 첨부하고 자동 gmt 오프셋을 사용할 때 경고가 있습니다.


경고: 경고, 백테스트에서만 수동 GMToffsets를 사용하십시오.

자동 GMT 오프셋 계산은 라이브/데모 거래에서만 작동합니다.
백테스트 - 전략 테스트의 경우 FALSE로 설정해야 합니다.

이게 정상인가요? 아니면 자동 gm 오프셋을 false로 설정해야 합니까?

답변: AutoGMTOffset을 끄고 GMT 오프셋을 수동으로 설정했습니다. 더 이상 경고 메시지가 없으며 데모에서 잘 작동하는 것 같습니다. 그림을 이동. 버그일 수도 있습니다. 아, 확실히 버그입니다.

코드를 보니 "else" 연산이 생략되었거나 잘못 배치되었습니다. UseAutoGMTOffset이 FALSE로 설정된 경우에만 메시지가 발행되어야 합니다.

따라서 이 메시지를 무시하고 행복하십시오. 모든 것이 (에헴) 설계된 대로 작동합니다."

오구즈

평소와 같이(당신은 이미 알고 있습니다) 저는 디컴파일된 코드에 대해 언급하지 않지만 올바른 방향으로 가고 있다는 것을 알았습니다. 작동하는 경우(옵션), 사용하십시오. 그렇지 않다면 하지 마십시오. 내가 아는 한 그것은 단지 메시지 (오류가 아님)이므로 ...

 

@mladen 님,

아래에 언급된 오류를 해결할 수 있다면 매우 기쁘게 생각합니다.

고맙습니다...

"질문: 차트에 첨부하고 자동 gmt 오프셋을 사용할 때 경고가 표시됩니다.


경고: 경고, backtest 에서만 수동 GMToffsets를 사용하십시오.

자동 GMT 오프셋 계산은 라이브/데모 거래에서만 작동합니다.
백테스트 - 전략 테스트의 경우 FALSE로 설정해야 합니다.

이게 정상인가요? 아니면 자동 gm 오프셋을 false로 설정해야 합니까?

답변: AutoGMTOffset을 끄고 GMT 오프셋을 수동으로 설정했습니다. 더 이상 경고 메시지가 없으며 데모에서 잘 작동하는 것 같습니다. 그림을 이동. 버그일 수도 있습니다. 아, 확실히 버그입니다.

코드를 보니 "else" 연산이 생략되었거나 잘못 배치되었습니다. UseAutoGMTOffset이 FALSE로 설정된 경우에만 메시지가 발행되어야 합니다.

따라서 이 메시지를 무시하고 행복하십시오. 모든 것이 (에헴) 설계된 대로 작동합니다."