10分でできるMQL5用DLLの書き方、データのやりとり」についてのディスカッション。 - ページ 7

 

pisara:

...IMHOは、MTの記述言語の開発は、貿易の特定のタスク、すなわち、情報収集、分析、テスト、貿易管理、他のシステムとの統合に役立つべきである。このすべては、現代の開発ツールの高いレベルで行うことができ、IMHOは、すなわち、一般に受け入れられている方法(OOPなど)を使用して選択した標準フレームワークを統合して拡張することによって、行う必要があります。課題は、C/C++などを混ぜた上で閉じた自給自足のプラットフォームを書くことではなく、まず、取引プラットフォームの基本、そのサービス、API、ユーザーインターフェイスを書くことです...。

MoeのIMHOは、あなたのIMHOと完全に一致しています。同じ志を持つ仲間をさらけ出すのはいいことだ。私は、「悪魔は小さい ものに潜む」ということわざからMTを連想し、建築上の重大な欠陥を疑っています。そうでなければ、なぜこんなにたくさんの「レンガ」があるのか。 そこに行かず、ここに行け!さもないと、雪が頭の上に降ってきて、完全に死んでしまうぞ!」。

同時に、MTが決して最悪の製品ではないことも認めなければならない。

 

Renat писал(а) :

...MQL4.communityにはすでにMatad - MetaTrader 4の相互作用に関する記事が掲載されています。


もしかしたら、私が見落としているのかもしれないし、あなたが見落としているのかもしれない。MatkadとMT 4の相互作用についての記事が見当たりません。はい、Matlabを持っています。Matcadは持ってません((。

一時はMT4B<->Matcadのリンクをプログラマに発注したこともありました。唯一許容できる(安定した) は、ファイル操作による通信だった。MT4→気配値をファイルに書き込む→Matkadが読み込み→処理→結果をファイルに書き込む(通貨の買い/売り)→MT4が読み込み→実行。しかし、時々原因不明のクラッシュが発生する。3ヶ月以上費やしたが、まだ問題を解決できない。

一方では、すべてを1つのパッケージで行いたいという要望もあり、それはそれで結構なことです。それは、システムの安定性と信頼性です。

しかし、一方で、高レベルのプログラミング言語(Matlab、Matcad)があり、それらについては、すでに何十億人年をかけて、多くのことが書かれている。そして、この電力をMT5に接続できれば最高です。 これらの言語のレベルに達するには、体力も能力も足りない......。

Z.U. 注意していただきたいのは、これらの言語はどちらも配列(行列代数)を扱うことに特化しており、まさにあなたが必要としているものです。

 
Prival:

もしかしたら、私が見落としているのか、それとも言い間違いなのか。MatcadとMT 4の接続についての記事がどこにも見当たらないのですが。Matlabがある。しかし、Matcabは使えません((.

はい、MatcadとMatlabがごっちゃになりました。申し訳ございません。


一時はMT4B<->Matcadのリンクをプログラマに発注したこともありました。唯一許容できる(安定した)接続は、ファイル操作によるものでした。MT4→気配値をファイルに書き込む→Matkadが読み込み→処理→結果をファイルに書き込む(通貨の買い/売り)→MT4が読み込み→実行。しかし、時々原因不明のクラッシュが発生する。3ヶ月以上費やしたが、まだ解決できていない。

MQL5でバンドルしてみる - より強力で、効率的で、安全な言語です。

MatkadとMT5の統合に関する公開オープンワークを始めれば、良い結果が得られると思います。こうすることで、両方のエラーを素早く修正し、良い結果を得ることができるのです。

 
Renat писал(а) :
はい、MatkadとMatlabがごっちゃになりました。申し訳ございません。


MQL5でバンドルしてみる - より強力で、効率的で、安全な言語です。

良い結果を得るために、MatkadとMT5を統合するための公開作業を開始することができます。そうすれば、どちらのエラーもすぐに修正でき、良い結果を得ることができます。

いろいろなことができますが、まず、このようなプロジェクトに興味を持つべきはあなただと思います(あなたの聴衆がどのように増えるかを想像してみてくださいし、 FXや為替+標準的なmatlabでのプログラム作成 )。

また、パブリック、オープンなどの仕事は、長い間、興味がありませんでした。私も自分の時間を大切にしています。こんな失敗をするのは疲れる。

//+----------------------------------------------------------------------------+
//|  Описание : Установка объекта OBJ_VLINE вертикальная линия                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cl - цвет линии                                                         |
//|    nm - наименование                                                       |
//|    t1 - время                                                              |
//+----------------------------------------------------------------------------+
void SetVLine(string nm="", datetime t1=0, color cl=Red)
  {
  if (t1<=0) return; //t1=Time[0];
  if (ObjectFind(0,nm)<0) ObjectCreate(0, nm, OBJ_VLINE, 0, t1, 2);
  else Print("Ошибка создания SetVLine ",nm," ",GetLastError()," t1=",t1);
  
  ObjectSetInteger(0, nm, OBJPROP_COLOR, cl);
  ObjectSetInteger(0, nm, OBJPROP_STYLE, STYLE_DOT);
  ObjectSetInteger(0, nm, OBJPROP_BACK, true);        // рисовать как фон
  ObjectSetInteger(0, nm, OBJPROP_SELECTABLE, false); // запретить выделение объекта мышкой
  }

この手順でどうしてこんなことができるのですか?

2010.05.06 02:28:14 Setka_Final_1 (EURUSD,M5) SetVLine作成エラー VLine_838524 4202 t1= 2010.05.06 00:00

これはデタラメだ。

err_object_not_found

4202

グラフィックオブジェクトが見つかりません

オブジェクトが見つからなかった場合。プログラムが作成したはずです。しかし、オブジェクトはそこにあるif(...)なのに、なぜ4202になるのでしょう。

疲れているから、もう寝る時間なのかもしれない。

 

プライベートへ.

もし、あなたが十分に興味深いMatCadの問題(そもそもそれほど複雑ではない)を定式化すれば、きっとその作業に参加してくれる人がいることでしょう。

 
Prival:

2010.05.06 02:28:14 Setka_Final_1 (EURUSD,M5) SetVLineの作成エラー VLine_838524 4202 t1= 2010

オブジェクトが見つからなかった場合。プログラムが作ったはずです。しかし、オブジェクトは存在するif(...) なぜ 4202 が返されるのでしょう。

このエラーは、前の関数呼び出しから残されたものです。ResetLastError() を使用する。
 


ごきげんよう!DLLから関数に文字列を渡すといえば

以下のようなコードがあります。

#include <WinUser32.mqh>.

#import "mt4excel.dll"

bool ExcelOpen();//Excelを開き、白紙ページを作成します。

bool ExcelSetTextCell(int X,int Y,char Value[]);//セルにテキストを書き込む

/*

人減らし

*/

#インポート

void OnTick()

{

MqlRates rates [];

int copied=CopyRates("EURUSD",PERIOD_M1,0,1,rates)とする。

ExcelSetTextCell(1,1, "Tool")。

ExcelSetTextCell(2,1, "EURUSD")。

ExcelSetValueCell(2,2,rates[0]);

}

Excelは、ExcelSetTextCellで渡されたものの最初の文字だけを表示する、とあります。このスレッドを読んで、何が原因かはわかったのですが、どうすれば必要なものが手に入るのかがよくわからないのです。ポイントは、DLLは私が書いたのではなく、MT4経由でExcelと連携するための関数のライブラリだということです。明らかな理由により、MT5は1文字目だけの文字列へのポインタを取ります。問題は、DLLのソースコードを編集できない場合、どのようにしてMT5に必要なものを渡すことができるかということです。私が理解している限りでは、次のようなものを追加する必要があります。

_DLLAPIvoid__stdcall demo(char*stream,char*buf){ buf=stream;}.

MT5開発者の方からのコメントを頂けると幸いです。

ありがとうございました。

 

ns_kさん、MQL5の文字列はunicodeであることを忘れないでください。

2つの解決策が考えられます。

1.ユニコード文字列を受け入れるようにDLLをリワーク(変更)する。

2.文字列を 自分で配列に 変換する

 
stringo:

ns_kさん、MQL5の文字列はunicodeであることを忘れないでください。

2つの解決策が考えられます。

1.ユニコード文字列を受け入れるようにDLLをリワーク(変更)する。

2.自分で文字列を配列に 変換する

2番目の解決策は、私にとって有効です。教えてください、関数の宣言も変えなければならないのでしょうか?すなわち、代わりに

bool ExcelSetTextCell(int X,int Y, string Value);// セルにテキストを書き込む

第3パラメータが配列になるような宣言を書かないといけないのですか?そうだとしたら、どうすればいいのか......わからない。ありがとうございました。

でも、ちょっと考えたらわかったんです。ありがとうございました!!!

 

DLL関数の宣言

bool  ExcelSetTextCell(int X,int Y, uchar& Value[]);
DLL関数の呼び出し
//--- объявляем массив символов
uchar value[];
//--- преобразуем юникод строку в однобайтный массив
StringToCharArray("EURUSD", value);
//--- передаем полученные данные массива по ссылке
ExcelSetTextCell(2,1,value);