"ダミー "からの質問 - ページ 111

 
openlive:

今、私に...

2012.02.26 15:47:46 Tester fileC:\Usersopenlive AppData ◇Roaming ◇MetaQuotes ◇Terminal ◇9C3619DDD286B60B1DB9B9989A2FFC701 ◇MQL5 ◇Files ◇signal10000.csv open error [32].

まず、C:³ Files³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³©©C:³©C:³└└ C:³└

2つ目:MQL5にはエラー32がない。 おかしいな...。ファイルを開こうとした後のハンドルと、開こうとした後の最後のエラー コードを確認していますか?

 
DenisR:
数学モード」とは何ですか?
計算モードでは、ヒストリーランがないため、取引操作を 行わずに計算を行う場合に、最大限のスピードを発揮することができます。このモードでは、取引用 Expert Advisorを最適化する場合、市場環境(履歴データ、スプレッドなど)を自分でモデル化する必要があります。この場合、任意の履歴データを使用することができ、あらかじめ用意されたファイルから取得することができます。
 
DenisR:
数式計算モード」とは何ですか?

このモードでは、OnTester()のみが呼び出されます。しかし、OnTester()での計算の複雑さと量は制限されません。 与えられた入力パラメータに対してExpert Advisorの利益を計算すれば、テスターの遺伝的アルゴリズムを使って 最適化することができます。
 

脳みそが沸騰しているので、理解できるようにお願いします。

1.x64 OSへの切り替えは、4GB以上のRAMを4バイトで「パーティション」することが不可能なことと関係していると理解しています。OSがx64なのですが、なぜポインタが4バイトも占有するのでしょうか(mqlだけでなくC++にも関係します))。

2.MT4に関する質問:DLL関数を呼び出すと、なぜか?

#import "MemoryDLL.dll"
void fn(double j[]);           // Подозреваю что так отдается адрес?
#import

int start()
{
   double dVal[1];
   fn(dVal);
   retutn(0);
} 

これらのバリエーションでは、dll変数が普通に取れます。

extern "C" __declspec(dllexport) void fn(double &j);       // Почему так работает????
// и так
extern "C" __declspec(dllexport) void fn(double *j);       // Думаю что должно работать только так

ポインタと参照は、私の場合、doubleへのポインタは4バイトを要するので、考え方としては互換性がないはずなのですが。

仕組みはこうです。

#import "MemoryDLL.dll"
void fn(double j);           
#import
                                                  // Согласен

extern "C" __declspec(dllexport) void fn(double j);  

動作しない。

#import "MemoryDLL.dll"
void fn(double j);           
#import
                                                  // Почему нет???

extern "C" __declspec(dllexport) void fn(double &j);  

少なくとも、どのように動作するのでしょうか(複数の配列を渡したいのですが)?バックトラック経由ではやりたくない。

 
220Volt:

少なくとも、正しい方法(複数の配列を渡したい)を教えてください。裏口から入るのは嫌だからです。

また、MQLでは、誰が関数宣言に&を入れるのでしょうか?
 
sergeev:
また、MQLでは、関数宣言に&を付けるのは誰ですか?

そうですね、それが正しいかもしれませんね。でも、どうせC言語でMQLが動くわけでもないし(間違っているかも)。

 
220Volt:

そうですね、それが正しいかもしれませんね。どうせMKLだけCでどうにか動かないんだろ(間違ってるかも)。

渡し方に一つ違いがある - すべて参照渡しで、ポインタ渡しはクラスオブジェクトのみ

 

初歩的なメモリ領域は、アドレスと値の2つの部分から構成されていると考えていました。アドレスを伝送する場合は、何らかの変数に、伝送する領域のアドレスを「値」の欄に記述する必要があります。だから、このようなバリエーションが同時に正しく動作することが理解できないのです。

extern "C" __declspec(dllexport) void fn(double &j);  
// и так
extern "C" __declspec(dllexport) void fn(double *j);  
// Прототип для MQL - void fn(&s[]);

メモリ領域を「そのまま」転送し、受信側がそれをどうするか(値にアドレスを書き込むか、アドレスをコピーするか)を決める、というような説明を探してみることができます。しかし、この仮説は、こうはいかないという事実によって崩れる。

extern "C" __declspec(dllexport) void fn(double j);  

// Прототип для MQL - void fn(&s[]);

最初の複製では、「値」フィールドのアドレスが入力として与えられ、受信側がそれをどうするか決定する、という説明をもう一度探してみることもできるだろう。これに対して、C++では、コンパイラの意見などで、そうしないようにと言われているのが事実です。

fn(int *x)
{
}

int i;
fn(&i);

またはこれ

fn(int &x)
{
}

int i;
fn(i); 
すべてにおいて、矛盾しか見当たりません。
 

聞いてくれたら、答えるよ。

リンクとポインターは本質的に同じものであるという結論に達しました。わずかな違いがあります。

  • アドレスは、参照には一度だけ、ポインタには何度も書き込むことができます。
  • 異なる構文

非常に重要な点は、呼び出された関数が 参照やポインタを引数として持っている場合、そのアドレスが実際に渡されることです。これは、DELLから電話をかける際に非常に重要なことです。

 

ストキャスティクスの本線と指標線の交差の正確な値を求める方法を教えてください。

視覚的には簡単ですが、プログラム的にどう実装するか?