初学者的问题 MQL5 MT5 MetaTrader 5 - 页 658

 
Vladimir Karputov:
让我们用一个简单的顾问来检查一下...
没有必要去检查它。其逻辑与MQL4相同:利润、佣金和掉期是独立的实体。
 
fxsaber:
没有必要去检查。其逻辑与MQL4相同:利润、佣金和掉期是独立的实体。
请给我看代码,在mql5中的直接代码,最好是没有任何变态的。
 
Vladimir Karputov:
现在让我们用一个简单的EA检查一下...

弗拉基米尔,重点是,在四个我做这个。

// считаем комиссии и свопы в пипки
     swap=OrderSwap();
     commission=OrderCommission();
     if(swap+commission<0.0) {
      costs=NormalizeDouble(MathAbs(((swap+commission)/(SymbolInfoDouble(_symbol,SYMBOL_TRADE_TICK_VALUE)*ol))*_Point),_Digits);
     } else {
      costs=0.0;
     }
// прибавляем количество пипок
if(((Bid-(br+costs+((BreakevenStep*_Point)*D)))>=op) && typ==0)
{
  OrderModify(...);
}

你如何在5分钟内完成?

 
Vitaly Muzichenko:

弗拉基米尔,重点是,在四个我做这个。

// считаем комиссии и свопы в пипки
     swap=OrderSwap();
     commission=OrderCommission();
     if(swap+commission<0.0) {
      costs=NormalizeDouble(MathAbs(((swap+commission)/(SymbolInfoDouble(_symbol,SYMBOL_TRADE_TICK_VALUE)*ol))*_Point),_Digits);
     } else {
      costs=0.0;
     }
// прибавляем количество пипок
if(((Bid-(br+costs+((BreakevenStep*_Point)*D)))>=op) && typ==0)
{
  OrderModify(...);
}

你如何在5分钟内完成?

在开始时添加。
#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006
要么大量重写整个事情。
 
Vitaly Muzichenko:
请用代码展示一下,这里是mql5中的直接代码,最好不要 有变态的地方。
这几乎是不可能的!从SB中提取,直接编码
//+------------------------------------------------------------------+
//| Get the property value "POSITION_COMMISSION"                     |
//+------------------------------------------------------------------+
double CPositionInfo::Commission(void) const
  {
   return(PositionGetDouble(POSITION_COMMISSION));
  }
//+------------------------------------------------------------------+
//| Get the property value "POSITION_SWAP"                           |
//+------------------------------------------------------------------+
double CPositionInfo::Swap(void) const
  {
   return(PositionGetDouble(POSITION_SWAP));
  }
//+------------------------------------------------------------------+
//| Get the property value "POSITION_PROFIT"                         |
//+------------------------------------------------------------------+
double CPositionInfo::Profit(void) const
  {
   return(PositionGetDouble(POSITION_PROFIT));
  }
 
fxsaber:
这几乎是不可能的!从SB中提取,直接编码
//+------------------------------------------------------------------+
//| Get the property value "POSITION_COMMISSION"                     |
//+------------------------------------------------------------------+
double CPositionInfo::Commission(void) const
  {
   return(PositionGetDouble(POSITION_COMMISSION));
  }
//+------------------------------------------------------------------+
//| Get the property value "POSITION_SWAP"                           |
//+------------------------------------------------------------------+
double CPositionInfo::Swap(void) const
  {
   return(PositionGetDouble(POSITION_SWAP));
  }
//+------------------------------------------------------------------+
//| Get the property value "POSITION_PROFIT"                         |
//+------------------------------------------------------------------+
忘了写在文件里,但这个"POSITION_COMMISSION"是否有效?
 
new-rena:
忘了把它放在文档中,但这个"POSITION_COMMISSION"是否有效?
你要求的是没有变态的。如果和他们一起,那么

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

虫子,虫子,问题

fxsaber, 2016.07.19 12:40

POSITION_COMMISSION 属性在测试者(RoboForexEU-MetaTrader 5)中总是返回零佣金。

//+------------------------------------------------------------------+
//| Get the property value "POSITION_COMMISSION"                     |
//+------------------------------------------------------------------+
double CPositionInfo::Commission(void) const
  {
   return(PositionGetDouble(POSITION_COMMISSION));
  }

另外POSITION_COMMISSION(==8)在帮助和元编辑(高亮)中没有出现,但对编译器来说是熟悉的。使用另一种(工作)方法来确定职位佣金并不难。POSITION_COMMISSION属性--简陋?


这就是为什么它是这样的
double GetPositionCommission( void )
{
  double Commission = ::PositionGetDouble(POSITION_COMMISSION);

  // На случай, если POSITION_COMMISSION не работает
  if (Commission == 0)
  {
    const ulong Ticket = MT4ORDERS::GetPositionDealIn();

    if (Ticket > 0)
    {
      const double LotsIn = ::HistoryDealGetDouble(Ticket, DEAL_VOLUME);

      if (LotsIn > 0)
        Commission = ::HistoryDealGetDouble(Ticket, DEAL_COMMISSION) * ::PositionGetDouble(POSITION_VOLUME) / LotsIn;
    }
  }

  return(Commission);
}

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

初学者的问题

fxsaber, 2016.10.29 16:23

我没有强行使用MT4Orders库。但是,也许直接调用好的老的OrderCommission 会更容易一些?

不仅在套期保值账户上,在净值账户上也仍然有效。

 
Vladimir Karputov:
现在让我们用一个简单的专家顾问来检查一下...

这里:POSITION_PROFIT 显示头寸的利润

盈利

.它没有考虑到互换等问题。

 
Vitaly Muzichenko:

弗拉基米尔,重点是,在四个我做这个。

// считаем комиссии и свопы в пипки
     swap=OrderSwap();
     commission=OrderCommission();
     if(swap+commission<0.0) {
      costs=NormalizeDouble(MathAbs(((swap+commission)/(SymbolInfoDouble(_symbol,SYMBOL_TRADE_TICK_VALUE)*ol))*_Point),_Digits);
     } else {
      costs=0.0;
     }
// прибавляем количество пипок
if(((Bid-(br+costs+((BreakevenStep*_Point)*D)))>=op) && typ==0)
{
  OrderModify(...);
}

我如何在五天内做到这一点?

佣金是如此不可预测,只能在封闭的交易中确定。对于一个未结头寸,你只能找出当前的利润(既没有考虑掉期的影响,也没有考虑佣金的影响)和掉期。以下是代码。

在 "m_trade.PositionClose(Symbol(); "一行设置断点,并在历史上运行测试。当测试人员在断点处停止时,将利润和交换栏中的数字与测试人员日志中未写的数字进行比较。

附加的文件:
3.mq5  5 kb
 
Vladimir Karputov:

这里:POSITION_PROFIT 显示头寸的利润

.它没有考虑到互换等问题。

好的。我们得到了它。

fxsaber的 解决方案很好,我已经应用了。

基本上,我把我的MQL4程序转移到MQL5,几乎没有任何问题。

详细情况见上文。

非常感谢您!