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

 
Igor Makanu:

のオーダーシステムは簡潔でシンプルであるため、初歩的なアクションをオーダーで解決することに気を取られることなく、「その場で」戦略を書くことができる。

必要であれば、MT5の注文システムで注文を使った簡単なアクションを練習することができます:


MT5初心者からの質問」トピックでこの質問をしたところ、「なぜそれが必要なのか」という答えが返ってきた。)

純粋なmql5でブランクがある場合、何を書くべきかの違いはなく、数行のコードで異なるTSのシグナルを置き換えるだけです。

もう1つの問題は、クロスプラットフォームのコードではないため、すべての記述が意味をなさないということだ。

 
Vitaly Muzichenko:

もう一つの問題は、これはクロスプラットフォームのコードではなく、すべての記述が意味をなさないということだ。

クロスプラットフォームのコードに意味があるとは思えない。書くのにもサポートするのにも多くの時間がかかるが、仮想トレーディングでTSを実行し、コピー機で4や5に移す方が簡単だ。

SZY:オフトピックですが、ここに書きます。テスターでも実際の取引でも同じように機能するTSを探すことはユートピアであり、TSの堅牢性を評価することはできません。実際の取引で利益を抽出するためにさらにアップグレードすることは、TS自体を評価することが不可能になることにつながります。

削除済み  
Igor Makanu:

SZY:オフトピックですが、ここで書きます。テスターと同じように動作するTSを探すのは、TSの堅牢性を評価することができないユートピア、実際のTSで利益を抽出するためにさらにアップグレードすると、TS自体を評価することが不可能になります。

何が言いたいのか...すべてのTSは、ほぼ1/1で機能する/しない
 
Maxim Dmitrievsky:
何が言いたいんだ...すべてのTCはほぼ1/1で機能する/しない。

これとは違う。

フリップ・マーチン、オプトイン、バック・アンド・フォワード・テスト、MO、シャープレシオ...。- テスト統計

しかし、取引の統計はテストとは異なる。

上級ユーザーは、通常、制限に転送することにより、この猿をアップグレードし始め、その後、特に高度なものは、価格の後に制限を移動し始める - そして後者の場合には、テストとは異なるTSになります(それは別のTSです!) - それは原理が同じであることは明らかである、カモを得た - 倍増し、前の注文の開始価格から 後退した、

少なくとも、新しいTSはすでにティックと実行遅延に結びついています。


少なくとも新しいTSはすでにティックと約定遅延に結びついています。だからこそ、フォワードのテスターで質の高い結果を得るには、理想的な条件でTSをモニターする必要があると書いているのです。

削除済み  
Igor Makanu:

不正解

フリップ・マーティンを考案し、オプトインし、バック・アンド・フォワード・テストを行い、MO、シャープのKレートを得た...。- テスト統計

しかし、取引の統計はテストとは異なる。

上級ユーザーは、通常、制限にそれを転送することによって、このマーチンをアップグレードし始め、その後、特に高度なものは、価格の後にリミットを移動し始める - そして後者の場合には、テストとは異なるTSになります(それは別のTSです!) - それは原理が同じであることは明らかである、カモを得た - 倍増し、前の注文の開始価格から 後退した、

しかし、イミホ、それはユーザーがテスターでテストしていない別のTSである - 少なくとも新しいTSはすでにティックと実行遅延に結びついています。


少なくとも新しいTSはすでにティックと約定遅延に結びついています。だからこそ、フォワードのテスターで質の高い結果を得るには、理想的な状態でTSをモニターする必要があると書いているのです。

まあ、これは些細なことですが

 
Igor Makanu:

のオーダーシステムは簡潔でシンプルであるため、初歩的なアクションをオーダーで解決することに気を取られることなく、「その場で」戦略を書くことができる。

必要であれば、MT5の注文システムで注文を使った簡単なアクションを練習することができます:


MT5初心者からの質問」トピックでこの質問をしたところ、「なぜそれが必要なのか」という答えが返ってきました。)

ターミナルを実際の証券取引所に近づけたいという願望が、実際の複雑さにつながりました。注文、取引、ポジションのそれぞれに独自のチケットがあるため、システムが複雑になり、シンプルさと実際の市場への近さのどちらが優れているかは明らかではありません。
 
Valeriy Yastremskiy:
端末を実際の証券取引所に近づけようとした結果、かえって複雑になってしまった。注文、取引、ポジションがそれぞれ独自のチケットを持っているため、システムが複雑になり、シンプルさと実際の市場への近さのどちらが優れているかは明らかではない。

率直に言って、なぜ4Kでは注文、取引、ポジションが1つの注文に置き換えられ、すべてに対して1つのチケットを持っているのか、そして5Kでは注文、取引、ポジションのチケットが異なるものにされたのか、それは端末内では同じにすることができ、もし取引所から本物のチケットを入手する必要があれば、それは追加で行うことができるが、アドバイザーのタスクではすべてが簡単になるからである。

 
Valeriy Yastremskiy:

正直なところ、なぜ4Kでは注文、取引、ポジションが1つの注文に置き換えられ、すべてに対して1つのチケットを持っているのか、そして5Kでは注文、取引、ポジションのチケットが異なるものになったのか、それは端末の中では同じにすることができ、証券取引所から本物のチケットを入手する必要があれば、追加で行うことができるが、アドバイザーのタスクではすべてが簡単になるからである。

MT4とMT5の注文システムを十分に比較するには、両方をよく理解する必要があります。理論的/実践的だけでなく、アーキテクチャ的にも

私の見解では、MT5の注文システムは機能面でMT4よりはるかに優れている。一方、利便性は高レベルのライブラリによって達成される。

MT5 и скорость в боевом исполнении
MT5 и скорость в боевом исполнении
  • 2020.08.27
  • www.mql5.com
MT5 - шустрая платформа. Но есть узкие горлышки, которые сводят на нет все старания быстрой торговли...
 
fxsaber:

MT4とMT5の注文システムを適切に比較するためには、両者を十分に理解する必要があります。理論的/実践的だけでなく、アーキテクチャ的にも

私の見解では、MT5の注文システムは機能面でMT4よりはるかに優れている。一方、利便性は高レベルのライブラリによって達成される。

取引、ポジション、注文のプロパティは、確かに、実際の取引データの取得や取引操作の管理において、より多くの可能性を与えてくれる。しかし、取引とポジションの注文チケット間の接続の複雑さは、現在の状況の複雑な追跡、より複雑な注文、そしてライブラリなしで、正面からコーディングする十分な複雑さにつながった。一般的に、それは致命的ではありません)

 

純粋なMQL5が、簡単な作業でMT4Ordersの賞賛された高速取引履歴実装のパフォーマンスをどのように上回るかをご覧ください。

// スクリプトは、取引履歴の最後のポジションのオープン/クローズ時刻を計算する。

#include <MT4Orders.mqh> // https://www.mql5.com/en/code/16006

void LastTimeMQL4( datetime &OpenTime, datetime &CloseTime )
{
  for (int i = OrdersHistoryTotal() - 1; i >= 0; i--)
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && (OrderType() <= OP_SELL))
    {
      OpenTime = OrderOpenTime();
      CloseTime = OrderCloseTime();
      
      break;
    }
}

//https://www.mql5.com/ru/forum/342090/page18#comment_18040164
void LastTimeMQL5( datetime &OpenTime, datetime &CloseTime )
{
  static ulong PrevTicketIn = 0;  // 前回の呼び出しからのポジションエントリーチケットを格納します。
  static ulong PrevTicketOut = 0; // 前回の呼び出しからのポジション終了チケットを格納する。
  
  if (HistorySelect(0, INT_MAX))
  {
    for (int i = HistoryDealsTotal() - 1; i >= 0; i--)
    {
      const ulong Ticket = HistoryDealGetTicket(i);
      
      if (Ticket == PrevTicketOut)            
      {
        OpenTime = (datetime)HistoryDealGetInteger(PrevTicketIn, DEAL_TIME);
        CloseTime = (datetime)HistoryDealGetInteger(PrevTicketOut, DEAL_TIME);        
        
        break;
      }
      else if (HistoryDealGetInteger(Ticket, DEAL_ENTRY) == DEAL_ENTRY_OUT)
      {
        PrevTicketOut = Ticket;
        
        CloseTime = (datetime)HistoryDealGetInteger(Ticket, DEAL_TIME);

        if (HistorySelectByPosition(HistoryDealGetInteger(Ticket, DEAL_POSITION_ID)))
        {
          PrevTicketIn = HistoryDealGetTicket(0);
          OpenTime = (datetime)HistoryDealGetInteger(PrevTicketIn, DEAL_TIME);
        }
          
        break;
      }
    }
  }
}

typedef void (*GetLastTime)( datetime&, datetime& );

void Bench( GetLastTime LastTime, const int Amount = 10000 )
{
  datetime OpenTime, CloseTime;
  datetime Tmp = 0;

  for (int i = 0; i < Amount; i++)
  {
    LastTime(OpenTime, CloseTime);
    
    Tmp += CloseTime - OpenTime;        
  }
  
  Print(Tmp);
}

#define  BENCH(A)                                                              \
{                                                                             \
  const ulong StartTime = GetMicrosecondCount();                              \
  A;                                                                          \
  Print("Time[" + #A + "] = " + (string)(GetMicrosecondCount() - StartTime)); \
}

#define  PRINT(A) Print(#A + " = " + (string)(A))

void OnStart()
{  
  if (HistorySelect(0, INT_MAX))
    PRINT(HistoryDealsTotal());

  BENCH(Bench(LastTimeMQL4))
  BENCH(Bench(LastTimeMQL5))  
}


結果

2020.08.29 00:57:38.561 HistoryDealsTotal() = 9435
2020.08.29 00:57:38.813 2046.04.30 00:13:20
2020.08.29 00:57:38.813 Time[Bench(LastTimeMQL4)] = 252274
2020.08.29 00:57:38.820 2046.04.30 00:13:20
2020.08.29 00:57:38.820 Time[Bench(LastTimeMQL5)] = 7162

純粋なMQL5は、このタスクで40倍高速でした。MQL5を学ぶ!