Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 1192

 
Artem Mordvinkin:


Está escrito en inglés que los símbolos se conectan automáticamente a la prueba

Cuando se accede a ellos.
 
Artem Mordvinkin:


Sí, está escrito en ruso que los símbolos se conectan automáticamente durante las pruebas

Para crear un indicador, primero debe conectar un símbolo en Market Watch (en su caso en Market Watch del probador).

 
Artyom Trishkin:
Solicite cualquier dato de cada símbolo deseado.

Faltan por SymbolSelect() - no están seleccionados

Estimados Señores Antes de remitirme a las publicaciones (por lo que les doy las gracias) comprueben - si sus multimonedas funcionan en el probador Y si lo hacen, tiene sentido

 
Artem Mordvinkin:

Faltan por SymbolSelect() - no están seleccionados

Estimados Señores Antes de remitirme a las publicaciones (por lo que les doy las gracias) comprueben - si sus multimonedas funcionan en el probador Y si lo hacen, tiene sentido

Funcionan. En la última versión. No hay ningún problema.
 
Artyom Trishkin:
Funciona. En la última versión. No hay ningún problema.

¿Cómo los conectó (símbolos) - puede decirme qué función?

 
Artem Mordvinkin:

¿Cómo los conectó (símbolos) - puede decirme qué función?

SymbolSelect(nombre del personaje,true);

 
Vladimir Karputov:

SymbolSelect(nombre del personaje,true);

Yo hago lo mismo.

SymbolSelect(EURUSD_inst, true);
  SymbolSelect(GBPUSD_inst, true);
  SymbolSelect(USDJPY_inst, true);
  SymbolSelect(AUDUSD_inst, true);


Lo entiendo así

2020.03.09 19:19:45.766 el símbolo EURUSDrfd no existe

2020.03.09 19:19:45.766 símbolo USDJPYrfd no existe

2020.03.09 19:19:45.766 el símbolo AUDUSDrfd no existe


El cable no da error al estar seleccionado en el comprobador.

Los nombres de los símbolos son correctos.


UPD me parece que tiene que hacer algo en la propia configuración del terminal. Si todo funcionaba antes de la última compilación, no tiene nada que ver con el código. El probador no puede ver los símbolos.

 
Artem Mordvinkin:


2020.03.09 19:19:45.766 el símbolo EURUSDrfd no existe

2020.03.09 19:19:45.766 símbolo USDJPYrfd no existe

2020.03.09 19:19:45.766 el símbolo AUDUSDrfd no existe


El cable no da error ya que está seleccionado en el probador

¿Qué es? ¿Dónde está el código? ¿Cómo se consigue? En especial, se seleccionan personajes completamente diferentes.

 
Vladimir Karputov:

¿Qué es? ¿Dónde está el código? ¿Cómo se consigue? Sobre todo porque estás eligiendo personajes completamente diferentes.

Entendido, vamos así.

Dado (nombre de los personajes)


Código (fragmentos)

//----------------------------название инструмента
string EURUSD_inst = "EURUSDrfd";
string GBPUSD_inst = "GBPUSDrfd";
string AUDUSD_inst = "AUDUSDrfd";
string USDJPY_inst = "USDJPYrfd";


void OnTick()
  {
  SymbolSelect(EURUSD_inst, true);
  SymbolSelect(GBPUSD_inst, true);
  SymbolSelect(USDJPY_inst, true);
  SymbolSelect(AUDUSD_inst, true);
}

Seleccionemos el cable en el probador como ejemplo.


Ejecútalo y

2020.03.09 19:19:45.766 el símbolo EURUSDrfd no existe

2020.03.09 19:19:45.766 símbolo USDJPYrfd no existe

2020.03.09 19:19:45.766 el símbolo AUDUSDrfd no existe

No hay ningún error en el cable - está seleccionado por defecto en el probador

Y por si acaso, diré que este problema es sólo en el probador. Y que el búho tiene varios años y el error es de hace 2 días y que es el caso de todos mis búhos multidivisa.
 

Ejemplo de creación de un indicador iMA en el símbolo 'USDJPY', con el probador funcionando en 'EURUSD'.

//+------------------------------------------------------------------+
//|                                        iMA Values on a Chart.mq5 |
//|                              Copyright © 2019, Vladimir Karputov |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2019, Vladimir Karputov"
#property version   "1.001"
//--- input parameters
input  string              Inp_MA_symbol        = "USDJPY";    // MA: symbol name
input ENUM_TIMEFRAMES      Inp_MA_period        = PERIOD_D1;   // MA: timeframe
input int                  Inp_MA_ma_period     = 12;          // MA: averaging period
input int                  Inp_MA_ma_shift      = 5;           // MA: horizontal shift
input ENUM_MA_METHOD       Inp_MA_ma_method     = MODE_SMA;    // MA: smoothing type
input ENUM_APPLIED_PRICE   Inp_MA_applied_price = PRICE_CLOSE; // MA: type of price
//---
int    handle_iMA;                           // variable for storing the handle of the iMA indicator
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   if(!SymbolSelect(Inp_MA_symbol,true))
     {
      PrintFormat("Failed select symbol %s",
                  Inp_MA_symbol);
      return(INIT_FAILED);
     }
//--- create handle of the indicator iMA
   handle_iMA=iMA(Inp_MA_symbol,Inp_MA_period,Inp_MA_ma_period,Inp_MA_ma_shift,
                  Inp_MA_ma_method,Inp_MA_applied_price);
//--- if the handle is not created
   if(handle_iMA==INVALID_HANDLE)
     {
      //--- tell about the failure and output the error code
      PrintFormat("Failed to create handle of the iMA indicator for the symbol %s/%s, error code %d",
                  Inp_MA_symbol,
                  EnumToString(Inp_MA_period),
                  GetLastError());
      //--- the indicator is stopped early
      return(INIT_FAILED);
     }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   double array_ma[];
   ArraySetAsSeries(array_ma,true);
   int start_pos=0,count=3;
   if(!iGetArray(handle_iMA,0,start_pos,count,array_ma))
      return;

   string text="";
   for(int i=0; i<count; i++)
      text=text+IntegerToString(i)+": "+DoubleToString(array_ma[i],Digits()+1)+"\n";
//---
   Comment(text);
  }
//+------------------------------------------------------------------+
//| Get value of buffers                                             |
//+------------------------------------------------------------------+
bool iGetArray(const int handle,const int buffer,const int start_pos,
               const int count,double &arr_buffer[])
  {
   bool result=true;
   if(!ArrayIsDynamic(arr_buffer))
     {
      //if(InpPrintLog)
      PrintFormat("ERROR! EA: %s, FUNCTION: %s, this a no dynamic array!",__FILE__,__FUNCTION__);
      return(false);
     }
   ArrayFree(arr_buffer);
//--- reset error code
   ResetLastError();
//--- fill a part of the iBands array with values from the indicator buffer
   int copied=CopyBuffer(handle,buffer,start_pos,count,arr_buffer);
   if(copied!=count)
     {
      //--- if the copying fails, tell the error code
      //if(InpPrintLog)
      PrintFormat("ERROR! EA: %s, FUNCTION: %s, amount to copy: %d, copied: %d, error code %d",
                  __FILE__,__FUNCTION__,count,copied,GetLastError());
      //--- quit with zero result - it means that the indicator is considered as not calculated
      return(false);
     }
   return(result);
  }
//+------------------------------------------------------------------+

El resultado es correcto. Primero se selecciona el símbolo y luego se crea el indicador con él.


Archivos adjuntos:
Razón de la queja: