Советник без индикатора.Возможно ли такое? - страница 9

 
Nikolai Semko:

А зачем Вы получаете новый бар на через SeriesInfoInteger?
Насколько я помню - это очень тормознутая асинхронная функция (может что-то изменилось - не проверял).
Как правило все нестыковки и тормоза - это следствие использования асинхронных функций. Избегайте их при возможности.
Попробуйте как-то по другому. Например через iTime или iBars.
И не забывайте, что OnChartEvent сама является асинхронной и не может вызываться чаще, чем 64 раза в секунду, т.е. максимум один раз за 15.625 миллисекунд. 

новый бар через  SERIES_LASTBAR_DATE

И не забывайте, что OnChartEvent сама является асинхронной и не может вызываться чаще, чем 64 раза в секунду, т.е. максимум один раз за 15.625 миллисекунд. 

как говорят в Китае, хоть фиолетовая, главное приносила прибыль

 
Dmitry Fedoseev:

какая наивность...

Дмитрий, можно рекомендацию получить?

 
Fast235:

новый бар через  SERIES_LASTBAR_DATE

SERIES_LASTBAR_DATE это только Идентификатор, который используется в SeriesInfoInteger.

 
Fast235:

Дмитрий, можно рекомендацию получить?

Какую? Уже давал одну, повторю - если не умете писать индикаторы, не надо утверждать, что они неправильно работают или что вообще подход с индикаторами является плохим, неправильным, нерациональным.

 
Nikolai Semko:

SERIES_LASTBAR_DATE это только Идентификатор, который используется в SeriesInfoInteger.


if(id>=CHARTEVENT_CUSTOM) // Цикл событий по символам
     {
      static CNewBar M1;
      const int number=id-CHARTEVENT_CUSTOM; //приведем в нормальный вид номер символа 0-7
      //--- проверим новый ли бар
      if(M1.NewBar(number,PERIOD_M1))
 
//+------------------------------------------------------------------+
//| Class Новый бар                                                  |
//+------------------------------------------------------------------+
class CNewBar
  {
protected:
   datetime          oldTime[TRADE_SYMBOLS];
public:
   bool              NewBar(int number,ENUM_TIMEFRAMES timeframe)
     {
      //--- создаем переменную newtime(тип время), присваиваем в нее из функции SeriesInfoInteger дату открытия последнего бара
      datetime newTime=datetime(SeriesInfoInteger(Symbols[number],timeframe,SERIES_LASTBAR_DATE));
      if(newTime!=oldTime[number] && newTime) // проверка на появление нового бара (новое время не равно старому и в newtime есть значение(true))
        {
         oldTime[number]=newTime; //обновим время прошлого бара
         return(true); // вернем функции NewBar true, появился новый бар
         //if(MQLInfoInteger(MQL_DEBUG))
         //   Print("Новый бар",newTime,"старый бар",oldTime); // в режиме отладки, будет выводится сообщение о значениях времен баров
        }
      //--- иначе,
      return(false); // нового бара еще нет
     };
   //---- конструктор класса
//                     CNewBar() {oldTime=NULL;}; // вызывается при создании Объекта, проинициализация тут не нужна, что-бы сразу прошел новый бар
  };
 
Вот это вот NewBar - значит больше одной попытки не выполняется.
 
Dmitry Fedoseev:
Вот это вот NewBar - значит больше одной попытки не выполняется.

не понятно что имеется ввиду

как видно, номер символа передается верно, в класс нового бара и правильно обрабатывается там
 
Fast235:


if(id>=CHARTEVENT_CUSTOM) // Цикл событий по символам


А это что? Какое это может имеет отношение к обычному индикатору?  Лепите непонятно что, вместо того, чтобы читать статьи и учиться делать правильно. Потому такая наивность - индикаторы "работают неправильно". Такие креативные все до умопомрачения.

 
Fast235:

не понятно что имеется ввиду

И не поймете. NewBar - это диагноз.

Причина обращения: