Caractéristiques du langage mql5, subtilités et techniques - page 87

 
Fast528:

Ne me dis pas, j'ai trouvé une fonction, les MCs n'ont toujours pas réparé une des fonctions principales, j'ai passé beaucoup de temps à lire et à chercher.

https://www.mql5.com/ru/docs/basis/function/functionoverload

Документация по MQL5: Основы языка / Функции / Перегрузка функций
Документация по MQL5: Основы языка / Функции / Перегрузка функций
  • www.mql5.com
Обычно в названии функции стремятся отобразить ее основное назначение. Читабельные программы, как правило, содержат разнообразные и грамотно подобранные идентификаторы. Иногда различные функции используются для одних и тех же целей. Например, рассмотрим функцию, которая вычисляет среднее значение массива чисел двойной точности, и такую же...
 
Реализация мультивалютного режима в MetaTrader 5
Реализация мультивалютного режима в MetaTrader 5
  • 2011.01.10
  • Konstantin Gruzdev
  • www.mql5.com
В настоящее время мультивалютных торговых систем, индикаторов и экспертов разработано огромное количество. Тем не менее, до сих пор создатели этого "огромного количества" сталкивались со специфическими для мультивалютных систем трудностями. С выпуском в свет терминала MetaTrader 5 и языка программирования MQL5 появилась возможность  реализации...
 
// Возвращает тип переменной. Exact == true - учитывает const-спецификатор
template <typename T>
string GetType( T&, const bool Exact = false )
{
  static const int Offset = StringFind(__FUNCTION__, "<") + 1;

  return(Exact ? StringSubstr(__FUNCTION__, Offset, StringLen(__FUNCTION__) - Offset - 1) : typename(T));
}


Application

#define  PRINT(A) Print(#A + " = " + (string)(A))

void OnStart()
{
  const int Var1 = 0;
  double Var2;
    
  PRINT(GetType(Var1));
  PRINT(GetType(Var2));  
  
  PRINT(GetType(Var1, true));
  PRINT(GetType(Var2, true));
}


Résultat

GetType(Var1) = int
GetType(Var2) = double

GetType(Var1,true) = const int
GetType(Var2,true) = double
 
fxsaber:

Application

Résultat

S'il est possible d'utiliser MQL pour décrire une fonction dont le nombre d'arguments n'est pas défini, par ex.

Print(arg1,arg.......) ou StringConcatenate(string_var,void argument1,void argument2, .......)


 
Igor Makanu:

s'il est possible d'utiliser MQL pour décrire une fonction avec un nombre indéfini d'arguments, par exemple

Print(arg1,arg.......) ou StringConcatenate(string_var,void argument1,void argument2, .......)

Il est possible de concevoir quelque chose basé sur des macros, mais c'est une béquille.

Les modèles + les tableaux/structures de passage permettent de réaliser de nombreuses idées.

 
fxsaber:

Il est possible d'élaborer quelque chose sur la base de macros, mais c'est une béquille.

Les modèles + le passage de tableaux/structures permettent de mettre en œuvre de nombreuses idées.

Merci, c'est ce que je pensais, pas besoin en principe, mais en regardant votre code, je me suis dit, et si on pouvait faire ça ?

 

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading

Caractéristiques du langage mql5, conseils et astuces

fxsaber, 2017.02.27 18:40

// Альтернатива OrderCalcMargin
bool MyOrderCalcMargin( const ENUM_ORDER_TYPE action, const string symbol, const double volume, const double price, double &margin )

Voici une implémentation prof. multiplateforme.

Instant estimation of profit, margin level, drawdown on MetaTrader charts
Instant estimation of profit, margin level, drawdown on MetaTrader charts
  • 2018.07.16
  • www.mql5.com
I'm sure all of you use the crosshair tool on MetaTrader's charts. It's very useful to measure distance in bars or points between 2 spots. Yet I was always wondering, why it does not provide an option to show profit value, margin level, drawdown or gain percentage in addition to points. To remedy this problem I've developed a MQL program, which...
 
Pourquoi const est cool !
void OnTradeTransaction ( const MqlTradeTransaction &Trans, const MqlTradeRequest &Request, const MqlTradeResult &Result )
{
  if (Trans.type = TRADE_TRANSACTION_REQUEST) // 'type' - constant cannot be modified


Imaginez le temps qu'il faudrait pour trouver une erreur dans un gros code si vous écriviez "==" au lieu de "=". Ici, en revanche, le compilateur lui-même vous dit tout en une fois, grâce à const.

 

fxsaber:

Imaginez le temps qu'il faudrait pour trouver une erreur dans un gros code si "==" était écrit à la place de "=". Ici, le compilateur lui-même vous dit tout d'un coup grâce à const.

Dans ce cas, vous pouvez commencer la comparaison par une constante, ce qui est encore mieux.

void OnTradeTransaction ( const MqlTradeTransaction &Trans, const MqlTradeRequest &Request, const MqlTradeResult &Result )
{
  if (TRADE_TRANSACTION_REQUEST = Trans.type)
 
LeXpert:

Dans ce cas, vous pouvez commencer la comparaison par une constante - c'est encore mieux.

Oui, je viens de créer un exemple pour un tel cas.

if (Trans.type = Variable)