Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 1363

 
Mikhail Toptunov #:

Me podéis decir cómo organizar un análogo de cálculo de prev_calculado, no lo consigo. Me está costando mucho navegar por las clases.


BarsCalculated-1?
 
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CNewBar::PrevCalculated(void)
  {
   int pc=(int)(this.RatesTotal()-this.m_rt);
   return(pc);
  }
//+------------------------------------------------------------------+
//| CNewBar IsNewBar Основная функция класса                         |
//+------------------------------------------------------------------+
bool CNewBar::IsNewBar(void)
  {
   datetime tm=this.Time();
   Print("this.m_time ",this.m_time," tm ",tm," this.m_pc ",this.m_pc," this.m_rt ",this.m_rt);
   if(tm==0)
      return false;
   if(tm!=this.m_time)
     {
      //--- определяем время
      this.m_time=tm;
      //--- определяем кол-во
      this.m_pc=this.PrevCalculated();
      this.m_rt=(int)this.RatesTotal();
      return true;
     }
   this.m_pc=(int)this.m_rt;
   return false;
  }

¡¡¡Así es como lo hice, si puedes sugerir un método más sensato, sería encantador!!!

 
Fast235 #:

Es más intensivo en recursos para el sistema, pero más eficiente que yo, creo, en términos de sostenibilidad.

 
Mikhail Toptunov #:

¡¡¡Así es como lo hice, si puedes sugerir un método más sensato, sería maravilloso!!!

Mentira, la lógica está rota. Lo siguiente es más correcto.




class CNewBar : public CObject
  {
private:
   string            m_symbol;
   ENUM_TIMEFRAMES   m_timeframe;
   datetime          m_time;
   int               m_rt;
   int               m_pc;
   datetime          Time(void);
   int               PrevCalculated(void);
   int               RatesTotal(void);
   string            Symbol(void)         { return this.m_symbol;    }
public:
   ENUM_TIMEFRAMES   Timeframe(void)      { return this.m_timeframe; }
   datetime          GetTime(void)        { return this.m_time;      } //  Возвращает время последнего обращения
   int               GetRatesTotal(void)  { return this.m_rt;        }
   int               GetPrevCalculated(void) {return this.m_pc;       }
   bool              IsNewBar(void);                                   //  Основная функция класса
                     CNewBar(const string symbol,const ENUM_TIMEFRAMES timeframe);
                    ~CNewBar(void) {;}
  };
//+------------------------------------------------------------------+
//| Кол-во отработанных                                              |
//+------------------------------------------------------------------+
int CNewBar::PrevCalculated(void)
  {
  int _rt=this.RatesTotal();
  int rt=_rt-(_rt-this.m_rt);
   return(rt < 0 ? 0 : rt);
  }
//+------------------------------------------------------------------+
//| CNewBar IsNewBar Основная функция класса                         |
//+------------------------------------------------------------------+
bool CNewBar::IsNewBar(void)
  {
   datetime tm=this.Time();
   int      rt=this.RatesTotal();
   if(tm==0)
      return false;
   if(tm!=this.m_time)
     {
      //--- определяем время
      this.m_time=tm;
      //--- определяем кол-во
      this.m_pc=this.PrevCalculated();
      this.m_rt=rt;
      return true;
     }
     this.m_pc=rt<0 ? 0 : rt;
   return false;
  }

Pero aquí está la razón por la que los valores son cero al inicio, marcados con una barra amarilla.

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   for(int i=1; i<2; i++)
     {
      ENUM_TIMEFRAMES n_period=(ENUM_TIMEFRAMES)GetPeriodEnumerator((uchar)i);
      CNewBar *nb = new CNewBar(Symbol(), n_period);
      if(nb==NULL)
         continue;
      if(!list_new_bar.Add(nb))
        {
         delete nb;
         continue;
        }
      Print(nb.IsNewBar(), " ***** ", Symbol(), " ***** ", nb.Timeframe()," RatesTotal ",nb.GetRatesTotal()," Calculated ",nb.GetPrevCalculated());
     }
//--- create timer
   EventSetTimer(1);

//---
   return(INIT_SUCCEEDED);
  }
 
Mikhail Toptunov #:

La lógica de la mierda está rota. Lo siguiente es más correcto.

Pero aquí está la razón por la que los valores son cero al inicio, marcados con una barra amarilla.

¿Sólo eres el nuevo bar?

 
Fast235 #:

¿es sólo el nuevo bar?

Necesito los parámetros para aplicar la estrategia

RatesTotal
PrevCalculated

Y la nueva barra es como un bono con la capacidad de ir a través de todos los TFs

También necesito calcular el precio de cada barra

//+------------------------------------------------------------------+
//| Расчет цены                                                      |
//+------------------------------------------------------------------+
int CNewBar::PriceHL2(void)
  {
   int res=ArrayResize(this.m_pr_hl2,this.m_rt);
   for(int b=this.m_pc; b<this.m_rt; b++)
      m_pr_hl2[b]=MathAbs((iHigh(this.m_symbol,this.m_timeframe,b) + iLow(this.m_symbol,this.m_timeframe,b))/2);
   return(res);
  }

No puedo sacar la matriz del Asesor Experto, aunque los valores aparecen durante la depuración



¿Cómo se rellena correctamente en un Asesor Experto? Lo necesito para el cálculo


 
Hola a todos, ¿podéis decirme la diferencia entre un robot de trading y un asesor de trading?
 
Daniil Osipov #:
Hola a todos, ¿podéis decirme la diferencia entre un robot de trading y un asesor de trading?

Un juego de palabras.

 
¿Cómo puede un indicador conocer su número de subventana?
Por ejemplo, para escribir o dibujar algo en su subventana.
No he podido encontrar una función explícita como "IndicatorGetInteger".
 
Evgeny Dyuka #:
¿Cómo puede un indicador conocer su número de subventana?
Por ejemplo, para escribir o dibujar algo en su subventana.
No he encontrado ninguna función explícita como "IndicatorGetInteger".
ChartWindowFind
Документация по MQL5: Операции с графиками / ChartWindowFind
Документация по MQL5: Операции с графиками / ChartWindowFind
  • www.mql5.com
ChartWindowFind - Операции с графиками - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5