Longueur maximale d'un nom de symbole sur le FOREX - page 8

 
fxsaber:

En fait, c'est un coup de marteau. Puisqu'il est possible de ne pas attendre le suivi de la commande. Le seul cas non alternatif de onTradeTransaction est celui du rejet de l'ordre. Par exemple, s'il n'y a pas assez d'argent.


Il s'avère que nous avons effectué une centaine de transactions asynchrones en remplissant le tableau (liste) avec les mages et les demandeurs appropriés. Dès que OnTradeTransaction a reçu la réponse sur la quête, nous avons retiré l'élément de la liste. Dès que nous avons vu la mise en évidence d'un majic de la liste parmi les vivants/morts, nous avons supprimé l'entrée. C'est ainsi que le contrôle est plus ou moins atteint. Avez-vous bien compris ?


Vous pouvez toujours utiliser d'autres champs - SL/TP, Commentaire - au lieu de la magie.

Oui, exactement comme ça. OnTradeTransaction n'est jamais désactivé, juste la fonction de vérification est appelée périodiquement (si OnTradeTransaction n'est pas déclenché). Dès que tout ce qui concerne l'ordre est détecté, les drapeaux sont remis à zéro.

Comment utiliser le commentaire comme SL/TP ?

 
fxsaber:

Pourquoi attendre quand vous pouvez vérifier tout ce qui se passe en ligne ?

Parce que dans mes stratégies, ce qui est arrivé dans OnTradeTransaction a de l'importance.

Je n'utilise pas On-puke :)

Ajouté

Si l'événement est survenu dansOnTradeTransaction, tout est réinitialisé, il n'y a donc pas de problème.

 
prostotrader:

Comment utiliser le commentaire ronyatno, mais comme SL/TP ?

Ci-dessus complété...

Vous définissez le faux SL, dans la valeur duquel les informations dont vous avez besoin sont stockées. Par exemple, c'est ainsi que j'ai stocké le prix d'ouverture d'une position dans MT4, qui a été récupéré via le Limiter.

 
prostotrader:

Parce que dans mes stratégies il est important de savoir exactement ce qui est arrivé dans OnTradeTransaction.

Veillez donc à vérifier les magies directement dans OnTradeTransaction. Je le ferais de cette façon.


En général, l'idée des megics comme alternative aux reqests est cool !

 
fxsaber:

Ci-dessus complété...

Vous définissez un faux SL, dans la valeur duquel sont stockées les informations dont vous avez besoin. Par exemple, c'est ainsi que j'ai stocké le prix d'ouverture d'une position dans MT4, qui a été remplie par le Limiter.

Est-il possible de définir le SL lorsqu'il n'y a pas de position ?

 
prostotrader:

Est-il possible d'exposer le SL s'il n'y a pas de position ?

Il se peut qu'il ne soit pas possible de le faire pour les démarques. Cela fait longtemps que je négocie uniquement par le biais d'ordres limités.

 
fxsaber:

Il se peut qu'il ne soit pas possible de le faire pour les marchés. Depuis longtemps, je ne négocie que par le biais d'ordres à cours limité.

"C'est un peu bizarre de stocker des informations comme ça. Eh bien, oui, vous devriez savoir.

Comme le marché FOREX ne m'intéresse pas du tout, 6 symboles de nom de symbole et 65365 tags sur un graphique sont plus que suffisants pour mes besoins,

De plus, je ne peux effectuer que 2000 transactions par jour de bourse.

 
prostotrader:

Comme le marché FOREX ne m'intéresse pas du tout, les 6 caractères du nom du symbole et 65365 mogic sur un graphique sont plus que suffisants pour mes besoins,

De plus, je ne peux effectuer que 2000 transactions par jour de bourse.

Il ne s'agit pas de forex. Et il y a les mêmes problèmes avec OnTradeTransaction. Par conséquent, une solution universelle

#include <crc64.mqh> // https://www.mql5.com/en/blogs/post/683577

string GetMagicString()
{
  return(MQLInfoString(MQL_PROGRAM_PATH/*MQL_PROGRAM_NAME*/) + _Symbol + (string)ChartID()/* + (string)_Period*/);
}

// Формирует мэджик с изменяемой частью ReserveBits для прописывания туда Num-значения
ulong GetMagic( const int Num = 0, const int ReserveBits = 12 )
{
  uchar Bytes[];
  
  return((crc64(0, Bytes, (StringToCharArray(GetMagicString(), Bytes))) << ReserveBits) + (Num % (1 << ReserveBits)));
}

// Определяет, свой ли исходный мэджик с изменяемой частью ReserveBits
bool IsMyMagic( const ulong Magic, const int ReserveBits = 12 )
{
  return(GetMagic(0, ReserveBits) >> ReserveBits == Magic >> ReserveBits);
}

#define  PRINT(A) Print(#A + " = " + (string)(A))

void OnStart()
{  
  for (int i = 0; i < 10; i++)
  {
    PRINT(GetMagic(i));
    PRINT(IsMyMagic(GetMagic(i)));
  }
  
  PRINT(IsMyMagic(MathRand()));
}
 

Bien entendu, le modèle événementiel est peu pratique dans ce cas. Par exemple, si vous voulez effectuer des opérations asynchrones sans sortir de la fonction On et obtenir le résultat.

Il est maintenant possible de se libérer de ce comportement grâce à une béquille.

  1. Nous écrivons un indicateur (sans tampons et variables d'entrée) avec OnTradeTransaction qui écrit toutes les transactions dans un endroit public (par exemple, dans une ressource).
  2. Le conseiller expert crée cet indicateur par le biais de iCustom.
  3. A n'importe quel endroit d'exécution, le conseiller expert peut voir toutes les transactions entrantes écrites par l'indicateur.

Cela permet une grande flexibilité.

Par exemple, nous pouvons envoyer une centaine d'ordres Async et attendre leur exécution sans sortir de la profondeur, en continuant à exécuter notre code.


Nous parlons, bien sûr, des demandes. Et le thème de la magie n'a rien à voir avec ça.


Bien qu'il serait logique pour les développeurs d'écrire des transactions dans un tableau accessible au public. Sans indicateur.

 
fxsaber:

Il ne s'agit pas de forex. Et il y a les mêmes problèmes avec OnTradeTransaction. Il s'agit donc d'une solution universelle.

Bien qu'il soit possible (et même mieux) de se passer des opérations par bit - juste crc64 + Num.
2018.08.25 22:10:48.913 Test (BR-9.18,M1)       1749671450686091264
2018.08.25 22:10:48.914 Test (BR-9.18,M1)       1749671450686091265
2018.08.25 22:10:48.914 Test (BR-9.18,M1)       1749671450686091264
2018.08.25 22:10:48.914 Test (BR-9.18,M1)       1749671450686091265
2018.08.25 22:10:48.914 Test (BR-9.18,M1)       1749671450686091264
2018.08.25 22:10:48.914 Test (BR-9.18,M1)       1749671450686091265
2018.08.25 22:10:48.914 Test (BR-9.18,M1)       1749671450686091264
2018.08.25 22:10:48.914 Test (BR-9.18,M1)       1749671450686091265
2018.08.25 22:10:48.914 Test (BR-9.18,M1)       1749671450686091272
2018.08.25 22:10:48.914 Test (BR-9.18,M1)       1749671450686091273

Il y a des coïncidences...