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

 
traveller00:

建2280。交易所、期货市场。所有的历史记录都被加载,但测试是离线进行的。iBarShift在指标中的工作很奇怪。而同样的代码在脚本中运行良好。这是一个错误还是我错过了什么?

有这样一个代码。它基本上贯穿了市场回顾中的所有符号,并拉出了iBarShift。同样的代码在脚本中运行良好。该指标对所有的符号都产生-1,除了当前的符号(在它运行的图表上),错误是没有历史记录。同时,在第二次运行时,它加载历史记录并正常显示。

指标中数据的可用性是不保证的,所以你应该检查数据检索的成功率。如果失败了,就在OnCalculate 中重试。在OnInit 中引用数据并不是一个好主意。


#property indicator_separate_window

void OnInit()
{
}

int OnCalculate(const int rates_total,const int prev_calculated,const datetime& time[],const double& open[],const double& high[],
  const double& low[],const double& close[],const long& tick_volume[],const long& volume[],const int& spread[])
{
  static bool printed = false;
  
  if( !printed ){
    printed = TryToPrint();
  }
  return 0;
}

bool TryToPrint(){


  datetime Time[];
  ArraySetAsSeries(Time, true);
  Print("try");
  if( CopyTime(_Symbol,_Period,0,1,Time) != 1 )return false;

  int Shift=iBarShift(_Symbol,_Period,Time[0]);
  
  bool fail = false;
  if( Shift < 0 )fail = true; 
  string toprint = "Symbol="+_Symbol+", Shift="+(string)Shift;
  
  

  for(int i=0;i!=SymbolsTotal(true);++i)
  {
    const string SymbName=SymbolName(i,true);
    Shift=iBarShift(SymbName,_Period,Time[0]);
    
    if( Shift < 0 )fail = true;
    toprint = toprint + "\r\n" + "Symbol="+SymbName+", Shift="+(string)Shift;

  }
  if( !fail ) Print( toprint );
  
  return !fail;
}
 

服务器名称并不总是显示在缓存记录中。


 
在tst格式中,交易/订单的时间只以秒为单位(数据时间)。没有毫秒之分。
 
这样的EA不生成tst文件,这是否正确?
input int i = 0;

void OnInit() {}


必须满足什么条件才能创建一个单程缓存?

 
fxsaber:
这样的EA不生成tst文件,这是否正确?


必须满足什么条件才能创建一个单通缓存?

是的,正确。

如果没有交易,tst文件就不会被保存。

 
Slava:

是的,这是正确的。

如果没有交易,tst文件就不会被保存。

谢谢你。

 
我将重复我的问题(显然它被丢失了)。

开发人员,有一个问题要问你。是否可以定制遗传算法的 参数?例如,设置停止和突变标准?

我经常遇到这样的情况:在达到极值之前就出现了停止。

还有一个问题。你是否打算实现其他方法,例如模拟退火?

 
大家好,从mt4切换到mt5,不明白如何在测试器中保存设置文件。请您提供建议。只能找到如何保存ini和opt的方法。
 

我在测试器中运行机器人。我在某一符号上进行交易。我通过OnTimer输入,并从SymbolInfoTick中获取报价。

如果我使用不同的符号(当我在同一符号上交易时),那么由于某些原因,我的结果会有很大的不同。可能有人遇到过这个问题?我目前正在更详细地研究这种行为。

PS。每一个刻度 都是基于真实的刻度,完美的执行,没有任何延迟。
 

我已经明白了。如果你有兴趣,为了节省CPU资源,我在OnTimer中检查TimeCurrent,如果它在上次更新后没有变化,就不需要做什么。如果没有报价,状态是一样的。如果你跟踪交易时段,这是一个非常消耗的操作。

对于多个符号来说,一切工作正常。但当他们只有两个人的时候--一切都取决于报价,而报价的到来和开始转移开仓的时间和其他事情。因此,策略测试器中 的结果是不同的。

PS。一般来说,我将通过SymbolInfoTick 单独检查符号状态