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

 
Estoy en un androide.
 
baxromsaid:
No sé cómo abrir una cuenta demo.


baxromsaid:
Estoy en android.


MetaQuotes no es un broker, por lo que sólo puede abrir una cuenta de demostración en los servidores de MetaQuotes-Demo.

Hay que abrir una cuenta real de trading con un broker.

 

¡Hola conocedores!


¿Pueden decirme por qué mi código no pone vol y preguntar? El valor cero siempre se muestra en Print. El diferencial se "sujeta" normalmente, muestra el valor correcto.

Adjunto el EA al gráfico LTCUSD.

¿Cuál es el error?

#include <Trade\SymbolInfo.mqh>
CSymbolInfo m_symbol;
int a=0,b=0,c=0,spread=0,i=0,j=0;
double x=0,y=0,z=0,m=0,ask=0;
input int vyb=7;
bool bool_1=true,bool_2=true,bool_3=true;
string str_1="",str_2="",str_3="",name="",Text[101];
ulong vol=0;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
  name=_Symbol;
  Print("текущий символ: ",name); 
  spread=m_symbol.Spread();
  Print("спред по символу: ",spread);
  vol=m_symbol.Volume();
  Print("обьєм по символу ",name," - ",vol);
  ask=m_symbol.Ask();
  Print("Цена Аск равно ",ask);
 
odyn:

¡Hola conocedores!


¿Pueden decirme por qué mi código no pone vol y preguntar? El valor cero siempre se muestra en Print. El diferencial se "sujeta" normalmente, muestra el valor correcto.

Adjunto el EA al gráfico LTCUSD.

¿Cuál es el error?

Debe aplicar el método CSymbolInfo::Refresh o CSymbolInfo::RefreshRates antes de obtenerlo - dependiendo de lo que necesite.

Aquí está el código de estas funciones:

//+------------------------------------------------------------------+
//| Refresh cached data                                              |
//+------------------------------------------------------------------+
bool CSymbolInfo::Refresh(void)
  {
   long tmp=0;
//---
   if(!SymbolInfoDouble(m_name,SYMBOL_POINT,m_point))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_VALUE,m_tick_value))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_VALUE_PROFIT,m_tick_value_profit))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_VALUE_LOSS,m_tick_value_loss))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_SIZE,m_tick_size))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_CONTRACT_SIZE,m_contract_size))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_VOLUME_MIN,m_lots_min))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_VOLUME_MAX,m_lots_max))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_VOLUME_STEP,m_lots_step))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_VOLUME_LIMIT,m_lots_limit))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_SWAP_LONG,m_swap_long))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_SWAP_SHORT,m_swap_short))
      return(false);
   if(!SymbolInfoInteger(m_name,SYMBOL_DIGITS,tmp))
      return(false);
   m_digits=(int)tmp;
   if(!SymbolInfoInteger(m_name,SYMBOL_ORDER_MODE,tmp))
      return(false);
   m_order_mode=(int)tmp;
   if(!SymbolInfoInteger(m_name,SYMBOL_TRADE_EXEMODE,tmp))
      return(false);
   m_trade_execution=(ENUM_SYMBOL_TRADE_EXECUTION)tmp;
   if(!SymbolInfoInteger(m_name,SYMBOL_TRADE_CALC_MODE,tmp))
      return(false);
   m_trade_calcmode=(ENUM_SYMBOL_CALC_MODE)tmp;
   if(!SymbolInfoInteger(m_name,SYMBOL_TRADE_MODE,tmp))
      return(false);
   m_trade_mode=(ENUM_SYMBOL_TRADE_MODE)tmp;
   if(!SymbolInfoInteger(m_name,SYMBOL_SWAP_MODE,tmp))
      return(false);
   m_swap_mode=(ENUM_SYMBOL_SWAP_MODE)tmp;
   if(!SymbolInfoInteger(m_name,SYMBOL_SWAP_ROLLOVER3DAYS,tmp))
      return(false);
   m_swap3=(ENUM_DAY_OF_WEEK)tmp;
   if(!SymbolInfoDouble(m_name,SYMBOL_MARGIN_INITIAL,m_margin_initial))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_MARGIN_MAINTENANCE,m_margin_maintenance))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_MARGIN_LONG,m_margin_long))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_MARGIN_SHORT,m_margin_short))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_MARGIN_LIMIT,m_margin_limit))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_MARGIN_STOP,m_margin_stop))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_MARGIN_STOPLIMIT,m_margin_stoplimit))
      return(false);
   if(!SymbolInfoInteger(m_name,SYMBOL_EXPIRATION_MODE,tmp))
      return(false);
   m_trade_time_flags=(int)tmp;
   if(!SymbolInfoInteger(m_name,SYMBOL_FILLING_MODE,tmp))
      return(false);
   m_trade_fill_flags=(int)tmp;
//--- succeed
   return(true);
  }
//+------------------------------------------------------------------+
//| Refresh cached data                                              |
//+------------------------------------------------------------------+
bool CSymbolInfo::RefreshRates(void)
  {
   return(SymbolInfoTick(m_name,m_tick));
  }
Документация по MQL5: Стандартная библиотека / Торговые классы / CSymbolInfo / Refresh
Документация по MQL5: Стандартная библиотека / Торговые классы / CSymbolInfo / Refresh
  • www.mql5.com
Стандартная библиотека / Торговые классы / CSymbolInfo / Refresh - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Vladimir Karputov:

Debe aplicar el método CSymbolInfo::Refresh o CSymbolInfo::RefreshRates antes de obtener - dependiendo de lo que necesite

¡Muchas gracias, querido Vladimir!

¿Tal vez también puedas decirme cómo obtener el nombre del símbolo con el métodoCSymbolInfo Name? Cuando intento hacerlo

#include <Trade\SymbolInfo.mqh>
CSymbolInfo m_symbol;
int a=0,b=0,c=0,spread=0,i=0,j=0;
double x=0,y=0,z=0,m=0,ask=0;
input int vyb=7;
bool bool_1=true,bool_2=true,bool_3=true;
string str_1="",str_2="",str_3="",name="",Text[101];
ulong vol=0;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
  name=m_symbol.Name(Symbol())
  Print("текущий символ: ",name); 

Obtengo un valor booleano true en la variable nombre.

 
odyn:

¡Muchas gracias, querido Vladimir!

Tal vez también pueda sugerir: ¿cómo obtener un nombre de símbolo utilizando el métodoCSymbolInfo Name? Cuando intento hacerlo de esta manera

Obtengo un valor booleano true en la variable nombre.

Lo hago - inicializo la variable de la clase CSymbolInfo.

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
***
   if(!m_symbol.Name(Symbol())) // sets symbol name
     {
      Print(__FILE__," ",__FUNCTION__,", ERROR: CSymbolInfo.Name");
      return(INIT_FAILED);
     }
   RefreshRates();
***
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Refreshes the symbol quotes data                                 |
//+------------------------------------------------------------------+
bool RefreshRates()
  {
//--- refresh rates
   if(!m_symbol.RefreshRates())
     {
      if(InpPrintLog)
         Print(__FILE__," ",__FUNCTION__,", ERROR: ","RefreshRates error");
      return(false);
     }
//--- protection against the return value of "zero"
   if(m_symbol.Ask()==0 || m_symbol.Bid()==0)
     {
      if(InpPrintLog)
         Print(__FILE__," ",__FUNCTION__,", ERROR: ","Ask == 0.0 OR Bid == 0.0");
      return(false);
     }
//---
   return(true);
  }


Si desea obtener un nombre (por ejemplo, al comparar el símbolo de posición con el símbolo actual), debe utilizar el método CSymbolInfo::Name().

Ejemplo de uso:

//+------------------------------------------------------------------+
//| Is position exists                                               |
//+------------------------------------------------------------------+
bool IsPositionExists(void)
  {
   for(int i=PositionsTotal()-1; i>=0; i--)
      if(m_position.SelectByIndex(i)) // selects the position by index for further access to its properties
         if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==InpMagic)
            return(true);
//---
   return(false);
  }


La ayuda muestra dos formas de llamar al método Name

Nombre

Obtiene el nombre del instrumento financiero.

string  Name() const

Valor devuelto

Nombre del instrumento financiero.


Nombre

Establece el nombre del instrumento financiero para seguir trabajando con él.

bool  Name(string name)

Valor devuelto

No.

Документация по MQL5: Стандартная библиотека / Торговые классы / CSymbolInfo / Name
Документация по MQL5: Стандартная библиотека / Торговые классы / CSymbolInfo / Name
  • www.mql5.com
Стандартная библиотека / Торговые классы / CSymbolInfo / Name - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Vladimir Karputov:


Si desea obtener un nombre (por ejemplo, al comparar un símbolo de posición con el símbolo actual), debe utilizar el método CSymbolInfo::Name().

Ejemplo de uso:


La ayuda muestra dos formas de llamar al método Name

Nombre

Obtiene el nombre del instrumento financiero.

Valor devuelto

Nombre del instrumento financiero.

Tengo una pregunta sobre esta forma de método Nombre.

¿CÓMO puedo obtener el NOMBRE del instrumento en la variable? Porque haciéndolo de esta manera:

#include <Trade\SymbolInfo.mqh>
CSymbolInfo m_symbol;
string str_1="",str_2="",str_3="",name="";
name=m_symbol.Name();
Print("текущий символ: ",name);

Obtengo el booleano true enname. ¿Cómo obtener una cadena con el nombre del instrumento en ella, utilizandoel método CSymbolInfo::Name()?

Документация по MQL5: Стандартная библиотека / Торговые классы / CSymbolInfo / Name
Документация по MQL5: Стандартная библиотека / Торговые классы / CSymbolInfo / Name
  • www.mql5.com
Стандартная библиотека / Торговые классы / CSymbolInfo / Name - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
odyn:

Tengo una pregunta sobre esta forma particular del método del nombre.

¿CÓMO puedo meter el NOMBRE de la herramienta en una variable? Porque haciendo esto:

Obtengo un booleano true enname. ¿Cómo obtengo una cadena con el nombre de la herramienta en ella, usandoel método CSymbolInfo::Name() ?

Primero loINICIALIZAMOS. Entonces utilizamos el método Name().

Ejecutamos el código en el carácter ''.

//+------------------------------------------------------------------+
//|                                                            1.mq5 |
//|                              Copyright © 2020, Vladimir Karputov |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2019, Vladimir Karputov"
#property version   "1.00"
#include <Trade\SymbolInfo.mqh>
//---
CSymbolInfo    m_symbol;                     // object of CSymbolInfo class
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   if(!m_symbol.Name(Symbol())) // sets symbol name
     {
      Print(__FILE__," ",__FUNCTION__,", ERROR: CSymbolInfo.Name");
      return;
     }
   string name=m_symbol.Name();
   Print("текущий символ: ",name);
//---
  }
//+------------------------------------------------------------------+

Resultado:

1 (EURUSD,H1)   текущий символ: EURUSD
 
Vladimir Karputov:

Primero se INICIALIZA. A continuación, utilizamos el método Name().

Ejecuta el código en el carácter ''.

Resultado:

Lo tengo. Gracias por su paciencia )).


PD: mi compilador está culpando al retorno en su código. Cuando lo quité, todo está bien.

 
odyn:

Lo tengo. Gracias por su paciencia )).


PD: mi compilador está culpando al retorno en su código. Cuando lo he quitado, está bien.

Esto es un script (di un ejemplo de un script), no un EA. Si copiaste mi código en EA, habrá un error.

Razón de la queja: