Questions des débutants MQL5 MT5 MetaTrader 5 - page 658

 
Vladimir Karputov:
Vérifions-le avec un simple conseiller...
Il n'y a pas besoin de le vérifier. La logique est la même que dans MQL4 : le profit, la commission et le swap sont des entités distinctes.
 
fxsaber:
Il n'y a pas besoin de vérifier. La logique est la même que dans MQL4 : le profit, la commission et le swap sont des entités distinctes.
S'il vous plaît, montrez-moi le code, le code direct dans mql5 et de préférence sans aucune perversion.
 
Vladimir Karputov:
Maintenant, vérifions avec une simple EA...

Vladimir, le fait est que sur les quatre, je fais ça :

// считаем комиссии и свопы в пипки
     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(...);
}

Comment le faire en cinq ans ?

 
Vitaly Muzichenko:

Vladimir, le fait est que sur les quatre, je fais ça :

// считаем комиссии и свопы в пипки
     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(...);
}

Comment le faire en cinq ans ?

Ajoutez au début.
#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006
Soit réécrire lourdement l'ensemble.
 
Vitaly Muzichenko:
S'il vous plaît montrez-le par code, voici un code direct en mql5 et de préférence sans perversions.
C'est presque impossible ! Tiré de SB, code direct
//+------------------------------------------------------------------+
//| 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:
C'est presque impossible ! Tiré de SB, code direct
//+------------------------------------------------------------------+
//| 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"                         |
//+------------------------------------------------------------------+
J'ai oublié de mettre dans la documentation, mais est-ce que cette"POSITION_COMMISSION" fonctionne ?
 
new-rena:
J'ai oublié de le mettre dans la documentation, mais est-ce que cette"POSITION_COMMISSION" fonctionne ?
Vous l'avez demandé sans perversions. Et si avec eux, alors

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading

Bugs, bugs, questions

fxsaber, 2016.07.19 12:40

La propriété POSITION_COMMISSION dans le testeur (RoboForexEU-MetaTrader 5) renvoie toujours une commission nulle.

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

De même, POSITION_COMMISSION (== 8) est absent de l'aide et du méta-éditeur (mise en évidence), mais est familier au compilateur. La commission de position n'est pas difficile à déterminer en utilisant une autre méthode (de travail). La propriété POSITION_COMMISSION - un rudiment ?


C'est pourquoi c'est comme ça
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);
}
Ou

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie

Questions des débutants

fxsaber, 2016.10.29 16:23

Je n'impose pas la bibliothèque MT4Orders. Mais peut-être serait-il plus simple de faire appel à la bonne vieille commission d'ordre?

Il fonctionne toujours non seulement sur les comptes de couverture mais aussi sur les comptes nets.

 
Vladimir Karputov:
Vérifions-le maintenant avec un simple Expert Advisor...

Ici :POSITION_PROFIT montre le profit de la position.

POSITION_PROFIT

. Il ne tient pas compte des échanges et autres.

 
Vitaly Muzichenko:

Vladimir, le fait est que sur les quatre, je fais ça :

// считаем комиссии и свопы в пипки
     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(...);
}

Comment le faire en cinq ?

La commission est si imprévisible qu'elle ne peut être déterminée que dans le cadre d'une transaction fermée. Pour une position ouverte, vous ne pouvez connaître que le bénéfice actuel (qui ne tient compte ni de l'impact du swap ni de celui des commissions) et le swap. Voici le code :

Placez un point d'arrêt sur la ligne " m_trade.PositionClose(Symbol() ;" et exécutez le test sur l'historique. Lorsque le testeur s'arrête au point d'arrêt, comparez les chiffres des colonnes Profit et Swap avec les chiffres non écrits dans le journal du testeur.

Dossiers :
3.mq5  5 kb
 
Vladimir Karputov:

Ici :POSITION_PROFIT montre le profit de la position.

. Il ne tient pas compte des échanges et autres.

Ok. Nous l'avons.

La solution de fxsaber est bonne, je l'ai appliquée.

En gros, j'ai transféré mon programme MQL4 vers MQL5 presque sans aucun problème.

Les détails sont décrits ci-dessus.

Merci beaucoup !

Raison: