La tâche de recherche des commandes

 

En gros, l'essentiel est le suivant : je cherche des options de code pour rechercher des commandes.

La tâche est la suivante :

1 :

Obtenez des informations sur l'ordre maximum par prix et par type d'ordre (Achat / Vente) le plus élevé.

Pour obtenir des informations sur l'ordre minimum par prix et par type d'ordre (Achat/Vente) le plus bas.

Obtenez les informations sur la dernière commande par heure et par type de commande (achat/vente).

Obtenez des informations sur la première commande par heure et par type de commande (achat/vente).

2 :

Obtenir des informations sur l'avant-dernier prix maximal et le type d'ordre (achat/vente).

Obtenir des informations sur l'avant-dernier ordre minimum (achat/vente) par prix et par type d'ordre (achat/vente).

Obtenez des informations sur l'avant-dernier ordre par heure et par type d'ordre (achat/vente).

Obtenir des informations sur le deuxième ordre dans le temps et le type d'ordre (Achat/Vente)

Ces informations comprennent toutes les informations relatives à l'ordre (symbole, lot, prix ......).

Le style de programmation procédurale l'a résolu il y a longtemps, maintenant je veux le simplifier et faire une classe, mais je ne trouve rien d'utile...

 
Vladimir Pastushak:

Quoi qu'il en soit, le point est le suivant : je cherche des options de code pour rechercher des commandes.


Voulez-vous surveiller les commandes en cours ?

MQL4 ou MQL5 ?

 
Михаил:
Voulez-vous surveiller les commandes en cours ?
Pas tous, mais le maximum/minimum par prix et le premier et le dernier par heure, deux par deux, c'est-à-dire le dernier et l'avant-dernier...
 
Vladimir Pastushak:

En gros, l'essentiel est le suivant : je cherche des options de code pour rechercher des commandes.

La tâche est la suivante :

1 :

Obtenez des informations sur l'ordre maximum par prix et par type d'ordre (Achat / Vente) le plus élevé.

Pour obtenir des informations sur l'ordre minimum par prix et par type d'ordre (Achat/Vente) le plus bas.

Obtenez les informations sur la dernière commande par heure et par type de commande (achat/vente).

Obtenez des informations sur la première commande par heure et par type de commande (achat/vente).

2 :

Obtenir des informations sur l'avant-dernier prix maximal et le type d'ordre (achat/vente).

Obtenir des informations sur l'avant-dernier ordre minimum (achat/vente) par prix et par type d'ordre (achat/vente).

Obtenez des informations sur l'avant-dernier ordre par heure et par type d'ordre (achat/vente).

Obtenir des informations sur le deuxième ordre dans le temps et le type d'ordre (Achat/Vente)

Ces informations comprennent toutes les informations relatives à l'ordre (symbole, lot, prix ......).

Le style de programmation procédurale l'a résolu il y a longtemps, maintenant je veux le simplifier et faire une classe, mais je ne trouve rien d'utile...

Oui Vladimir - c'est une GRANDE tâche ! :-)

Pouvez-vous me dire où aller ?

 
Vladimir Pastushak:
Seulement pas tous, mais maximum/minimum par prix et premier et dernier par temps, 2 de chaque, c'est-à-dire dernier et avant-dernier...

Ce n'est pas difficile, car vous fixez des ordres.

Donc, vous vous souviendrez des deux derniers ACHATS et des deux dernières VENTES.

Et vous n'aurez pas à chercher quoi que ce soit.

struct MEM_ORDER
{
  ulong ticket;
  long ord_type;
  double price;
};
struct MEM_ORDERS
{
  bool      is_first_buy;
  bool      is_first_sell;
  MEM_ORDER buy_oders[2];
  MEM_ORDER sell_oders[2];
};
 
Михаил:

Ce n'est pas difficile, car vous fixez des ordres.

Donc, vous vous souviendrez des deux derniers ACHATS et des deux dernières VENTES.

Et vous n'aurez pas à chercher quoi que ce soit.

J'ai pensé à une telle solution, mais je n'étais pas satisfait du fait que lorsque l'EA/terminal est rechargé, il est réinitialisé et toutes les données du travail passé seront perdues.

Je pense que la manière la plus fiable de travailler est de collecter des données sur l'environnement lorsque l'EE fonctionne.

 
Vladimir Pastushak:

J'ai pensé à une telle solution, mais je n'étais pas satisfait du fait que lorsque l'EA/terminal est rechargé, il est re-purgé et toutes les données du travail précédent seront perdues.

Je pense que la méthode d'opération fiable consiste à collecter des données sur l'environnement au moment de l'opération d'EE.

Et qu'est-ce qui vous empêche de sauvegarder les données dans un fichier lorsque vous quittez l'EA, et lorsque vous le chargez, de le faire à partir d'un fichier ?

//| Expert Load setings function                                     |
//+------------------------------------------------------------------+
void LoadSettings()
{
  string file_name = _Symbol + ".dat";
  int file_handle;
//---  
  if ( FileIsExist( file_name, 0 ) )
  {
    file_handle = FileOpen( file_name, FILE_READ|FILE_BIN );
    
    if ( file_handle != INVALID_HANDLE )
    {
      e_high = FileReadLong( file_handle );
      a_profit = FileReadLong( file_handle );
      e_low = FileReadLong( file_handle );
      ord_delta_high = FileReadLong( file_handle );
      ord_delta_low = FileReadLong( file_handle );
      order_delta = FileReadLong( file_handle );
      exit_delta = FileReadLong( file_handle );
      FileClose( file_handle );
    }
  } 
}

//+------------------------------------------------------------------+
//| Expert Save settings function                                    |
//+------------------------------------------------------------------+
void SaveSettings()
{
  string file_name = _Symbol + ".dat";
  int file_handle;
  bool file_found = true;
//---  
  if ( FileIsExist( file_name, 0 ) )
  {
    if ( FileDelete( file_name, 0 ) ) file_found = false;
  }
  else
  {
    file_found = false;
  }
//---
  if ( ! file_found )
  {
    file_handle = FileOpen( file_name, FILE_WRITE|FILE_BIN );
    
    if ( file_handle != INVALID_HANDLE )
    {
      FileWriteLong( file_handle, e_high );
      FileWriteLong( file_handle, a_profit );
      FileWriteLong( file_handle, e_low );
      FileWriteLong( file_handle, ord_delta_high );
      FileWriteLong( file_handle, ord_delta_low );
      FileWriteLong( file_handle, order_delta );
      FileWriteLong( file_handle, exit_delta );
      FileClose( file_handle );
    }
  } 
}
 
Михаил:

Qu'est-ce qui vous empêche de sauvegarder les données dans un fichier lorsque vous quittez l'EA et de les charger à partir d'un fichier lorsque vous la chargez ?

C'est bien, bien sûr, mais pas fiable, car l'environnement peut changer pendant le redémarrage.
 
Vladimir Pastushak:
C'est bien sûr une bonne chose, mais pas fiable, car l'environnement peut changer pendant le redémarrage.

Fermez tous les ordres avant de sortir.

Vous devez toujours le faire.

 
Михаил:

Fermez tous les ordres avant de sortir.

C'est une chose fastidieuse à faire de toute façon.

Des redémarrages imprévus vont entraîner des problèmes...

J'ai écrit un cours...

 
Vladimir Pastushak:

Les redémarrages inopinés conduisent à des problèmes...

J'ai écrit une classe...

Ne faites pas rire les gens....

Si quelque chose d'imprévu se produit, aucun cours ne vous sauvera !

Si le windup ou le terminal "tombe en panne", l'EA se réinitialise,

Je me contente de "regarder" les ordres actifs et de les fermer, car il n'y a aucun contrôle sur eux.

Raison: