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

 
Dmitry Belov:

こんにちは、なぜZigD[0]が出力されないのか、教えていただけませんか?

ZigM[0]は動作しますか?

 
Alexey Viktorov:

ZigM[0]は出力されますか?

そうですね...。


	          
 
Dmitry Belov:

そうですね...。

すみません、コードをよく見ていなかったので...。

zzz>0 の場合は、high bar と low bar のいずれかに等しくなる可能性があることを意味する。それぞれ、この値をこれらの値と照合し、その結果に応じて、どちらかの配列に格納する必要があります。

 
Alexey Viktorov:

すみません、コードをよく見ていなかったので...。

zzz>0のとき、その値はhigh barまたはlow barのいずれかと等しくなり得ることを意味する。したがって、この値をこれらの値と照合し、その結果に応じて、どちらかの配列に配置する必要があります。

そうしているのですが、なぜかZigD[]が出力されず、ZigDを追加しても全く出力されず、コメントアウトすると全て出力されます。

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

#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_width1 1

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+

extern int ExtDepth=12;
extern int ExtDeviation=5;
extern int ExtBackstep=3;
extern int nn=30;

int  ww=0, kk=0;
int dd=0;
double zz,SredRazmax, zzz;
double HZZ[], ZigM[];
int ZigD[];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,HZZ);
   SetIndexBuffer(1,ZigM);
   SetIndexStyle(0,DRAW_SECTION);
   SetIndexEmptyValue(0,0.0);
   SredRazmax=0.0;
//---
   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[])
  {
//---
   int shift,limit;
//--- Первый вызов индикатора или смена таймфрейма или подгрузка данных из истории
   if(prev_calculated==0)
     {
      limit=rates_total-1;
      SredRazmax=0.0;
      ArrayInitialize(HZZ,0.0);
     }
   else limit=rates_total-prev_calculated+1;
   for(shift=limit; shift>=0; shift--)
     {
      zz=iCustom(NULL,0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,0,shift);
      if(zz>0.0)
        {
         HZZ[shift]=zz;
        }
     }
     for(ww = 0; ww <= Bars-1; ww++)
  {
      zzz = iCustom(NULL, 0, "ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 0, ww);
      
           if(zzz > 0.0)   
           {
           ZigM[kk]=zzz;
            kk++; 
           ZigD[dd]=ww;
            dd++;  
            }
   }       
   
   // Расчет средних значений 
     for(kk=0;kk<=nn;kk++)
     {
        if(ZigM[kk]>ZigM[kk+1]){SredRazmax+=(ZigM[kk]-ZigM[kk+1]);}
        if(ZigM[kk]<ZigM[kk+1]){SredRazmax+=(ZigM[kk]-ZigM[kk+1])*(-1);}
     if(IsStopped()) 
     break; 
     }
    Comment("Средний размах = ",SredRazmax/nn,",",ZigM[0],",",ZigM[1]);
    Comment(ZigD[0]);
   return(0);
  }
  //+-  
 

ハローピープル!

MT4に関する質問で、これ以上適切な「窓」が見つからなかった。

端末を開くと、「ステータスライン」「標準」「チャート」「グラフ機器」「チャート期間」が突然消えてしまいます。電源を切って、次にまた開くと、ターミナルが空白になり、現在のチャートだけが表示されます。

このようなバグを見たのは初めてで、どうしたらいいのかわからない。アドバイスをお願いします。どうしたらいいのかわからない。

 
Vadens:

ハローピープル!

MT4に関する質問で、これ以上適切な「窓」が見つからなかった。

端末を開くと、「ステータスライン」「標準」「チャート」「グラフ機器」「チャート期間」が突然消えてしまいます。電源を切って、次にまた開くと、ターミナルが空白になり、現在のチャートだけが表示されます。

このようなバグを見たのは初めてで、どうしたらいいのかわからない。アドバイスをお願いします。どうしたらいいのかわからない。

ターミナルがあるディレクトリへの書き込み権限に問題があるようです。制限付きユーザーで実行している場合は、ファイル/フォルダーにアクセスできるディレクトリに端末を移動してください。

 
Vadens:

ハローピープル!

MT4に関する質問で、これ以上適切な「窓」が見つからなかった。

端末を開くと、「ステータスライン」「標準」「チャート」「グラフ機器」「チャート期間」が突然消えてしまいます。電源を切って、次にまた開くと、ターミナルが空白になり、現在のチャートだけが表示されます。

このようなバグを見たのは初めてで、どうしたらいいのかわからない。アドバイスをお願いします。どうしたらいいのかわからない。

フルスクリーンモード(F11)がありますね
 
Dmitry Belov:

そうすると、なぜかZigD[]が出力されず、ZigDを追加しても全く出力されず、コメントアウトすると全て出力されます

またしても私の不注意で...。

今までとは違うものになることを期待しています :)))

コメントが点滅しない?このように書くとよいでしょう。

    Comment("Средний размах = ",SredRazmax/nn,",",ZigM[0],",",ZigM[1],"\n" // Это перенос комментария на следующую строку
           , ZigD[0]);
 
Alexey Viktorov:

またしても私の不注意で...。

今までとは違うものになることを期待しています :)))

コメントが点滅しない?こんな風に書くといいんじゃないでしょうか。

ありがとうございます、もう自分でわかりました、配列をdoubleで初期化すればいいんですね、うまくいきました。必要ならインジケータのコードも紹介しますが、まだ未完成なので、もっとアイデアがあります...。左下や 上部の真ん中にソムメントを表示させる方法をご存知ですか?

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

#property indicator_buffers 3
#property indicator_color1 Red
#property indicator_width1 1

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+

extern int ExtDepth=12;
extern int ExtDeviation=5;
extern int ExtBackstep=3;
extern int nn=30;

int  ww=0, kk=0;
int dd=0;
double zz,SredRazmax, zzz, SredDlin;
double HZZ[], ZigM[];
double ZigD[];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,HZZ);
   SetIndexBuffer(1,ZigM);
   SetIndexBuffer(2,ZigD);
   SetIndexStyle(0,DRAW_SECTION);
   SetIndexEmptyValue(0,0.0);
   SredRazmax=0.0;
   SredDlin=0.0;
//---
   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[])
  {
//---
   int shift,limit;
//--- Первый вызов индикатора или смена таймфрейма или подгрузка данных из истории
   if(prev_calculated==0)
     {
      limit=rates_total-1;
      SredRazmax=0.0;
      ArrayInitialize(HZZ,0.0);
     }
   else limit=rates_total-prev_calculated+1;
   for(shift=limit; shift>=0; shift--)
     {
      zz=iCustom(NULL,0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,0,shift);
      if(zz>0.0)
        {
         HZZ[shift]=zz;
        }
     }
     for(ww = 0; ww <= Bars-1; ww++)
  {
      zzz = iCustom(NULL, 0, "ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 0, ww);
      
           if(zzz > 0.0)   
           {
           ZigM[kk]=zzz;
            kk++; 
           ZigD[dd]=ww;
            dd++;  
            }
   }       
   
   // Расчет средних значений 
     for(kk=0;kk<=nn;kk++)
     {
        if(ZigM[kk]>ZigM[kk+1]){SredRazmax+=(ZigM[kk]-ZigM[kk+1]);}
        if(ZigM[kk]<ZigM[kk+1]){SredRazmax+=(ZigM[kk]-ZigM[kk+1])*(-1);}
   //  if(IsStopped()) 
  //   break; 
     }
     for(dd=0;dd<=nn;dd++)
     {
        if(ZigD[dd]>0.0){SredDlin+=(ZigD[dd+1]-ZigD[dd]);}
        if(IsStopped()) 
     break;
     } 
    Comment("Средний размах = ",SredRazmax/nn,"//","Средняя продолжительность = ",SredDlin/nn,"//",ZigM[0],"//",ZigM[1],"//",ZigD[0],"//",ZigD[1]);
    return(0);
  }
  //+-  
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
  • www.mql5.com
Задавайте вопросы по техническому анализу, обсуждайте торговые системы и улучшайте свои навыки программирования торговых стратегий на языке MQL5. Общайтесь и обменивайтесь опытом на форуме с трейдерами всего мира и помогайте ответами новичкам — наше сообщество развивается вместе с вами. Машинное обучение в трейдинге: теория и практика...
 
Dmitry Belov:

ありがとうございます。配列をdoubleで初期化するだけで、すべてうまくいくことが自分でわかりました。よかったらインジケーターのコードをどうぞ、でもまだ生ものです、もっとアイデアがありますよ・・・。左下や 上部の真ん中にソムメントを表示させる方法をご存知ですか?

ありえません。グラフィカルオブジェクトOBJ_LABELを使用した場合のみ。