错误、漏洞、问题 - 页 2687

 
Andrey Dik:

这里。

还有垫子计算模式。

那里也有1亿欧元的限制吗?

 
Andrey Khatimlianskii:

那里也有1亿欧元的限制吗?

还有

 
Andrey Kaunov:

总的来说,经纪人顽固地从论坛上删除了我的问题。第三次之后,他们在我的个人留言中回答了一些废话。

我没有得到经纪人的答复,但我不知道如何回答。


P.S. 他们在一个主题中留下了我的帖子,但没有回复或告别。

https://forum.alpari.com/index.php?/topic/

我在同一个经纪人那里交易。我也面临同样的问题。货币和黄金(以及指数)的区别在于SYMBOL_TRADE_MODE属性。

对于货币SYMBOL_TRADE_MODE = SYMBOL_CALC_MODE_FOREX,对于金属和指数SYMBOL_TRADE_MODE = SYMBOL_CALC_MODE_CFDLEVERAGE。

看来这个经纪人或SYMBOL_CALC_MODE_CFDLEVERAGE模式的平台不能正确计算SYMBOL_TRADE_TICK_VALUE_PROFIT和SYMBOL_TRADE_TICK_VALUE_LOSS属性。

所以你必须做一些额外的蹲点工作来计算SYMBOL_CALC_MODE_CFDLEVERAGE模式下的符号。我使用文档中的公式

利润:(close_price - open_price) * Contract_Size*Lots

.

下面是一个功能的例子,在这个经纪商根据开盘价、止损价和账户货币的最大损失来计算头寸量。它在Alpari上工作正常,我还没有在其他经纪商那里检查。

double calcVolume(double sl, double price, double maxLoss){
   ENUM_SYMBOL_CALC_MODE cm = si.TradeCalcMode();       // si - внешняя переменная CSymbolInfo из стандартной библиотеки
   double priceDiff = MathAbs(price - sl); 
   double ticks = priceDiff/si.Point();         
   double lots;
   string convertSymbol;
   string accountCurrency = AccountInfoString(ACCOUNT_CURRENCY);
   Print("SL ticks: ", ticks);
   switch(cm) {
      case SYMBOL_CALC_MODE_FOREX:      
         // это для валютных пар
         lots = maxLoss / ticks / si.TickValueLoss();
         break;
      case SYMBOL_CALC_MODE_CFDLEVERAGE: 
         // а эти танцы с бубном для металлов и индексов
         lots = maxLoss / priceDiff / si.ContractSize();
         if (si.CurrencyProfit() != accountCurrency) {
            // валюту прибыли конвертируем в валюту депозита
            convertSymbol = si.CurrencyProfit() + accountCurrency + SymbolSuffix;
            double convert = SymbolInfoDouble(convertSymbol, SYMBOL_BID);
            if (convert != 0) {
               Print("Convert currency1 to ", convertSymbol, " convert bid: ", convert);            
               lots = lots / convert;
            }
            else {
               convertSymbol = accountCurrency + si.CurrencyProfit() + SymbolSuffix;
               convert = SymbolInfoDouble(convertSymbol, SYMBOL_ASK);
               Print("Convert currency2 to ", convertSymbol, " convert ask: ", convert);            
               lots = lots * convert;
            }
         }
         break;
      default:
         Print("ERROR need support calc for: ", EnumToString(cm));
         lots = 0;
         break;
   }
   double floorLots = MathFloor(lots / si.LotsStep()) * si.LotsStep();
   Print("raw lots: ", lots, ", floorLots: ", floorLots, " diff: ", NormalizeDouble(100*floorLots/lots, 2), "%");
   return floorLots;
}
 
Alexey Rassvetnyy:

买入止损单和卖出止损单的工具提示中的利润/亏损计算不正确。

先生们,MQ,描述的缺陷是否已经修复?我们是否期望它在下一个版本中得到修复?

链接到关于该缺陷的原始帖子。

https://www.mql5.com/ru/forum/1111/page2670#comment_15391563

Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2020.03.11
  • www.mql5.com
Общее обсуждение: Ошибки, баги, вопросы
 
Andrey Dik:

还有

那就麻烦了。

 
在日志中得到了这个信息。
2020.03.29 20:58:28.061 SymbolClone (EURUSD,M1) Unknown runtime error in 'SymbolClone.mq5' (1,1)

要播放,在Debug中开始并达到断点。然后在终端(不是ME)改变配置文件 - SHIFT+F5。

 
Alexey Rassvetnyy:

与同一经纪人进行交易。面临同样的问题。货币和黄金(以及指数)的区别在于SYMBOL_TRADE_MODE属性。

对于货币SYMBOL_TRADE_MODE = SYMBOL_CALC_MODE_FOREX,对于金属和指数SYMBOL_TRADE_MODE = SYMBOL_CALC_MODE_CFDLEVERAGE。

看来这个经纪人或SYMBOL_CALC_MODE_CFDLEVERAGE模式的平台不能正确计算SYMBOL_TRADE_TICK_VALUE_PROFIT和SYMBOL_TRADE_TICK_VALUE_LOSS属性。

所以你必须做一些额外的蹲点工作来计算SYMBOL_CALC_MODE_CFDLEVERAGE模式下的符号。我使用文档中的公式

利润:(close_price - open_price) * Contract_Size*Lots

.

下面是一个功能的例子,在这个经纪商,它根据开盘价、止损价和账户货币的最大损失来计算头寸量。在Alpari,它工作正常,在其他经纪公司我还没有检查。


当然,这很好。但是,如果我可以而且应该使用标准的TICK VALUE函数,我为什么要走这条路呢?

也许开发者还是会注意到这个错误。

阿列克谢-拉斯韦特尼

先生们,MQ公司的代表们,这个缺陷是否已经修复?你期望在下一个版本中得到修复吗?

链接到关于该缺陷的原始帖子。

https://www.mql5.com/ru/forum/1111/page2670#comment_15391563

我也加入了这个问题。

以下是我的原帖https://www.mql5.com/ru/forum/351/page4#comment_15429966
Расчет TickValue и прибыли
Расчет TickValue и прибыли
  • 2010.09.26
  • www.mql5.com
На межбанке Equity постоянно меняется, если вы открыли и закрыли позицию с валютой прибыли не равной валюте счета (например, на USD-счете совершили сделку на USDJPY).
 
Andrey Khatimlianskii:

那就麻烦了。

对于毫秒级的任务来说,在代理上进行优化是没有意义的,最好是手动完成所有的事情,而不是在mql上。

 
Andrei Trukhanovich:

对于毫秒级的任务,在代理上进行优化是没有意义的,最好是手动操作,而不是在mql上。

即使你连接克劳德,给每个代理10-50-100万个包?

也许,是的,网络成本会毁掉所有的收益。

 
fxsaber:

mq5 - 正常。mq4 - 破损。你可以从这里 获取TypeToBytes_ExampleScript.mq4。 只有当扩展名改为mq5时才能编译。

2372 - 错误已被纠正,谢谢。