MT5とスピードの関係 - ページ 87

 
fxsaber:

もっと早く

これは同じことで、関数の値を返します。しかし、事前にチェックも行います。
関数自体の内部にもシンボル名の渡された値のチェックがあり、そこから -"シンボル()、_SymbolまたはNULLの代わりに、単純な文字列パラメータは、完全なプログラムおよびより多くのプロパティ要求のチェック"、または追加のチェックなしでキャッシュから現在のシンボルの値を使用しています。
なぜもう一度やって、それでもデータ検索が速くなると言い張るのですか?そのような理屈は理解できない。

ちなみに、私はいつも関数内でそうしていますが、なんとなくデータ取得が早くなるのではなく、関数内で渡されたシンボル名の値をチェックするため、遅くなるような気がしています。

 
Artyom Trishkin:

なぜ、またそれらを行い、なおかつデータの高速化を謳っているのでしょうか?

ご自身で説明を引用されていますね。

 
Slava:

Symbol()、_Symbolの項目はNULLと同等です(シンボル名の代わりにNULLが許される場合)。

MT4でも同じですか?また、MT5 Testerではどうでしょうか?

 
Artyom Trishkin:

ちなみに、私はいつも関数でこうしています。

見せてください。

 
fxsaber:

ご自身で説明を引用されていますね。

その通り、すべて通常の関数内で行われます。なぜ外側にも重複しているのか?

 
Artyom Trishkin:

その通り、すべて通常の関数内で行われます。なぜ外側にも重複しているのか?

それでは、説明を理解していないことになります。2つの呼び出しのスピードが違う。

void OnTick()
{
  static const string Symb = _Symbol;
  MqlTick Tick;
  
  SymbolInfoTick(_Symbol, Tick);
  SymbolInfoTick(Symb, Tick);  
}
 
fxsaber:

見せてください。

これが私と一緒に行われるすべての関数とメソッド?

数が多すぎるんです。

 
Artyom Trishkin:

すべての機能、メソッドで、そうすることができますか?

1つで十分です。

 
fxsaber:

それでは、説明を理解していないことになります。2つの呼び出しのスピードが違う。

私はすべてを理解したようです。もちろん、違うんです。では、どのようにスピードアップしたのでしょうか?現在のシンボルではない値を関数に渡すのは、ある場合、つまりnot_Symbolの場合です。

ここで、上記の値を関数に渡した場合、関数はチェックを行わず、キャッシュから現在のシンボルの値を取得する。

他のケースでは、それはチェック "フルプログラム "+市場概要でその存在を指定されたシンボルのデータを照会します。あなたの "fast "関数は、非ネイティブシンボルからデータを要求するとき、これらのチェックを取り除くことはありません。では、加速度はどこにあるのでしょうか?

bool SymbolInfoTickFast( const string &Symb, MqlTick &Tick )
{
  return((Symb == _Symbol) ? SymbolInfoTick(_Symbol, Tick)
                           : SymbolInfoTick(Symb, Tick));
}

If(SymbolInfoTickFast(Symbol(), tick_array)) を呼び出したときの関数のオプションは2つだけです。{}

  1. 現在のシンボルのデータを取得する - パラメータ _Symbol を指定して SymbolInfoTick を呼び出す (クイック)
  2. 別のシンボルデータを取得する - 文字列パラメータでSymbolInfoTickを呼び出す (遅い)

もうひとつ、もしあなたが(動くものすべてを定義する習慣で)現在のシンボルに対して文字列変数を作成しているなら、はい - ここでチェックを行い、マクロ置換を定義済み変数に 置き換えるか、Symbol()を呼び出す必要があります。

 
Artyom Trishkin:

どのように高速化したのですか?

当たり前のことを説明するのは難しいんです。
const MqlTick GetMarketWatchTick( const string &Symb )
{
  MqlTick Tick = {0};

  SymbolInfoTick(Symb, Tick);

  return(Tick);
}

void OnTick()
{
  MqlTick Ticks[1];
  
  Ticks[0] = GetMarketWatchTick(_Symbol);
  ArrayPrint(Ticks);
}
このコードでは、GetMarketWatchTickを高速化することが可能です。