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

 
Andrey Sokolov:

このエントリーの意味を教えてください。

int i,limit=prev_calculated==0 ?rates_total-1 : rates_total-prev_calculated;

"==" , "?", ": "

?

Документация по MQL5: Основы языка / Операторы / Условный оператор ?:
Документация по MQL5: Основы языка / Операторы / Условный оператор ?:
  • www.mql5.com
В качестве первого операнда – "выражение1" – может быть использовано любое выражение, результатом которого является значение типа bool. Если результат равен , то выполняется третий операнд – "выражениеЗ". Второй и третий операнды, то есть "выражение2" и "выражениеЗ", должны возвращать значения одного типа и не должны иметь тип void...
 
ひどすぎる!Expert Advisorのロジックをトレースして、修正したり、追加したりできれば......。インジケーターのコードが全く理解できない(
 
prom18:

イゴールさん、ありがとうございます。正しく定式化できていない。指定した本数(ここでは50本)のバーを 対象に、別ウィンドウで計算・描画するインジケーターです。MAを表示するには、始値ではなく、その日の最初のバーが必要です。でも、とにかく、ありがとうございました。

read SetIndexDrawBegin() - これはインジケータバッファを描画するための制限であり、決して使用されません。

とか、私の例ではそのようにすることができます。

input int BarCount = 50;
....

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 i,limit;
   static double dayopen=0.0;
   static int lastday=0;
   if(prev_calculated==0)
     {
      limit=rates_total-1;
      dayopen=0.0;
      lastday=0;
     }
   else limit=rates_total-prev_calculated;
   limit = fmin(BarCount,limit);
   for(i=limit; i>=0; i--)
     {
      if(TimeDay(time[i])!=lastday)
        {
         dayopen=open[i];
         lastday= TimeDay(time[i]);
        }
      Label1Buffer[i]=dayopen;
     }
   return(rates_total);
  }

すなわち、インジケータ・バッファの計算をBarCountの 設定に制限する。

 
Andrey Sokolov:

このエントリーの意味を教えてください。

int i,limit=prev_calculated==0 ?rates_total-1 : rates_total-prev_calculated;

"==" , "?", ": "

?

https://docs.mql4.com/ru/basis/operators/ternary


最初のバージョンでは、TFを切り替えると正しく動作しないので、dayopenとlastdayをリセットする必要があります。

Условный оператор ?: - Операторы - Основы языка - Справочник MQL4
Условный оператор ?: - Операторы - Основы языка - Справочник MQL4
  • docs.mql4.com
В качестве первого операнда – "выражение1" – может быть использовано любое выражение, результатом которого является значение типа bool. Если результат равен , то выполняется третий операнд – "выражениеЗ". Второй и третий операнды, то есть "выражение2" и "выражениеЗ", должны возвращать значения одного типа и не должны иметь тип void...
 
Artyom Trishkin:

参照渡しされた関数パラメータ内のインデックスも返します。

返却されました。

double GetPatt5barsDN()
{
double low3 = 0;
int index = 0;
for(int i=1; i<20; i++)
{
もし
((Close[i]>Open[i])&&(Close[i])です。
(Close[i+1] > Open[i+1]) && (Close[i+1] > Open[i+1])
(Close[i+2] > Open[i+2]) && //このローソク足でLow[i+2]が必要です。
(Close[i+3] < Open[i+3]) && (Close[i+3] < Open[i+3])
(クローズ[i+4] < オープン[i+4])

Low3 = Low[i+2];
index = i+2 とする。
}

return(low3)です。
return(index)です。
}


次に何をすればいいのでしょうか?

 
Sfinks35:

返却されました。

double GetPatt5barsDN()
{
double low3 = 0;
int index = 0;
for(int i=1; i<20; i++)
{
もし
((Close[i]>Open[i])&&(Close[i])です。
(Close[i+1] > Open[i+1]) && (Close[i+1] > Open[i+1])
(Close[i+2] > Open[i+2]) && //このローソク足でLow[i+2]が必要です。
(Close[i+3] < Open[i+3]) && (Close[i+3] < Open[i+3])
(クローズ[i+4] < オープン[i+4])

Low3 = Low[i+2];
index = i+2 とする。
}

return(low3)です。
return(index)です。
}


次に何をすればいいのでしょうか?

それでは取り返しがつかない。


こんな感じ。

int GetPatt5barsDN()
      {
       double low3 = 0;
       int index = 0;
       for(int i=1; i<20; i++)
          {
            if
            ((Close[i] > Open[i]) &&  
            (Close[i+1] > Open[i+1]) &&
            (Close[i+2] > Open[i+2]) && //На этой свече нужен Low[i+2]
            (Close[i+3] < Open[i+3]) &&  
            (Close[i+4] < Open[i+4]))
             
            low3 = Low[i+2];
            index = i+2;
          } 
           
          return(index);
      }


さらに

double min = Low[GetPatt5barsDN()];
 
Sfinks35:

返却されました。

double GetPatt5barsDN()
{
double low3 = 0;
int index = 0;
for(int i=1; i<20; i++)
{
もし
((Close[i]>Open[i])&&(Close[i])です。
(Close[i+1] > Open[i+1]) && (Close[i+1] > Open[i+1])
(Close[i+2] > Open[i+2]) && //このローソク足でLow[i+2]が必要です。
(Close[i+3] < Open[i+3]) && (Close[i+3] < Open[i+3])
(クローズ[i+4] < オープン[i+4])

Low3 = Low[i+2];
index = i+2 とする。
}

return(low3)です。
return(index)です。
}


次に何をすればいいのでしょうか?

パラメータを参照してインデックスを返すのはどこだ?

そして、コードを正しく挿入してください。


 
MQL4には、気配値が小数点以下5桁か4桁か、資産の小数点以下の桁数が何桁か(例えばEURJPYは小数点以下2桁、EURUSDは小数点以下4桁)を検出する機能はありますか?
 
Seric29:
MQL4には、小数点以下5桁や4桁といった口座タイプから相場を特定できる機能はありますか?例えばEURJPYは小数点以下2桁、EURUSDは小数点以下4桁といったように、資産の小数点以下のゼロの数を特定する方法は何でしょうか?

https://docs.mql4.com/ru/predefined/digitsvar

Digits - Предопределенные переменные - Справочник MQL4
Digits - Предопределенные переменные - Справочник MQL4
  • docs.mql4.com
Digits - Предопределенные переменные - Справочник MQL4
 
Artyom Trishkin:

パラメータを参照してインデックスを返すのはどこだ?

そして、コードを正しく挿入してください。


こんにちは。
私は今、それを手に入れたようです。
double GetPatt5barsDN(int &index)
      {
       double low3 = 0;
       for(int i=1; i<20; i++)
          {
            if
            ((Close[i] > Open[i]) &&  
            (Close[i+1] > Open[i+1]) &&
            (Close[i+2] > Open[i+2]) && //На этой свече нужен Low[i+2]
            (Close[i+3] < Open[i+3]) &&  
            (Close[i+4] < Open[i+4]))
             
            low3 = Low[i+2];
            index = i+2;
          }           
     return(low3);
     }

しかし、コンパイル時に「行内で型変換を行うため、データが失われる可能 性がある」という警告が発生します。
index = GetPatt5barsDN(index);

double low3 = 0;
   int index = 0;
   low3 = GetPatt5barsDN(index);
   index = GetPatt5barsDN(index);
   Print("low3= ", low3);
   Print("index= ", index);

コンパイル時に関数ヘッダ(または関数自体)にエラーはない。