Erreurs, bugs, questions - page 1862

 
fxsaber:

N'est-il pas logique de rechercher la dernière entrée de la même manière ?


Pourquoi ?

De temps en temps. Vous trouvez l'heure de départ, et ensuite vous allez élément par élément. Jusqu'au moment de la fin.

Cela aurait un sens si tous les enregistrements se trouvaient dans le même bloc de mémoire. Je vous ai déjà dit dans le servisdesk que les commandes et les transactions dans l'historique sont stockées dans des tableaux de blocs, de sorte qu'il n'y a pas de réaffectation de la mémoire, mais seulement une redistribution.

 
Slawa:

Pourquoi ?

De temps en temps. L'heure de début est trouvée, puis elle est copiée morceau par morceau. Jusqu'à la fin des temps.

Cela aurait un sens si tous les enregistrements se trouvaient dans le même bloc de mémoire. Je vous ai déjà dit dans le servisdesk que les ordres et les transactions dans l'historique sont stockés dans des tableaux de blocs, de sorte qu'il n'y a pas de réallocation de mémoire, seulement une redistribution.

Afin de copier par morceaux et non pas au coup par coup. C'est-à-dire que par une recherche binaire nous trouvons les deux index, puis un morceau du premier bloc, tous les blocs complètement jusqu'au dernier et le morceau restant jusqu'au dernier.
 
fxsaber:

L'organisation du travail d'histoire est très stressante. Le HFT dans le testeur est presque irréaliste.


Résolu de manière algorithmique.

Pour le HFT, vous n'avez pas besoin d'aller à l'historique à chaque fois. Préparer les informations nécessaires lors de l'initialisation et les tenir prêtes à être consultées très rapidement

 
Slawa:

La solution est algorithmique.

Pour le HFT, vous n'avez pas besoin d'aller dans l'historique à chaque fois. Préparer les informations nécessaires lors de l'initialisation et les tenir prêtes à être consultées très rapidement

Et découvrir comment le dernier poste a été fermé ?
 
fxsaber:

et a fait une demande au SR.

Je ne comprends pas pourquoi. Si vous voulez une discussion, faites-la ici. Ils n'enseignent pas la programmation au Service Desk
 
fxsaber:
Et découvrir comment la dernière position a été fermée ?

Pendant l'initialisation, allez une fois et souvenez-vous.

Enregistrez toutes les informations dont vous avez besoin par vous-même au cours du processus. Tous les outils sont là

 
Slawa:
Le pourquoi n'est pas clair du tout. Vous voulez une discussion, faites-la ici. Ils n'enseignent pas la programmation à Servicedesk.

Il m'est arrivé quelques fois que des développeurs, en raison de leur situation, passent à côté du message. Ça ne marche pas comme ça en SD.


Il ne s'agit pas du niveau des compétences en programmation. Et il n'est probablement pas mauvais pour moi en ce qui concerne MQL5. J'avance l'argument que travailler avec l'histoire est très lent et étrange, même en termes de logique d'utilisation. HistoryDealGet*- O(N). Pourquoi tout le monde a fait comme ça ? Pourquoi n'y a-t-il pas un accès normal à son histoire ?

 
Slawa:

Pendant l'initialisation, allez une fois et souvenez-vous.

Enregistrez toutes les informations dont vous avez besoin par vous-même au cours du processus. Tous les outils sont là

Non, je ne plaisante pas. Comment puis-je savoir que la position a fermé le TP ou le SL dans le testeur sans accéder à l'historique ?

Vous voulez mémoriser le TP/SL et vérifier sur le tick où la position est fermée, si elle satisfait le TP/SL-closing ? Qui satisfait - à ce niveau, le testeur a fermé avec une forte probabilité. N'est-ce pas ?

Et le bénéfice de la position fermée? - De la même manière ? Dans ce cas, cela revient à écrire votre propre testeur.

 
fxsaber:

Non, je ne plaisante pas. Comment savoir si une position a clôturé sur TP ou SL dans le testeur sans référence à l'historique ?

Suggérez-vous de mémoriser le TP/SL et de vérifier au tick, où la position est partie, si elle satisfait le TP/SL-closing ? Qui satisfait - à ce niveau, le testeur a fermé avec une forte probabilité. N'est-ce pas ?

Et le bénéfice de la position fermée? - De la même manière ? Dans ce cas, cela revient à écrire votre propre testeur.

Apparemment, je ne comprends pas quelque chose au HFT. Pour autant que je sache, lorsque vous négociez "très rapidement", vous ne vous souciez pas des transactions précédentes.
 
fxsaber:

ACCOUNT_PROFIT dans le testeur montre un non-sens.


J'ajouterai :

1. pour les instruments d'échange

Как следствие, неправильно оцениваются эквити, просадка и т.д.

De plus, la logique de l'Expert Advisor ne fonctionne pas correctement lorsque l'on se concentre sur le total des profits/pertes des positions.

Nous nous concentrons sur les valeurs ACCOUNT_PROFIT à la clôture.

2017.04.20 11:30:26.318 Core 1  2017.04.17 18:02:46   Профит = 333.01

À la clôture, le terminal recalcule le bénéfice, de sorte que vous vous retrouvez avec

fermer sur perte

2017.04.20 11:30:26.318 Core 1  2017.04.17 22:02:08   Профит = -338.66

par conséquent, nous avons

#include <Trade\PositionInfo.mqh>
#include <Trade\Trade.mqh>
//--- global variable
CPositionInfo  m_position;                   // trade position object
CTrade         m_trade;                      // trading object
input     string symb="GOLD-6.17";
input     string symb1="GOLD-9.17";
input     double  ТП  =333;
datetime date1;
double i1,ask1,ask2,bid1,bid2,last1,last2,profit;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
  double price1=SymbolInfoDouble(symb,SYMBOL_BID);
  double price2=SymbolInfoDouble(symb1,SYMBOL_BID);
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
Comment("");
   }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+

void OnTick()
  {
//---
      profit=AccountInfoDouble(ACCOUNT_PROFIT);
      Comment("ПРофит = ",profit);
     if(PositionsTotal()==0 )
     {
      m_trade.Buy(1.00,symb);
      m_trade.Buy(1.00,symb1);    
     }

   if( MathAbs(profit)>=ТП )
     {
      Print("Профит = ",profit);
     CloseAll();
     }

  }  
//+------------------------------------------------------------------+
void CloseAll()
  {
   for(int i=PositionsTotal()-1;i>=0;i--) // returns the number of open positions
      if(m_position.SelectByIndex(i))
         m_trade.PositionClose(m_position.Ticket());
  }
//+------------------------------------------------------------------+