エラー、バグ、質問 - ページ 1733

 
Комбинатор:

配列のリファレンスはMQL言語では松葉杖であり、リファレンスではない。

また、[]が*のような型修飾子であれば、参照ではなく、それ自身のconst!を持つべきです。

MQLでしか書けないことがあるんです。
 
A100:
エラーは正当です - これらの識別子はヘルプでReadOnlyとしてリストされています(ChartSetIntegerと結合されていませんhttps://www.mql5.com/ru/docs/constants/chartconstants/enum_chart_property
もうわかったけど、とにかくありがとう :)
 
coderex:
という ことでしょうか?

よく読んでみてください。C++はMQLよりはるかに理解するのが難しいです。記事からはあまり理解できない。そして、それがここで議論されていることとどう関係しているのか、まったく理解できない。

しかし、私はこの機能が好きでした。

かんぜんじゅんせつめい

それが何であるかを説明する前に、前回の規格に戻り、既存の問題を説明しよう。テンプレート関数fooが1つのパラメータを取り、関数bar(T& something)に渡すとする。

template <typename T>
void foo(T& Object)
{
    bar(Object);
}

だから、何も問題ないのです。しかし、例えば100番を関数の引数として渡したい場合はどうでしょうか。

安心してください、このように書きますよ。

template <typename T>
void foo(const T& Object)
{
    bar(Object);//Ooops
}

しかし、この場合、barが非定数の参照を取るため、コンパイルエラーが発生します。そこで、定数と非定数の2つの関数バーを用意することにした。そして今度は、パラメータが1つだけでなく、2つ、3つ、5つとある場合を考えてみましょう。nは関数の引数の数で、(2^n - 1)オーバーロードされた関数が あるので、このタスクの実装は非常に困難であることが判明した。もし、このような数のパラメータはスタイルが悪く、このような書き方をする人は全くいないと思うのであれば、std::bindやstd::make_sharedなどを見てみてください。


では、新規格がどのような解決策を提供してくれるのか見てみましょう。

template <typename T>
void foo(T&& Object)
{
    bar(std::forward<T>(Object));
}

上記のコードを使うと、外部関数fooと内部関数barの呼び出しの間で引数の型が保存されるので、パラメータ受け渡しの問題は完全に解決されます。これをパーフェクトパッシングといいます。もう、たくさんの関数をオーバーロードする必要はなく、汎用的なコードの開発者が満足できるものです。


また、std::forward が必要なのは、foo 関数の内部で名前の付いた型は lvalue になってしまい、元の型が必要になるからです。

「(2^n - 1)オーバーロードされた関数、ここでnは関数の引数の数" - 私はMQLでこのような不都合に直面しました。
 
2016.10.15 09:48:01.820 MQL5    wrong type, loading of Test9 failed
何ですか?
 
1455 - ヒストリカルデータのデバッグ(CTRL+F5)が機能しない。テスターウィンドウが表示され、ビジュアライゼーションが開始されない。
 
fxsaber:
1455 - ヒストリカルデータのデバッグ(CTRL+F5)が機能しない。テスターウィンドウが表示され、ビジュアライゼーションが開始されない。
そんなことはありません。また、技術的な詳細やアクションの説明もありません。これは、発見されたとされるバグについて書く前に、追加情報を準備し提供する必要がある専門的なブランチです。
 
fxsaber:

よく読んでみてください。C++はMQLよりはるかに理解するのが難しいです。記事からはあまり理解できない。そして、それがここで議論されていることとどう関係しているのか、まったく理解できない。

しかし、私はこの機能が好きでした。

(2^n - 1)オーバーロードされた関数、nは関数の引数の数」に遭遇したことがありますが、これはMQLでは不都合なことなのでしょうか。

rvalue / lvalue / prvalue / xvalue / gvalueを 理解すること、つまり数ページにわたって基本的に話していたことです :)なるほど、MQはC++の標準に従って、rvalue/lvalueだけに 止まらず、そこから最も価値のあるものを取り出していると、彼らは考えているようです。

私自身、論理的には理解しているものの、これらの概念をまだ完全に理解しているわけではありません :)

ちなみに、MT5のメモリーマネージャーは、プログラムがメモリーをフルに使ってしまうと、わけのわからない動きをします。小さいサイズでは測ったことがない。

例えば、私は4ギガのRAM、2コア、MT5 v1455 x64を仮想マシン上に所有しています。

オブジェクトでメモリを積んでいるのですが、タスクマネージャーで見ると、端末1台あたり1.5Gバイト、仮想メモリ1.5Gバイトが使用されていることがわかります。MQL_MEMORY_USEDは、使用可能なメモリが400MBであることを示しています。起動前は端末が140mb、仮想マシンが150mbくらいでした。

また、メモリ使用量が400mbを超えた時点で、オブジェクトは実際に削除されているにもかかわらず、メモリマネージャーが完全に解放できないことがあることに気づきました。また、デバッガの動作が予測できません。オブジェクトを削除して、完全に削除されるのを待って、デバッグを停止(デバッガのSTOPボタンで)すると、停止します。MEではデバッグが完了したことになっていますが、МТ5自身はデバッグを完了していません。オブジェクトのメモリが400 mb未満の場合、メモリが解放さ れる以外はすべて順調です。

メモリは、実行中のタスクの一覧から端末タスクを削除した後に解放されます。

 
Karputov Vladimir:
それはない。また、技術的な詳細やアクションの説明もありません。これは、あなたが見つけたとされるバグについて書く前に、準備と追加情報を提供する必要がある専門的なブランチです。

サービスデスクの開発者は、すでに私の設定を何度も記憶しています。

標準的なExpert Advisorを使って、MetaEditorでCTRL+F5を押してみます。MetaEditorで設定した内容でStrategy Testerのメインウィンドウがポップアップ表示されます。しかし、ビジュアライゼーションは始まらない。

ログ

2016.10.15 10:06:09     Tester  Leverage 1:100 set error
 
fxsaber:
サービスデスクの開発者は、すでに何度も私の設定を覚えてくれています。

私が何を言っているのか、気づかなかったんですね。

ストーリーのデバッグを始める前は、どのようなことをされていたのですか?MetaEditorの設定(タブ「ツール」-「設定」-「デバッグ」)を行いましたか?MetaEditoraのスクリーンショット(「ツール」-「設定」-「デバッグ」タブ)、Testerの「ログ」タブに何が書かれているか教えてください。Viewerの「Log」タブには何が書かれていますか?

 
fxsaber:

サービスデスクの開発者は、すでに私の設定を何度も記憶しています。

標準的なExpert Advisorを使って、MetaEditorでCTRL+F5を押してみます。MetaEditorで設定した内容でStrategy Testerのメインウィンドウがポップアップ表示されます。ビジュアライゼーションが始まらない。

MACDサンプルは正常に起動します。設定がおかしいのでは?