MetaTrader 5策略测试器:缺陷,缺陷,改进建议 - 页 48

 

为了在点数模式中获得圣杯,用一个标记来关闭整个头寸量 的亏损头寸,用0.01手来关闭盈利的头寸。

例子。

#include <MT4Orders.mqh>

#define  Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

const bool Init = EventSetTimer(100);

void OnTimer()
{
  while (OrdersTotal())
    if (OrderSelect(0, SELECT_BY_POS))
      OrderClose(OrderTicket(), (OrderProfit() > 0) ? 0.01 : OrderLots(), OrderClosePrice(), 0);
      
  OrderSend(_Symbol, OP_BUY, 1, Ask, 0, 0, 0);
}


结果

 

关于交易、自动交易系统和策略测试的论坛

图书馆:SingleTesterCache

fxsaber, 2020.01.12 23:20

当前版本的tst-format不包含以下数据

  • 时间,以毫秒计。
  • PositionID。
  • 魔法号码。
这就对使用场景进行了限制。
 

关于交易、自动交易系统和策略测试的论坛

图书馆:SingleTesterCache

fxsaber, 2020.01.13 00:01

重复播放多个错误。我们在一个对冲账户上启动策略测试器中的专家顾问。

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

#define  Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

#define  PAUSE 100000

void OnTick()
{
  static bool FirstRun = true;
  
  if (FirstRun)
  {
    OrderSend(_Symbol, OP_BUY, 1, Ask, 0, 0, 0);
    Sleep(PAUSE);
    
    OrderSend(_Symbol, OP_BUY, 2, Ask, 0, 0, 0);
    Sleep(PAUSE);

    if (OrderSelect(0, SELECT_BY_POS))
      OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0);
    Sleep(PAUSE * 2);
    
    if (OrderSelect(0, SELECT_BY_POS))
      OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0);
    Sleep(PAUSE * 2);

    TesterWithdrawal(100);    
    
    FirstRun = false;
  }
}

void OnDeinit( const int )
{
  const int Total = OrdersHistoryTotal();
  
  for (int i = 0; i < Total; i++)
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
    {
      OrderPrint();
      
      Print(OrderTicketID()); // MT5-PositionID
    }
}


我们得到以下结果

2020.01.08 23:59:58   #1 2020.01.01 00:00:00 balance 0.00 0.00000 0.00000 0.00000 2020.01.01 00:00:00 0.00000 0.00 0.00 100000.00 0
2020.01.08 23:59:58   0
2020.01.08 23:59:58   #4 2020.01.02 06:00:00 buy 1.00 EURUSD 1.12137 0.00000 0.00000 2020.01.02 06:03:20 1.12132 -3.56 0.00 -4.46 0
2020.01.08 23:59:58   2
2020.01.08 23:59:58   #5 2020.01.02 06:01:40 buy 2.00 EURUSD 1.12137 0.00000 0.00000 2020.01.02 06:06:40 1.12129 -7.14 0.00 -14.27 0
2020.01.08 23:59:58   3
2020.01.08 23:59:58   #6 2020.01.02 06:10:00 balance 0.00 0.00000 0.00000 0.00000 2020.01.02 06:10:00 0.00000 0.00 0.00 -100.00 withdrawal 0
2020.01.08 23:59:58   0


然后我们用脚本读取相应的tst文件。

#include <fxsaber\SingleTesterCache\SingleTesterCache.mqh> // https://www.mql5.com/ru/code/27611
#include <fxsaber\MultiTester\MTTester.mqh> // https://www.mql5.com/ru/code/26132

void OnStart()
{  
  uchar Bytes2[];
  
  if (MTTESTER::GetLastTstCache(Bytes2) != -1) // Если получилось прочитать последнюю кеш-запись одиночного прогона
  {
    const SINGLETESTERCACHE SingleTesterCache(Bytes2); // Загоняем ее в соответствующий объект.

    for (int i = 0; i < ArraySize(SingleTesterCache.Positions); i++)
      Print(SingleTesterCache.Positions[i].ToString());
  }
}


它将打印位置上的数据

id = 0
mfe = 0.0
mae = -8.029999999999999
profit = -4.46
lifetime = 00:03:20

id = 0
mfe = 0.0
mae = -21.4
profit = -14.27
lifetime = 00:05:00

id = 0
mfe = 0.0
mae = 0.0
profit = 0.0
lifetime = 00:00:00


如果我们比较这个帖子中的所有内容,我们会看到以下错误。

  • 零ID,而不是正确的ID。
  • 计算利润时不考虑佣金和互换。
  • 退出交易被错误地包括在关闭交易头寸的数量中。

 

调试器的功能不全。与标准调试器相比,缺少什么,按缺点降序排列。

1.记忆修改。你可以查看变量,但编辑似乎是不可能的。

2.条件性断点。比如如果变量test=10就停止。

3.有可能移动执行。换句话说,你可以直接点击某一行,告诉它从那里执行。换句话说,点击一条线,然后说:"现在从这里跑"。

4. 已经运行的脚本/顾问/指标的附件。或者至少能够在崩溃时附上,这样就容易分析了。

 
traveller00:

调试器的功能不全。与标准调试器相比,缺少什么,按缺点降序排列。

2.条件性断点。比如如果变量test=10就停止。

if (smth) {

    int a;

}
 
是的,我同意,通过重新组装,你几乎可以达到任何目的。第4点除外。4.但我还是希望在调试器中看到它,因为它是调试器的一套标准函数。
 

关于交易、自动交易系统和策略测试的论坛

图书馆:SingleTesterCache

fxsaber, 2020.01.14 10:49

我现在使用tst-files而不是set-files。你可以在它们之间快速切换,不仅有输入参数,还有完整的回测。

遗憾的是,由于tst中缺乏毫秒级的数据,我们现在无法将不同的TS组合成一个完整的组合。


我希望开发者将开始最大限度地使用现有的领域。

INT64             TradeDeal::time_create;             // время создания записи

INT64             TradeOrder::time_setup;             // время приёма ордера от клиента в систему
INT64             TradeOrder::time_done;              // время снятия завки

通过将时间值以毫秒而不是秒的形式写在那里。


一般来说,在实践中我们无法展示使用tst的所有酷,因为tst有一些轻微的缺点。这一点可以 得到纠正。

 


报告中出现了TesterWithdrawal,但TesterDeposit却不见了。

 
如何理解这幅画。优化图 显示了5000左右的高峰值。但在优化表中,最大值为4670。最佳通行证的参数在哪里?
附加的文件:
8c97so2_7-1.jpg  184 kb
 
Grozir:
如何理解这幅画。优化图 显示了5000左右的高峰值。而在优化表中,最大值为4670。最佳通行证的参数在哪里?

对 "结果 "栏进行排序。