mql5语言的特点、微妙之处以及技巧 - 页 29

 
安德烈-迪克

在测试中,分钟数据被认为是更可靠的。

分数条是否更可靠?打勾数据不是最后的手段吗?如果不考虑真实的蜱虫数据,我们为什么还需要它呢?

我曾经很天真地这样做:我在分钟条上测试,然后我在刻度上测试,然后在真正的刻度上作为最后的精度检查。现在我明白了,第三张支票并没有什么意义。


腿从这里开始生长

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

Не совпадают цены тестера и CopyTicks, или неверная синхронизация?
Не совпадают цены тестера и CopyTicks, или неверная синхронизация?
  • www.mql5.com
Пытаюсь сделать мультивалютный советник,но с фьючами. Запускаем в тестере простой советник на ближнем фьюче,т.к. он более живой...
 
弗拉基米尔-卡尔普托夫


没有必要断章取义。这句话听起来像这样。

正如你所看到的,如果你不试图操纵它,你会发现你误解了这个参考。

我并没有操纵任何东西。该帮助明确指出,分钟条是最重要的。由于缺乏tick数据--tick 根据分钟条生成的

在我看来,在 "实盘 "模式下,分钟TFs应该由实盘计算,否则这个模式就没有意义了。

 
安德烈-迪克

在我看来,分钟TF应该是在 "实数 "模式下由实数形成的,否则这个模式就没有什么意义了。


以分钟历史为导向,导致了从17年4月2日到17年4月8日的实际刻度的情况。

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。

事实证明,在这一周里,真实的ticks是147700,而测试仪在其最准确的模式下显示145777个未知类型的ticks。

 
fxsaber:
测试员日志

而这里是真实的刻度线的数量


这就是Metaquotes-Demo。

事实证明,在这一周内,真实的ticks是147700,而测试仪在其最准确的模式下给出了145777个未知ticks。


测试员使用的滴答声比现实中的少,因为它专注于它们。

最好看一下长线期货,那里的情况更清楚。

 
kaus_bonus:


有几个M1柱子不见了,由于地标在它们上面,测试仪使用的点数比实际要少。

当出现翻转价格时,就会形成M1条。如果没有,就没有酒吧。而当时有买价/卖价的事实却被忽略了!

因此,问题不仅出在测试员身上,也出在钢筋成型的算法上。

你最好看一下长线期货,那里的情况更清楚。

确切地说,在长线期货上这种情况,正如我在上面写的那样,最经常发生。

你是对的,我就更清楚地展示一下情况吧

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 build 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

这一切都取决于目标。