MT5とスピードの関係 - ページ 88 1...8182838485868788899091929394 新しいコメント Artyom Trishkin 2021.03.01 12:23 #871 fxsaber:1つで十分です。 int CTickSeriesCollection::IndexTickSeries(const string symbol) { const CTickSeries *obj=new CTickSeries(symbol==NULL || symbol=="" ? ::Symbol() : symbol); ... ... ... } さらに、""をチェックします。私自身は、現在のキャラクターに対するメソッドを呼び出すときは、常にNULLを使用しています。 fxsaber 2021.03.01 12:25 #872 Artyom Trishkin: あなたのコードは加速を与えない。 Artyom Trishkin 2021.03.01 12:26 #873 fxsaber: 当たり前のことを当たり前に説明するのは難しいと感じています。このコードでGetMarketWatchTickを高速化することが可能です。 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); } Symbolパラメータに_Symbolを渡したとしても、SymbolInfoTick() には文字列が渡されると思いますか? 標準的な関数内部では、現在のシンボルと文字列が等しいかどうかのチェックは行われていないと思いますし、そのような明示的なパラメータは、現在のシンボルのキャッシュが手元にあれば「全速力で」チェックを開始します。 fxsaber 2021.03.01 12:29 #874 高速化は実行時ではなく、コンパイル時に行われる。 コンパイラはこの置換を行う。 SymbolInfoTick(_Symbol, Tick) -> SymbolInfoTickInside(Tick); SymbolInfoTick(NULL, Tick) -> SymbolInfoTickInside(Tick); SymbolInfoTick(::Symbol(), Tick) -> SymbolInfoTickInside(Tick); それ以外の場合、代用はしない。 Artyom Trishkin 2021.03.01 12:35 #875 fxsaber:高速化は実行時ではなく、コンパイル時に行われる。コンパイラはこの置換を行う。それ以外の場合、代用はしない。 まあね。つまり、あなたのコードは、現在の文字ではない文字に対して、通常の機能を高速化することはできません。また、現在のキャラクターを高速化することもできません。 そして、私のはそうではありません。そして、それは決してそうではありません。私も幻想を抱いていたわけではありません。しかし、私の関数にNULLや""が渡された場合、通常の関数を呼び出すときは常にSymbol()またはNULLを使用します。これは、現在のシンボルに対してキャッシュからデータを取得する、通常の関数の高速コードを呼び出します。 関数呼び出しでSymbol() または_Symbolを使用する場合、標準関数内で現在のシンボルと一致するかどうかチェックされないのでしょうか?現在のシンボルのフルレンジチェックで本当にコードが実行されるのだろうか?信じられない...。 fxsaber 2021.03.01 12:37 #876 Artyom Trishkin:まあね。つまり、あなたのコードは、現在の文字ではない文字に対して、通常の機能を高速化することはできません。また、現在のキャラクターを高速化することもできません。 もしかしたら、もっとわかりやすく説明してくれる人がいるかもしれません。私には効果がありませんでした。 Artyom Trishkin 2021.03.01 12:45 #877 fxsaber:もしかしたら、もっとわかりやすく説明してくれる人がいるかもしれません。わからなかったんです。 通常の機能を高速化するために、何を魔術しているのですか? staff関数に渡すときに、現在の文字の値を代入して、キャッシュから現在の文字のデータを使わせているのですね。これは、通常の機能を高速化するのではなく、現在のキャラクターに対する速度を使用します。 ソースにアクセスできないものを高速化することはできません。関数を 正しく呼び出すための標準的なテクニックを使用しています。しかし、よくわからないのですが、EURUSDを扱うときにSymbolが文字列で「EURUSD」と指定されている場合、つまり現在のシンボルを使っている場合、staff関数は文字列「EURUSD」がSymbol()と同じかどうかをチェックせず、キャッシュからデータを使わず、全速力でシンボルをチェックし始めてしまうのです。 では、正規関数の加速度はどこにあるのでしょうか?あるとすれば、それは十二分に興味深く、有用なものです。 fxsaber 2021.03.01 12:49 #878 fxsaber:MT4でも同じですか?また、MT5-Testerではどうでしょうか? CopyTicksでも同じでしょうか? Artyom Trishkin 2021.03.01 12:53 #879 fxsaber:もしかしたら、もっとわかりやすく説明してくれる人がいるかもしれません。わからなかったんです。 それよりも、私の質問を理解できていない可能性が高いです。何度か繰り返しましたが(この質問は「レギュラー機能の高速化」についての質問ではありません)。 fxsaber 2021.03.01 13:03 #880 Slava:Symbol()、_Symbol、NULLの代わりに 通常の文字列パラメータが 指定された場合、完全なチェックが行われ、プロパティも照会されます。 なぜかこの説明では、文字列パラメータが現在の文字と同じであれば、プログラム全体に対するチェックは行われないということは書かれていません。 1...8182838485868788899091929394 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
1つで十分です。
さらに、""をチェックします。私自身は、現在のキャラクターに対するメソッドを呼び出すときは、常にNULLを使用しています。
あなたのコードは加速を与えない。
当たり前のことを当たり前に説明するのは難しいと感じています。このコードでGetMarketWatchTickを高速化することが可能です。
Symbolパラメータに_Symbolを渡したとしても、SymbolInfoTick() には文字列が渡されると思いますか?
標準的な関数内部では、現在のシンボルと文字列が等しいかどうかのチェックは行われていないと思いますし、そのような明示的なパラメータは、現在のシンボルのキャッシュが手元にあれば「全速力で」チェックを開始します。
高速化は実行時ではなく、コンパイル時に行われる。
コンパイラはこの置換を行う。
それ以外の場合、代用はしない。
高速化は実行時ではなく、コンパイル時に行われる。
コンパイラはこの置換を行う。
それ以外の場合、代用はしない。
まあね。つまり、あなたのコードは、現在の文字ではない文字に対して、通常の機能を高速化することはできません。また、現在のキャラクターを高速化することもできません。
そして、私のはそうではありません。そして、それは決してそうではありません。私も幻想を抱いていたわけではありません。しかし、私の関数にNULLや""が渡された場合、通常の関数を呼び出すときは常にSymbol()またはNULLを使用します。これは、現在のシンボルに対してキャッシュからデータを取得する、通常の関数の高速コードを呼び出します。
関数呼び出しでSymbol() または_Symbolを使用する場合、標準関数内で現在のシンボルと一致するかどうかチェックされないのでしょうか?現在のシンボルのフルレンジチェックで本当にコードが実行されるのだろうか?信じられない...。
まあね。つまり、あなたのコードは、現在の文字ではない文字に対して、通常の機能を高速化することはできません。また、現在のキャラクターを高速化することもできません。
もしかしたら、もっとわかりやすく説明してくれる人がいるかもしれません。私には効果がありませんでした。
もしかしたら、もっとわかりやすく説明してくれる人がいるかもしれません。わからなかったんです。
通常の機能を高速化するために、何を魔術しているのですか?
staff関数に渡すときに、現在の文字の値を代入して、キャッシュから現在の文字のデータを使わせているのですね。これは、通常の機能を高速化するのではなく、現在のキャラクターに対する速度を使用します。
ソースにアクセスできないものを高速化することはできません。関数を 正しく呼び出すための標準的なテクニックを使用しています。しかし、よくわからないのですが、EURUSDを扱うときにSymbolが文字列で「EURUSD」と指定されている場合、つまり現在のシンボルを使っている場合、staff関数は文字列「EURUSD」がSymbol()と同じかどうかをチェックせず、キャッシュからデータを使わず、全速力でシンボルをチェックし始めてしまうのです。
では、正規関数の加速度はどこにあるのでしょうか?あるとすれば、それは十二分に興味深く、有用なものです。
MT4でも同じですか?また、MT5-Testerではどうでしょうか?
CopyTicksでも同じでしょうか?
もしかしたら、もっとわかりやすく説明してくれる人がいるかもしれません。わからなかったんです。
それよりも、私の質問を理解できていない可能性が高いです。何度か繰り返しましたが(この質問は「レギュラー機能の高速化」についての質問ではありません)。
Symbol()、_Symbol、NULLの代わりに 通常の文字列パラメータが 指定された場合、完全なチェックが行われ、プロパティも照会されます。
なぜかこの説明では、文字列パラメータが現在の文字と同じであれば、プログラム全体に対するチェックは行われないということは書かれていません。