[ARCHIVE]Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 5. - page 401

 
4. ?
 
tara:
4. ?

?
 
tara:
4. ?

Je dois avoir mal compris la question. Si vous faites IsStopped()=vrai vous-même, ce n'est pas possible.
 
hoz:

?

Montrez-moi l'implémentation, car je ne peux même pas l'imaginer comme un trinôme quadratique.
 
Integer:

Je dois avoir mal compris la question. Si vous faites IsStopped()=vrai vous-même, ce n'est pas possible.

C'est tout. La question est supprimée.
 
Integer:

Je dois avoir mal compris la question. Si vous faites IsStopped()=vrai vous-même, c'est impossible.


C'est compréhensible. Je ne voulais pas le faire moi-même. En fait, si quelque chose est exécuté dans la boucle, il est exécuté jusqu'à ce que le conseiller expert ou le script soit retiré du graphique et, par conséquent, à ce moment-là, une commande est envoyée au serveur :

IsStoped() = true;

J'ai ouvert des fonctions écrites par TarasBy (j'écris moi-même les miennes, mais je m'y intéresse périodiquement, car il a une approche intéressante). Il y a donc une telle fonction :

//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|  Автор : TarasBY, taras_bulba@tut.by                                              |
//+-----------------------------------------------------------------------------------+
//|        Запускаем в цикл получение рыночной цены.                                  |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
double fGet_TradePrice (int fi_Price,           // Цена: 0 - Bid; 1 - Ask
                        bool fb_RealTrade,      // реальная торговля или оптимизация\тестирование
                        string fs_Symbol = "")  // валютная пара
{
    double ld_Price = 0.0;
//----
    if (fs_Symbol == "")
    {
       fs_Symbol = Symbol();
    }
    //RefreshRates();
    switch (fi_Price)
    {
       case 0:
          if (fb_RealTrade)
          {
             while (ld_Price == 0.0)
             {
                if (fs_Symbol == Symbol())
                {
                   ld_Price = Bid;
                }
                else
                {
                   ld_Price = MarketInfo (fs_Symbol, MODE_BID);
                }
                if (!IsExpertEnabled() || IsStopped())
                {
                   break;
                }
                Sleep (50);
                RefreshRates();
             }
          }
          else
          {
             if (fs_Symbol == Symbol())
             {
                return (Bid);
             }
             else
             {
                return (MarketInfo (fs_Symbol, MODE_BID));
             }
          }
          break;
       case 1:
          if (fb_RealTrade)
          {
             while (ld_Price == 0.0)
             {
                if (fs_Symbol == Symbol())
                {
                   ld_Price = Ask;
                }
                else
                {
                   ld_Price = MarketInfo (fs_Symbol, MODE_ASK);
                }
                if (!IsExpertEnabled() || IsStopped())
                {
                   break;
                }
                Sleep (50);
                RefreshRates();
             }
          }
          else
          {
             if (fs_Symbol == Symbol())
             {
                return (Ask);
             }
             else
             {
                return (MarketInfo (fs_Symbol, MODE_ASK));
             }
          }
          break;
   }
//----
   return (ld_Price);
}

Je me demande pourquoi il y a une condition ?

if (!IsExpertEnabled() || IsStopped())

Nous obtenons la DIS en une seule fois, puis les drapeaux des fonctions IsStopped( ) et IsExpertEnabled() sont vérifiés. Où est la logique ? À mon avis, il est plus facile de tout vérifier en une fois, et si quelque chose ne va pas, de quitter la fonction.

Ensuite, nous avons la commande RefreshRates(). Au début, les données du marché n'étaient pas rafraîchies, et à la fin, lorsque nous avons déjà reçu les données des variables de la DIS, elles sont rafraîchies. Soit je pense de manière incorrecte, soit l'auteur a une façon de penser spécifique qui ne correspond pas à la mienne. Quel est l'intérêt ?

 
hoz:

J'ai découvert les fonctions écrites par TarasBy (j'écris les miennes, mais je les consulte de temps en temps, car il a une approche intéressante). Il y a donc une telle fonction :

Je me demande pourquoi il y a une condition ?

Nous obtenons la DIS en une seule fois, puis les drapeaux des fonctions IsStopped( ) et IsExpertEnabled() sont vérifiés. Où est la logique ? À mon avis, il est plus facile de tout vérifier en une fois, et si quelque chose ne va pas, de quitter la fonction.

Ensuite, nous avons la commande RefreshRates(). Au début, les données du marché n'étaient pas rafraîchies, et à la fin, lorsque nous avons déjà reçu les données des variables de la DIS, elles sont rafraîchies. Soit je pense de manière incorrecte, soit l'auteur a une façon de penser spécifique qui ne correspond pas à la mienne. Quel est l'intérêt ?

Peut-être qu'Igor répondra demain...

Je l'aurais fait :

switch (fi_Price)
 {
  case 0: return(MarketInfo(fs_Symbol, MODE_BID));
  case 1: return(MarketInfo(fs_Symbol, MODE_ASK));
 }

Tout le reste est superflu, à mon avis.
 

Salutations à tous !

Pouvez-vous me dire s'il est possible d'apprendre à un EA à se référer à la dernière alerte déclenchée ?

 
Zhunko:

Peut-être qu'Igor répondra demain...

Je le ferais :

Tout le reste est superflu, à mon avis.


Vadim, j'aurais fait exactement ce que vous avez écrit ! C'est pourquoi j'ai posé la question. Je me suis dit que j'avais peut-être raté quelque chose. J'observe toujours ma propre logique et celle des autres programmeurs. Parce qu'en plus de la logique de base, je vois que je dois prendre en compte un certain nombre de facteurs.
 
hoz:

Vadim, je le ferais de la manière que tu as décrite ! C'est pourquoi je vous ai posé une question. J'ai pensé, peut-être que je n'ai pas pris en compte quelque chose. J'observe toujours ma propre logique et celle des autres programmeurs. Parce qu'en plus de la logique de base, je vois que je dois tenir compte d'un certain nombre de facteurs.

RefreshRates() met à jour l'historique dans le thread expert. MarketInfo() prend les données du serveur. Il n'est pas nécessaire de le rafraîchir. C'est un frein inutile.

Si elle doit être mise à jour, un simple appel de RefreshRates() ne donnera rien. Nous devons en quelque sorte contrôler et gérer l'événement de l'arrivée de toute l'histoire.