Como atualizar os indicadores para o Build 600+? - página 2

 
porque por alguma razão (provavelmente um bug) as arrays não são inicializadas
 
qjol:
porque para algum ressentimento (provavelmente um bug) as arrays não são inicializadas


Até agora não estou obtendo valor para 'T3MA' e 'HMA'.

Provavelmente, é por isso que esta EA não está abrindo nenhuma ordem, pois ambos os indis são utilizados nela.

Ou será que eu cometi algum erro no EA?

Arquivos anexados:
xxp.mq4  5 kb
 
Arav007:


Até agora não estou obtendo valor para 'T3MA' e 'HMA'.

eu já lhe disse

qjol:
porque por alguma razão (provavelmente um bug) as arrays não são inicializadas

Provavelmente, é por isso que esta EA não está abrindo nenhuma ordem, pois ambos os indis são utilizados nela.

eu não sei talvez, provavelmente, talvez, possível, provavelmente, razoável

Ou eu tinha cometido algum erro na EA?

Eu não penso assim

 
Arav007:


Sim, você está certo. Mas por quê?

Eu os compilei como disse a SDC e encontrei '0' Erro ou Advertência.

Então, o que posso fazer para atualizá-los para B-600+ ?

HMA.mq4 tem um bug, mude esta linha no init() :

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

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



Esta EA não está abrindo nenhum comércio nem mesmo no Build 509 onde ambos 'T3MA' & 'HMA' estão funcionando bem.

Qual pode ser a razão, então?

 

Bug similar em T3MA.mq4, mude para :

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

Estes são bugs lógicos que o compilador não pode capturar.

Estes bugs já estão presentes no build 509, mas não levam a um problema, pois o SetIndexBuffer tem poucas chances de ser falso. Agora é um problema devido a esta mudança:

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
    }

Se a expressão condição1 for falsa, o cálculo da expressão condição2 não é realizado, pois o resultado falso && verdadeiro ainda é igual a falso.


 
angevoyageur:

Bug similar em T3MA.mq4, mude para :

Estes são bugs lógicos que o compilador não pode pegar.

Muito obrigado, senhor.

Sim, estes eram os Bugs e estão funcionando agora :)

Você pode ver porque a EA não está abrindo nenhuma ordem apesar destes indicadores estarem funcionando?

Atenciosamente

 
Arav007:


Você pode ver porque a EA não está abrindo nenhuma ordem, apesar destes indicadores funcionarem?



mostre seu código EA
 
qjol:

mostre seu código EA


Aqui está:

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

Calcula o indicador personalizado especificado e retorna seu valor.

duplo iCustom(
corda símbolo, // símbolo
int prazo, // prazo
string nome, // caminho/nome do indicador personalizado do programa compilado
... ... // parâmetros de entrada de indicadores personalizados (se necessário)
int modo, // índice de linha
int turno // turno
);

Parâmetros

símbolo

[em] Nome do símbolo sobre os dados dos quais o indicador será calculado. NULL significa o símbolo atual.

cronograma

[em] Cronograma. Pode ser qualquer um dos valores de enumeração de ENUM_TIMEFRAMES. 0 significa o período de tempo atual do gráfico.

nome

[em] Indicador personalizado compilado nome do programa, relativo ao diretório de indicadores raiz (MQL4/Indicators/). Se o indicador estiver localizado no subdiretório, por exemplo, em MQL4/Indicadores/Exemplos, seu nome deve ser especificado como "Nome_do_indicador"(dupla barra invertida "{\i1}" deve ser especificada como separador em vez de um único).

...

... [em] Parâmetros de entrada de indicadores personalizados, separados por vírgulas.

Os parâmetros passados e sua ordem devem corresponder com a ordem de declaração e o tipo de variáveis externas do indicador personalizado. Se os valores dos parâmetros de entrada não forem especificados, serão usados os valores padrão.