Erreurs, bugs, questions - page 1916

 

comment obtenir un événement à partir d'un autre graphique où EA n'est pas installé ?

ps. tout est résolu, j'ai oublié d'envoyer un message de diffusion ;))
 

Une demande aux développeurs.

J'ai un truc tellement drôle. J'ai l'habitude de démarrer après l'optimisation et de modifier quelques paramètres dans mon conseiller expert par habitude dans MT4.

Le problème est que si j'ai testé la stratégie pendant quelques heures et que je ne suis pas passé de l'optimisation, les résultats sont perdus.

Puis-je modifier l'option de test unique comme dans MT4 ?

Merci d'avance.

 
Dans le testeur de stratégie, dans la visualisation, l'historique actuel s'ouvre avec un retard (à partir de la deuxième transaction), jusqu'à ce que vous passiez aux transactions ou aux ordres et inversement, ou après 1-2 transactions, il est mis à jour.
 
Anton Ohmat:
Dans le testeur de stratégie, dans la visualisation, l'historique actuel s'ouvre avec un retard (à partir de la deuxième transaction), jusqu'à ce que vous passiez aux transactions ou aux ordres et inversement, ou après 1-2 transactions, il est mis à jour.

Réglez la vitesse de rembobinage sur moins trois pas de la vitesse maximale. De plus, vous avez probablement sorti "Commentaire" sur le graphique - "Commentaire" gèle toujours les informations de mise à jour dans le testeur à des vitesses de rembobinage proches du maximum.


 
Anton Ohmat:
Dans la visualisation de la stratégie dans le testeur de stratégie, l'historique actuel est ouvert avec un délai (à partir de la deuxième transaction), jusqu'à ce que vous passiez aux transactions ou aux ordres et inversement, ou dans 1-2 transactions, il est mis à jour.

Il y a une demande(pas de réponse)

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

Bugs, bugs, questions

fxsaber, 2017.06.07 22:33

L'interface graphique de l'environnement de trading lors du débogage sur l'historique (curseur de vitesse - maximum) ne correspond pas à la réalité
#include <Trade\Trade.mqh>

input int Interval = 3600;
input int AmountLastDeals = 5;
input double Lots = 1;

double CorrectLot( const double Lot )
{
  static const double StepVol = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_STEP);
  static const double MaxVol = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MAX);
  static const double MinVol = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN);
  
  const double Vol = StepVol * (int)(Lot / StepVol + 0.5);
  
  return((Vol < MinVol) ? MinVol : ((Vol > MaxVol) ? MaxVol : Vol));
}

void OnTick()
{
  static CTrade Trade;
  static CDealInfo Deal;
  static CPositionInfo Position; 

  if (!Position.Select(_Symbol))
  {
    if (HistorySelect(0, TimeCurrent()))
    {
      const int Total = HistoryDealsTotal() - 1;

      double SumProfit = 0;
      double SumLots = 0;

      for (int i = Total, Count = 0; (i >= 0) && (Count < AmountLastDeals); i--)
        if (Deal.SelectByIndex(i) && (Deal.Entry() == DEAL_ENTRY_OUT))
        {        
          SumProfit += Deal.Profit() * (AmountLastDeals - Count) / AmountLastDeals;
          SumLots += Deal.Volume() * (AmountLastDeals - Count) / AmountLastDeals;
          
          Count++;
        }

      if (Total == 2)
      {
        string Str;
        
        for (int i = Total; i >= 0; i--)
          if (Deal.SelectByIndex(i))
            Print(Deal.FormatDeal(Str));
        
        DebugBreak();
      }

      if ((Total >= 0) && Deal.SelectByIndex(Total) && (Deal.DealType() == DEAL_TYPE_SELL))
        Trade.Sell((SumProfit >= 0) ? Lots : CorrectLot(SumLots));
      else
        Trade.Buy((SumProfit >= 0) ? Lots : CorrectLot(SumLots));
    }       
  }
  else if (TimeCurrent() - Position.Time() >= Interval)
    Trade.PositionClose(_Symbol);
}
Journal au moment du DebugBreak
2017.06.07 23:29:03.554 EURUSD : real ticks begin from 2017.04.10 00:00:00
2017.06.07 23:29:03.564 2017.04.10 00:00:00   instant buy 1.00 EURUSD at 1.05918 (1.05885 / 1.05918)
2017.06.07 23:29:03.564 2017.04.10 00:00:00   deal #2 buy 1.00 EURUSD at 1.05918 done (based on order #2)
2017.06.07 23:29:03.564 2017.04.10 00:00:00   deal performed [#2 buy 1.00 EURUSD at 1.05918]
2017.06.07 23:29:03.564 2017.04.10 00:00:00   order performed buy 1.00 at 1.05918 [#2 buy 1.00 EURUSD at 1.05918]
2017.06.07 23:29:03.566 2017.04.10 00:00:00   CTrade::OrderSend: instant buy 1.00 EURUSD at 1.05918 [done at 1.05918]
2017.06.07 23:29:03.569 2017.04.10 01:00:00   instant sell 1.00 EURUSD at 1.05833 (1.05833 / 1.05845 / 1.05831)
2017.06.07 23:29:03.569 2017.04.10 01:00:00   deal #3 sell 1.00 EURUSD at 1.05833 done (based on order #3)
2017.06.07 23:29:03.569 2017.04.10 01:00:00   deal performed [#3 sell 1.00 EURUSD at 1.05833]
2017.06.07 23:29:03.569 2017.04.10 01:00:00   order performed sell 1.00 at 1.05833 [#3 sell 1.00 EURUSD at 1.05833]
2017.06.07 23:29:03.570 2017.04.10 01:00:00   CTrade::OrderSend: instant sell 1.00 EURUSD at 1.05833 [done at 1.05833]
2017.06.07 23:29:03.570 2017.04.10 01:00:00   #3 sell 1.00 EURUSD at 1.05833
2017.06.07 23:29:03.570 2017.04.10 01:00:00   #2 buy 1.00 EURUSD at 1.05918
2017.06.07 23:29:03.570 2017.04.10 01:00:00   CSymbolInfo::CheckMarketWatch: Unknown symbol ''
2017.06.07 23:29:03.570 2017.04.10 01:00:00   #1 balance 100000.00 []
Capture d'écran


La dernière transaction n'est pas affichée dans le GUI. Reproduit sur 1596-1606.

 
fxsaber:

Un formulaire de demande est accroché dans le BOD

Il a déjà été dit à maintes reprises qu'à la vitesse maximale du curseur du testeur visuel, il ne faut pas chercher la vérité. Le gui est bloqué à 100% et empêche la mise à jour de nombreux composants (principalement les contrôles de feuilles)
 
Slava:
Il a déjà été dit à maintes reprises qu'à la vitesse maximale du curseur du testeur visuel, il ne faut pas chercher la vérité. Le Gui est bloqué à 100% et ne permet pas à de nombreux composants (principalement les contrôles de feuilles) de se mettre à jour

Le CD parle du débogage avec une lecture à 100%.

 
Slava:
On a déjà dit à plusieurs reprises qu'au maximum du curseur de vitesse du testeur visuel, il ne faut pas chercher la vérité. Le gui est bloqué à 100% et ne permet pas à de nombreux composants (principalement les leaf-controls) de se mettre à jour.
La vitesse n'est pas maximale. En pause. Lorsque vous appuyez sur f12, ceci se produit. Lorsque vous relâchez la touche f12, rien ne se passe - l'historique n'est pas mis à jour.
 
Anton Ohmat:
La vitesse n'est pas maximale. En pause. Lorsque vous appuyez sur f12, cela se produit. Lorsque vous relâchez la touche f12, rien ne se passe - l'historique n'est pas mis à jour.

Définissez la vitesse à moins trois pas du maximum - sinon les mises à jour de l'interface ne sont pas garanties.

 

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

Bugs, bugs, questions

fxsaber, 2017.06.15 10:08

Pourquoi compile-t-il ?
class A {};

class B : public A
{
public:  
  int i;
};

void OnStart()
{
  A* a = new B;
  
  ((B*)a).i = 1;
  
  dynamic_cast<B*>(a).i = 1;
  
  delete a;
}
Support Team 2017.06.29 12:04
Pourquoi ne devrait-il pas compiler ?

A est l'ancêtre de B, donc la conversion peut être valide, la validité est vérifiée et si la conversion d'objet n'est pas possible, une exception est levée et le programme MQL se termine.

Contrairement à la conversion explicite, dynamic_cast ne lève pas d'exception mais renvoie NULL à la place, auquel cas le programme poursuit son exécution.