Un asesor sin indicador, ¿es posible? - página 9

 
Nikolai Semko:

¿Por qué aparece una nueva barra enel SeriesInfoInteger?
Que yo recuerde, es una función asíncrona muy lenta (quizá haya cambiado algo, no lo he comprobado).
Por regla general, todas las incoherencias y la lentitud son consecuencia del uso de funciones asíncronas. Evítelos si es posible.
Intenta utilizarlos de otra manera. Por ejemplo, a través de iTime o iBars.
Y no olvides que el propio OnChartEvent es asíncrono y no puede ser llamado más de 64 veces por segundo, es decir, como máximo una vez cada 15,625 milisegundos.

nuevo bar a través de SERIES_LASTBAR_DATE

Y no olvides que el propio OnChartEvent es asíncrono y no puede ser llamado más de 64 veces por segundo, es decir, como máximo una vez cada 15,625 milisegundos.

como dicen en china, no importa la púrpura, mientras sea rentable

 
Dmitry Fedoseev:

qué ingenuo...

Dimitri, ¿puedes darme una referencia?

 
Fast235:

nuevo bar a través de SERIES_LASTBAR_DATE

SERIES_LASTBAR_DATE es sólo el ID utilizado en el SeriesInfoInteger.

 
Fast235:

Dimitri, ¿puedes darme una recomendación?

¿Qué es? Ya di una y la repetiré: si no sabes escribir indicadores, no digas que no funcionan correctamente o que el enfoque con indicadores en general es malo, erróneo, irracional.

 
Nikolai Semko:

SERIES_LASTBAR_DATE es sólo el identificador utilizado en el 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;}; // вызывается при создании Объекта, проинициализация тут не нужна, что-бы сразу прошел новый бар
  };
 
Esta es la Nueva Barra - lo que significa que no se hace más de un intento.
 
Dmitry Fedoseev:
Este NewBar significa que no hay más de un intento.

no está claro qué se entiende por

Como puede ver, el número de caracteres se pasa correctamente a la nueva clase de barra y se maneja correctamente allí
 
Fast235:


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


¿Qué es esto? ¿Qué puede tener que ver con un indicador normal? Te estás inventando cosas en lugar de leer los artículos y aprender a hacer las cosas bien. Por eso es tan ingenuo: los indicadores "no funcionan bien". Todos son tan creativos que resultan alucinantes.

 
Fast235:

no está claro qué se entiende por

Y no lo harás. NewBar es un diagnóstico.