MetaTrader4用API関数のライブラリを開発 - ページ 5

 
ちなみに、今のMinは、以前よりも買えるものが増えています。<br /> translate="no"> 純粋にイミフです :)

ありがとうございます。CMオファーに期待しています。がんばってください。
 
APIとは言い難いですね。図書館+EA。動作が非常に遅い。
 
...
 
ライブラリ開発者への質問:なぜ、ライブラリを使用する際の見積もり取得のスピードは、一時ファイルを介して作業する場合よりもさらに遅いのでしょうか?では、共有メモリを使うメリットは何なのでしょうか?<br/ translate="no">。

見積もり取得のスピードとはどういうことですか?ティックを取得しているのであれば、MT4で直接でも気配値のティックを扱う のは難しいことは既に書きました。ライブラリはもともとダニを捕獲するために作られたものではありません。これは、市場が非常に活発なときに、ティックについていけず、システムが単にハングアップする可能性があることと関係があります。そのため、図書館にはダニ雪崩を防ぐためのソフトウェアが内蔵されているのです。共有メモリを使用する利点は、このようなシステムの高い信頼性と、ハードディスクの目詰まりがないことです。その上、複数のプログラムがライブラリにアクセスする可能性があり、一時ファイルの正確な場所を「知る」必要はないのです。がんばってください。
 
市場が非常に活発な場合、ティックについていけずにシステムがフリーズしてしまうことがあります。


作者がやりすぎたようです :)
私が理解する限り、EAがstart()関数内にある場合(そしてそこからAPIクライアントにティックの情報を送る場合)、EAがstart()関数から離れるまでMTは新しいティックを出しません
そのため、どのようにティックの雪崩が発生するのかが不明です。

EAがループしてRefreshRates経由でティックを受け取る場合、まずクライアントAPIから終了し、その後RefreshRatesの呼び出しが発生するはずです。だから、ここも凍る場所がないんです。

共有メモリを使用する利点は、このようなシステムの高い信頼性です


だから、「共有メモリ使用のポイントは 何か」というトピックは解決していない :) imho、MMFが良いのは、プロセス間で大量のデータを送り込む必要がある場合だけで、送り込み速度は ~150Mb/secです。(数ヶ月前、MMFだけでこのようなメカニズムを作らなければなりませんでした。テストによると、これが最も速い方法だからです) このタスク(



OrderSendなどの ためのパラメータの転送) - それは羽を通した鳥のように、ウィンドウを作ってwm_copydataとSendMessageを使って簡単に行うことができるのです。
 
は堅いようですが、プロセス間通信の唯一の方法というわけではありません。<br /> そのため、「...では、共有メモリを使用することの利点は何でしょうか」というトピックは解決されていません :)

使われているアルゴリズムがベストだと主張しているわけではないと思うのですが。このような問題は、少なくとも十数通りの方法で解決できるのがプログラミングの良いところです。一時ファイルを使ったバリアントも完全に動作していました。私の仕事は、信頼性が高く、実用的で、完全に機能するMT3 APIの代用品を開発することでした。現在、図書館では約半年間、実践的な取引プログラムに取り組んでいます。そして、ここでの最大の問題は、最高速度の達成ではなく、信頼性と多数の緊急事態への適切な対応であった。だから、コメントありがとうございます。極めて適切なコメントですが、それは「別の話」です。がんばってください。
 
Mforex2.libインポートライブラリを プロジェクトに含める(デルピ用-ライブラリ関数を記述するだけ)、
メインプログラムでMforex.hヘッダーファイルを指定(例:#include "Mforex.lib", "Mforex.h")こんにちは、現時点では主な問題は接続されていることです。h" - Builder C++のみ);

この2点が謎なのですが、Omegaはプログラムができていて、他のファイルはすべて説明通りに配置し、MT4を起動する関数を指定し、起動時に正確なパスを指定する必要があるとメッセージが出ましたが、パスも指定しています。この先どうしたらいいのかわからない。
 
プロジェクトのインポートライブラリMforex2.lib(デルピ用-ライブラリの機能のみ記述)をインクルードする、<br/ translate="no"> メインプログラムのヘッダーファイル Mforex.h で指定する(例: #include "Mforex.h", "Mforex.h", "Mforex.h")。h" - Builder C++のみ);
この2点が不可解です。Omegaは既製のプログラムで、他のファイルはすべて説明通りに配置し、MT4起動の機能を規定し、起動時に正確なパスを規定する必要があるというメッセージが出ましたが、私はパスも規定しています。この先どうしたらいいのかわからない。

Omegaは、外部DLLから関数をインポートすることが可能です。そのため、外部ライブラリとしてMforex2.dllを指定する必要があります。同時に、このファイルはOmegaプログラムの「視野」に入っている必要があります。呼び出し手続きには、ドキュメントに記載されているように、DLLからインポートした関数の名前を指定します。また、OmegaはMforex.hファイルからの定義を "知らない "ことに注意してください。つまり、例えばポジションを開く 機能を呼び出す場合、OP_SELL などではなく、例えば Sell - 1 の操作コードを指定する必要があります。詳細は、omegaが外部ライブラリと連携する方法を説明したDevKitのドキュメントを参照してください。がんばってください。
 
<br / translate="no"> Omegaでは、外部DLLから関数をインポートすることが可能です。そのため、Mforex2.dllは外部ライブラリとして指定する必要があります。同時に、このファイルはオメガプログラムの「視界に入る」ものでなければならない。呼び出し手続きには、ドキュメントに記載されているように、DLLからインポートした関数の名前を指定します。また、OmegaはMforex.hファイルからの定義を "知らない "ことに注意してください。つまり、例えばポジションを開く機能を呼び出す場合、OP_SELL などではなく、例えば Sell - 1 の操作コードを指定する必要があります。詳細は、omegaが外部ライブラリと連携する方法を説明したDevKitのドキュメントを参照してください。
がんばってください。


そこで、オメガで次のように処方しました。

DefineDLLfunc: "Mforex2.dll", int, "Start"; {DLLコール}。
_gbp = Start(); {端末の起動機能}。

しかし、ここでは "Start() "の代わりに何か別のものを書くべきだとおっしゃいますが、私の理解は正しいのでしょうか?
 
<br/ translate="no"> そこで、オメガで以下のように処方してみました。

DefineDLLfunc: "Mforex2.dll", int, "Start"; {call DLL}
_gbp = Start(); {terminal start function}

しかし、「Start()」の代わりに別のことを書けということですが、正しいでしょうか?

自分への答え:「Start()」の代わりに他のものを書いてはいけない - その通り、Omegaは何の問題もなくMT4を起動します。しかし、

ポジションオープンの 機能では少し複雑なので、関数を規定しました: Input: Symbol(NumericSimple), Order(NumericSimple), Lot(NumericSimple), price(NumericSimple), sl(NumericSimple), tp(NumericSimple); DefineDLLfunc: "Mforex2.XXX".dll", int, "NewPos",char, int, double, double; _NewPos = NewPos(Symbol, Order, Lot, price, sl, tp); 論理的には全てメーカーの説明に合うのですが、実際には全てが数字で設定されているという問題が.........。