[АРХИВ]Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 5. - страница 401

 

hoz:

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

2. Т.е. чаще только при снятии с графика сов или скриптов, а ещё какие-н. есть причины для срабатывания данной функции?

3. Где про это можно прочитать?

4. А в теле уже функции условие создать, когда выполнено условие, то IsStopped() = true, верно?

1. Да.

2. Только про снятие с графика знаю.

3. Не знаю.

4. Можно, будет работать.

 
4. ? 
 
tara:
4. ? 

?
 
tara:
4. ? 

Наверно не понял вопроса. Если самому сделать чтобы IsStopped()=true - это невозможно.
 
hoz:

?

Реализацию покажите, а то я даже представить это не могу, как квадратный трехчлен. 
 
Integer:

Наверно не понял вопроса. Если самому сделать чтобы IsStopped()=true - это невозможно.

Все. Вопрос снят. 
 
Integer:

Наверно не понял вопроса. Если самому сделать чтобы IsStopped()=true - это невозможно.


Так это понятно. Я ж не имел ввиду сделать самому. По сути, если в цикле, что-то выполняется, то оно выполняется до тех пор, пока не снимется эксперт или скрипт с графика, а соответственно, в том момент серверу полетит команда:

IsStoped() = true;

 

 Я тут открыл функции, написанные TarasBy (пишу свои сам, но периодически заглядываю, т.к. у него интересный подход). Так вот там у него есть такая функция:

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

 Мне интересно, зачем здесь условие?

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

 Сразу получатся БИД, а потом смотрятся флаги функции IsStopped() и IsExpertEnabled(). Логика где? По-моему проще сразу это проверить, если что не так, то  выйти из функции..

Дальше команда RefreshRates(). В начале рыночные данные не обновляли, а в после.. когда уже получены данные переменные БИДа, то уже обновляюся. Что-то то ли я не так думаю, то ли у автора спецефическое мышление, которое с моим не стыкуется. В чём суть?

 
hoz:

Я тут открыл функции, написанные TarasBy (пишу свои сам, но периодически заглядываю, т.к. у него интересный подход). Так вот там у него есть такая функция:

 Мне интересно, зачем здесь условие?

 Сразу получатся БИД, а потом смотрятся флаги функции IsStopped() и IsExpertEnabled(). Логика где? По-моему проще сразу это проверить, если что не так, то  выйти из функции..

Дальше команда RefreshRates(). В начале рыночные данные не обновляли, а в после.. когда уже получены данные переменные БИДа, то уже обновляюся. Что-то то ли я не так думаю, то ли у автора спецефическое мышление, которое с моим не стыкуется. В чём суть?

Может Игорь завтра ответит...

Я бы так сделал:

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

По моему, всё остальное лишнее.
 

Доброго всем! 

Подскажите, можно ли научить советника обращаться к последнему сработавшему алерту? 

 
Zhunko:

Может Игорь завтра ответит...

Я бы так сделал:

По моему, всё остальное лишнее.

 


Вадим, я бы сделал так же как Вы отписали! Поэтому я и задал вопрос. Думал, может я что не учёл. Пока ещё наблюдаю за своей логикой, и за логикой других программистов. Так как кроме основной логики, вижу, что нужно учитывать ряд факторов.