MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1295

 
Michail_David:

Vitalyさん、ありがとうございます。しかし、ExtTempBuffer[i] = NormalizeDouble((close[i]-open[i])/Point(),2); on element [i} の行でまだエラーが発生します。

1.インデックスを確認する。

   SetIndexBuffer(2,ExtTempBuffer);
   SetIndexBuffer(2,ExtPriceBuffer);

2.なぜこの2つのバッファが必要なのか

      ExtTempBuffer[i] = NormalizeDouble((close[i]-open[i])/Point(),2);
      ExtPriceBuffer[i] = NormalizeDouble((close[i+1]-open[i+1])/Point(),2);

もし

 ExtPriceBuffer[i] = ExtTempBuffer[i+1]
 
Michail_David:

要素 [i} で ExtTempBuffer[i] = NormalizeDouble((close[i]-open[i])/Point(),2); の行でエラーが発生します。

キャッチ

//+------------------------------------------------------------------+
//|                                                         MSBB.mq4 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

#include <MovingAverages.mqh>

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1  clrGreen
#property indicator_color2  clrRed
#property  indicator_width1  1
input int            InpMSBBPeriod=3;        // Period
input ENUM_MA_METHOD InpMSBBMethod=MODE_SMA;  // Method
//--- indicator buffers
double         ExtMSBBBuffer[];
double         ExtTempBuffer[];
double         ExtPriceBuffer[];
double         ExtSignalBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit(void)
  {
//--- indicator buffers mapping
   IndicatorDigits(Digits);
//--- drawing settings
   IndicatorBuffers(4);
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0,ExtMSBBBuffer);
   SetIndexBuffer(1,ExtSignalBuffer);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(2,ExtTempBuffer);
   SetIndexBuffer(3,ExtPriceBuffer);
   SetIndexDrawBegin(1,InpMSBBPeriod);
//--- name for DataWindow and indicator subwindow label
   IndicatorShortName("MSBB("+IntegerToString(InpMSBBPeriod)+")");
   SetIndexLabel(0,"MSBB");
   SetIndexLabel(1,"Signal");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//------
   if((rates_total-prev_calculated-InpMSBBPeriod)<=0)return(0);
   
   for(int i=rates_total-prev_calculated-InpMSBBPeriod-1;i>=0;i--)
     {
      ExtTempBuffer[i] = NormalizeDouble((close[i]-open[i])/Point(),2);
      ExtPriceBuffer[i] = NormalizeDouble((close[i+1]-open[i+1])/Point(),2);
      //ExtMSBBBuffer[i]=price_open+ExtTempBuffer[i];
      //Print("ExtPriceBuffer[i] = ", ExtPriceBuffer[i]);
      if(ExtTempBuffer[i]==0)
         ExtMSBBBuffer[i]=0.0;
      if(ExtPriceBuffer[i]>0 && ExtTempBuffer[i]>0)
        {
         double price_open = NormalizeDouble((open[i]-open[i+1])/Point(),2);
         double price_close = NormalizeDouble((close[i]-close[i+1])/Point(),2);
         if((price_open<0 && price_close>0)||(price_open>0 && price_close<0))
            ExtMSBBBuffer[i] = 0.0;
         if((price_open<0 && price_close<0)||(price_open>0 && price_close>0))
            ExtMSBBBuffer[i]=ExtTempBuffer[i]+price_open;
        }
      if(ExtPriceBuffer[i]>0 && ExtTempBuffer[i]<0)
        {
         double price_open = NormalizeDouble((open[i]-close[i+1])/Point(),2);
         double price_close = NormalizeDouble((close[i]-open[i+1])/Point(),2);
         if((price_open<0 && price_close>0)||(price_open>0 && price_close<0))
            ExtMSBBBuffer[i] = 0.0;
         if((price_open>0 && price_close>0)||(price_open<0 && price_close<0))
            ExtMSBBBuffer[i]=ExtTempBuffer[i]+price_open;
        }
      if(ExtPriceBuffer[i]<0 && ExtTempBuffer[i]<0)
        {
         double price_open = NormalizeDouble((open[i]-open[i+1])/Point(),2);
         double price_close = NormalizeDouble((close[i]-close[i+1])/Point(),2);
         if((price_open<0 && price_close>0)||(price_open>0 && price_close<0))
            ExtMSBBBuffer[i]=0.0;
         if((price_open<0 && price_close<0)||(price_open>0 && price_close>0))
            ExtMSBBBuffer[i]=ExtTempBuffer[i]+price_open;
        }
      if(ExtPriceBuffer[i]<0 && ExtTempBuffer[i]>0)
        {
         double price_open = NormalizeDouble((open[i]-close[i+1])/Point(),2);
         double price_close = NormalizeDouble((close[i]-open[i+1])/Point(),2);
         if((price_open>0 && price_close<0)||(price_open<0 && price_close>0))
            ExtMSBBBuffer[i]=0.0;
         if((price_open>0 && price_close>0)||(price_open<0 && price_close<0))
            ExtMSBBBuffer[i]=ExtTempBuffer[i]+price_open;
        }
      //--- signal line counted in the 2-nd buffer
      //ExtSignalBuffer[i]=iMAOnArray(ExtMSBBBuffer,0,InpMSBBPeriod,0,InpMSBBMethod,0);
      SimpleMAOnBuffer(rates_total,prev_calculated,1,InpMSBBPeriod+2,ExtMSBBBuffer,ExtSignalBuffer);
      Print ("ExtSignalBuffer = ", ExtSignalBuffer[i]);
      //--- done
     }
   /* if(ExtPriceBuffer[i]>0||ExtPriceBuffer[i]<0)
     {
      ExtMSBBBuffer[i] = ExtPriceBuffer[i]+ExtTempBuffer[i];
      Print("ExtMSBBBuffer[i] = ", ExtMSBBBuffer[i]);
     }
   if(ExtPriceBuffer[i]==0)
     {
      ExtMSBBBuffer[i] = 0.0;
      Print("ExtMSBBBuffer[i] = ", ExtMSBBBuffer[i]);
     }
   }*/
//---
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
こんにちは!ターミナルに内蔵されているiExposure.mq4という インジケーターをベースに改造した「iexposuregmini.mq4」というインジケーターが存在 します。インフォーマーの位置(ウィンドウ)をチャートウィンドウの左下に移動する方法をご教示ください。また、チャートからインジケータを削除しても、インジケータバーが残ってしまいます...。どうすれば直るのか?とても感謝しています。
Как заказать торгового робота на MQL5 и MQL4
Как заказать торгового робота на MQL5 и MQL4
  • www.mql5.com
Главным преимуществом торговых терминалов MetaTrader является возможность создания автоматических торговых систем, способных совершать торговые операции без вмешательства трейдера, что позволяет исключить влияние психологии на результаты торговли. Для этого нужно сформулировать торговую стратегию и реализовать ее в виде программы на языке MQL...
ファイル:
 
MakarFX:

1.インデックスの確認

2.なぜ、この2つのバッファが必要なのでしょうか?

1つのバッファExtTempBuffer[i]=ExtTempBuffer[i+1]ではうまくいかなかったので、この方法で試してみることにしましたが、これもうまくいきません。

 
Michail_David:

1つのバッファExtTempBuffer[i]=ExtTempBuffer[i+1]ではうまくいかなかったので、この方法で試してみることにしましたが、こちらもうまくいきません。

動作するコードを掲載しました

 
MakarFX:

キャッチ

マークありがとうございます。テスト時にまた同じ行で同じエラー。どうにもこうにもうまくいかない。

これが 2020.11.03 23:38:19.815 2020.07.10 16:10:00 MSBB EURUSD,M5: 'MSBB.mq4' の配列が範囲外 (78,20)


 
Michail_David:

マークさん、ありがとうございました。テスト時にまた同じ行で同じエラー。どうにもこうにもうまくいかない。

これは、2020.11.03 23:38:19.815 2020.07.10 16:10:00 MSBB EURUSD,M5: 'MSBB.mq4' の配列が範囲外 (78,20) です。


エラーは出なかったが、ログが膨大になっているのは

Print ("ExtSignalBuffer = ", ExtSignalBuffer[i]);
 
MakarFX:

エラーは出ないのですが、ログが膨大になるのは

ええ、同じです。すべての条件を説明できていないようです。信号の値では、多くは巨大なものです。ご協力ありがとうございました。これからもコンディションを見守りたいと思います。

 
Александр:

いずれかの条件が満たされていないため、開かない。

それは、

またはこれ

2つのフラッシュをコメントアウトすると//どれがそうなのかがわかります。そうすることでエラーを発見することができます。

alexanderさん、ありがとうございます。

 
MakarFX:

キャッチ

問題なくコンパイルできる

'MSBB.mq4' MSBB.mq4 1 1
'MovingAverages.mqh' MovingAverages.mqh 1 1
エラー0件、警告0件、経過時間187msec 1 1 1

理由: