Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 75

 
ilnur17021992:
SELL_Lvl est le nombre de genoux (ordres) de la grille de vente etSELL_NoLossLevel est le niveau total (prix) de l'UC de ces ordres. Eh bien, l'idée est la suivante : nous avons besoin d'une ligne tracée au niveau d'une ligne d'achat et redessinée respectivement lorsque de nouvelles lignes sont ouvertes. Je ne sais pas comment faire.

Vous ne comprenez pas comment déterminer la ligne BU de toutes les commandes ?

 

Pouvez-vous me dire comment l'écrire pour économiser des ressources et obtenir des prix actualisés ?

  for(int i=OrdersTotal(); i>=0; i--) {
   if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) {
    if(OrderSymbol()==symb) {
      if(OrderType()==OP_BUY) {
       tk=OrderTicket();
       SymbolInfoTick(OrderSymbol(),Last_Tick); <<<
       ask=Last_Tick.ask;
       bid=Last_Tick.bid;
       ...

ou comme ça ?

 SymbolInfoTick(symb,Last_Tick); <<<
  for(int i=OrdersTotal(); i>=0; i--) {
   if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) {
    if(OrderSymbol()==symb) {
      if(OrderType()==OP_BUY) {
       tk=OrderTicket();
       ask=Last_Tick.ask;
       bid=Last_Tick.bid;
       ...
 
Vitaly Muzichenko:

Pouvez-vous me dire comment l'écrire pour économiser des ressources et obtenir des prix actualisés ?

  for(int i=OrdersTotal(); i>=0; i--) {
   if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) {
    if(OrderSymbol()==symb) {
      if(OrderType()==OP_BUY) {
       tk=OrderTicket();
       SymbolInfoTick(OrderSymbol(),Last_Tick); <<<
       ask=Last_Tick.ask;
       bid=Last_Tick.bid;
       ...

ou comme ça ?

SymbolInfoTick(OrderSymbol(),Last_Tick); <<<
  for(int i=OrdersTotal(); i>=0; i--) {
   if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) {
    if(OrderSymbol()==symb) {
      if(OrderType()==OP_BUY) {
       tk=OrderTicket();
       ask=Last_Tick.ask;
       bid=Last_Tick.bid;
       ...


La première option est plus correcte. Dans la seconde, vous devriez écrire cette ligneSymbolInfoTick(symb,Last_Tick) ; <<<<.
 
Vitaly Muzichenko:

Pouvez-vous me dire comment l'écrire pour économiser des ressources et obtenir des prix actualisés ?

  for(int i=OrdersTotal(); i>=0; i--) {
   if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) {
    if(OrderSymbol()==symb) {
      if(OrderType()==OP_BUY) {
       tk=OrderTicket();
       SymbolInfoTick(OrderSymbol(),Last_Tick); <<<
       ask=Last_Tick.ask;
       bid=Last_Tick.bid;
       ...

ou comme ça ?

SymbolInfoTick(OrderSymbol(),Last_Tick); <<<
  for(int i=OrdersTotal(); i>=0; i--) {
   if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) {
    if(OrderSymbol()==symb) {
      if(OrderType()==OP_BUY) {
       tk=OrderTicket();
       ask=Last_Tick.ask;
       bid=Last_Tick.bid;
       ...


Je dirais que cela dépend de la taille de OrdersTotal() et de la probabilité de changements de prix pendant le cycle.

À mon avis, obtenir des données fraîches directement dans la boucle est plus correct.

Et je pense que les variables supplémentaires (mises en évidence dans le code) sont absolument inutiles.

 
Alexey Viktorov:

Il existe un exemple dans la documentation.

Il serait probablement préférable de passer en revue les ordres dans la boucle et, à condition que l'ordre suivant soit inférieur au précédent, de le sélectionner pour continuer à travailler avec lui. Ainsi, lorsque nous sortons de la boucle, l 'ordre à supprimer est déjà sélectionné.

Ou bien, vous pouvez d'abord mémoriser sa position dans la liste des ordres, puis le sélectionner après avoir quitté la boucle en utilisant l'index mémorisé.

Il n'est pas si facile de définir à la fois des ordres supérieurs et inférieurs si
 
Sergey Gritsay:
La première option est plus correcte. La deuxième devrait écrireSymbolInfoTick(symb,Last_Tick) ; <<<<.

Oui, je l'ai juste copié et je n'ai pas remarqué.

Je me demande siSymbolInfoTick est la bonne façon de le placer à l'intérieur de la boucle, s'il est nécessaire, ou s'il peut être placé avant la boucle. Il est utilisé en trailing stop, peut tirer une grille jusqu'à 50pc.

 
Vitaly Muzichenko:

Oui, je l'ai juste copié et je n'ai pas remarqué.

Je me demande siSymbolInfoTick est la bonne façon de le placer à l'intérieur de la boucle, s'il est nécessaire, ou s'il peut être placé avant la boucle. Utilisé en trailing stop, peut tirer une grille jusqu'à 50pc.

Pour le trailing stop, il est bien sûr préférable de le placer une fois avant le cycle.
 
Alexey Viktorov:

Vous n'arrivez pas à trouver comment déterminer la ligne BU de toutes les commandes ?

Je sais comment déterminer l'UB, j'ai besoin que la ligne soit tracée à ce niveau.
 
Alexey Viktorov:
Pour le trailing stop, il est bien sûr préférable de le faire une fois avant le cycle.

Je suis en train de le réécrire lentement pour 5. Je veux dire que le prix peut changer très rapidement et que le niveau peut être inférieur à la valeur stop-loss, ce qui entraînera une erreur. Je veux dire que le prix peut changer très rapidement et que le niveau sera inférieur au niveau d'arrêt autorisé, ce qui entraînera une erreur.

Je comprends que ce chapeau"SymbolInfoTick" est nécessaire pour obtenir les prix réels ?

 
problème résolu en comparant les prix
Raison: