[ARCHIVO]Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No puedo ir a ningún sitio sin ti - 5. - página 401

 

hoz:

1. Если эксперт снять с графика тоже поступит команда ТРУ от IsStopped() ?

2. es decir, más a menudo sólo cuando se sacan búhos o guiones de la carta, ¿hay alguna otra razón para que esta función se active?

3. ¿Dónde puedo leer sobre ello?

4. Y en el cuerpo de la función ya crear una condición, cuando la condición se cumple, entonces IsStopped() = true, ¿verdad?

1. Sí.

2. Sólo sé que hay que quitar el gráfico.

3. No lo sé.

4. Sí, puede y funcionará.

 
4. ?
 
tara:
4. ?

?
 
tara:
4. ?

Debo haber entendido mal la pregunta. Si haces IsStopped()=true tú mismo, no es posible.
 
hoz:

?

Muéstrame la implementación, porque ni siquiera puedo imaginarlo como un trinomio cuadrático.
 
Integer:

Debo haber entendido mal la pregunta. Si usted mismo hace IsStopped()=true, no es posible.

Eso es todo. La pregunta está eliminada.
 
Integer:

Debo haber entendido mal la pregunta. Si usted mismo hace IsStopped()=true, es imposible.


Eso es comprensible. No era mi intención hacerlo. De hecho, si se ejecuta algo en el bucle, se ejecuta hasta que el Asesor Experto o el script se retira del gráfico y, en consecuencia, en ese momento se envía un comando al servidor:

IsStoped() = true;

He abierto funciones escritas por TarasBy (yo mismo escribo las mías, pero periódicamente las reviso, ya que tiene un enfoque interesante). Así que allí tiene tal función:

//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);
}

Me pregunto por qué hay una condición.

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

Obtenemos el BID de una vez y luego se comprueban las banderas de las funciones IsStopped( ) e IsExpertEnabled(). ¿Dónde está la lógica? En mi opinión, es más fácil comprobarlo de una vez, y si algo está mal, salir de la función.

Luego tenemos el comando RefreshRates(). Al principio no se refrescaban los datos del mercado, y al final, cuando ya hemos recibido los datos del BID, se refrescan. O yo estoy pensando mal o el autor tiene una forma de pensar concreta que no encaja con la mía. ¿Qué sentido tiene?

 
hoz:

He abierto las funciones escritas por TarasBy (yo mismo escribo las mías, pero miro de vez en cuando, ya que tiene un enfoque interesante). Así que tiene esa función allí:

Me pregunto por qué hay una condición.

Obtenemos el BID de una vez y luego se comprueban las banderas de las funciones IsStopped( ) e IsExpertEnabled(). ¿Dónde está la lógica? En mi opinión, es más fácil comprobarlo de una vez, y si algo está mal, salir de la función.

Luego tenemos el comando RefreshRates(). Al principio no se refrescaban los datos del mercado, y al final, cuando ya hemos recibido los datos de las variables BID, se refrescan. O estoy pensando mal o el autor tiene una forma de pensar concreta que no se ajusta a la mía. ¿Qué sentido tiene?

Quizá Igor responda mañana...

Yo lo habría hecho:

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

Todo lo demás es superfluo, en mi opinión.
 

¡Saludos a todos!

¿Puedes decirme si es posible enseñar a un EA a referirse a la última alerta activada?

 
Zhunko:

Tal vez Igor responda mañana...

Yo lo haría:

Todo lo demás es superfluo, en mi opinión.


Vadim, yo habría hecho exactamente lo que has escrito. Por eso he hecho la pregunta. Pensé que tal vez me había perdido algo. Sigo observando mi propia lógica y la de otros programadores. Porque además de la lógica básica, veo que tengo que tener en cuenta una serie de factores.
Razón de la queja: