Build 600+에 대한 지표를 업그레이드하는 방법은 무엇입니까? - 페이지 2

 
어떤 이유로 (아마도 버그) 어레이가 초기화되지 않았기 때문에
 
qjol :
일부 resion (아마도 버그)의 경우 어레이가 초기화되지 않았기 때문에


지금까지 나는 'T3MA'와 'HMA'에 대한 가치를 얻지 못하고 있습니다.

아마도 이것이 이 두 indis가 모두 사용되기 때문에 이 EA가 주문을 열지 않는 이유일 것입니다.

아니면 EA에서 실수를 한 건가요?

파일:
xxp.mq4  5 kb
 
Arav007 :


지금까지 나는 'T3MA'와 'HMA'에 대한 가치를 얻지 못하고 있습니다.

내가 벌써 말 했잖아

크졸 :
어떤 이유로 (아마도 버그) 어레이가 초기화되지 않았기 때문에

아마도 이것이 이 두 indis가 모두 사용되기 때문에 이 EA가 주문을 열지 않는 이유일 것입니다.

나는 아마도, 아마도, 아마도, 가능하다, 그럴듯하다, 합리적인

아니면 EA에서 실수를 한 건가요?

나는 그렇게 생각하지 않는다

 
Arav007 :


그래, 너가 맞아. 하지만 왜?

SDC가 말한대로 컴파일하고 '0'오류 또는 경고를 찾았습니다.

그런 다음 B-600+로 업그레이드하려면 어떻게 해야 합니까?

HMA.mq4에 버그가 있습니다. init()에서 이 줄을 변경하십시오.

   if (! SetIndexBuffer ( 0 ,ind_buffer0) && ! SetIndexBuffer ( 1 ,ind_buffer1))

에게
   if (! SetIndexBuffer ( 0 ,ind_buffer0) || ! SetIndexBuffer ( 1 ,ind_buffer1))
 
qjol :



이 EA는 'T3MA'와 'HMA'가 모두 제대로 작동하는 빌드 509에서도 거래를 열지 않습니다.

그 이유는 무엇입니까?

 

T3MA.mq4의 유사한 버그가 다음으로 변경됩니다.

   if (
      ! SetIndexBuffer ( 0 ,e7) ||
      ! SetIndexBuffer ( 1 ,e2) ||
      ! SetIndexBuffer ( 2 ,e3) ||
      ! SetIndexBuffer ( 3 ,e4) ||
      ! SetIndexBuffer ( 4 ,e5) ||
      ! SetIndexBuffer ( 5 ,e6) ||
      ! SetIndexBuffer ( 6 ,e1)
      )

컴파일러가 잡을 수 없는 논리적 버그입니다.

이러한 버그는 이미 빌드 509에 존재하지만 SetIndexBuffer가 거짓일 가능성이 거의 없으므로 문제를 일으키지 않습니다. 이제 이 변경으로 인해 문제가 됩니다.

Shortened conditions check is now used in logical operations, unlike the old MQL4 version where all expressions have been calculated and the check has been performed afterwards. Suppose there is a check of two conditions with the use of logical AND

   if (condition1 && condition2)
    {
     // some block of operations
    }

condition1 표현식이 false 이면 false && true 결과가 여전히 false 와 같기 때문에 condition2 표현식 계산이 수행되지 않습니다.


 
angevoyageur :

T3MA.mq4의 유사한 버그가 다음으로 변경됩니다.

컴파일러가 잡을 수 없는 논리적 버그입니다.

감사합니다 선생님.

예, 이들은 버그였으며 현재 작동하고 있습니다. :)

이러한 지표가 작동하는데도 EA가 주문을 전혀 개시하지 않는 이유를 살펴보실 수 있습니까?

문안 인사

 
Arav007 :


이러한 지표가 작동하는데도 EA가 주문을 전혀 개시하지 않는 이유를 살펴보실 수 있습니까?



EA 코드를 보여주세요
 
qjol :

EA 코드를 보여주세요


여기있어:

extern double     LotSize= 0.01 ;
extern double     StopLoss= 15.0 ;
extern double     TakeProfit= 20.0 ;
extern int        iMaxOrders= 10 ;
extern int        Slippage= 5 ;
extern int        MagicNumber= 814 ;


extern int        iOrderType_Buy= 0 ;
extern int        iOrderType_Sell= 1 ;


int BuyOrder;
int SellOrder;

int iOpenOrders_Sell;
int iOpenOrders_Buy;

int iLastError;


double dPip;
double dStopLossPrice, dTakeProfitPrice;


//+------------------------------------------------------------------+
#define MODE_DEMA     4
#define MODE_TEMA     5
#define MODE_T3MA     6
#define MODE_JMA     7
#define MODE_HMA     8
#define MODE_DECEMA   9
#define MODE_SALT     10
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
extern    int       MA_Period               = 34 ;
extern    int       MA_Type                 = MODE_HMA;
extern    int       MA_Applied              = PRICE_CLOSE ;
extern    double    T3MA_VolumeFactor       = 0.8 ;
extern    double    JMA_Phase               = 0.0 ;
extern    int       Step_Period             = 3 ;
extern    int       BarsCount               = 100 ;
extern    bool      DebugMode               = false ;
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
{

if ( Digits == 3 ){
        dPip = 0.01 ;
} else {
        dPip = 0.0001 ;
}

return ( 0 );

}

int deinit()
{

Comment ( "" );
return ( 0 );

}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+



int start()
{

   double   signal = iCustom ( NULL , 0 , "xpMA" ,MA_Period,MA_Type,MA_Applied ,T3MA_VolumeFactor,JMA_Phase,Step_Period,DebugMode, 3 , 0 );
   
   bool BuyCondition = false , SellCondition = false , CloseBuyCondition = false , CloseSellCondition = false ; 
   
   if (signal== 1 )
       BuyCondition = true ;
       
   if (signal==- 1 )
      SellCondition = true ;

///////////////////////////// Checking Buying Condition
if (BuyCondition)
{               
                 double OpenPrice= Ask ;

                
                dStopLossPrice = NormalizeDouble (OpenPrice - StopLoss * dPip, Digits );
                dTakeProfitPrice = NormalizeDouble (OpenPrice + TakeProfit * dPip, Digits );
                

                BuyOrder= OrderSend ( Symbol () , iOrderType_Buy , LotSize,OpenPrice,Slippage ,dStopLossPrice ,dTakeProfitPrice , "Buy Order" ,MagicNumber , 0 ,Blue);
                
                
                 if (BuyOrder> 0 ) {
                                 Print ( "Buy Order was Opened" );
                                iLastError = 0 ;
                        }
                         else
                        {                       
                                iLastError = GetLastError();                    
                        
                        }
        
}
        

if (SellCondition)
{       
                OpenPrice= Bid ;
                
                dStopLossPrice = NormalizeDouble (OpenPrice + StopLoss * dPip, Digits );
                dTakeProfitPrice = NormalizeDouble (OpenPrice - TakeProfit * dPip, Digits );

                SellOrder= OrderSend ( Symbol () , iOrderType_Sell , LotSize,OpenPrice,Slippage ,dStopLossPrice ,dTakeProfitPrice , "Sell Order" ,MagicNumber , 0 ,Red);
                
                
                 if (SellOrder> 0 ) {
                                 Print ( "Sell Order was opened" );
                                iLastError = 0 ;
                        } else {
                                iLastError = GetLastError();
                        
                        }               
        }
                


return ( 0 );

}
 

아이커스텀

지정된 사용자 지정 표시기를 계산하고 해당 값을 반환합니다.

이중 iCustom (
기호 , // 기호
정수 타임프레임 , // 타임프레임
name , // 사용자 지정 표시기 컴파일된 프로그램의 경로/이름
... // 사용자 지정 표시기 입력 매개변수(필요한 경우)
정수 모드 , // 라인 인덱스
정수 옮기다 // 옮기다
);

매개변수

상징

【인】 지표가 계산될 데이터의 기호 이름입니다. NULL은 현재 기호를 의미합니다.

기간

【인】 기간. ENUM_TIMEFRAMES 열거형 값 중 하나일 수 있습니다. 0은 현재 차트 기간 을 의미합니다.

이름

[in] 루트 표시기 디렉토리(MQL4/Indicators/)와 관련된 사용자 정의 표시기 컴파일된 프로그램 이름입니다. 표시기가 하위 디렉토리(예: MQL4/Indicators/ Examples )에 있는 경우 해당 이름은 " Examples\\ indicator_name"으로 지정해야 합니다(이중 백슬래시 "\\"는 단일 백슬래시 대신 구분 기호로 지정되어야 함).

...

【인】 쉼표로 구분된 사용자 지정 표시기 입력 매개변수입니다.

전달된 매개변수 및 해당 순서는 사용자 지정 표시기의 선언 순서 및 extern 변수 유형과 일치해야 합니다. 입력 매개변수의 값을 지정하지 않으면 기본값이 사용됩니다.