Caractéristiques du langage mql5, subtilités et techniques - page 45

 
Alexey Viktorov:

Peut-être que ça fera l'affaire ? Bien que cela ne soit pas toujours correct pour le forex.

il affiche une valeur erronée, par exemple pour SBRF-9.17 l'heure de fin de la session de trading le vendredi == 23:45:00 selon le graphique des minutes, et cette fonction affiche 00:00:00, selon l'information de la bourse l'heure de fin de la session de trading du soir à 23:50

Je ne pense pas que le point principal soit la possibilité de créer des contrôles là où nous sommes et d'utiliser des constantes, mais peut-être que quelqu'un a déjà implémenté cette fonctionnalité et que je n'ai pas à écrire mon propre vélo.
 
Alexey Viktorov:

Il n'y a pas de dépendance et il ne peut y en avoir. Par conséquent, il ne peut y avoir de code spécial.

Les développeurs n'utilisent pas le LFO dans de tels cas. Les algorithmes sont clairs et reproductibles.

 
Konstantin:

Sur le marché à terme, comment déterminer l'heure de clôture du marché de la veille dans différentes variantes de recherche de l'intervalle de temps actuel :

1. Nous sommes dans l'intervalle samedi - dimanche, nous avons besoin de l'heure de clôture de la session commerciale du vendredi soir.
2. Nous sommes dans le marché fermé du lundi au vendredi ; nous avons besoin de l'heure de fermeture de la session du soir du lundi au jeudi.
3. dans la fourchette de négociation du lundi au vendredi ; nous avons besoin d'une heure de fermeture pour la séance de négociation du vendredi soir.
4. pour la période du mardi au vendredi, nous avons besoin de l'heure de fermeture des sessions du lundi au jeudi soir.

Peut-être que quelqu'un a écrit une fonctionnalité similaire, je ne veux pas réinventer la roue ;))

Je ne pense pas qu'il y ait beaucoup plus de flexibilité que les constantes :

/*!
   \brief   Расчет конечной даты запроса
*/
datetime CVolumeCluster::CalcStopDate(void) {
   MqlDateTime _date;
   datetime _time_t = TimeTradeServer(_date);

   if(_date.hour == 23 && _date.min >= 44) {          // определяем время окончания торговой сессии
      _date.hour = 23;
      _date.min  = 44;
      _date.sec  = 59;
      _time_t    = StructToTime(_date);
   } else {
      TimeToStruct(_time_t - 86400, _date);
      _date.hour = 23;
      _date.min  = 44;
      _date.sec  = 59;
      if(_date.day_of_week == 0 || _date.day_of_week == 6)
         _date.day_of_week = 5;
      _time_t = StructToTime(_date);
   }
//---
   return _time_t;
}
 

conseiller qui travaille avec la classe CCanvas, comment faire pour que la mise à jour de la marque graphique soit moins gourmande en ressources, par exemple nous avons quelques centaines de milliers de lignes dans la marque graphique, lors du redimensionnement nous devons repeindre chaque ligne dans la marque graphique, car sans repeindre simplement en redimensionnant, les lignes sur le graphique ne sont pas affichées, bien que l'objet de la marque graphique change de taille

 
Konstantin:

il n'y a probablement rien de plus flexible que les constantes :

N'est-ce pas plus facile ?

/********************Script program start function*******************/
void OnStart()
{
 datetime timeArray[1], barArray[1];
 CopyTime(_Symbol, PERIOD_D1, 0, 1, timeArray);
 CopyTime(_Symbol, PERIOD_M1, timeArray[0]-1, 1, barArray);
 Print(barArray[0];
}/*******************************************************************/
 
Alexey Viktorov:

N'est-ce pas plus facile ?

 CopyTime(_Symbol, PERIOD_D1, 0, 1, timeArray);              // время текущего дня 00:00:00
 CopyTime(_Symbol, PERIOD_M1, timeArray[0]-1, 1, barArray);  // время открытия - 1 секунду

le résultat est en principe correct ;)) merci

 
Maintenant (1626) ne fonctionne pas

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

Particularités du langage mql5, subtilités et astuces

fxsaber, 2017.05.05 23:48

// Возвращает текущее количество объектов классов
int GetAmountObjects( void )
{
  const class CLASS_TMP {} Tmp;
  
  return((int)::StringFormat("%d", &Tmp) - 1);
}
Exemple d'application
int OnInit()
{
  if (GetAmountObjects() > 0)
    Print("До " + __FUNCSIG__ + " были вызваны конструкторы!");

  return(INIT_SUCCEEDED);
}
 
// Советник возвращает полностью сформированные торговые запросы (включая ручные)
#define  TOSTRING(A)  #A + " = " + (string)(A) + "\n"
#define  TOSTRING2(A) #A + " = " + EnumToString(A) + " (" + (string)(A) + ")\n"

string ToString( const MqlTradeRequest &Request )
{
  return(TOSTRING2(Request.action) + TOSTRING(Request.magic) + TOSTRING(Request.order) +
         TOSTRING(Request.symbol) + TOSTRING(Request.volume) + TOSTRING(Request.price) + 
         TOSTRING(Request.stoplimit) + TOSTRING(Request.sl) +  TOSTRING(Request.tp) + 
         TOSTRING(Request.deviation) + TOSTRING2(Request.type) + TOSTRING2(Request.type_filling) +
         TOSTRING2(Request.type_time) + TOSTRING(Request.expiration) + TOSTRING(Request.comment) +
         TOSTRING(Request.position) + TOSTRING(Request.position_by));
}

void OnTradeTransaction(   const MqlTradeTransaction&, const MqlTradeRequest& Request, const MqlTradeResult& )
{
  if (Request.action)
    Print(ToString(Request));
}

S'il y a un problème avec le même remplissage, exécutez cet EA et créez l'ordre que vous voulez manuellement (F9 dans le terminal). La demande de transaction générée sera imprimée par l'EA.

Malheureusement, il est difficile de faire cela sur des comptes réels. Les développeurs ont rejeté cette suggestion.

 
fxsaber:

S'il y a un problème avec le même remplissage, exécutez cet EA et créez l'ordre que vous voulez manuellement (F9 dans le terminal). La demande de transaction générée sera imprimée par l'EA.

La seule chose qui manque est un exemple de son fonctionnement.

 
Rashid Umarov:

Ce dont nous avons besoin, c'est d'un exemple de son fonctionnement.

Exposer manuellement


Nous obtenons la demande de transaction générée dans le journal

Request.action = TRADE_ACTION_PENDING (5)
Request.magic = 0
Request.order = 157092716
Request.symbol = EURUSD
Request.volume = 0.01
Request.price = 1.13941
Request.stoplimit = 0.0
Request.sl = 1.13926
Request.tp = 1.13955
Request.deviation = 0
Request.type = ORDER_TYPE_BUY_LIMIT (2)
Request.type_filling = ORDER_FILLING_RETURN (2)
Request.type_time = ORDER_TIME_SPECIFIED (2)
Request.expiration = 2017.07.11 12:08:00
Request.comment = 
Request.position = 0
Request.position_by = 0
Malheureusement, il est très coûteux pour les vrais commerçants. C'est pourquoi j'ai fait une proposition.