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

 

親愛なるプログラマーの皆さん、こんばんは!

簡単な問題を解決するのを手伝ってください。MQL4のコードがあります。それを5に適応させたいのです。つまり、MQL5でも同じように動くようにしたいのです。


//Введем внешнюю переменную, чтобы иметь возможность изменить количество сканируемых свечей.
extern int Window=30;
 
void OnStart()
{
   //Вводим переменные.
   double Highest=High[0];
   double Lowest=Low[0];
 
   //Сканируем 30 свечей и обновляем значения самых высоких и самых низких цен.
   for(int i=0; i<=Window; i++) {
   if(Low[i]<Lowest) Lowest=Low[i];
   if(High[i]>Highest) Highest=High[i];  
}
 
   //Выводим результат.
   Alert("Самая высокая цена ",Highest," - Самая низкая цена ",Lowest);
}



私のバリアントは明らかにパスしません、なぜかエラーがたくさんあります):

//Введем внешнюю переменную, чтобы иметь возможность изменить количество сканируемых свечей.
extern int Window=30;
 
 
void OnStart()
{

double   o = iOpen(NULL, PERIOD_CURRENT, 0);
double   h = iHigh(NULL, PERIOD_CURRENT, 0);
double   l = iLow(NULL, PERIOD_CURRENT, 0);
double   c = iClose(NULL, PERIOD_CURRENT, 0);

double Highest=h;
double Lowest=l;

   //Сканируем 30 свечей и обновляем значения самых высоких и самых низких цен.
     
   for(int i=0; i<=Window; i++) 
{
   if  ( l[i] < Lowest ) 
   Lowest=[i];
  

   if  ( h[i] > Highest ) 
   Highest=[i];  
  
}
 
   //Выводим результат.
   Print("Самая высокая цена ",Highest,
         " - Самая низкая цена ",Lowest);
}
 
 
Alexey Belyakov #:

親愛なるプログラマーの皆さん、こんばんは!

簡単な問題を解決するのを手伝ってください。MQL4のコードがあります。それを5に適応させたいのです。つまり、MQL5でも同じように動作する必要があります。


ヘルプの

iHigh

と似たような関数

うまくいかない場合は、ループにエラーがある。

また、どの変数にデータを追加しているのかがわかりません。

 
lynxntech #:

ヘルプを見る

と同様の機能

うまくいかない場合は、ループにエラーがあります。

どの変数にデータを追加しているのかがわからない。

Highest/Lowestは表示されるはずです。

これを見ると

int val_index=iLowest(NULL,0,MODE_CLOSE,10,1);

非常に近いですが、まだです。

さて、これは最も低いローソク足の最後の10本(最初の "1 "から始まる)の本数を表示します。しかし、ローソク足番号ではなく、価格の値が必要です。

 

一般的に、後方を見るのではなく、前方を見る必要があります。

例:次の100本のローソク足の間に前のローソク足(番号 "1 "である)の先頭から "最小値 "を検索します。

 
lynxntech #:

問題は、実際の作業を測定した人たち、そして開発者たちにあるのだ。

私は実験をしたくない

そうですね。王室のビジネスではない.......

 
Alexey Viktorov #:

その通りだ。王様の仕事じゃない。

初心者からの質問スレッドは閉じた方がいいのでは?アレクセイ、手伝いたくないなら関わらないでくれ、あなたからの苦情が多すぎる。

私は、このプラットフォームがどのように機能するのかを知るために、専門的な回答に興味がありました。

 
Alexey Belyakov #:

親愛なるプログラマーの皆さん、こんばんは!

簡単な問題を解決するのを手伝ってください。MQL4のコードがあります。それを5に適応させたいのです。つまり、MQL5でも同様に動作する必要があります。




私のバリアントは明らかに動作しません、なぜかエラーがたくさんあります):

どうやらあなたはプログラミングにまったく慣れていないようだ。だからどんなアドバイスを受けても、今のところ 成功しない。

しかし、それでも...関数

int  CopyHigh(
   string           symbol_name,      // имя символа
   ENUM_TIMEFRAMES  timeframe,        // период
   int              start_pos,        // откуда начнем 
   int              count,            // сколько копируем
   double           high_array[]      // массив для копирования максимальных цен
   );

という関数と、配列を扱う関数について理解してください。

int  ArrayMaximum(
   const void&   array[],             // массив для поиска
   int           start=0,             // с какого индекса начинаем поиск
   int           count=WHOLE_ARRAY    // количество проверяемых
   );

この問題を解く方法は他にもある。

 
Alexey Belyakov #:

親愛なるプログラマーの皆さん、こんばんは!

簡単な問題を解決するのを手伝ってください。MQL4のコードがあります。それを5に適応させたいのです。つまり、MQL5でも同じように動作する必要があります。




私のバリアントは明らかに動作しません、なぜかエラーがたくさんあります):

インジケータの束の代わりにCopyRates()を使えば、コードの編集は最小限になり、コードはコンパクトで読みやすくなります。

//Введем внешнюю переменную, чтобы иметь возможность изменить количество сканируемых свечей.
extern int Window=30;
 
void OnStart()
{
   //Вводим переменные.
   double Highest=DBL_MIN;// 
   double Lowest=DBL_MAX; // 
   MqlRates rates[];
   //Сканируем 30 свечей и обновляем значения самых высоких и самых низких цен.
   if (CopyRates(_Symbol,_Period,30,rates)!=30) {
      Alert("copyRates failed");
      return;
   }
   for(int i=0; i<=Window; i++) {
      if(rates[i].low<Lowest) Lowest=rates[i].low;
      if(rates[i].high>Highest) Highest=rates[i].high;  
   }
 
   //Выводим результат.
   Alert("Самая высокая цена ",Highest," - Самая низкая цена ",Lowest);
}

実際には、カーブした引用符のチェックも追加する必要があります。

 
Maxim Kuznetsov #:

CopyRates()をインジケータの束の代わりに使用することで、コードの編集は最小限になり、コードはコンパクトで読みやすいままとなる。

実際には、カーブした引用符のチェックも追加する必要があります。

マキシム、CopyRatesはシンボルの機能をすべて備えているように見えますが?

より安価な個々の関数があります。

 
lynxntech #:

マキシム、コピーレートはそのキャラクターのすべての特徴を得るものとして提示されているのでは?

個々の特徴がある

1)開発者の言葉によれば、仮想コピー、つまり可能であればデータは転送されず、内部参照が転送される。 2)完全コピーであっても、iHigh,iLowを別々にコピーするCopyBufferよりも高速である(2回の呼び出しではなく1回の呼び出しで、それでも同じ端子構造に入る)。

最後に、重要なことですが、移植する場合、コードが視覚的にもオリジナルにできるだけ似ていることが非常に重要です。コードがオリジナルとまったく同じことをすることを、絶対に確認しなければならない。そして、小さな最適化はその後で、本当に重要なところだけ行う。

理由: