mql5言語の特徴、微妙なニュアンスとテクニック - ページ 29

 
アンドレイ・ディク

テストでは、分単位のデータの方が信頼性が高いとされています。

ミニッツバーは信頼性が高いのでしょうか?ティックデータは最後の手段ではないでしょうか?それが考慮されていないのに、なぜリアルティックのデータまで必要なのでしょうか?

以前は、分足でテストして、ティックでテストして、最終的な精度確認としてリアルティックでテストして、というように素朴にやっていたのですが。3つ目のチェックがあまり意味をなさないことが理解できました。


脚はここから伸びる

https://www.mql5.com/ru/forum/188047

Не совпадают цены тестера и CopyTicks, или неверная синхронизация?
Не совпадают цены тестера и CopyTicks, или неверная синхронизация?
  • www.mql5.com
Пытаюсь сделать мультивалютный советник,но с фьючами. Запускаем в тестере простой советник на ближнем фьюче,т.к. он более живой...
 
ウラジーミル・カルプトフ


文意を汲み取る必要はない。このフレーズはこんな風に聞こえます。

ご覧のように、操作しようとしなければ、参考文献を誤解していることに気づくはずです。

何も操作していないんです。ヘルプには、ミニッツバーが最も重要であることが明記されています。ティックデータがないため、ティックは分単位のバーに従って生成 されます。

私見ですが、分足TFは "Real ticks "モードでリアルティクから計算されるべきで、そうでなければこのモードの意味がありません。

 
アンドレイ・ディク

私見ですが、分足TFは "Real ticks "モードで実際のティックから形成されるべきで、そうでなければこのモードの意義はほとんどないと思います。


分履歴に方向付けられ、02.04.17から08.04.17まで実時刻を刻む事態に至る。

2017.04.08 18:06:17.780 сколько тиков (GOLD-9.17,H1)    Колво тиков за 2017.04.02 00:00:00 = 116844

そして、テスターは88の既存の分バーにのみティックを使用します。

2017.04.08 18:05:17.263 Core 1  GOLD-9.17,M1: 5918 ticks, 88 bars generated. Environment synchronized in 0:00:00.070. Test passed in 0:00:03.125 (including ticks preprocessing 0:00:00.070).
2017.04.08 18:05:17.263 Core 1  GOLD-9.17,M1: total time from login to stop testing 0:00:03.195 (including 0:00:02.944 for history data synchronization)
2017.04.08 18:05:17.263 Core 1  166135 total ticks for all symbols
2017.04.08 18:05:17.263 Core 1  GOLD-9.17: generate 5918 ticks in 0:00:00.020, passed to tester 5918 ticks
 
テスターログ
GOLD-6.17,H1: testing of Experts\fxsaber\Test2.ex5 from 2017.04.03 00:00 to 2017.04.08 00:00 started
GOLD-6.17 : real ticks begin from 2017.04.03 00:00:00
final balance 100000.00 EUR
GOLD-6.17,H1: 145777 ticks, 70 bars generated. Environment synchronized in 0:00:01.388. Test passed in 0:00:00.062 (including ticks preprocessing 0:00:00.031).

そして、実際のティックの数は以下の通りです。


こちらはMetaquotes-Demoです。

実際のティックは1週間で147700回であるのに対し、テスターの最も正確なモードでは145777回の種類不明のティックが表示されることが判明しました。

 
fxsaber
テスターログ

そして、実際のティックの数は以下の通りです。


こちらはMetaquotes-Demoです。

実際のティックは1週間で147700回であるのに対し、テスターの最も正確なモードでは未知のティックが145777回であることが判明したのです。


テスターはテスターに集中しているため、実際よりも少ない刻みで使用しています。

長いものには巻かれろ

 
kaus_bonus さん


M1バーがいくつか欠けており、その上にランドマークがあるため、テスターでは実際よりも少ないティック数で表示されます。

M1バーは、フリッパー価格があるときに形成されます。ない場合は、バーがありません。そして、その時にbid/askのティックがあったことは無視されます

つまり、テスターだけでなく、バーフォーミングのアルゴリズムにも問題があるのです。

先物のロングを見た方がいい、そっちの方が絵がはっきりしている。

まさにロングフューチャーでこの状況は、上に書いたように、最もよく起こることです。

おっしゃるとおり、もっとわかりやすく示しますと

GOLD-9.17,H1: testing of Experts\fxsaber\Test2.ex5 from 2017.04.03 00:00 to 2017.04.08 00:00 started
GOLD-9.17 : real ticks begin from 2017.04.03 00:00:00
final balance 100000.00 EUR
GOLD-9.17,H1: 5918 ticks, 39 bars generated. Environment synchronized in 0:00:00.032. Test passed in 0:00:00.046.

実際のティックは116844、最も精密なモードでのテスターのティックは5918です。20倍という控えめな数字。


SZY 同一テイクのテスターによるスキップが原因で、与えられた状況が展開されるという仮説に対する反証。

#include <TypeToBytes.mqh>

#define  TOSTRING(A) #A + " = " + (string)(A) + " "

void OnStart()
{
  MqlTick Ticks[];
  
  const int Amount = CopyTicksRange(_Symbol, Ticks, COPY_TICKS_ALL, D'2017.04.03' * 1000, D'2017.04.08' * 1000);
  
  int Count = 1;
  
  for (int i = 1; i < Amount; i++)
    if (_R(Ticks[i]) != Ticks[i - 1])
      Count++;
      
  Print(TOSTRING(Amount) + TOSTRING(Count));
}
結果
Test2 (GOLD-9.17,H1)    Amount = 116844 Count = 116840

同じダニを4匹だけ見逃すことができた。

 
MqlTickの文字列への変換

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

ライブラリ:Price_Compare

fxsaber さん 2016.10.19 17:18

string GetTickFlag( uint tickflag )
{
  string flag = "";

#define TICKFLAG_MACRO(A) flag += ((bool)(tickflag & TICK_FLAG_##A)) ? " TICK_FLAG_" + #A : "";
  TICKFLAG_MACRO(BID)
  TICKFLAG_MACRO(ASK)
  TICKFLAG_MACRO(LAST)
  TICKFLAG_MACRO(VOLUME)
  TICKFLAG_MACRO(BUY)
  TICKFLAG_MACRO(SELL)
#undef TICKFLAG_MACRO

  if (flag == "")
    flag = " FLAG_UNKNOWN (" + (string)tickflag + ")";
    
  return(flag);
}

#define TOSTRING(A) " " + #A + " = " + (string)Tick.A

string TickToString( const MqlTick &Tick )
{
  return(TOSTRING(time) + "." + (string)IntegerToString(Tick.time_msc %1000, 3, '0') +
         TOSTRING(bid) + TOSTRING(ask) + TOSTRING(last)+ TOSTRING(volume) + GetTickFlag(Tick.flags));
}

void OnStart()
{
  MqlTick Tick;
  
  if (SymbolInfoTick(_Symbol, Tick))
    Print(TickToString(Tick));
}
結果
time = 2017.04.07 23:58:18.000 bid = 110620.0 ask = 110640.0 last = 110630.0 volume = 1 TICK_FLAG_BID TICK_FLAG_ASK TICK_FLAG_LAST TICK_FLAG_VOLUME
 
fxsaber
MqlTickを文字列に変換する
結果

読めない

time = 2017.04.07 23:58:18.000 bid = 110620.0 ask = 110640.0 last = 110630.0 volume = 1 TICK_FLAG_BID TICK_FLAG_ASK TICK_FLAG_LAST TICK_FLAG_VOLUME
 
デニス・キリチェンコ

読めない

理解できない。私自身は、簡単な構造体や型、配列の印刷に使っています。

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

MetaEditor ビルド1463

fxsaber さん 2016.11.10 10:42

class PRINTCLASS
{
public:  
  template <typename T>
  static void MyPrint( const T &Value )
  {
    T Array[1];
    
    Array[0] = Value;
    
    ::ArrayPrint(Array, _Digits, NULL, 0, WHOLE_ARRAY, ARRAYPRINT_HEADER|ARRAYPRINT_LIMIT|ARRAYPRINT_ALIGN);
  }
  
  template <typename T>
  static void MyPrint( const T Value )
  {
    ::Print(Value);
  }

  template <typename T>
  static void MyPrint( const T &Value[] )
  {
    ::ArrayPrint(Value);
  }
};

#define Print(A) PRINTCLASS::MyPrint(A)

void OnStart()
{
  MqlTick Tick;
  
  if (SymbolInfoTick(_Symbol, Tick))
    Print(Tick);
}

結果
             [time]   [bid]   [ask]  [last] [volume]    [time_msc] [flags]
2017.04.07 23:58:18  110620  110640  110630        1 1491609498000      30

すべては目標次第です。
 
このトピックに関係のないコメントは、「MQL4に関する初心者の質問、アルゴリズムやコードに関するヘルプや議論」に移動しました。
理由: