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

 

フリーランスからの広告の一部。

Конвертация должна быть выполнена в родном MQL5 без использования сторонних библиотек типа MT4Orders.

開発者は、仕事が終了する前にソースコードを提供し、変換がどのように行われるかを検証できるようにする必要があります。

どうやらどこかがうまく機能していないようです。

 
fxsaber #:

ファイルが壊れている。

---

アーカイブには最新版が含まれています

//01.06.2021
// 修正:コンパイラ・ビルド2449以降との互換性。
// 修正:同期の改善。ByPass.mqh は最新バージョンでなければならない。
// 追加: OrderLots(true) - 選択されたポジションの同期されたサイズ。
 
Vitaly Muzichenko #:

ファイルが壊れている

ダウンロードが必要です。

 
fxsaber #:

ダウンロードが必要です。

ああ、確かに。奇跡だよ、違うファイルなんて。

ありがとう!
 
// 変更リスト:
// 06.01.2022
// 修正:ポジション・オープニング・データとコミッション・サイズの正確な定義。バイパスモードでのみ正しく動作します。
// 追加: OrderDealsAmount() - ポジション形成に関与するMT5ディールの数を追加しました。バイパスモードでのみ正しく機能します。

パーシャルエグゼキューションやクローズバイのオーバーラップを扱う人には、このアップデートをお勧めする。

 
fxsaber #:

パーシャルエグゼキューションやクローズバイのオーバーラップを扱う人には、このアップデートをお勧めする。

スクリプトの計算精度をチェックする。

#define  MT4ORDERS_BYPASS_MAXTIME 1000000 // 正確な計算のためのバイパスモード。
#include <MT4Orders.mqh> //https://www.mql5.com/ja/code/16006

// すべての通貨操作をまとめる -MT5スタイル
double GetProfitMT5( void )
{
  double Res = 0;
  
  if (HistorySelect(0, INT_MAX))
    for (int i = HistoryDealsTotal() - 1; i >= 0; i--)
    {
      const ulong Ticket = HistoryDealGetTicket(i);
      
      Res += HistoryDealGetDouble(Ticket, DEAL_PROFIT) +
             HistoryDealGetDouble(Ticket, DEAL_SWAP) +
             HistoryDealGetDouble(Ticket, DEAL_COMMISSION);
    }
    
  return(Res);
}

// すべての通貨操作をまとめる -MT4スタイル
double GetProfitMT4( void )
{
  double Res = 0;

  for (int i = OrdersHistoryTotal() - 1; i >= 0; i--)  
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
      Res += OrderProfit() + OrderSwap() + OrderCommission();
    
  return(Res);
}

void OnStart()
{
  if (PositionsTotal())
    MessageBox("The script works only if there are no open positions."); // オープンポジションがない場合のみチェックする。
  else
  {
    const double ProfitMT5 = GetProfitMT5(); // すべての通貨操作をまとめる -MT5スタイル
    const double ProfitMT4 = GetProfitMT4(); // すべての通貨操作をまとめる -MT4スタイル
    
    // 異なる方法で計算された現金取引の合計を比較する。
    Alert("MT5 (" + DoubleToString(ProfitMT5, 8) + ") == MT4 (" + DoubleToString(ProfitMT4, 8) + ") - " +
          (string)(bool)!NormalizeDouble(ProfitMT4 - ProfitMT5, 8));
    Print(__MT4ORDERS__);
  }  
}


結果は1行です。

Alert: MT5 (0.00000000) == MT4 (-0.00500000) - false
Alert: MT5 (0.00000000) == MT4 (0.00000000) - true

false - MT4Ordersのどこかにエラーがあります。複雑な口座で確認してください。falseの場合 - 私に知らせてください。

 
fxsaber #:

計算が正確かどうかスクリプトをチェックする。

複雑なアカウントで確認してください。

チェックの結果、非常に複雑な取引履歴を持つライブラリは完璧に動作することがわかりました。信頼性は100%です。

 

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

ライブラリ: MT4Orders

fxsaber, 2022.01.06 03:18 AM

// 変更リスト:
// 06.01.2022
// 修正:ポジション・オープニング・データとコミッション・サイズの正確な定義。バイパスモードでのみ正しく動作します。
// 追加: OrderDealsAmount() - ポジション形成に関与するMT5ディールの数を追加しました。バイパスモードでのみ正しく機能します。

CustomReportを 例にして、どのように見えるかをお見せしましょう。

左から右へハイライトされた場所です。

  • OrderDealsAmount.対応する取引数によって発生したポジションがあります。一般に、これらは ENTRY_IN 取引だけでなく、他のタイプの取引もあり得る。
  • このため、始値は、ポジションを形成した全取引の出来高加重平均価格という小数値になることがあります。
  • pips単位の手数料サイズ。1つのシンボルで(出来高が大きい場合)大きく異なるべきではありません。そうでなければ、MT4Ordersのバグです。

スクリーンショットのケースは非常に単純です。OrderDealsAmountの単位が数十である 場合、もっと複雑なケースがあります。たとえば、MT5 では、ライフタイムが重ならない同じチケットのポジションが存在することがあります。MT5-GUI は、それが 1 つのポジションであり、最初のポジションの開始時間が表示されます。MT4Orders では、開始時間(および価格)と OrderTicketOpen(開始取引のチケット)が異なる複数のポジションが表示されます。


要するに、すべてが非常に正確で、通常のMT4スタイルです。バイパスモードのみ

 
// 変更リスト:
// 12.01.2022
// 修正: OrderPrint()は、まれなMT5注文/取引タイプの正しいデータを出力します。
 
// 変更リスト:
// 14.01.2022
// 修正: ByPassモードでOrderSelect(index, SELECT_BY_POS, MODE_HISTORY)を大幅に高速化。