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

 

このような配列から取得する方法について、どなたかご提案いただけないでしょうか。

int array[15]= {0,0,5,5,5,1,9,9,9,0,2,2,1,0,0};

配列中に3つ以上並んでいる数字,すなわち "5 "と "9 "の値を取得します。

の種類を取得する必要があります。

value1=9とする。

value2=5とする。

または配列value[]={9,5}とする。

2日前からwhile doで頭を悩ませていますが、スキームがわかりません。

 
Fast235:

このような配列から取得する方法について、どなたかご提案いただけないでしょうか。

配列中に3つ以上並んでいる数字,すなわち "5 "と "9 "の値を取得します。

の種類を取得する必要があります。

value1=9とする。

value2=5とする。

または配列value[]={9,5}とする。

2日目 while do の仕組みがわからない。

をスケッチしたが、それは正面から解決した、一般的に動作するが、私の解決策を好きではなかった。

//+------------------------------------------------------------------+
void OnStart()
{
   int array[15] = {0, 0, 5, 5, 5, 1, 9, 9, 9, 0, 2, 2, 1, 0, 0};
   int arrrepeat[];
   getRepeatNumbers(array, arrrepeat);
   ArrayPrint(arrrepeat);
}
//+------------------------------------------------------------------+
void getRepeatNumbers(const int &inArr[], int &result[])
{
   ArrayFree(result);
   for(int i = 0; i < ArraySize(inArr) - 1; i++)
   {
      if(getRepeatCount(inArr, i) > 1)
      {
         int sz = ArraySize(result);
         ArrayResize(result, sz + 1);
         result[sz] = inArr[i];
      }
   }
}
//+------------------------------------------------------------------+
int getRepeatCount(const int &arr[], const int pos)
{
   int result = 0;
   for(int i = pos + 1; i < ArraySize(arr) - 1 && arr[i] == arr[pos]; i++)
   {
      result++;
   }
   return(result);
}
//+------------------------------------------------------------------+

2020.09.10 11:51:26.323 tst (EURUSD,M5) 5 9

 
Igor Makanu:

をスケッチしたが、真正面から決めた、一般的に動作するが、私の解決策を好きではなかった。

2020.09.10 11:51:26.323 tst (EURUSD,M5) 5 9

ありがとうございます、アクションが多すぎる

ループの中で解決策を見つけたいので、continue;とbreak;演算子を使って みます。

新しいバーのたびにインジケーターバッファから取得する必要があります prev_calculate-100 約

 
Fast235:

ありがとうございます、アクションが多すぎる

ループの中で解決策を見つけたいのですが、continue;とbreak;の演算子を使って みます。

新しいバーのたびにインジケーターバッファから取得する必要があります prev_calculate-100 or so

それは面倒ではありません、私は他のバリアントを探していなかったとして、私はそれを好きではなかった - 私はいつもそのようにそれを行う。

2つ目の関数のループを1つ目の関数の本体に追加する。肩の力が抜ける


ブレイクがあってもなくても、この問題は2ループで 解決するのだから......。が、正確ではありません!- にする)

 
Igor Makanu:

面倒くさくない、他の選択肢を探さなかったので好きではない - いつもこの方法でやっています。

第二関数のループを、第一関数の本体に導入する。肩の力が抜ける


ブレイクがあってもなくても、この問題は2ループで 解決するのだから......。が、正確ではありません!- にする)

ガチャガチャやってみる、わかったら書く

 
Fast235:

試しにやってみて、うまくいったら教えてください。

一発で解決です)))
 
Igor Makanu:

面倒くさくない、他の選択肢を探さなかったので好きではない - いつもこの方法でやっています。

第二関数のループを、第一関数の本体に導入する。肩の力が抜ける


ブレイクがあってもなくても、この問題は2ループで 解決するのだから......。が、正確ではありません!- にする)

というエラーが発生した場合、キューにある「9」が3つではなく、4つになると、結果は

5 9 9 2


 
Fast235:

のエラーで、キューにある「9」が3つではなく4つだった場合、その結果は

5 9 9 2


だから、自分の解答が気に入らないって言ったのに......。

ダラダラしすぎてまた書けません。

array find repetitions」でググってみると、何か見つかると思います。

 
Fast235:

このような配列から取得する方法について、どなたかご提案いただけないでしょうか。

配列中に3つ以上並んでいる数字,すなわち "5 "と "9 "の値を取得します。

の種類を取得する必要があります。

value1=9とする。

value2=5とする。

または配列value[]={9,5}とする。

二日目のスキームがわからない。

int qty[10]; // счётчики по цифрам

int total; // всего элементов в исходном массиве arr[]

int code=arr[0]; // текущая цифра

int count=1; // кол-во повторов

for(int i=1;i<total;i++) {

if (arr[i]!=code) { if (count>qty[code]) qty[code]=count;  code=arr[i]; count=1;}

        else count++;

}

if (count>qty[code]) qty[code]=count; 

/// в массиве qty - требуемое

arr[]要素の許容性(桁数であること)のチェックを味付けに追加した

 

皆さん、ごきげんよう。
MT-4テスターでmql4を使ってアルゴリズムをテストしています。入札価格を小数点以下5桁でログ出力するPrint()関数が必要です。しかし、小数点以下4桁までしか表示されない。NormalizeDouble(Bid,Digits) 関数を使って5桁目を追加してみました。

私のミスがあれば修正する方法を教えてください。
以下は私のコードです。

void OnTick()
{
Print("=======Bid ========= ",NormalizeDouble(Bid,Digits) );

}


同時に、ある注文の始値と終値を(SLとTPで) print() すると、 NormalizeDouble()や他の関数の 助けがなくても、 print()は5(5)桁で価格を 表示します。
皆さん、ありがとうございました。