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

 

Comment ajouter des minutes au bloc d'heures du conseiller ?

//input parametrs
input uchar                InpStartHour            = 1;           // Start hour
input uchar                InpEndHour              = 23;           // End hour

//---------------------------

void OnTick()
  { 
   MqlDateTime STimeCurrent;
   TimeToStruct(TimeCurrent(),STimeCurrent);
  
   if(STimeCurrent.hour<InpStartHour || STimeCurrent.hour>InpEndHour)
      return;
   }

 
Vladimir Baskakov:

Comment ajouter des minutes au bloc horaire d'un EA ?

Stratégie High Low On Time 2 :

Le bool TimeControl() est une fonction chargée de vérifier l'heure. Il peut fonctionner dans deux états : les dates dans un jour ou les dates sur un jour.

//--- input parameters
***
input bool     InpTimeControl       = true;        // Use time control
input uchar    InpStartHour         = 10;          // Start Hour 
input uchar    InpStartMinute       = 01;          // Start Minute 
input uchar    InpEndHour           = 15;          // End Hour 
input uchar    InpEndMinute         = 02;          // End Minute 
***
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(!TimeControl())
      return;
  }
//+------------------------------------------------------------------+
//| TimeControl                                                      |
//+------------------------------------------------------------------+
bool TimeControl(void)
  {
   if(!InpTimeControl)
      return(true);
   MqlDateTime STimeCurrent;
   datetime time_current=TimeCurrent();
   if(time_current==D'1970.01.01 00:00')
      return(false);
   TimeToStruct(time_current,STimeCurrent);
   if((InpStartHour*60*60+InpStartMinute*60)<(InpEndHour*60*60+InpEndMinute*60)) // intraday time interval
     {
/*
Example:
input uchar    InpStartHour      = 5;        // Start hour
input uchar    InpEndHour        = 10;       // End hour
0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15 16 17 18 19 20 21 22 23 0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15
_  _  _  _  _  +  +  +  +  +  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  +  +  +  +  +  _  _  _  _  _  _
*/
      if((STimeCurrent.hour*60*60+STimeCurrent.min*60>=InpStartHour*60*60+InpStartMinute*60) && 
         (STimeCurrent.hour*60*60+STimeCurrent.min*60<InpEndHour*60*60+InpEndMinute*60))
         return(true);
     }
   else if((InpStartHour*60*60+InpStartMinute*60)>(InpEndHour*60*60+InpEndMinute*60)) // time interval with the transition in a day
     {
/*
Example:
input uchar    InpStartHour      = 10;       // Start hour
input uchar    InpEndHour        = 5;        // End hour
0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15 16 17 18 19 20 21 22 23 0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15
_  _  _  _  _  _  _  _  _  _  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  _  _  _  _  _  +  +  +  +  +  +
*/
      if(STimeCurrent.hour*60*60+STimeCurrent.min*60>=InpStartHour*60*60+InpStartMinute*60 || 
         STimeCurrent.hour*60*60+STimeCurrent.min*60<InpEndHour*60*60+InpEndMinute*60)
         return(true);
     }
   else
      return(false);
//---
   return(false);
  }
 

Veuillez me conseiller,

Dans MQL5, je dois fermer la moitié d'une position, mais je dois vérifier si la moitié de la position est inférieure au lot minimum et ensuite fermer le volume entier, est-ce correct ?

double volume=MathMax(PositionGetDouble(POSITION_VOLUME)/2,SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN)/AccountInfoInteger(ACCOUNT_LEVERAGE));
 
Evgeny Dyuka:

Veuillez me conseiller,

Dans MQL5, je dois fermer la moitié d'une position, mais je dois vérifier si la moitié de la position est inférieure au lot minimum, puis fermer l'ensemble du volume, est-ce correct ?

Peut-être est-il plus facile de vérifier avant de diviser, si le lot est inférieur à 2x le minimum, alors il n'y a pas besoin de déranger le terminal ?

 

Je ne peux pas passer le test pour le marché, il renvoie une erreur, mais il n'y a pas d'erreur dans le rapport.

Que faire ?


 
Evgeny Dyuka:

Je ne peux pas passer le test pour le marché, il renvoie une erreur, mais il n'y a pas d'erreur dans le rapport.

Que faire ?


Veuillez réessayer plus tard.
 

Comment puis-je obtenir le prix de clôture d'un ordre (transaction, position - tout ce que vous voulez) ?

Pour les commandes, seul ORDER_PRICE_OPEN est disponible, mais ORDER_PRICE_CLOSE ne l'est pas.

Les postes n'ont que POSITION_PRICE_OPEN.

Les métiers n'ont rien d'abstrait du tout : DEAL_PRICE.

J'ai cherché sur le forum, je ne l'ai pas trouvé.

 
secret:

Comment puis-je obtenir le prix de clôture d'un ordre (transaction, position - tout ce que vous voulez) ?

Pour les commandes, seul ORDER_PRICE_OPEN est disponible, mais ORDER_PRICE_CLOSE ne l'est pas.

Les postes n'ont que POSITION_PRICE_OPEN.

Les métiers n'ont rien d'abstrait du tout : DEAL_PRICE.

J'ai cherché dans le forum, je ne l'ai pas trouvé.

Pour faciliter la compréhension et le travail dans MQL5 :

1. ***

2. Si vous avez besoin d'un prix de clôture, vous ne pouvez pas vous passer d'accéder à l'historique des transactions. LeHistorySelect est responsable de la demande de l'historique des transactions.

3. L'exemple de travail avec l'historique, avec sortie de l'information soit dans un fichier, soit dans l'onglet "Experts", se trouve dans le codeHistorique des transactions et des commandes.

Pour comprendre de quoi il s'agit, vous devez savoir

ENUM_DEAL_ENTRY-sens de la transaction - entrée sur le marché, sortie du marché ou retournement de tendance

ENUM_DEAL_ENTRY

Identifiant

Description

DEAL_ENTRY_IN

Entrée sur le marché

DEAL_ENTRY_OUT

Sortie du marché

DEAL_ENTRY_INOUT

Demi-tour

DEAL_ENTRY_OUT_BY

Fermer le comptoir


ENUM_DEAL_TYPE-Type de transaction

ENUM_DEAL_TYPE

Identifiant

Description

DEAL_TYPE_BUY

Acheter

DEAL_TYPE_SELLVendez

***



Ce sont les éléments de base.

 
Vladimir Karputov:

Merci pour la réponse, j'ai regardé à la fois la documentation et votre exemple, mais je n'ai toujours pas trouvé comment obtenir un paramètre similaire à OrderClosePrice() dans MT4.

 
secret:

Merci pour la réponse, j'ai regardé à la fois la documentation et votre exemple mais je n'ai toujours pas trouvé comment obtenir un paramètre similaire à OrderClosePrice() dans MT4.

alternativement ouvrirhttps://www.mql5.com/ru/code/16006

et regardez l'implémentation de @fxsaber

ou connectez simplement la bibliothèque ci-dessus et transférez le code de MT4 à MT5, dans 99% des cas, vous n'aurez pas à modifier quoi que ce soit, tout fonctionnera de la même manière que dans MT4.

MT4Orders
MT4Orders
  • www.mql5.com
Данная библиотека позволяет работать с ордерами в MQL5 (MT5-hedge) точно так же, как в MQL4. Т.е. ордерная языковая система (ОЯС) становится идентичной MQL4. При этом сохраняется возможность параллельно использовать MQL5-ордерную систему. В частности, стандартная MQL5-библиотека будет продолжать полноценно работать. Выбор между ордерными...