mql5语言的特点、微妙之处以及技巧 - 页 87

 
快528

不要告诉我,发现了一个功能,主持人仍然没有固定的一个主要功能,花了很多时间阅读和搜索它

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

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

明白了,谢谢。


Konstantin Gruzdev,特别感谢

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


应用

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


结果

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

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

应用

结果

如果有可能使用MQL来描述一个函数,其参数的数量没有被定义,例如

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


 
伊戈尔-马卡努

如果可以用MQL来描述一个具有未定义参数数量的函数,比如说

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

有可能想出一些基于宏的东西,但它是拐杖式的。

模板+传递数组/结构可以实现许多想法。

 
fxsaber:

有可能想出一些基于宏的东西,但这是一个拐杖。

模板+传递数组/结构使许多想法得以实现。

谢谢,我也是这么想的,原则上没有必要,但看着你的代码,我想,如果你能做到这一点呢?

 

关于交易、自动交易系统和交易策略测试的论坛

mql5语言的特点、技巧和窍门

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 )

这里有 一个跨平台的教授实现。

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...
 
为什么const是酷的!
void OnTradeTransaction ( const MqlTradeTransaction &Trans, const MqlTradeRequest &Request, const MqlTradeResult &Result )
{
  if (Trans.type = TRADE_TRANSACTION_REQUEST) // 'type' - constant cannot be modified


想象一下,如果你写"=="而不是"=",要花多长时间才能在大段代码中找到一个错误。另一方面,在这里,由于const的存在,编译器本身会一次性告诉你一切。

 

fxsaber:

想象一下,如果把"=="写成"=",而不是"=",要花多长时间才能在一大段代码中找到一个错误。另一方面,在这里,由于const的存在,编译器本身会一次性告诉你一切。

在这种情况下,你可以用一个常数开始比较,这就更好了。

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

在这种情况下,你可以用一个常数开始比较--那就更好了。

是的,我刚刚为这种情况创建了一个例子

if (Trans.type = Variable)