Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 1192

 
Artem Mordvinkin:


Está escrito em inglês simples que os símbolos são automaticamente ligados ao teste

Quando se acede a eles.
 
Artem Mordvinkin:


Sim, está escrito em russo que os símbolos são automaticamente ligados durante os testes

Para criar um indicador, deve primeiro ligar um símbolo na Market Watch (no seu caso, na Market Watch do testador).

 
Artyom Trishkin:
Solicitar quaisquer dados de cada símbolo desejado.

Eles por SymbolSelect() estão em falta - não seleccionados

Caros Senhores Antes de me remeterem para publicações (pelas quais vos agradeço) verifiquem - se as vossas múltiplas moedas funcionam no testador E se funcionam, faz sentido

 
Artem Mordvinkin:

Eles por SymbolSelect() estão em falta - não seleccionados

Caros Senhores Antes de me remeterem para publicações (pelas quais vos agradeço) verifiquem - se as vossas múltiplas moedas funcionam no testador E se funcionam, faz sentido

Eles funcionam. Sobre a última construção. Sem qualquer problema.
 
Artyom Trishkin:
Funciona. Sobre a última construção. Sem qualquer problema.

Como os ligou (símbolos) - pode dizer-me qual a função?

 
Artem Mordvinkin:

Como os ligou (símbolos) - pode dizer-me qual a função?

SymbolSelect(nome do personagem,verdadeiro);

 
Vladimir Karputov:

SymbolSelect(nome do personagem,verdadeiro);

Eu faço o mesmo.

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


Percebo assim

2020.03.09 19:19:45.766 símbolo EURUSDrfd não existe

2020.03.09 19:19:45.766 símbolo USDJPYrfd não existe

2020.03.09 19:19:45.766 símbolo AUDUSDrfd não existe


O cabo não dá um erro, uma vez que é seleccionado no testador.

Os nomes dos símbolos estão correctos.


A UPD parece-me que precisa de fazer algo nas próprias configurações do terminal. Se tudo estava a funcionar antes da última construção, não tem nada a ver com código. O testador não consegue ver os símbolos.

 
Artem Mordvinkin:


2020.03.09 19:19:45.766 símbolo EURUSDrfd não existe

2020.03.09 19:19:45.766 símbolo USDJPYrfd não existe

2020.03.09 19:19:45.766 símbolo AUDUSDrfd não existe


O cabo não dá um erro, uma vez que é seleccionado no testador

O que é isso? Onde está o código? Como é que o obtém? Especialmente, está a seleccionar caracteres completamente diferentes.

 
Vladimir Karputov:

O que é isso? Onde está o código? Como é que o obtém? Especialmente porque está a escolher personagens completamente diferentes.

Já está, vamos assim.

Dado (nome dos caracteres)


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);
}

Vamos seleccionar o cabo no aparelho de teste como exemplo.


Execute-o e

2020.03.09 19:19:45.766 símbolo EURUSDrfd não existe

2020.03.09 19:19:45.766 símbolo USDJPYrfd não existe

2020.03.09 19:19:45.766 símbolo AUDUSDrfd não existe

Não há erro no cabo - é seleccionado por defeito no testador

E, por via das dúvidas, direi que este problema está apenas no testador. E que a coruja tem vários anos e o erro tem 2 dias e que este é o caso de todas as minhas corujas multi-divisas.
 

Exemplo de criação de um indicador iMA no símbolo 'USDJPY', com o testador a correr no '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);
  }
//+------------------------------------------------------------------+

O resultado é correcto. Primeiro selecciona-se o símbolo e depois o indicador é criado usando-o.


Arquivos anexados: