Comment ouvrir correctement un ordre au marché ? - page 8

 
Dmitry Fedoseev:
Ce n'est pas toi qui as besoin d'une pause.
C'est justement ça.
 
Quoi qu'il en soit, l'essentiel, à mon avis, est le suivant.

Globalement, il y a deux façons de procéder :

1) l'analyse de l'environnement (aspirer l'historique des transactions, vérifier la position ouverte ou le volume de la position) ;

2) l'analyse des transactions.

Le premier fonctionne plus lentement. Mais il est plus fiable. Nous avons besoin d'un compromis. Peut-être devons-nous examiner la stratégie et en dépendre.

Oui, FORTS a un ticker à part entière, donc il ne faut pas travailler avec les ticks mais avec l'événement BookEvent.

Il est étrange que Vasily Sokolov n'ait pas fait de commentaire sur ce sujet. Son point de vue est intéressant...
 
Dennis Kirichenko:
Quoi qu'il en soit, l'essentiel, à mon avis, est le suivant.

Globalement, il y a deux façons de procéder :

1) l'analyse de l'environnement (aspirer l'historique des transactions, vérifier la position ouverte ou le volume de la position) ;

2) l'analyse des transactions.

Le premier fonctionne plus lentement. Mais il est plus fiable. Nous avons besoin d'un compromis. Peut-être devons-nous examiner la stratégie et en dépendre.

Oui, FORTS a un ticker à part entière, donc il ne faut pas travailler avec les ticks mais avec l'événement BookEvent.

Il est étrange que Vasily Sokolov n'ait pas fait de commentaire sur ce sujet. Son point de vue est intéressant...
Peut-être que bientôt je passerai au verre, mais pour l'instant .... à l'ancienne.
 
Dennis Kirichenko:
Quoi qu'il en soit, l'essentiel, à mon avis, est le suivant.

Globalement, il y a deux façons de procéder :

1) l'analyse de l'environnement (aspirer l'historique des transactions, vérifier la position ouverte ou le volume de la position) ;

2) l'analyse des transactions.

Le premier fonctionne plus lentement. Mais il est plus fiable. Nous avons besoin d'un compromis. Peut-être devons-nous examiner la stratégie et en dépendre.

Oui, FORTS a un ticker à part entière, donc il ne faut pas travailler avec les ticks mais avec l'événement BookEvent.

Il est étrange que Vasily Sokolov n'ait pas fait de commentaire sur ce sujet. Son point de vue est intéressant...
À propos, j'ai une question : peut-on utiliser l'événementBookEvent de la même manière que l'on utilise Tick ou Timer ?
c'est-à-dire que je peux y transférer complètement ma stratégie ?
 
Je viens de me souvenir sur le sujet...

J'ai travaillé une fois sur cet ordre et j'ai écrit la classe CiOnTrade :
class CiOnTrade : public CTrade
C'était une tâche intéressante. Mon client et moi, on s'est tapé sur les nerfs et on a brisé nos coeurs. Autant que je me souvienne, la tâche principale était d'acheter/vendre le volume garanti. Et si une partie du volume n'était pas remplie, nous devions supprimer ces ordres et vendre le reste à un prix différent...

Donc, la solution optimale que j'ai trouvée était de traiter les états. Et il y en avait tellement :
enum ENUM_TRADE_STATE
  {
   TRADE_STATE_NONE=0,      // "ничего"
   TRADE_STATE_ORDERS=1,    // "только ордера"
   TRADE_STATE_POSITION=2,  // "только позиция"
   TRADE_STATE_ALL=3,       // "все"
  };
1) "Rien" - il s'agit de l'état initial, lorsque rien n'a été fait.

2) "Commandes uniquement" - il s'agit de l'état lorsque les commandes sont passées.

3) "Position uniquement" est l'état dans lequel les ordres sont entièrement exécutés.

4) "Tous" est l'état où les ordres n'ont pas été complètement exécutés et où il y a déjà une position sur le marché.

Il fallait donc traiter chaque état. Oui, d'ailleurs, j'admets qu'il y a aussi des états intermédiaires. Donc ma classe pourrait être améliorée.
 
Gennady Mazur:
A propos, une question s'est posée : l'événementBookEvent peut-il être utilisé de la même manière que le Tick ou le Timer ?
c'est-à-dire que je peux y transférer complètement ma stratégie ?
Oui, mais notez que BookEvent génère des événements plus souvent. C'est pourquoi nous avons besoin d'un filtre pour éliminer les éléments inutiles. Par exemple, les prix n'ont pas changé, mais seulement les volumes de certaines offres...
 
Dennis Kirichenko:
Oui ! Mais considérez que le verre est plus susceptible de générer des événements. Par conséquent, vous avez besoin d'un filtre pour éliminer les événements inutiles. Par exemple, les prix n'ont pas changé, mais seulement les volumes de certaines offres...
Je comprends, merci... et dans certains cas, la variation de volume est plus importante que la variation de prix, surtout près de niveaux forts.
 
Dennis Kirichenko:
L'essentiel, à mon avis, est le suivant.

Globalement, il y a deux façons de procéder :

1) l'analyse de l'environnement (aspirer l'historique des transactions, vérifier la position ouverte ou le volume des positions) ;

2) l'analyse des transactions.

Lepremier fonctionne plus lentement. Mais il est plus fiable. Il doit y avoir un compromis. Nous devons peut-être envisager la stratégie et en dépendre.
La variante OrderSend+Sleep(0) ne fonctionne pas plus lentement que OrderSend+OnTradeTransaction. Je l'ai mesuré. C'est pourquoi je n'utilise pas la deuxième variante, pas pour les transactions asynchrones.
 
Dennis Kirichenko:
Je suppose que l'information sur l'accord n'est pas encore arrivée. Ici (marqué en rouge), vous comptez sur la chance. Et c'est une dame capricieuse :-))

bool OpenSellPosition(string symbol, double volume, string comment="", ulong deviation=10, ENUM_ORDER_TYPE_FILLING filling=ORDER_FILLING_FOK)
{
  MqlTradeRequest Request;
  MqlTradeResult Results;
  ZeroMemory(Request);
  ZeroMemory(Results);
  Request.price=SymbolInfoDouble(_Symbol,SYMBOL_BID);
  Request.action=TRADE_ACTION_DEAL;
  Request.type=ORDER_TYPE_SELL;
  Request.symbol=symbol;
  Request.volume=volume;      
  Request.deviation=deviation;
  Request.comment=comment;  
  Request.type_filling=filling;
  bool res=false;
  res=OrderSend(Request,Results);
  if(res)
  {
    if(Results.deal>0) return(true);
    else return(false);

  }
  return(false);
}

Même avecORDER_STATE_FILLED, Results.order peut avoir un problème - Results.deal est zéro. La reproduction à 100% de cette situation est réalisée sur le serveur FXOpen-MT5.

Je recommande d'ouvrir plusieurs démos sur différents serveurs et d'obtenir la pleine fonctionnalité du code. Je l'ai fait pour MT4 biblique. C'est pourquoi il n'y a pas de problème avec le sous-jeu.

 
fxsaber:
OrderSend+Sleep(0) n'est pas plus lent que OrderSend+OnTradeTransaction. Je l'ai mesuré. Par conséquent, je n'utilise pas la deuxième variante pour les transactions asynchrones.

La variante OrderSend+Sleep(0) est temporaire, car c'est un défaut des développeurs (ne l'utilisez pas comme exemple :) ).

Quand il sera corrigé, seul OrderSend restera

Raison: