¿Cómo se actualizan los indicadores para la Build 600+? - página 2

 
porque por alguna razón (probablemente un error) las matrices no se inicializan
 
qjol:
porque por alguna resión (probablemente un bug) los arrays no se inicializan


Hasta ahora no estoy recibiendo el valor de 'T3MA' y 'HMA'.

Probablemente esta es la razón por la que este EA no está abriendo ninguna orden ya que ambos indis se utilizan en él.

¿O es que he cometido algún error en el EA?

Archivos adjuntos:
xxp.mq4  5 kb
 
Arav007:


Hasta ahora no estoy obteniendo valor para 'T3MA' y 'HMA'.

ya te lo dije

qjol:
porque por alguna razón (probablemente un bug) los arrays no se inicializan

Probablemente esta es la razón por la que este EA no está abriendo ninguna orden ya que ambos indis se utilizan en él.

No sé, tal vez, probablemente, quizás, posible, probable, razonable

¿O es que he cometido algún error en el EA?

no lo creo

 
Arav007:


Sí, tienes razón. ¿Pero por qué?

Los he compilado como ha dicho la COSUDE y he encontrado '0' errores o advertencias.

Entonces, ¿qué puedo hacer para actualizarlos a B-600+?

HMA.mq4 tiene un error, cambia esta línea en init() :

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

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



Este EA no está abriendo cualquier comercio, incluso en Build 509, donde tanto 'T3MA' y 'HMA' están trabajando bien.

¿Cuál puede ser la razón entonces?

 

Error similar en T3MA.mq4, cambiar a :

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

Se trata de errores lógicos que el compilador no puede detectar.

Estos errores ya están presentes en la compilación 509, pero no suponen un problema ya que SetIndexBuffer tiene pocas posibilidades de ser falso. Ahora es un problema debido a este cambio:

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
    }

Si la expresión de la condición1 es falsa, el cálculo de la expresión de la condición2 no se realiza, ya que el resultado de false && true sigue siendo igual a false.


 
angevoyageur:

Error similar en T3MA.mq4, cambiar a :

Estos son errores lógicos que el compilador no puede atrapar.

Muchas gracias señor.

Sí, estos eran los Bugs y ahora están funcionando :)

¿Puedes mirar por qué el EA no abre ninguna orden a pesar de que estos indicadores funcionan?

Saludos

 
Arav007:


¿Puedes mirar por qué el EA no abre ninguna orden a pesar de que estos indicadores funcionan?



muestre el código de su EA
 
qjol:

muestre su código EA


Aquí 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 el indicador personalizado especificado y devuelve su valor.

double iCustom(
string symbol, // símbolo
int timeframe, // timeframe
string name, // ruta/nombre del programa compilado del indicador personalizado
... // parámetros de entrada del indicador personalizado (si es necesario)
int mode, // índice de línea
int shift // desplazamiento
);

Parámetros

símbolo

[in] Nombre del símbolo sobre los datos de los que se calculará el indicador. NULL significa el símbolo actual.

timeframe

[in] Marco temporal. Puede ser cualquiera de los valores de la enumeración ENUM_TIMEFRAMES. 0 significa el marco de tiempo del gráfico actual.

nombre

[in] Nombre del programa compilado del indicador personalizado, relativo al directorio raíz de indicadores (MQL4/Indicators/). Si el indicador se encuentra en un subdirectorio, por ejemplo, en MQL4/Indicators/Examples, su nombre debe ser especificado como "Examples\indicator_name" (se debe especificar una doble barra invertida "\\\" como separador en lugar de una sola).

...

[in] Parámetros de entrada del indicador personalizado, separados por comas.

Los parámetros pasados y su orden deben corresponder con el orden de declaración y el tipo de variables externas del indicador personalizado. Si no se especifican los valores de los parámetros de entrada, se utilizarán los valores por defecto.