Erreurs, bugs, questions - page 1613

 
Aleksandr Teleguz:
Bonjour. Pourriez-vous me dire s'il existe un analogue de la fonction iBarShift de mql4 dans le langage mql5? La fonction renvoie l'indice d'une barre par temps
Bars
 
Lorsque vous travaillez avec l'historique du compte Sélectionnez la période, si vous sélectionnez une semaine, tout l'historique est perdu, bien qu'il soit ...
 
Vladimir Pastushak:
Lorsque vous travaillez avec l'historique du compte Sélectionnez la période, si vous sélectionnez une semaine, tout l'historique disparaît, bien qu'il soit ...
Les rapports Office peuvent faire bien plus que cela.
 
Karputov Vladimir:
Les rapports Office peuvent faire bien plus que cela.
Je sais, mais ce qui est censé fonctionner dans le terminal ne fonctionne pas.
 
Vladimir Pastushak:
Je sais, mais dans le terminal, ce qui est censé fonctionner ne fonctionne pas.
Vous devriez donc être plus précis, le terminal est sombre...
 

Les données historiques prennent beaucoup d'espace (ce n'est pas une plainte, c'est un constat). Je dois utiliser plusieurs terminaux et chacun d'eux collecte des gigaoctets d'historique, et l'historique est dupliqué dans les dossiers du testeur et du terminal.

Peut-on mettre tous les fichiers d'historique dans un dossier et spécifier le dossier de référence dans les terminaux ? N'y aura-t-il pas de problèmes d'accès à l'histoire entre les différents terminaux ?

Suggestion aux développeurs :

Permet de sélectionner les dossiers de données historiques dans les paramètres du terminal.

 

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 est-elle un rudiment ?


 
Quel est l'intérêt d'avoirENUM_DEAL_PROPERTY_INTEGER::DEAL_TICKET si le seul endroit où il peut être appliqué est dans HistoryDealGetInteger(TicketDeal, DEAL_TICKET) ?
 
Si le disque dur a glissé, la compilation dans l'éditeur méta fonctionne - "reset" comme pour le lecteur EX5. Mais le testeur ne peut pas le ramasser. Rédige

2016.07.19 03:25:04     Tester  loading of C:\Program Files\MetaTrader 5\MQL5\Experts\Test.ex5 failed
2016.07.19 03:25:04     Test    invalid EX5 file (533)

Le terminal lui-même ne réveille pas le disque dur. Et s'il est réveillé par une action externe, le terminal donne toujours une erreur. Redémarrer le terminal aide.

Terminal        Microsoft Windows XP (X86 based PC), IE 08.00, Intel Core2 Duo  T7700 @ 2.40 GHz, RAM: 2867 / 3581 Mb, HDD: 20998 / 27784 Mb, GMT+02:00
Terminal        MetaTrader 5 build 1368 started (MetaQuotes Software Corp.)

 
Si une SellLimit dans le testeur est supprimée en raison de l'expiration ou de la fin du backtest, sa date d'expiration devient par erreur égale à la date de l'ordre en attente.

Si vous définissez la date d'expiration via TRADE_ACTION_MODIFY, elle n'est pas déclenchée dans le testeur.

Lecture
void OnInit()
{
  MqlTradeRequest Request = {0};

  Request.action = TRADE_ACTION_PENDING;
  
  Request.symbol = Symbol();
  Request.volume = 1;
  Request.price = SymbolInfoDouble(Symbol(), SYMBOL_ASK);
  
  Request.type = ORDER_TYPE_SELL_LIMIT;

  MqlTradeResult Result;
  
  if (OrderSend(Request, Result))
  {
    Request.action = TRADE_ACTION_MODIFY;
    Request.order = Result.order;
    
    Request.type_time = ORDER_TIME_SPECIFIED;
    Request.expiration = TimeCurrent() + 10000;
    
    if (OrderSend(Request, Result))
      if (OrderSelect(Request.order))
        Print("SetExpiration = " + (string)(datetime)OrderGetInteger(ORDER_TIME_EXPIRATION)); // установили дату экспирации        
  }
}

void OnDeinit( const int reason )
{  
  if (HistorySelect(0, TimeCurrent()))
  {
    const ulong Ticket = HistoryOrderGetTicket(0);
   
    if (Ticket > 0)
    {
      // Дата экспирации изменилась - стала равна дате установки ордера!
      Print("NowExpiration = " + (string)(datetime)HistoryOrderGetInteger(Ticket, ORDER_TIME_EXPIRATION));
     
      // При этом ордер по ранее установленной дате экспирации не удалился!     
      Print("DeleteTime = " + (string)(datetime)HistoryOrderGetInteger(Ticket, ORDER_TIME_DONE));
    }
  }
}