Merkmale der Sprache mql5, Feinheiten und Techniken - Seite 87

 
Fast528:

Sag mir nicht, ich habe ein Feature gefunden, die MCs haben eine der Hauptfunktionen immer noch nicht korrigiert, ich habe viel Zeit damit verbracht, es zu lesen und zu suchen

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


Anmeldung

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


Ergebnis

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

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

Anmeldung

Ergebnis

Wenn es möglich ist, MQL zu verwenden, um eine Funktion zu beschreiben, deren Anzahl der Argumente nicht definiert ist, z. B.

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


 
Igor Makanu:

ob es möglich ist, MQL zu verwenden, um eine Funktion mit einer undefinierten Anzahl von Argumenten zu beschreiben, z. B.

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

Es ist möglich, etwas auf der Grundlage von Makros zu entwickeln, aber es ist eine Krücke.

Templates + Übergabe von Arrays/Strukturen ermöglichen die Umsetzung vieler Ideen.

 
fxsaber:

Es ist möglich, etwas auf der Grundlage von Makros zu entwickeln, aber es ist eine Krücke.

Mit Vorlagen und der Übergabe von Arrays/Strukturen lassen sich viele Ideen umsetzen.

Danke, das dachte ich auch, im Prinzip nicht nötig, aber als ich deinen Code sah, dachte ich, was wäre, wenn du das kannst?

 

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Merkmale der Sprache mql5, Tipps und Tricks

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 )

Hier ist eine plattformübergreifende Profi-Implementierung.

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...
 
Warum const cool ist!
void OnTradeTransaction ( const MqlTradeTransaction &Trans, const MqlTradeRequest &Request, const MqlTradeResult &Result )
{
  if (Trans.type = TRADE_TRANSACTION_REQUEST) // 'type' - constant cannot be modified


Stellen Sie sich vor, wie lange es dauern würde, einen Fehler in einem umfangreichen Code zu finden, wenn Sie anstelle von "==" "=" schreiben würden. Hier hingegen sagt Ihnen der Compiler selbst alles auf einmal, dank const.

 

fxsaber:

Stellen Sie sich vor, wie lange es dauern würde, einen Fehler in einem umfangreichen Code zu finden, wenn "==" anstelle von "=" geschrieben würde. Hier sagt Ihnen der Compiler selbst alles auf einmal durch const.

In solchen Fällen können Sie den Vergleich mit einer Konstante beginnen, was noch besser ist.

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

In solchen Fällen können Sie den Vergleich mit einer Konstante beginnen - das ist noch besser.

Ja, ich habe gerade ein Beispiel für einen solchen Fall erstellt

if (Trans.type = Variable)