[ARQUIVO]Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por ela. Não posso ir a lugar nenhum sem você - 5. - página 401

 

hoz:

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

2. Ou seja, mais frequentemente apenas ao tirar corujas ou scripts da tabela, existe alguma outra razão para que esta função seja acionada?

3. Onde posso ler sobre isso?

4. e no corpo da função já cria uma condição, quando a condição é cumprida, então IsStopped() = verdadeiro, certo?

1. Sim.

2. sei apenas sobre tirar a tabela.

3. não sei.

4. Sim, ele pode e vai funcionar.

 
4. ?
 
tara:
4. ?

?
 
tara:
4. ?

Eu devo ter entendido mal a pergunta. Se você mesmo fizer IsStopped()= true, isso não é possível.
 
hoz:

?

Mostre-me a implementação, pois não consigo nem imaginá-la como um trinômio quadrático.
 
Integer:

Eu devo ter entendido mal a pergunta. Se você mesmo fizer IsStopped()= true, isso não é possível.

Isso é tudo. A pergunta é retirada.
 
Integer:

Eu devo ter entendido mal a pergunta. Se você mesmo fizer IsStopped()=verdadeiro, é impossível.


Isso é compreensível. Eu mesmo não queria fazer isso. De fato, se algo é executado no loop, ele é executado até que o Expert Advisor ou script seja removido do gráfico e, consequentemente, nesse ponto um comando é enviado para o servidor:

IsStoped() = true;

Abri funções escritas por TarasBy (eu mesmo escrevo a minha, mas periodicamente a examino, pois ele tem uma abordagem interessante). Portanto, lá ele tem tal função:

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

Por que será que existe uma condição?

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

Recebemos BID imediatamente e então as bandeiras de função IsStopped( ) e IsExpertEnabled() são verificadas. Onde está a lógica? Na minha opinião, é mais fácil verificá-lo imediatamente e, se algo estiver errado, sair da função.

Depois temos o comando RefreshRates(). No início os dados de mercado não foram atualizados e no final, quando já recebemos os dados das variáveis BID, eles são atualizados. Ou estou pensando incorretamente ou o autor tem uma maneira específica de pensar que não se encaixa na minha. Qual é o objetivo?

 
hoz:

Abri as funções escritas por TarasBy (eu mesmo escrevo as minhas, mas olho de vez em quando, pois ele tem uma abordagem interessante). Portanto, ele tem essa função ali:

Por que será que existe uma condição?

Recebemos BID imediatamente e então as bandeiras de função IsStopped( ) e IsExpertEnabled() são verificadas. Onde está a lógica? Na minha opinião, é mais fácil verificá-lo imediatamente e, se algo estiver errado, sair da função.

Depois temos o comando RefreshRates(). No início os dados de mercado não foram atualizados e no final, quando já recebemos os dados das variáveis BID, eles são atualizados. Ou estou pensando incorretamente ou o autor tem uma maneira específica de pensar que não se encaixa na minha. Qual é o objetivo?

Talvez Igor responda amanhã...

Eu o teria feito:

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

Tudo o mais é supérfluo, na minha opinião.
 

Saudações a todos!

Você pode me dizer se é possível ensinar uma EA a se referir ao último alerta disparado?

 
Zhunko:

Talvez Igor responda amanhã...

Eu o faria:

Tudo o mais é supérfluo, na minha opinião.


Vadim, eu teria feito exatamente como você escreveu! Foi por isso que eu fiz a pergunta. Eu pensei, talvez tenha perdido alguma coisa. Eu ainda estou observando minha própria lógica e a lógica de outros programadores. Porque, além da lógica básica, vejo que preciso considerar uma série de fatores.