MT4-テスター VS MT5-テスター - ページ 3

 
fxsaber:
プルーフ

これは証拠にはならない。

あなたは勘違いしています。

この専門家は、取引履歴への アクセスをテストしているに過ぎないのです。
 
Renat Fatkhullin:

これは証拠にはならない。

あなたは勘違いしています。

あなたの間違いは何ですか?ヒストリー機能があるところにはBreakPointsを置いて、CTRL+F5を実行してデバッグすることも自分で確認しました。すべてきれいに仕上がりました。
Renat Fatkhullin:
私の主張は変わらない - 当該専門家は、取引履歴への アクセスのみをテストしている。

結論を急ぎすぎた。

 

クラウドコンピューティングは、MT4テスターのスピードの利点をすべて否定するものだからです。

それに、この場合、確かにEAはデータアクセスの速度だけをテストしています。しかし、これはほとんどのEAにとってボトルネックになるとは思えません。

MT5でヘッジポジションを持つ口座が導入された後、個人的にはMT4の良さが全く感じられなくなりました。私がクロスプラットフォームライブラリを使うのは、実際の口座でMT4を使っているからに他なりません。

個人的に唯一惜しいのは、ポインタや配列の参照です。インジケータでデータをコピーする必要はなぜかないんです。MQL5には、それ以外のすべてが備わっています。

Распределенные вычисления в сети MQL5 Cloud Network
Распределенные вычисления в сети MQL5 Cloud Network
  • cloud.mql5.com
Заработать деньги, продавая мощности своего компьютера для сети распределенных вычислений MQL5 Cloud Network
 
fxsaber:
結論に飛びつきましたね。
他に何があるのでしょうか?データを照会して、ファイルにダンプする。他のアクションはありません。このEAは何をテストしているのでしょうか?
 
fxsaber:

ZS すべてのランが完璧にマッチしているわけではありません。つまり、3つのうちどれかが嘘をついているのは間違いない(MT4+TDS、MT5、MT4Orders)。探してみるしかないでしょう。

サブのおかげで犯人が判明、比較する機会があると必ずそうなる。

Expert Advisorでバグが表示される

// MQL4&5-code

#property strict

#ifdef __MQL5__
  #define Bid (SymbolInfoDouble(_Symbol, SYMBOL_BID))
  #define Ask (SymbolInfoDouble(_Symbol, SYMBOL_ASK))
#endif // __MQL5__

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

void OnTick()
{
  static bool FirstRun = true;
  
  static const double PrevBid = Bid;
  static const double PrevAsk = Ask;
  
  if (FirstRun)
  {
    PRINT((PrevBid != Bid) || (PrevAsk != Ask))
    
    FirstRun = false;
  }
}


エムティーフォー

2017.05.08 10:57:33.056 2017.04.10 00:00:08  TDS_Test EURUSD,M1: (PrevBid!=Bid)||(PrevAsk!=Ask) = false


MT5

2017.05.08 11:01:31.266 2017.04.10 00:00:08   (PrevBid!=Bid)||(PrevAsk!=Ask) = true
 
George Merts:
他に何があるのでしょうか?データの要求とファイルへの保存を行います。他の操作は行っていません。このEAは何をテストしているのでしょうか?
そのような疑問は、議論を全部読んでからにしたほうがいい。
ジョージ・マーツ

MT5でヘッジポジションを持つ口座が導入された後、個人的にはMT4の利点は一つもないと思っています。

このスレッドは建設的な内容が集中しているため、やや目立ちます。だから個人の好みはここで 議論したほうがいい、たとえば。

 
fxsaber:
どこにエラーがあるのか?自分でも確認し、History関数があるところにはBreakPointsを置き、CTRL+F5でデバッグを実行しました。すべてきれいに仕上がりました。

結論に飛びつきましたね。

すべてにおいて。

  1. 履歴を使った作業が本格化、履歴をスキャンしてトレード終了
  2. MT4Orders.mqhを使う - これは純粋な実験の終わりです。オーバーヘッドを持つ巨大なライブラリは、うんざりするほど書かれていて読めない。
  3. for(i=200 000; i>=0; i--)刻み目 ごとにOrderSelectと書くのは狂気の沙汰としか言いようがなく、「日本女とロシア男」というジョークを繰り返そうとするものです。
       for(int i=OrdersTotal()-1; i>=0; i--)
          if(OrderSelect(i,SELECT_BY_POS) && ((!TradeTime) || (OrderProfit()>0) || 
             ((OrderType() == OP_BUY)  && (PriceToInteger(OrderOpenPrice()) - IntBid >= Limit)) ||
             ((OrderType() == OP_SELL) && (IntAsk - PriceToInteger(OrderOpenPrice()) >= Limit))))
             OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0);
    
  4. テストはすべて、3からのサイクルのためだけに書かれたものです。

    5日間で20万件の取引が開始されるテストでは、おおよそ18万回刻みで行われます。900 000ティックに単純化してみましょう。100 000の注文が履歴でスキャンされ、900 000 * 100 000 = 900 000 000 000 OrderSelectの呼び出しがあります(ライブラリからのオーバーフローを含む)。テストされるのは、まさに9000億回のOrderSelectの呼び出しです。

    そして、そのうちの99.99%は、「遅れ」を実証するためだけに行われた、まったく不要な通話です。


もし、クリーンなテストを行いたいのであれば、ライブラリなしで2つの同じクリーンなサンプルを書いてください。これにより、互換性のために組み込まれたオーバーヘッドがなく、クリーンであることが保証されます。

履歴へのアクセスを最適化し、このデモを完全に無効化しました。わざとそういう書き方をしたんです。

 
Renat Fatkhullin:

すべてにおいて。

  1. ヒストリーワークが本格化、ヒストリースキャン後にトレードを終了
どこ?
  1. MT4Orders.mqh を使うことは、純粋な実験に終止符を打つことです。 これは、オーバーヘッドが嫌らしく、読めない方法で書かれた恐ろしいライブラリです。
それが私でした。
  1. for(i=200 000; i>=0; i--)刻み目 ごとにOrderSelectと書くのは狂気の沙汰としか言いようがなく、「日本女とロシア男」というジョークを繰り返そうとするものです。
MQL4のことを完全に忘れていますね。ここには歴史への言及はない。
  1. テストはすべて、3からのループのためだけに書かれたものです。

    99.99%のチャレンジは全く不要で、純粋に「ブレーキ」を実証するために作られたものです。
この例はでっち上げではなく、ソースにオリジナルへのリンク があります。これは最も有名で最も古いスキャルパーの一つです。

もし、クリーンなテストを行いたいのであれば、ライブラリなしで2つの同じクリーンなサンプルを書いてください。こうすることで、クリーンさが保証され、互換性のために組み込まれたオーバーヘッドが発生しないようになります。

2つのテスターを比較できるようにしたい。それぞれの長所と短所をご覧ください。また、比較はバグを特定する最も有効な方法の一つです。

スレッドは、両テスターの生データの同一性を示すことから始まる。これが基本であり、これがなければ何もできないのです。そして、全員がテスト用のExpert Advisorを選択することができます。

履歴へのアクセスを最適化し、このデモを完全に否定しました。わざとそういう書き方をしたんです。

誰かのアプリケーションのおかげで、SDはそう なったのです。建設的な批判は良いことです。
 

履歴を扱うのはOrderSelectと同様のOrderXXXXコマンドです。このことをわからないふりをしないでください。特に、ライブラリを書いている場合は。

MQL4のことも忘れてはいませんし、そこでも履歴と連動しています。

200 000トレードの履歴スキャナを各ティックに 深く書き、ループから合理的な終了の条件を忘れる?これを、「わざとロシア人男性を演じる」という。

あと、一部のダフ屋を参考にしないように。ループはわざとバカっぽく書いたんだよ。そして、テスト開始から5日以内でも、何千億ものOrderXXX関数がテストされ、そのうちの99.99%は呼び出す必要がないものばかりでした。


問題は、「Expert Advisorの例では、1ティックごとに取引の全履歴をスキャンするという、たった1つのことしかしないように書かれています」という、まったく正確な記述に反論し始めたことです。何しろ、手のひら一枚で99.99%のダムスキャンを除去できるのに、それではテストが失敗してしまいますから。
 
Renat Fatkhullin:

履歴を扱うのはOrderSelectと同様のOrderXXXXコマンドです。わからないふりをしないでください。特に、ライブラリを書いている場合は。

MQL4のことも忘れてはいませんし、そこでも履歴と連動しています。

200 000トレードの履歴スキャナを各ティックに 深く書き、ループから合理的に終了する条件を忘れていませんか?これを、「わざとロシア人男性を演じる」と言います。

あと、一部のダフ屋を参考にするのはやめましょう。ループはわざと書いたんです。そして、テスト開始から5日以内でも、数千億のOrderXXXXX関数のうち、99.99%は呼び出す必要のないものばかりをテストしました。

私は反論しません。MQL4に詳しいフォーラムユーザーの皆様には、この短いソースコードを見て、Renatが何を意味しているのか説明していただきたいと思います。

トレーディング、自動売買システム、ストラテジーテストに関するフォーラム

MT4-テスター VS MT5-テスター

fxsaber さん 2017.05.08 01:11

電子ブック

// Idea - https://www.mql5.com/ru/code/7464
#property strict

input int Shift = 3; 
input int Limit = 18;
input double Lots = 0.1;

int PriceToInteger( const double Price )
{
  return((int)(Price / _Point + 0.1));
}

void OnTick()
{
  static int PrevBid = PriceToInteger(Bid);
  static int PrevAsk = PriceToInteger(Ask);    

  const int IntBid = PriceToInteger(Bid);
  const int IntAsk = PriceToInteger(Ask);
  
  const bool TradeTime = (TimeCurrent() % (24 * 60 * 60) < D'1970.01.01 23:50'); // exclude swaps
  
  if (TradeTime && (IntAsk - IntBid < Limit))
  {
    if ((IntBid - PrevBid >= Shift)) 
      OrderSend(_Symbol, OP_SELL, Lots, Bid, 0, 0, 0);
    
    if (PrevAsk - IntAsk >= Shift) 
      OrderSend(_Symbol, OP_BUY, Lots, Ask, 0, 0, 0);
  }

  PrevBid = IntBid;
  PrevAsk = IntAsk;
  
  for (int i = OrdersTotal() - 1; i >= 0; i--) 
    if (OrderSelect(i, SELECT_BY_POS) && ((!TradeTime) || (OrderProfit() > 0) ||
        ((OrderType() == OP_BUY)  && (PriceToInteger(OrderOpenPrice()) - IntBid >= Limit)) ||
        ((OrderType() == OP_SELL) && (IntAsk - PriceToInteger(OrderOpenPrice()) >= Limit)))) 
      OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0); 
}

私の勘違いでしょうが、MT4のヒストリーワークの行方が見えません。よろしくお願いします。