ライブラリ: mt-R - ページ 3

 
cgarbelli:

こんにちは、


RAssignStringVector関数を 使用しようとしていますが、各項の最初の文字だけがRセッションにコピーされるようです。

例えばMQL5ベクトル

{"abcd","2000","2000}

としてRにコピーされます。

{"a", "2", "2"}

これは問題なのでしょうか、それとも私が間違っているのでしょうか?

なお、私はRAssignVectorをdouble vectorで問題なく使っています。


ありがとう。

クラウディオです。

私はMT5を使っていません。

 

注意
R.mqhファイルの変数vectorと matrixの 名前がコンパイル時にエラーを発生させるようになっています。他の名前に変更すればすべてうまくいく。私はvectrとmatrを使いました。

エディターはこれらの単語をintや doubleの ようなデータ型として青くハイライトする。どうやら新しい型のために予約されたようだ。

 

すべての関数の説明 (旧バージョンhttps://www.mql5.com/en/code/11112 からコピー)

/**
* dllのバージョンを返す。返り値の上位16ビット
* がメジャー・バージョン、下位16ビットがマイナー・バージョンです。この
* はRInit()で、このヘッダーファイルと
* dllが適合していることを確認するために使用されます。
*/
int RGetDllVersion();

/**
* これは直接呼び出されるものではなく、バージョン・チェックが成功した後、RInit()によって
* 呼び出されます。
*
*/
long RInit_(string commandline,int debuglevel);

/**
* Rセッションを一時終了します。
これをdeinit()関数の中で呼び出します。
* これ以降、ハンドルは無効になります。
*/
void RDeinit(long rhandle);

/**
* このハンドルに属するRセッションがまだ実行中であればtrueを返します。R は、あなたが送った
* コードに致命的なエラーがあれば終了します。開始関数の最初
* でこれをチェックし、すべてのアクションを停止する必要があります。クラッシュする前の最後の
* コマンドがログに記録されます。
* Rがもう実行されていない場合、このライブラリは
* ログメッセージを出力せず、すべてのコマンドを無言で無視します。

*/
bool RIsRunning(long rhandle);

/**
* Rがまだコマンドを実行している場合、trueを返します。* RExecuteAsync()への呼び出しの結果)
*/
bool RIsBusy(long rhandle);

/**
* コードを実行し、待機しません。

* 任意の時間に実行できるスレッドは1つだけであるため、後続の呼び出しは待機します。
*/
void RExecuteAsync(long rhandle,string code);

/**
* コードを実行し、終了するまで待ちます。これは
* 何も返しません。
* RGet*() 関数でも基本的に同じことができます。式の評価も
* 単なるコードの実行です。唯一の違いは、これらの
* RGet*() 関数が、RExecute() が単に実行して待機し、
* すべての出力を無視するのに対して、
* 出力も解析して返そうとすることです。
*/
void RExecute(long rhandle,string code);

/**
* 変数名にboolを代入する。R ではこの型を "logical"
*/
void RAssignBool(long rhandle,string variable,bool value);

/**
* 変数名に整数を代入する。
*/
void RAssignInteger(long rhandle,string variable,int value);

/**
* 変数名にdoubleを代入します。
*/
void RAssignDouble(long rhandle,string variable,double value);

/**
* 変数namdに文字列を代入する。R ではこの型を "character" と呼ぶ
*/
void RAssignString(long rhandle,string variable,string value);

/**
* 変数名にベクトルを代入する。

*/
void RAssignVector(long rhandle,string variable,double &vectr[],int size);

/**
* 文字のベクトル(文字列の配列)を変数に代入します。
* 係数が必要な場合は、このコマンドの後に係数を変換するコードを実行する必要があります。
* Rの最近のバージョンでは、文字列のベクトルは係数
* よりも多くのメモリを必要とせず、新しい要素を追加するのも簡単です。
*/
void RAssignStringVector(long rhandle,string variable,string &vectr[],int size);

/**
* 変数名に行列を代入する。行列は
* 行番号を最初の次元として持たなければなりません(生データでは byrow=TRUE が使用されます)。
この関数は、
* 行ごとに RRowBindVector() を使用して最後に新しい行を追加することで、巨大な行列(数百行)を一から構築するよりもはるかに高速です。この関数は
* 最適化されており、
* 生のバイナリデータで file-IO を使用することにより、1回の関数呼び出しで膨大なスループットを得ることができます。
* 要素がほんのわずかしかない非常に小さな行列やベクトルでは、これはオーバーヘッドが大きすぎ、他の関数の方が高速になる可能性があります。
* 数千行の行列が R に転送されたら、
* RRowBindVector() を使用して、行列全体の新しいコピーを常に送信するのではなく、新しい
* データ・ベクトルの到着時にゆっくりと行列を成長させるようにします。
*/
void RAssignMatrix(long rhandle,string variable,double &matr[],int rows,int cols);

/**
* 行を行列またはデータフレームに追加します。これは
* variable <- rbind(variable, vector)
* サイズが実際の配列サイズと一致しない場合、悪いことが起こるかもしれません。
*/
void RAppendMatrixRow(long rhandle,string variable,double &vectr[],int size);

/**
* 変数が存在すればtrueを返し、そうでなければfalseを返します。
*/
bool RExists(long rhandle,string variable);

/**
* 式を評価し、boolを返す。式は論理評価される任意のRコード
* である。

*/
bool RGetBool(long rhandle,string expression);

/**
* 式を評価し、整数を返します。式は整数に評価される任意のRコード
* であることができます。

*/
int RGetInteger(long rhandle,string expression);

/**
* 式を評価し、doubleを返します。式は、浮動小数点数として評価される任意のRコード
* を指定できます。ベクトルである場合は、
* 最初の要素のみが返されます。
*/
double RGetDouble(long rhandle,string expression);

/**
* 式を評価し、doubleのベクトルを返します。

* 戻り値は、
* 配列にコピーできた要素数です。
* サイズが一致しない場合、デバッグレベル1で警告が出力される。
* >> 100000要素に制限
*/
int RGetVector(long rhandle,string expression,double &vectr[],int size);

/**
* デバッグ用にprint(expression)を行います。出力はデバッグ・レベル0のデバッグ・モニターに
* 送信されます。
*/
void RPrint(long rhandle,string expression);

mt4R for new MQL4
mt4R for new MQL4
  • www.mql5.com
mt4R, modified for supporting new MQL4
 
素晴らしい仕事だ!

特定の状況で現れる問題を解決する手助けをしていただけないでしょうか。

1) 2つの異なるブローカーの2つのmt5ターミナルを実行する。
2) お互いの間ですべてをコピーする
3) あなたのdllを使用してエキスパートを実行し、mt5からRtermに配列を送信します。
4) 数分間待つ
2つのmt5ターミナルのうち1つが閉じられます。
なぜでしょうか?

ありがとうございます。