Questions d'un "mannequin - page 137

 
alph:

Pourriez-vous me donner un code pour qu'un EA ferme une position après 5-6 heures ? Ou donnez-moi un lien.

Si vous êtes intéressé, essayez vous-même. Tout d'abord, à l'aide de la fonction PositionSelect(), vérifiez si une position est ouverte. Si c'est le cas, découvrez l'heure d'ouverture de la position en utilisant PositionGetInteger(POSITION_TIME) et vérifiez votre condition de 5-6 heures. Lorsqu'il est temps de fermer la position, vous découvrez le type de position (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE) et son volume PositionGetDouble(POSITION_VOLUME ). Ensuite, vous passez un ordre opposé avec le même volume. Vous pouvez voir un exemple de la méthode de fermeture de position dans MQL5\Include\Trade\Trade .mqh\PositionClose(const string symbol,ulong deviation=ULONG_MAX).

 
joo:
Merci, cela semble être ce dont nous avons besoin.

Pas vraiment.

Pour obtenir l'événement "clic de souris", il faut utiliser OnChartEvent(), mais il ne peut pas être utilisé dans les scripts, que dois-je faire ? Il n'y a donc pas de fonction universelle ?

 
joo:

Pas vraiment.

Pour obtenir l'événement "clic de souris", il faut utiliser OnChartEvent(), mais il ne peut pas être utilisé dans les scripts, que dois-je faire ? Il n'y a donc pas de fonction universelle ?

Utilisez ensuite GetKeyState + GetPosition + les coordonnées connues des objets graphiques.
 
sergeev:
Utilisez ensuite GetKeyState + GetPosition + les coordonnées connues des objets graphiques.

VinApi ?

C'est tout, j'ai perdu l'envie de faire une fonction universelle pour naviguer et sélectionner un fichier dans une liste (une sorte de mini gestionnaire de fichiers). :(

 
joo:

WINAPI ?

C'est tout, j'ai perdu l'envie de faire une fonction universelle pour naviguer et sélectionner un fichier dans une liste (une sorte de mini gestionnaire de fichiers). :(

pourquoi un script ? comment voulez-vous faire une fonction et attendre le choix de l'utilisateur pour plus d'un tick ?
 
sergeev:
pourquoi le script alors ?
Parce qu'il ne se soucie pas de savoir si les tiques tic-tac ou non.
 
Yedelkin:

Vous pouvez voir un exemple de méthode de clôture d'une position dans MQL5\Include\Trade\Trade.mqh\PositionClose(const string symbol,ulong deviation=ULONG_MAX).

Merci.

Mais jusqu'à présent, je ne suis pas en mesure de comprendre les cours, bien que ce que j'ai soit généralement dû au fait que j'ai vu quelque part et que j'ai compris.

 
joo:
parce qu'il ne se soucie pas de savoir si les tiques font tic-tac ou pas.
l'expert s'en moque aussi. pourquoi le scénario ?
 
alph:

Mais avec les cours, je n'arrive pas encore à m'y retrouver, même si ce que j'obtiens est généralement au prix d'une vision quelque part et d'un effort de compréhension.

Eh bien, toute méthode de classe est juste du code ordinaire. Essayez d'analyser ce code ici :

   MqlTradeRequest   m_request={0};         // request data
   MqlTradeResult    m_result={0};          // result data
   MqlTradeCheckResult m_check_result={0};  // result check data
   bool   partial_close=false;
   int    retry_count  =10;
   uint   retcode      =TRADE_RETCODE_REJECT;
  
     do
     {
      //--- checking
      if(PositionSelect(symbol))
        {
         if((ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
           {
            //--- prepare request for close BUY position
            m_request.type =ORDER_TYPE_SELL;
            m_request.price=SymbolInfoDouble(symbol,SYMBOL_BID);
           }
         else
           {
            //--- prepare request for close SELL position
            m_request.type =ORDER_TYPE_BUY;
            m_request.price=SymbolInfoDouble(symbol,SYMBOL_ASK);
           }
        }
      else
        {
         //--- position not found
         m_result.retcode=retcode;
         return(false);
        }
      //--- setting request
      m_request.action      =TRADE_ACTION_DEAL;
      m_request.symbol      =symbol;
      m_request.deviation   =(deviation==ULONG_MAX) ? m_deviation : deviation;
      m_request.type_filling=m_type_filling;
      m_request.volume      =PositionGetDouble(POSITION_VOLUME);
      //--- check volume
      double max_volume=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MAX);
      if(m_request.volume>max_volume)
        {
         m_request.volume=max_volume;
         partial_close=true;
        }
      else
         partial_close=false;
      //--- order check
      if(!OrderCheck(m_request,m_check_result))
        {
         //--- copy return code
         m_result.retcode=m_check_result.retcode;
         return(false);
        }
      //--- order send
      if(!OrderSend(m_request,m_result))
        {
         if(--retry_count!=0) continue;
         if(retcode==TRADE_RETCODE_DONE_PARTIAL)
            m_result.retcode=retcode;
         return(false);
        }
      retcode=TRADE_RETCODE_DONE_PARTIAL;
      if(partial_close) Sleep(1000);
     }
   while(partial_close);
 
sergeev:
donc l'expert s'en moque. pourquoi un script ?
Si ce n'est pas un script, toute la logique doit-elle être exécutée/appelée vers/depuis OnChartEvent() ?