Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 1363

 
Mikhail Toptunov #:

Können Sie mir sagen, wie man eine analoge Berechnung von prev_calculated organisiert, ich kann es nicht herausfinden. Es fällt mir schwer, mich in den Klassen zurechtzufinden.


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

So habe ich es gemacht, wenn Sie eine vernünftigere Methode vorschlagen können, wäre das toll!!!

 
Fast235 #:

Es ist ressourcenintensiver für das System, aber effizienter als das, was ich gemacht habe, denke ich, im Hinblick auf die Nachhaltigkeit.

 
Mikhail Toptunov #:

So habe ich es gemacht, wenn Sie eine sinnvollere Methode vorschlagen können, wäre das wunderbar!!!

Blödsinn, die Logik ist kaputt. Der folgende Text ist korrekter.




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

Aber hier ist der Grund, warum die Werte beim Start null sind, gekennzeichnet durch einen gelben Balken.

//+------------------------------------------------------------------+
//| 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 #:

Die schwachsinnige Logik ist kaputt. Richtig ist die folgende Formulierung.

Aber hier ist der Grund, warum die Werte beim Start null sind, gekennzeichnet durch einen gelben Balken.

Sind Sie nur die neue Bar?

 
Fast235 #:

sind Sie nur die neue Bar?

Ich benötige die Parameter zur Umsetzung der Strategie

RatesTotal
PrevCalculated

Und die neue Leiste ist wie ein Bonus mit der Möglichkeit, durch alle TFs zu gehen

Ich muss auch den Preis für jeden Balken berechnen

//+------------------------------------------------------------------+
//| Расчет цены                                                      |
//+------------------------------------------------------------------+
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);
  }

Ich kann das Array nicht aus dem Expert Advisor herausziehen, obwohl die Werte während des Debugging angezeigt werden



Wie füllt man sie korrekt in den Expert Advisor ein? Ich brauche sie für die Berechnung


 
Hallo zusammen, können Sie mir bitte den Unterschied zwischen einem Handelsroboter und einem Trading Advisor erklären?
 
Daniil Osipov #:
Hallo zusammen, können Sie mir bitte den Unterschied zwischen einem Handelsroboter und einem Trading Advisor erklären?

Ein Wortspiel.

 
Wie kann ein Indikator die Nummer seines Teilfensters erfahren?
Zum Beispiel, um etwas in seinem Unterfenster zu schreiben oder zu zeichnen.
Eine explizite Funktion wie "IndicatorGetInteger" konnte ich nicht finden.
 
Evgeny Dyuka #:
Wie kann ein Indikator die Nummer seines Teilfensters erfahren?
Zum Beispiel, um etwas in seinem Unterfenster zu schreiben oder zu zeichnen.
Ich habe keine explizite Funktion wie "IndicatorGetInteger" gefunden.
ChartWindowFind
Документация по MQL5: Операции с графиками / ChartWindowFind
Документация по MQL5: Операции с графиками / ChartWindowFind
  • www.mql5.com
ChartWindowFind - Операции с графиками - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5