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

 
lil_lil:

Merci.

Qu'est-ce qui ne va pas maintenant ?

J'ai suggéré de commencer avec HistorySelectByPosition et tu l'as poussé quelque part dans les ifs...

Il ne peut y avoir qu'une seule position par symbole dans un compte de compensation. Obtenir l'ID de la position, obtenir la liste des transactions impliquées dans la formation de cette position et les compter par direction de transaction et type d'ordre.

 
Alexey Kozitsyn:

Artyom, je vais répéter la question, répondez-y s'il vous plaît :


Je n'ai pas vu la question :)

Honnêtement - je ne me souviens pas, mais je pense que cela fonctionne dans MT5 - n'est-ce pas ?

Mais dans le testeur, je mettais les ordres en attente... Et j'ai travaillé avec la souris. Mais j'ai peut-être confondu et je travaillais avec la souris sur un vrai graphique et j'utilisais les boutons dans le testeur...

Je ne devinerai pas - j'ai démonté toute ma bibliothèque en petites vis il y a environ six mois, et je ne pourrai plus la vérifier rapidement. J'ai reporté sa reconstruction jusqu'à l'automne. Il est donc plus rapide de vérifier le fonctionnement du modèle d'événement OnChartEvent() dans le testeur. Mais je n'ai pas encore le temps pour cela - désolé :)

 
Artyom Trishkin:

Je n'ai pas vu la question :)

Honnêtement - je ne me souviens pas, mais je pense que cela fonctionne dans MT5 - n'est-ce pas ?

Mais j'ai mis les ordres en attente dans le testeur... Et j'ai travaillé avec la souris. Mais il se peut que j'ai confondu ma mémoire et que je travaillais avec la souris sur un vrai graphique et que j'utilisais des boutons dans le testeur...

Je ne devinerai pas - j'ai démonté toute ma bibliothèque en petites vis il y a environ six mois, et je ne pourrai plus la vérifier rapidement. J'ai reporté sa reconstruction jusqu'à l'automne. Il est donc plus rapide de vérifier le fonctionnement du modèle d'événement OnChartEvent() dans le testeur. Mais je n'ai pas encore le temps pour cela - désolé :)

Il y a tout le code de test :

switch( id )
{
default:
   Print( __FUNCTION__,": id = "+EnumToString( (ENUM_CHART_EVENT)id ) );
}

aucune réponse, malheureusement, dans le testeur. Dans la fonction OnChartEvent(). Appelé depuis le conseiller expert.

 
Alexey Kozitsyn:

Tout le code de test est là :

aucune réponse, malheureusement, dans le testeur. Dans la fonction OnChartEvent().

Et CHART_EVENT_MOUSE_MOVE=true est défini ?
 
Alexey Viktorov:

J'ai suggéré de commencer avec HistorySelectByPosition, mais tu l'as poussé quelque part au fond des ifs...

Dans un compte de compensation, il ne peut y avoir qu'une seule position par symbole. Obtenir l'ID de la position, obtenir la liste des transactions impliquées dans la formation de cette position et les compter par direction de transaction et type d'ordre.

Je l'ai fait, parce que je veux faire une fonction de comptage universelle, pour la compensation et la couverture, ou est-ce impossible ?

 
Artyom Trishkin:
Est-ce que CHART_EVENT_MOUSE_MOVE=true est défini ?

Non, mais il est peu probable que cela résolve le problème, puisque les touches ctrl, shift et autres ont été pressées... il n'y a pas eu de réaction.

 
lil_lil:

Je suis coincé parce que je veux faire une fonction de comptage universelle, pour la compensation et la couverture, ou est-ce impossible ?

C'est possible. Mais les approches sont différentes, et il faut d'abord les planifier correctement, plutôt que de tout jeter dans une seule ligne de code...

 
Alexey Kozitsyn:

Non, mais il est peu probable que cela résolve le problème, puisque les touches ctrl, shift et autres ont été pressées... Il n'y a pas eu de réaction.

Quoi qu'il en soit, je n'ai pas vraiment le temps d'expérimenter en ce moment - j'ai mes propres affaires à régler.

Peut-être que j'ai vraiment oublié. Mais j'ai fixé les limites de temps dans le testeur. C'est tout à fait probable - tout comme les boutons. Je sais aussi que je les règle avec la souris. Mais peut-être aussi sur une carte en direct...

 
Artyom Trishkin:

Probablement. Mais les approches sont différentes, et il faut d'abord les planifier correctement, plutôt que de tout jeter dans une seule ligne de code...

Je vais donc le faire séparément, pour l'instant.

Qu'est-ce que j'ai manqué ?

int GetNum(const string aSymbol)
  {
   int    count=0;
   if(PositionSelect(aSymbol))
     {
      long pos_id=long(PositionGetInteger(POSITION_IDENTIFIER));

      if(pos_id>0)
        {
         if(HistorySelectByPosition(ulong(pos_id)))
           {
            int deals=HistoryDealsTotal();

            for(int i=0; i<deals; i++)
              {
               ulong deal_ticket=HistoryDealGetTicket(i);
               ulong order_ticket=ulong(HistoryDealGetInteger(deal_ticket,DEAL_ORDER));

               if(order_ticket>0)
                 {
                  long deal_entry=long(HistoryDealGetInteger(deal_ticket,DEAL_ENTRY));

                  if(deal_entry==DEAL_ENTRY_IN)
                    {
                     if(m_position.PositionType()==POSITION_TYPE_SELL)
                       {
                        count++;
                       }
                    }
                 }
              }
            if( count > 0 ) return(count);
           }
         else
           {
            Print("Не возможно получить историю позиции по символу ",aSymbol);
           }
        }
      else
        {
         Print("Не возможно определить идентификатор позиции по символу ",aSymbol);
        }
     }
   return( 0 );
  }
////////////
 
D'abord, il compte correctement, puis, lorsque 5 VENTES limites sont activées, il en écrit 6 dans le commentaire. D'où vient le sixième ?
Raison: