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

 
torblin:
こんにちは、すべての、それはポストが初心者の質問のためにあるように見えませんああ、ジーウィズどこでdp200と尋ねるためにどのようなアドバイザーが動作するようになりますか?
を、実質的には誰にでもできることです。
 

親愛なる皆様、「試みその1」を経験豊かな目で見守ってくださいますようお願いします。お題:MQL5で書かれたフラクタルインジケーターと azzx_larry-2.0インジケーターを「掛け合わせる」ことでコードを取得、その本質はいわゆる「インテリアバー」を除外しながら極限を探すこと(添付)です。コンパイルすると4つのエラーが出ますが、すべて「4」に書かれているazzxさんからお借りした部分です。エラー」を解釈する際に疑問が生じた。

1.なぜfor文(コード中の場所-下線部)をGlobalに配置することが提案されているのですか?('for' - 式はグローバルスコープでは使用できません)。


2.なぜコンパイラは High[bar] と Low[bar] (コードでは下線付き) を未宣言とみなすのでしょうか。一方、数行上のコードでは High[i] と Low[i] はエラーとみなさないのです。

('High' - 非宣言識別子、'Low' - 非宣言識別子).


3.limitについても同様で、なぜコンパイラは未宣言と判断するのか。('limit' - 未宣言の識別子)。

追記:コードの一部(フラクタル指標)はmql5のドキュメントから、azzx_larry2.0指標のコードの一部はmql4のコードベースから、作者azzxは由来しています。


//+------------------------------------------------------------------+
//|                                                     azzx 2.0.mq5 |
//|                        Copyright 2009, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2009, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
//---- indicator settings
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   2
#property  indicator_type1   DRAW_ARROW
#property  indicator_type2   DRAW_ARROW
#property  indicator_color1  White
#property  indicator_color2  White
#property  indicator_label1  "azzx Up"
#property  indicator_label2  "azzx Down"
//---- indicator buffers
double max[];
double min[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
//---- indicator buffers mapping
   SetIndexBuffer(0,max,INDICATOR_DATA);
   SetIndexBuffer(1,min,INDICATOR_DATA);
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//---- sets first bar from what index will be drawn
   PlotIndexSetInteger(0,PLOT_ARROW,108);
   PlotIndexSetInteger(1,PLOT_ARROW,108);
//---- arrow shifts when drawing
   PlotIndexSetInteger(0,PLOT_ARROW_SHIFT,0);
   PlotIndexSetInteger(1,PLOT_ARROW_SHIFT,0);
//---- sets drawing line empty value--
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//---- initialization done
  }
//+------------------------------------------------------------------+
//|  Accelerator/Decelerator Oscillator                              |
//+------------------------------------------------------------------+
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 &TickVolume[],
                const long &Volume[],
                const int &Spread[])
  {
   int i,limit;
//---
   if(rates_total<3)
      return(0);
//---
   if(prev_calculated<3)
     {
      limit=1;
      //--- clean up arrays
      ArrayInitialize(max,EMPTY_VALUE);
      ArrayInitialize(min,EMPTY_VALUE);
     }
   else limit=rates_total-1;

   for(i=limit;i<rates_total-1 && !IsStopped();i++)
     {
      //---- Up azzx
      if(High[i]>High[i+1] && High[i]>=High[i-1])
         max[i]=High[i];
      else max[i]=EMPTY_VALUE;

      //---- Low azzx
      if(Low[i]<Low[i+1] && Low[i]<=Low[i-1])
         min[i]=Low[i];
      else min[i]=EMPTY_VALUE;
     }
//--- OnCalculate done. Return new prev_calculated.
   return(rates_total);
  }

//+------------------------------------------------------------------+

  // Поиск краткосрочных экстремумов.
  for(i=limit-2;i>1;i--) 
   {
    l = left_bar(i);
    r = right_bar(i);
    
    if((l>0) && (r>0)) 
      {
      if(((Low[l]>=Low[i]) && (Low[r]>Low[i])) ||
         ((Low[l]>Low[i]) && (Low[r]>Low[i]))) 
      {
        min[i] =1;
      }
    }
 
    if((l>0) && (r>0)) 
      {
      if(((High[l]<= High[i]) && (High[r]<High[i])) ||
         ((High[l]<High[i]) && (High[r]<High[i]))) 
      {
        max[i] =1;
      }
    }

  // Отметка экстремумов.
  ArrayInitialize(buf_st_min,0);
  ArrayInitialize(buf_st_max,0);

  
  for(i=limit-1;i>0;i--) 
  {
    switch(min[i]) 
    {
      case 1 : buf_st_min[i]=Low[i]; break;
    }
 
    switch(max[i]) 
    {
      case 1 : buf_st_max[i]=High[i]; break;
    }
  }
  
  return(0);
}
 
// Проверка, что заданный бар - внутренний.
bool is_internal(int bar) 
{
  return((High[bar] < High[bar + 1]) && 
         (Low [bar] > Low [bar + 1]));
}
 
// Возвращает бар слева от заданного бара или -1.
int left_bar(int bar) 
    {
  int i;
  
  for(i=bar+1;i<limit-2;i++) 
{
    if(is_internal(i)==false) 
{
      return(i);
    }
  }
  
  return(-1);
}
 
// Возвращает бар справа от заданного бара или -1.
int right_bar(int bar) {
  int i;
  
  for(i=bar-1;i>0;i--) 
{
    if(is_internal(i)==false) 
{
      return(i);
    }
  }
  
  return(-1);
}
//+------------------------------------------------------------------+
//| Indicator deinitialization function                              |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- почистим график при удалении индикатора
   Comment("");
  }
コードの数行上にHigh[i]とLow[i]がありますが、彼はエラーとは思っていないのでしょう。3.同様にlimitについて - コンパイラが未宣言とみなす理由
 

Reshetov:
А робот случаем не из Маркета?
только один.  что там продается - ужас. хотя наверное все они такие
 
beginner_mql:

コード中にHigh[i]とLow[i]がありますが、これはエラーとしてカウントされません。3.limit も同様です。コンパイラが未宣言とみなす理由

ここには、早く閉じる中括弧があります。

   return(rates_total);
  }

//+------------------------------------------------------------------+

  // Поиск краткосрочных экстремумов.
  for(i=limit-2;i>1;i--) 

あるいは、宣言されていないため、数行が欠落している。

    l = left_bar(i);
    r = right_bar(i);
 
vicmos:

ここには、早く閉じる中括弧があります。

あるいは、発表されないために数行が欠落している。

ご参加ありがとうございました。ブラケットをコードの最後に移動させ、コンパイルでは16のエラーが発生しました。

 
皆さんこんにちは、G. StanilevichによるITrade Chaosソフトウェア製品を使用しているフォーラム・ユーザーを教えてください。とても気に入っているのですが、わからないこともあります。もしよろしければ、この製品に携わっている方、携わったことのある方、Skypeでご連絡ください。私のskypeはFurkat1962です よろしくお願いします。敬具 Furkat
 
torblin:
この記事は初心者向けではないと思うので、200dpaの初心者にアドバイザーはどうするのか、どこで聞けばいいのか教えてください。
FOREXは自由な取引ではなく、他の取引と同じ作業で、作業をした分だけリターンが高くなることを理解したくないのでしょうか!
 
EAからチャートにインジケータを追加したのですが、このインジケータに色をつけるにはどうしたらいいですか?インジケーターは3本の線を使っていますが、3本とも色と太さを変えたいのですが、どうしたらいいですか?
 
YAndrey:
EAからチャートにインジケータを追加したのですが、このインジケータに色をつけるにはどうしたらいいですか?インジケーターは3本の線を使っていますが、3本とも色と太さを変えたいのですが、どうしたらいいですか?
モニターにフェルトペンを使用することができます)。
 
zfs:
モニターにフェルトペンが使える)
はい、それはできますね。でも、そうしたいとは思わない。そして、賢い人たちの意見を聞きたいですね ;)入力パラメータを各ラインの色という形でカスタムインジケーターを 作ることで解決しましたが、もっとシンプルにするにはどうしたらいいでしょうか?そこで、改めて質問です。Expert AdvisorでiBandsインジケータを作成しています。グラフに添付しています。その3本の線を異なる色で描きたい。可能なのでしょうか?
理由: