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

 
Maxim Kuznetsov:

しかし、グローバルな目標を持たずに、適当にデータを並べ替えるのはやめましょう。

現在のプロジェクトより:(短い)配列を受け取り、出力は正しい順番の要素のインデックスです。

void BubleSortIndex5(double &data[5],int &index[5])
{
   for(int i=0;i<5;i++)
      index[i]=i;
   for(int i=0;i<4;i++) {
      for(int j=1;j<5;j++) {
         if (data[index[i]]>data[index[j]]) {
            int tmp=index[i];
            index[i]=index[j];
            index[j]=tmp;
         }
      }
   }
}


大きな配列の場合、ソートアルゴリズムを変更する必要がある(バブリングは大きな配列では機能しない) - 変更する。

メインメッセージは、「オリジナルデータに手を出すな」です。参照で操作するか、配列のインデックスで操作するのが良い。そうでなければ、後でひどく必要となる情報が失われてしまう。

ありがとうございました

"......リンクで 操作するか、配列のインデックスで 操作するとよりよい。そうしないと、後で必要になる情報が失われてしまう......」。

リファレンス操作というのは初めて知りました。リファレンスで操作するのとソースデータで操作するのとの違いを理解するために、どこで読めるか教えていただければ幸いです。コバレフの教科書にはそのような話題はなかったと記憶しています。

 

同僚、ろうそくの希望の音量になると音が出なくなるのはなぜか、アドバイスしてください。

サウンドファイルはSOUNDSフォルダにあり、アラートを設定するとファイルは正常に再生されますが、インジケーターに音が出ません。

それとも、インジケーター用の音が入った専用のフォルダが必要なのでしょうか?


/----インジケータ計算の メインループ

for(bar=limit; bar>=0 && !IsStopped(); bar--)
{
Range=(high[bar]-low[bar])/_Point;
IndBuffer[bar]=Range;

if(Range<5)
{
if (prev_calculated > 0 && Flag==0)
{
Flag=1;
}
}
if(Range>=Threshold){
clr=0;
if (prev_calculated > 0 && Flag==1 )
{
Flag=0;

PlaySound("zummer");


}
}.

ファイル:
 
ANDREY:

迅速な対応をしていただき、ありがとうございました。私の場合、配列 要素の各値は一意であり、単一のインスタンスに存在します。つまり、値5は、他の値と同様に、繰り返されることはないのです。

私の場合、値5はソートされていない配列の中に存在しないかもしれません。
しかし、値5がソートされていない配列にない場合、ArrayBsearch() 関数の第2パラメータに値5を指定することはできません。ソートされていない配列に必ず存在する値のみが、この関数に 取り込まれます。
よろしくお願いします。

配列をソート するつもりがないのに、なぜArrayBsearch() が必要なのでしょうか?数字を見つけるには、探している数字と配列のセル内の数字を単純に交互に比較するだけでよいのです。探している番号がなければ、偽の番号を返せばいいだけです。

//+------------------------------------------------------------------+
//|                                                  FindInArray.mq4 |
//|                                       Copyright 2020, © Cyberdev |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, © Cyberdev"
#property version   "1.00"
#property strict

#property script_show_inputs

#define  size1 2 
#define  size2 10

input double value = 5;
input int index = 0;

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int vIndex = -1;

bool searshValue(double & array2D[2][], const int _len, const int _index, const double _value) {
  int i;
  for(i = 0; i < _len; i++) {
    if(NormalizeDouble(array2D[_index][i], _Digits) == NormalizeDouble(_value, _Digits)) {
      vIndex = i;
      return true;
    }
  }
  return false;
}

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart() {
  double array[size1][size2] = {
    {10,9,8,7,6,5,4,3,2,1}, 
    {10,3,8,9,2,1,1,8,8,6}
  };
  
  if(searshValue(array, size2, index, value)) 
    Print("value1 array["+(string)index+"]["+(string)vIndex+"]: ", array[index][vIndex]);
  else
    Print("Value: "+(string)value+" not found!");
}
//+------------------------------------------------------------------+
 
Mihail Matkovskij:

では、配列のソートを 全く行わないのであれば、なぜArrayBsearch()が必要なのでしょうか数字を見つけるには、探している数字と配列のセル内の数字を1つずつ比較すればいいのです。探している番号がなければ、偽の番号を返せばいいだけです。

ありがとうございました。おかげさまで、有益な情報を得ることができ、MQL4の知識を深めることができました。

 
ANDREY:

ありがとうございました。おかげさまで、MQL4について貴重な情報を得ることができ、視野と知識を広げることができました。

お役に立ててうれしいです。

 
Mihail Matkovskij:

では、配列のソートを 全く行わないのであれば、なぜArrayBsearch()が必要なのでしょうか数字を求めるには、探している数字と配列のセル内の数字を単純に交互に比較するだけでよいのです。探している番号がない場合は、偽の番号を返せばよい。

という機能は正しく理解されていますか?

searshValue ()

MQL4からではなく、MQL5 からもではないのですか?

 
Mihail Matkovskij:

お役に立ててうれしいです。

あなたのような人がもっとたくさんいれば......喜んで助けてくれるのに......。

 
ANDREY:

という機能は正しく理解されていますか?

MQL4からではなく、MQL5からも ではないのですか?

https://www.mql5.com/ru/forum/160683/page1208#comment_17279150 をよく見てください。何も見つからなかったんですか?

この機能

bool searshValue(double & array2D[2][], const int _len, const int _index, const double _value) {
  int i;
  for(i = 0; i < _len; i++) {
    if(NormalizeDouble(array2D[_index][i], _Digits) == NormalizeDouble(_value, _Digits)) {
      vIndex = i;
      return true;
    }
  }
  return false;
}
もうちょっと丁寧にやってくれよー。
Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
  • 2020.07.09
  • www.mql5.com
В этой ветке я хочу начать свою помощь тем, кто действительно хочет разобраться и научиться программированию на новом MQL4 и желает легко перейти н...
 

こんにちは、私は助けを必要とする、私は私の資金を撤回したくない証券会社を通じて、このプラットフォーム上で開かれたアカウントを持って、私は何をすべきですか?

 
Ботагоз Битабарова:

こんにちは! 私は助けを必要とする、このプラットフォームでは、私の資金を撤回したくない証券会社を通じて、私のためにアカウントを開設し、何をすべきか?

この資料は、証券会社とは関係ありません。