初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 1363

 
Mikhail Toptunov #:

prev_calculatedの計算のアナログを整理する方法を教えてください、解りません。授業のナビゲートに苦労しています。


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

これは私がやった方法ですが、もしより賢明な方法を提案していただけるなら、それは素敵なことです!!!!

 
Fast235 #:

システムにとってはより多くのリソースを必要としますが、持続可能性という点では、私が行ったよりも効率的だと思います。

 
Mikhail Toptunov #:

私はそのようにしました。もし、もっと賢明な方法を提案していただけるなら、それは素晴らしいことです!!!

うそつけ......論理が破綻している。下の方が正しいです。




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

しかし、起動時に値がゼロになる理由はここにあり、黄色いバーでマークされています。

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

デタラメな論理が破綻している。以下の方がより正しいです。

しかし、起動時に値がゼロになる理由はここにあり、黄色いバーでマークされています。

は、New Barだけですか?

 
Fast235 #:

は、New Barだけですか?

ストラテジーを実装するためのパラメータが必要です

RatesTotal
PrevCalculated

そして、新しいバーは、すべてのTFをスルーできるオマケのようなものです

また、各バーごとに価格を計算する必要があります。

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

デバッグ中に値は表示されるが、Expert Advisorから配列を引き出すことができない



Expert Advisorで正しく入力する方法は? 計算に必要です。


 
皆さん、こんにちは。トレーディングロボットとトレーディングアドバイザーの違いについて教えてください。
 
Daniil Osipov #:
皆さん、こんにちは。トレーディングロボットと トレーディングアドバイザーの 違いについて教えて ください。

言葉遊びのようなもの。

 
インジケーターはどのようにしてサブウィンドウの番号を知ることができるのですか?
例えば、そのサブウインドウに何かを書き込んだり、描いたりすることです。
IndicatorGetInteger」のような明示的な関数は見つかりませんでした。
 
Evgeny Dyuka #:
インジケーターはどのようにしてサブウィンドウの番号を知ることができるのですか?例えば、そのサブウインドウに何かを書き込んだり、描いたりすることです。IndicatorGetInteger "のような明示的な関数は見つかっていません。

チャートウィンドウファインド
Документация по MQL5: Операции с графиками / ChartWindowFind
Документация по MQL5: Операции с графиками / ChartWindowFind
  • www.mql5.com
ChartWindowFind - Операции с графиками - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
理由: