ライブラリ: MT4Orders - ページ 87

 
fxsaber #:

Tester では、MT5-OrderSend/OrderSendAsync 最初の実行が 成功すると、常にMqlTradeResult.request_id == 0 になります。

request_idは1から始まるはず なので、この動作はMQ側の欠陥だと考えています。


これがMT4OrdersがTesterにOrderSendAsyncを実装しない理由の1つです。もう一つ、あまり良くない理由があります(本から)。

追加情報をありがとうございました!
 

申し訳ありません、このスレッド全体を読み通すことができませんでした。注文のない未決済ポジションの 数を取得するには、OrdersTotal() のオーバーロードのようなものがあるのでしょうか:

int GetOpenTradesCount()
{
    int count = 0;
    for (int i = 0; i < OrdersTotal(); i++)
    {
        if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) // 位置による順序の選択
        {
            if (OrderType() == OP_BUY || OrderType() == OP_SELL) // 成行注文のみをカウントする
            {
                count++;
            }
        }
    }
    return count;
}
 
mbjen 未決済ポジションの 数を取得するには、OrdersTotal() のオーバーロードのようなものがあるのでしょうか、それとも毎回同じようなコードを書かなければならないのでしょうか:
#include <MT4Orders.mqh>

int GetOpenTradesCount1()
{
  return(PositionsTotal());
}

int GetOpenTradesCount2()
{
  return(OrdersTotal() - OrdersTotal(false));
}

あなたのオリジナルは、ポジションをオープンする MT5 注文をオープンポジションとしてカウントするという点で、より優れています。これはGetOpenTradesCount1 ではできません。

あなたのソースの変形は、ポジションをクローズする MT5 注文を カウントしないという点で優れています。GetOpenTradesCount2 はこれを行いません。

 
fxsaber #:

注文合計(false)

'OrdersTotal' - 間違ったパラメータ数

 
mbjen #:

注文合計(false)

'OrdersTotal' - 間違ったパラメータ数

#include <MT4Orders.mqh>
 
fxsaber #:
aaがコードに含まれていた。ありがとう。
 
fxsaber #:

あなたの元の変形は、ポジションをオープンする MT5 注文をオープンポジションとしてカウントするという点で、より優れています。これはGetOpenTradesCount1 ではできません。

ソースの変種は、ポジションをクローズする MT5 注文を カウントしないという点で優れています。GetOpenTradesCount2 はこれを行いません。

仮想ライブラリも接続されている場合、OrdersTotal(false) で失敗します。

 
// 変更リスト:
// 26.03.2025
// 修正:OrderTypeはバランス・トランザクション・タイプをより良く扱う。
// 修正: ByPassモードで取引履歴を扱う場合、HistorySelectの呼び出し回数が減少します。
// 追加: MT4ORDERS_LIBRARYマクロでライブラリモードを有効にする: #import "MT4Orders.ex5".
 

取引、自動取引システム、取引戦略のテストに関するフォーラム

ライブラリ: MT4Orders

fxsaber, 2025.03.26 10:50 pm.

// 変更リスト:
// 26.03.2025
// 修正:OrderTypeはバランス・トランザクション・タイプをより良く扱う。
// 修正: ByPassモードで取引履歴を扱う場合、HistorySelectの呼び出し回数が減少します。
// 追加: MT4ORDERS_LIBRARYマクロでライブラリモードを有効にする: #import "MT4Orders.ex5".

ライブラリが深刻なコンパイル速度を低下させるという公正なコメントが ありました。そのため、インポートされたEX5-libraryの 形で代替のフルライブラリモードを追加しました。


コンパイル速度

以下のクロスプラットフォームスクリプトのMT4/5(MT5 - 最大X64_Regular最適化)でのコンパイル速度測定。

取引、自動取引システム、取引戦略のテストに関するフォーラム。

どのようにMQL4/5を学びましたか?

fxsaber, 2024.12.03 14:30

#define  MT4ORDERS_LIBRARY // library-mode: #import "MT4Orders.ex5".
#include <MT4Orders.mqh> //https://www.mql5.com/ja/code/16006

bool Buy( const double Lots = 0.1, const string Symb = NULL, const string Comm = NULL )
{
  return(OrderSend(Symb, OP_BUY, Lots, SymbolInfoDouble(Symb, SYMBOL_ASK), 0, 0, 0, Comm) != -1);
}

bool Sell( const double Lots = 0.1, const string Symb = NULL, const string Comm = NULL )
{
  return(OrderSend(Symb, OP_SELL, Lots, SymbolInfoDouble(Symb, SYMBOL_BID), 0, 0, 0, Comm) != -1);
}

void OnStart()
{
  Buy();
  Sell();
}

MT4_b1440 MT5_b4885 + MT4Orders MT5_b4885 +MT4Orders_library
90ミリ秒 5050 ミリ秒 255 ミリ秒
6.0 KBytes 125.4 KBytes 13.3 KBytes

新しいモードのコードは、MT4 と同様の速度で MT5 でコンパイルされます。コンパイル速度は、例えば CTrade を使用する場合よりも速い。これは、MT4 でそうであるように、すべての取引関数が類推によってインポートされるためであり、コンパイラはそれらに時間を浪費しません。


EX5のサイズには相応の影響があります。



2行のMQL5Libraries\MT4Orders.mq5 ファイルを作成し、一度コンパイルするだけです。

#property library

// #define MT4ORDERS_BYPASS_MAXTIME 1000000 // 取引環境の同期を待機する最大時間(µs単位)。
// #define MT4ORDERS_AUTO_VALIDATION // 正しさのチェックに成功した場合のみ、取引注文が送信される。
// #define MT4ORDERS_ORDERS_SORT // MT4 の注文履歴を終了/削除時刻順にソートしたもの。
#include <MT4Orders.mqh> //https://www.mql5.com/ja/code/16006


そして、MT4Ordersを有効にする前のコードに、マクロを書く。

#define  MT4ORDERS_LIBRARY // library-mode: #import "MT4Orders.ex5".
#include <MT4Orders.mqh> //https://www.mql5.com/ja/code/16006


そして、ライブラリはコンパイルの期間に影響しなくなる。



プログラムを起動すると、[依存関係]タブでMT4Ordersコールの存在を確認できます。

DLLは使用されていません、オープンソースコード。

Учебник по MQL5: Расширенные средства языка / Разработка и подключение библиотек двоичных форматов / Создание ex5-библиотек и export функций
Учебник по MQL5: Расширенные средства языка / Разработка и подключение библиотек двоичных форматов / Создание ex5-библиотек и export функций
  • www.mql5.com
Для описания библиотеки следует добавить в исходный код главного (компилируемого) модуля директиву #property library (обычно, в начало файла)...
 
fxsaber #:

このライブラリはコンパイルに深刻なスローダウンを引き起こすという意見が ありました。そのため、インポートされたEX5-libraryという 形で、代替のフルライブラリモードが追加されました。


コンパイル速度

以下のクロスプラットフォームスクリプトのMT4/5(MT5 - 最大X64_Regular最適化)でのコンパイル速度測定。


MT4_b1440 MT5_b4885 + MT4Orders MT5_b4885 +MT4Orders_library
90ミリ秒 5391 ミリ秒 255 ミリ秒

新しいモードのコードは、MT4 と同様の速度で MT5 でコンパイルされます。コンパイル速度は、たとえば CTrade を使用する場合よりも高速です。MT4と同様に、すべての取引関数が類推によってインポートされるため、コンパイラはそれらに時間を浪費しません。


有効にする方法

2行のMQL5Libraries\MT4Orders.mq5 ファイルを一度作成し、コンパイルするだけです。


そして、MT4Ordersを有効にする前のコードに、マクロを書く。


そうすれば、ライブラリはコンパイル時間に影響しなくなります。



プログラムを実行すると、[依存関係] タブで MT4Orders 呼び出しの存在を確認できます。

DLLは使用されておらず、オープンソース・コードです。

それはお粗末なオプションです...地面にレーキ。

ex5が "非推奨 "と宣言されることがあまりにも多く、#importディレクティブもその対象になります。