Meta Traider 4でdllを使用する

この投稿は、MetaTrader4、より具体的にはmql4で.dllリソースを使用する手法に専念しています。

この手法により、複雑な計算(IMSL、MatLab)の結果のインポートから、MT4をブローカーへのアダプターとして使用する独自のインフラストラクチャの作成に至るまで、MT4の分析と機能に実質的に無限の可能性を持たせることができます。


VSで.dllを書く


インターネット上のリソースでは、MFC .dllを作成する必要があると言われています。これは、VSのすべてのバージョンで使用可能ではなく、MFCの過度の初期化のコードを複雑にします。

ワークアウトとして、2つの関数を作成します。
1.関数は、double配列から最大値を返します。
2.プロシージャは配列をソートします。

プロジェクトを作成する

MVSの場合:ファイル->新規プロジェクト-> Win32アプリ。
開いたウィンドウで、次へ-> ApplicationType:DLL-> Finish

次に、プロジェクトFxDllの名前を示します。

すぐにFxDll .defファイルをプロジェクトに追加し、2つの将来の関数の名前をそこに記述します。
LIBRARY @FxDll
VERSION 0.1
EXPROTS
__getMax
__doSort


MT4の後半で外部関数と内部関数を混同しないように、名前の前に二重アンダースコアを追加することをお勧めします。

関数を宣言する

プロジェクトにFxDll .hを追加し、2つの関数を宣言します。
__declspec(dllexport) double __stdcall __getMax(double* arr, const int size);
__declspec(dllexport) void __stdcall __doSort(double* arr, const int size );


関数が直面するものは怖いです、触れないでください、これはこの記事の主題ではありません-それはdllから関数をエクスポートするために必要です。

FxDll .cppファイルを追加して、関数を記述します。
double __stdcall _getMax(double* arr, const int size)
{
return *std::max_element(arr, arr + size) ;
}

void __stdcall __doSort(double* arr, const int size )
{
std::sort(arr, arr + size);
}


これが行われていないことは明らかであり、nullをチェックし、例外をラップする必要があります。
これをMT4に転送するメカニズムを提供しますが、それでも有効なデータで機能します。

これで、c ++パーツの準備ができました。
FxDll .dllファイルをビルドしてプログラムディレクトリに配置する必要があります。
/専門家/図書館

クッキングサイドMT4


そのため、ライブラリにあるFxDll .dllがあります。
.mqhファイルを作成します-dllから必要な機能を引き出します。
//@FxDll.mqh
#import "@FxDll.dll"
double __getMax(double arr[], int);
void __doSort(double &arr[], int);
#import


最初の関数では、配列は値で渡され、MT4の外部で何が起こるかを認識しません。
参照による2番目のもの。 MT4でこれがどのように行われるかはわかりませんが、おそらくC ++と同じ意味です。

これでタスクの説明は完了です。 MT4には、外部リソースに情報をスローして結果を取得する2つの関数があります。
ファンタジーをオンにして、次に何ができるかを考えます。

Source: https://habr.com/ru/post/J125551/


All Articles