Características del lenguaje mql5, sutilezas y técnicas - página 87

 
Fast528:

No me digas, encontró una característica, los MCs todavía no han arreglado una de las funciones principales, pasó mucho tiempo leyendo y buscando por ella

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

Документация по MQL5: Основы языка / Функции / Перегрузка функций
Документация по MQL5: Основы языка / Функции / Перегрузка функций
  • www.mql5.com
Обычно в названии функции стремятся отобразить ее основное назначение. Читабельные программы, как правило, содержат разнообразные и грамотно подобранные идентификаторы. Иногда различные функции используются для одних и тех же целей. Например, рассмотрим функцию, которая вычисляет среднее значение массива чисел двойной точности, и такую же...
 

Entendido, gracias.


Konstantin Gruzdev, agradecimiento especial

Implementación del modo multidivisa en MetaTrader 5
Реализация мультивалютного режима в 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));
}


Aplicación

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


Resultado

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

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

Aplicación

Resultado

Si es posible utilizar MQL para describir una función cuyo número de argumentos no está definido, por ejemplo

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


 
Igor Makanu:

si es posible utilizar MQL para describir una función con un número indefinido de argumentos, por ejemplo

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

Es posible idear algo basado en macros, pero es una muleta.

Las plantillas + el paso de arrays/estructuras permiten realizar muchas ideas.

 
fxsaber:

Es posible idear algo a base de macros, pero es una muleta.

Las plantillas + el paso de arrays/estructuras permiten implementar muchas ideas.

Gracias, eso es lo que pensé, en principio no es necesario, pero viendo tu código, pensé, ¿y si se puede hacer eso?

 

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

Características del lenguaje mql5, consejos y trucos

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 )

Aquí hay una implementación de prof. multiplataforma.

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...
 
¡Por qué la const es genial!
void OnTradeTransaction ( const MqlTradeTransaction &Trans, const MqlTradeRequest &Request, const MqlTradeResult &Result )
{
  if (Trans.type = TRADE_TRANSACTION_REQUEST) // 'type' - constant cannot be modified


Imagínese lo que tardaría en encontrar un error en un código grande si escribiera "==" en lugar de "=". Aquí, en cambio, el propio compilador te dice todo de una vez, gracias a la const.

 

fxsaber:

Imagínese lo que tardaría en encontrar un error en un código grande si se escribiera "==" en lugar de "=". En este caso, el propio compilador te dice todo de una vez gracias a la const.

En estos casos, puede comenzar la comparación con una constante, lo que es aún mejor.

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

En estos casos, puede empezar la comparación con una constante, lo que es aún mejor.

Sí, acabo de crear un ejemplo para este caso

if (Trans.type = Variable)