错误、漏洞、问题 - 页 1786

 
fxsaber:
如果OnCalculate被OnTick取代,就不会发生错误。问题不在于SymbolInfoTick,而在于指标没有正确设置为不跳过。
你做了多长时间的测量?而指标调校 与此有什么关系?当前刻度线的到达时间是10,上一个刻度线的到达时间是11。在函数中存在一个错误,没有返回当前值。你同意当前的时间值不能小于前一个时间值,对吗?
 
Alexey Kozitsyn:
测量花了多长时间?而这与设定指标 有什么关系?当前刻度线的到达时间是10,上一个刻度线的到达时间是11。这是一个函数的错误,没有返回当前值。你同意当前的时间值不能小于前一个时间值,对吗?

SymbolInfoTick在指标中的工作方式与在EA中的工作方式不同。

在一个指标中,它总是返回调用OnCalculate的起始点的tick。而指标中的这些启动点不应该被跳过--这是开发者的意识形态。问题是在形成这些小数点的队列中。

在EA中,OnTick中的SymbolInfoTick并不返回启动OnTick调用的tick,而是对当前状态进行全面请求。

在Si上测量了10分钟。

 
fxsaber:

SymbolInfoTick在指标中的工作方式与在EA中的工作方式不同。

在一个指标中,它总是返回调用OnCalculate的起始点的tick。而指标中的这些启动点不应该被跳过--这是开发者的意识形态。问题是在形成这些小数点的队列中。

在专家顾问中,OnTick中的SymbolInfoTick并不返回启动OnTick调用的tick,而是对当前状态进行完整的请求。

所以,蜱虫队列是倾斜的。在任何情况下,我们都需要理清指标方面的工作。看来,主要的重点是测试与专家顾问系统合作的功能。这是第一个。第二,你确定SymbolInfoTick()是一个同步函数吗?第三,即使SymbolInfoTick()没有问题,它仍然比CopyTicks()好用,因为它经常返回更多的实际值。总之,正如我之前所说的,有很多错误的蜱虫。而开发商则沉默不语...
 
fxsaber:

在Si上测量了10分钟。

那是非常少的。测量几个小时。在几种乐器上。
 
Alexey Kozitsyn:
第三,即使SymbolInfoTick()没有问题--它仍然比CopyTicks()好用,因为它经常返回更多最新的数值。
我曾遇到过这样的情况:CopyTicks返回的数据比调用LATER的SymbolInfoTick 更近。这就是为什么我同时用两个函数进行查询,并从中选择最近的刻度。
 
fxsaber:
捕捉到CopyTicks提供的数据比SymbolInfoTick调用的LATER更近的情况。这就是为什么我同时用两个函数进行查询,并从中选择最近的刻度。
我的测试调用SymbolInfoTick(),然后才调用CopyTicks()。总之,你认为这种行为是正确的,我不需要改变什么吗?
 
fxsaber:

SymbolInfoTick在指标中的工作方式与在EA中的工作方式不同。

在一个指标中,它总是返回调用OnCalculate的起始点的tick。而指标中的这些启动点不应该被跳过--这是开发者的意识形态。问题是在形成这些小数点的队列中。

在专家顾问中,OnTick中的SymbolInfoTick并不返回启动OnTick调用的tick,而是对当前状态进行完整的请求。

那么,与之相辅相成的是符合逻辑的。

OnCalculate( ..., const MqlTick& tick );

与造成这种情况的蜱虫,特别是因为它不需要任何费用。

SymbolInfoTick()函数 应该在指标和专家顾问中完全实现(它将返回当前价格,而不是调用OnCalculate 时的价格

 

MT4继续以不可预测的方式让人惊讶 ))谁来编写交易功能的实现?MT4 build 1045

让我们从幽默的信息开始,应该把它送给扎多诺夫,因为他总是在说愚蠢的美国人。

符号_交易_刻度线_值

价值 SYMBOL_TRADE_TICK_VALUE_PROFIT

符号_交易_点值_利润

不支持

符号_交易_点值_损失

不支持


同时SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_VALUE, tickValue)产生一个值。BUT!!!!!如果你把指标扔在图表上,在启动时是可以的。而且,如果你重新启动终端,这个函数将在第一次调用时返回真和零tickValue所以不要放松,专家顾问的开发者先生,一切都要亲手检查。

//переводит котировку в цену/1_лот в валюте депозита, например 0.00015 для EURUSD будет равно $15/лот
bool Quote2Price(double diff,double &price4lot,string symbol="EURUSD")
  {
   int dig=(int)MarketInfo(symbol,MODE_DIGITS);
   if(dig == 0)
      return(false); // symbol is none
   double tickSize = MarketInfo(symbol, MODE_TICKSIZE);   // пункт в валюте котировки (0,00001 для EURUSD на 5-знаке)
   //double tickValue = MarketInfo(symbol, MODE_TICKVALUE); // пункт в валюте депозита ($1 для EURUSD на 5-знаке)
   double tickValue;
   if(!SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_VALUE, tickValue)) // пункт в валюте депозита ($1 для EURUSD на 5-знаке)
      Print(__FUNCTION__, "  SymbolInfoDouble(...) returns false"); // всегда возвращается true!!
   Print("tickSize= ", tickSize, "  tickValue= ", tickValue);
   if(tickValue == 0.0) // исключений нет, терминал врет, надо тупо везде проверять на деление на ноль...
      return false;
   double price=diff/(tickSize/tickValue); // а то завалимся c  tickValue == 0
   price4lot=NormalizeDouble(price,2);
   return (true);
  }

退出。

2017.02.07 16:08:25.332 ShowImportantParams EURUSD.e,M15: tickSize= 1e-05 tickValue= 1.0

2017.02.07 16:08:25.332 ShowImportantParams EURUSD.e,M15: tickSize= 1e-05 tickValue= 1.0

2017.02.07 16:08:24.515 ShowImportantParams EURUSD.e,M15: tickSize= 1e-05 tickValue= 0.0

2017.02.07 16:08:23.037 ShowImportantParams EURUSD.e,M15: tickSize= 1e-05 tickValue= 0.0

2017.02.07 16:08:23.037 ShowImportantParams EURUSD.e,M15: 已初始化

2017.02.07 16:08:23.002 自定义指标 ShowImportantParams EURUSD.e,M15:加载成功


 
A100:

那就顺理成章地补充

OnCalculate( ..., const MqlTick& tick );

与叫它的虱子,特别是因为它不需要任何费用

SymbolInfoTick()函数 应该在指标和专家顾问中完全发挥作用(返回当前价格,而不是调用OnCalculate 时的价格

甚至可以顺理成章地加上当前队列中的勾股数量。
 
fxsaber:
甚至在当前队列中添加一个勾号也是有意义的。
你为什么需要一个打勾号?你只需要一个正确的流量,这个流量是正确给出的,而且可以被正确接收。