Questions des débutants MQL5 MT5 MetaTrader 5 - page 1195

 
Je suis sur un androïde.
 
baxromsaid:
Je ne sais pas comment ouvrir un compte de démonstration.


baxromsaid:
Je suis sur android.


MetaQuotes n'est pas un courtier - vous ne pouvez donc ouvrir un compte de démonstration que sur les serveurs MetaQuotes-Demo.

Un compte de trading réel doit être ouvert auprès d'un courtier.

 

Salut les connaisseurs !


Pouvez-vous me dire pourquoi mon code n'établit pas le vol et la demande ? La valeur zéro est toujours affichée dans Print. L'écartement est "serré" normalement, il indique la valeur correcte.

J'attache l'EA au graphique LTCUSD.

Quelle est l'erreur ?

#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:

Salut les connaisseurs !


Pouvez-vous me dire pourquoi mon code n'établit pas le vol et la demande ? La valeur zéro est toujours affichée dans Print. L'écartement est "serré" normalement, il indique la valeur correcte.

J'attache l'EA au graphique LTCUSD.

Quelle est l'erreur ?

Vous devez appliquer la méthode CSymbolInfo::Refresh ou CSymbolInfo::RefreshRates avant de l'obtenir - en fonction de vos besoins.

Voici le code de ces fonctions :

//+------------------------------------------------------------------+
//| 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:

Vous devez appliquer la méthode CSymbolInfo::Refresh ou CSymbolInfo::RefreshRates avant d'obtenir - en fonction de ce dont vous avez besoin

Merci beaucoup, cher Vladimir !

Peut-être pouvez-vous également me dire comment obtenir le nom du symbole avec la méthodeCSymbolInfo Name ? Quand j'essaie de le faire

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

J'obtiens une valeur booléenne true dans la variable name.

 
odyn:

Merci beaucoup, cher Vladimir !

Peut-être pouvez-vous également suggérer : comment obtenir le nom d'un symbole en utilisant la méthodeCSymbolInfo Name ? Quand j'essaie de le faire de cette façon

J'obtiens une valeur booléenne true dans la variable name.

Je le fais - j'initialise la variable de la classe 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 vous souhaitez obtenir un nom (par exemple lors de la comparaison entre le symbole de position et le symbole courant), vous devez utiliser la méthode CSymbolInfo::Name().

Exemple d'utilisation:

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


L'aide montre deux façons d'appeler la méthode Name

Nom

Obtient le nom de l'instrument financier.

string  Name() const

Valeur retournée

Nom de l'instrument financier.


Nom

Définit le nom de l'instrument financier pour les travaux ultérieurs avec celui-ci.

bool  Name(string name)

Valeur retournée

Non.

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


Si vous souhaitez obtenir un nom (par exemple, lorsque vous comparez un symbole de position au symbole actuel), vous devez utiliser la méthode CSymbolInfo::Name().

Exemple d'utilisation:


L'aide montre deux façons d'appeler la méthode Name

Nom

Obtient le nom de l'instrument financier.

Valeur retournée

Nom de l'instrument financier.

J'ai une question sur cette forme de méthode Nom.

Comment puis-je obtenir le NOM de l'instrument dans la variable ? Parce que je le fais de cette façon :

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

J'obtiens le booléen true dansname. Comment obtenir une chaîne de caractères contenant le nom de l'instrument, en utilisant laméthode CSymbolInfo::Name()?

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

J'ai une question sur cette forme particulière de la méthode du nom.

Comment obtenir le NOM de l'outil dans une variable ? Parce que je fais ça :

Comment puis-je obtenir une chaîne de caractères contenant le nom de l'outil, en utilisant laméthode CSymbolInfo::Name() ?

D'abord, nous l'INITIALISONS. Ensuite, nous utilisons la méthode Name().

Nous exécutons le code sur le caractère ''.

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

Résultat :

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

Nous commençons par INITIALISER. Ensuite, nous utilisons la méthode Name().

Exécutez le code sur le caractère ''.

Résultat :

Je l'ai. Merci de votre patience ;)).


PS : mon compilateur accuse le retour dans votre code. Quand je l'ai enlevé, c'est bon.

 
odyn:

Je l'ai. Merci de votre patience ;)).


PS : mon compilateur accuse le retour dans votre code. Quand je l'ai enlevé, c'est bon.

Il s'agit d'un script (j'ai donné un exemple de script), pas d'un EA. Si vous copiez mon code dans EA, il y aura une erreur.