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

 
MQL5でDLLに文字列を渡すことはまだ一つもテストしていない

MQL4-DLLで文字列の受け渡しでこの問題に気づきました。MQL4のコードでは、DLLで関数を 呼び出し、文字列を渡しています。

#import "MyDll.dll"
 void passSymbol(string symb);






void start() {

    passSymbol(Symbol());

}

で、DLLにはツール名と一緒にこんな文字列が送られてきます。

_DLLAPI int __stdcall passSymbol(char* symbol) {
   указатель symbol в какой-то момент не содержит имени инструмента а левые символы вообще.
}


ある瞬間、ある刻みで(半日くらいは問題なく動くかもしれません)、DLLが突然、楽器名の代わりに不明瞭な文字を含む左巻き文字列を受信してしまうのです。
もしかしたら、mql5で似たようなコードを確認できるかもしれません。MQL4ではメモリポインタが正しくないのか、ターミナル内のスレッドの文字列へのアクセスが競合することがあるようです。

double配列とint変数は問題なく正しく通過します。

MQL5-DLLのテストは時間が出来次第書きますが、もしこのようなテストをしているのであれば、DLLに渡す文字列の安定性を検証するために、長期間tick毎に処理を繰り返すようなテストをしてください。

 
GarF1eld:

もし、dllを通してのみ相場をエクスポートできるのであれば、エクスポートする各商品にスクリプトを配置する必要があるということでしょうか。たくさんあったらどうする?例えば、50?

一つのスクリプトで多くの楽器の気配値を渡すことが可能なのは理解できますが、ティックが失われないDDEの本格的な代替にはならないでしょう。

レナート

問題は、「見積もりを出すためのインターフェイスを提供する」というタスクがないことです。

私たちの課題は、分析システムを開発するための完全かつ自給自足の環境を作る ことです。このような環境であれば、サードパーティ製のプログラムであっても使用する必要はないでしょう。

その答えは、確かに面白い。お題の見出し「MQL5用のDLLを書き、 10分でデータを交換 する方法」は、こちらの記事「インジケータ間のデータ転送-つらい問題を簡単に解決」をご覧いただき、上記の問題(斜体)と比較していただくとよいかと思います。
 
Renat:

要は、「見積書を発行するためのインターフェースを提供する」ことが使命ではないのです。

私たちの課題は、分析システムを開発するための完全かつ自給自足の環境を作ることです。このような環境であれば、サードパーティ製のプログラムであっても、あまり使う必要はないでしょう。


GUIが非常に弱く、ロジックを書くのに2日、計算した情報を何らかの形で表示するのに丸一日かかってしまった

その結果、私はすべてを無効にしました。私はデータトランスポート(https://www.mql5.com/ru/forum/382)を構築し、今は満足しています。

開発者の目標が高すぎるのでは?

また、C言語やDelphiなど、昔から行われていたことなのに、なぜ車輪の再発明をするのでしょうか?

 
yu-sha:

GUIが非常に弱く、ロジックを書くのに2日、計算した情報を何らかの形で表示するのに丸一日かかってしまった

結局、すべてをあきらめ、データトランスポート(https://www.mql5.com/ru/forum/382)を構築し、人生を楽しんでいます。

開発者の目標が高すぎるのでは?

また、すべてが大昔にすでに行われていたこと(C、Delphi、...)であるのに、なぜ車輪を再発明するのでしょうか?

MT5の問題は、この製品が何を解決すべきかという明確なビジョンが欠如していることから始まったと私は考えています。MT4をベースにアップグレードされ、スピードと拡張機能の面で新しいバージョンに引き上げられたもの、または、よく考えられた構造と拡張性(すなわち、明確に定義された特定のクラスのタスクを実行するビジネスクラスまたは取引フレームワークを含み、その一般機能と広く利用できるソフトウェアサポートツールで最新のプログラミング言語/環境に基づいている)を備えた新しい現代の取引プラットフォームであるかのどちらかです。このジレンマを解決するために、相反するものを組み合わせる、いわばコンポートのようなものを、「実力派ソリストの即興演奏」という手法で作ろうとしたが、なかなかうまくいかなかったようである。

それは建設的な影のない誰かの純粋なゴミに思える場合は、銭湯につながる二度目のために、または良いのために彼を撃つ:)

 

2ピサラ

根本に迫る。

MQLはどちらかというと、プログラミングスキルの低いトレーダー向けです。ア・ラ・ベーシック・フォー・ダミーズ

そのような立場に反対することはありません - それもありがとうございます。

しかし、MQL5を「分析システム開発のための完全な自給自足環境」と位置づけています。このような環境であれば、サードパーティ製のプログラムであっても適用する必要はないでしょう。" これは重大な要求である。コアを消化しやすいスープセットで「縛る」ためには、個人の愛好家だけでなく、優れたアーキテクトの指揮のもと、プロのプログラマーのチームによる何年もの作業が必要でしょう。予算や管理については何も言えません。それはプロジェクトの別の次元の話です。

頑張っている社員を応援したい。彼らの努力に感謝 したい。しかし、正直に言うと、MQL5は目標達成のためのステージに過ぎないのです。

追伸:モスクワは一日にして成らず

 
そう、私たち一人ひとりが、これまでしてきたこと、今していること、これからもしていくこと、どれだけの不要なことをしたか、考えたり思い出したりするのは怖いことです
 
Renat:

通話速度の確認はとても簡単です。例えば、ざっとこんな感じで計算できます。

Quad Q9400 @2.66Ghzで57,000回/秒の通話ができました。MetaTrader 4では、制御や配管がないため、同じコードで1秒間に約20,000,000回の呼び出しが発生します。

MetaTrader 5のDLL呼び出しのロスを必ず減らすようにします。

コンパイラに特別なディレクティブを作り、デフォルトで有効にして、DLLコールにこれらのラッパーを挿入するのが良いでしょう。無効の場合は、これらのラッパーを挿入しないのがよいでしょう。デバッグモードとリリースモードとか。それでも、57万円では足りないこともある。同じ時間はDLの実行時間に食われている。
 
HideYourRichess:
デフォルトでオンになっている特別なコンパイラ指令を作って、これらのラッパーをDLL呼び出しに挿入するのが良いアイデアです。無効の場合は、これらのラッパーを挿入しないのがよいでしょう。デバッグモードとリリースモードとか。それでも、57万円では足りないこともある。同じ時間をDLLのランタイムに食われているのです。
240ビルドではラッパーを簡略化し、現在では1秒間に19,911,000コールの速度になっています。
 
MQL / MQL2 / MQL4 / MQL5の議論について:どうやら私たちの歴史をよくご存じないようですね。せめて企業サイトに行って読んでみてください。


私たちは2001年以来、巨大なトレーダー・コミュニティとともに、4世代のトレーディング言語を系統的に作り上げてきました。競合他社は瀕死の状態で、制御言語も発達せず、一方、私たちはこれまで働き、現在も働き、これからも働き続けることになります。

 

Renat: 

そして、私たちはこれまで働き、現在も働き、これからも働き続けます。

レーニン大帝が遺したように。

;)

覚えてない、前にも聞いたような気がする...。
mcl5ツールで簡単なDLLを作成することは可能ですか?
ユニターで書いてコンパイルすればいいのでは...?