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

 

こんにちは、あなたはループブロック(CopyByfferの後に来る)なしで、以下のコードで、インディケータは正常に実行されますが、ろうそくの価格とバーのいずれかの価格を比較するサイクルを含める場合、開始後のバー自体が表示されない、何が問題なのでしょうか?

#property indicator_chart_window
#property indicator_buffers 3
#property indicator_plots   3
#property indicator_type1   DRAW_LINE
#property indicator_color1  Olive
#property indicator_type2   DRAW_LINE
#property indicator_color2  Green
#property indicator_type3   DRAW_LINE
#property indicator_color3  Olive

input int peroid = 20;        // период полос 1
input int bands_shift= 0;           // смещение полос 1 
input double deviation = 2.3;   // отклонение полос 1

input ENUM_APPLIED_PRICE   applied_price=PRICE_CLOSE; // тип цены 

double      Base[];     // массив для BASE_LINE индикатора iBands
double      Upper[];    // массив для UPPER_BAND индикатора iBands
double      Lower[];    // массив для LOWER_BAND индикатора iBands

int iBands1_handle; //Указатель на первый индикатор 
int iBands2_handle; //Указатель на первый индикатор 

int g_i_Window;


int OnInit()
  {
   g_i_Window=ChartWindowFind();
   SetIndexBuffer(0,Base,INDICATOR_DATA);
   SetIndexBuffer(1,Upper,INDICATOR_DATA);
   SetIndexBuffer(2,Lower,INDICATOR_DATA);
           
   iBands1_handle=iBands(NULL,PERIOD_CURRENT,peroid,bands_shift,deviation,applied_price);

   if(iBands1_handle==INVALID_HANDLE){
         Alert("Неудалось загрузить индикатор, повторите попытку");
         return(-1);
         }
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate (const int rates_total,      // размер входных таймсерий 
                 const int prev_calculated,  // обработано баров на предыдущем вызове
                 const datetime& time[],     // Time 
                 const double& open[],       // Open 
                 const double& high[],       // High 
                 const double& low[],        // Low 
                 const double& close[],      // Close 
                 const long& tick_volume[],  // Tick Volume 
                 const long& volume[],       // Real Volume 
                 const int& spread[])         // Spread 
  {
   int i;
   int shift = 0;
   int shift1;
   int shift2;
   int shift3;
   string alert;
   
   double O, O1, O2, C, C1, C2, L, L1, L2, H, H1, H2;
      shift1 = shift;
      shift2 = shift + 1;
      shift3 = shift + 2;   
      O = open[shift1];
      O1 = open[shift2];
      O2 = open[shift3];
      H = high[shift1];
      H1 = high[shift2];
      H2 = high[shift3];
      L = low[shift1];
      L1 = low[shift2];
      L2 = low[shift3];;
      C = close[shift1];
      C1 = close[shift2];
      C2 = close[shift3]; 
   
   i = (prev_calculated==0)?1: prev_calculated;
   i = (prev_calculated==rates_total)?rates_total-1: i;
   
   CopyBuffer(iBands1_handle,0,0,rates_total-1,Base);
   CopyBuffer(iBands1_handle,1,0,rates_total-1,Upper);
   CopyBuffer(iBands1_handle,2,0,rates_total-1,Lower);

   for (i = i; i < rates_total; i++)
   {
    if(H > L && O > Lower[i])
    {
     int time_waiting = (int)TimeLocal() + 1;
     while(TimeLocal() < time_waiting){}
     Comment("True");
     return(0);
    }
     else Comment("False"); 
   }
   
   
   if (prev_calculated==0) ChartRedraw();   
   return(rates_total);
  }

結果


 
Aleksey Vyazmikin:

できません。

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

バグ、バグ、質問

アレクセイ・ビクトロフ さん 2018.05.30 15:53

まあ、それほどダイナミックなものではありませんが、一度再初期化することで可能です。しました。


 
Alexey Viktorov:

詳しく説明できる場合は、記述してください。

 
Andrii Djola:

もうちょっと具体的に言うと

どのくらい詳しいですか?

ある場面で、カラーバーやカラーローソク足を作る必要がありました。4つのバリューバッファと 1つのカラーバッファを使用します。もう1つは、カラーラインを表示する必要があり、1つの値バッファと1つのカラーバッファを使用します。

インジケーターのプロパティを呼び出したり変更したりすると、インジケーターの初期化が行われます。従って、設定にバーやローソク足が含まれている場合は、初期化の1つの選択肢となります。行の場合、初期化のもう一つのオプション。

インジケーターの途中でバッファの数を変更することは不可能であり、他の選択肢を意識せずにAlexey Vyazmikinが言ったことである。

 
Alexey Viktorov:

どこまで詳しく?

ある場面で、カラーバーやカラーローソク足を作る必要がありました。4つのバリューバッファと 1つのカラーバッファを使用します。もう一つは、カラーラインを表示する必要があり、1つの値バッファと1つのカラーバッファが必要でした。

インジケーターのプロパティを呼び出したり変更したりすると、インジケーターの初期化が行われます。従って、設定にバーやローソク足が含まれている場合は、初期化の1つの選択肢となります。行であれば、別の初期化オプション。

Alexey Vyazmikinが言ったように、インジケーターの途中でバッファの数を変更することは、他の選択肢を意識しなければ不可能です。

私の苗字をロシア語で書こうと思ったら、Vyazmikinと聞こえますね。

私の疑惑についてですが、出された質問に対しての回答は正しいと思います。ニーズの説明がなければ、そうでないことを言っても意味がない。再初期化はプログラムの再起動であり、設定で何でも変更できることは明らかである。

 
Aleksey Vyazmikin:

私の苗字をロシア語で書くと、Vyazmikinと聞こえます。

私の疑惑について - 投げかけられた質問への回答は正しいと思います。ニーズの説明がなければ、そうでないと言っても仕方がない。再初期化は、プログラムの再起動であり、設定で何かを変更できることは明らかである。

ソフトの看板がないことが、そんなに気に障るのでしょうか。

私は不正解の話をしましたか?私の意見では、まさに正解を強調したのです。

 
alph:
リアルなテスターフィギュアなのかどうか、教えてください。また、3000円の保証金で1年間は良い結果なのか悪い結果なのか?
をリアルに再現します。
 
Alexey Viktorov:

ソフトの看板がないのがそんなに気に障るのか?

私は、悪意ではなく、悟りを求めているのです。なぜ私が気を悪くするのか、スペルを知っていて気を悪くさせたいのか?その選択肢は考えもしなかった、無駄だったのか?

 
Aleksey Vyazmikin:

私は、恨みではなく、悟りを開くことを動機としています。なぜ私が怒られなければならないのか、正しい書き方を知っていて怒らせたかったのでしょうか?その選択肢は考えもしなかった、無駄だったのか?

平和、友情、チューインガム。

 
Alexey Viktorov:

平和、友情、ガム。

ハーフリットルの方は?

理由: