mql5言語の特徴、微妙なニュアンスとテクニック - ページ 87

 
Fast528 です。

まさか、機能を発見、MCはまだ主要機能の一つを修正していない、多くの時間を費やして読み、検索した

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言語の特徴、Tipsと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 )

ここでは、クロスプラットフォームなプロフィールの実装を紹介します。

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...
 
なぜコンストがかっこいいのか!
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)
理由: