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

 
Alexandr Sokolov:

計算までいかない


以下は初期化です。


そして、こちらがテスト条件です。

THANK YOU!!!))) I Tf=false on purpose and......Forget .おっと

すべてがうまくいく。
 
Alexey Viktorov:
まず、未来配列の2次元目の値の数を決める必要があります。すでに今、要素の数が等しくないことがわかります。おそらく、最大値を1として、余分な1が残っているところを0や-1などで埋めればいいのでしょう。また、1次元がわかっている場合は、あらかじめ定義しておいても損はないでしょう。そして、入れ子ループでL1を取り、必要なものをすべて配列に書き込み、外側のループの2回目の繰り返しでL2のすべてを次のインデックスに書き込む、といった具合です。 。


そして、かなりきちんと、構造にこだわったほうがいい。

そうすると,配列は1次元と2次元の次元を変更できるようになります.つまり、1次元配列の中の1次元配列になる。
ベクターありがとうございます。
 
stepystr:
ベクターありがとうございます。

パラメータを文字列に書いて、それを使ってパラメータの配列を作る方が得策でもあるというオーダーに、いきなり直面したのだ。理論を実践に移さなければならなかったのです。だから、私のタスクをあなたのタスクに拡張したのです。ここでは、構造体を使った例を紹介します。この例では、値のリストの最後にある区切り文字 ";" を削除する必要があります。

/********************************************************************\
|                                                             00.mq5 |
|                                            © 2020, Alexey Viktorov |
|                       https://www.mql5.com/ru/users/alexeyvik/news |
\********************************************************************/
#property copyright "© 2020, Alexey Viktorov"
#property link      "https://www.mql5.com/ru/users/alexeyvik/news"
#property version   "1.00"
struct TEST
 {
  double             s0[];
  double             s1[];
 } test[2];
string L1 = "1.15110;1.14105;1.13240;1.12370;1.11640;1.11170;1.10655;1.09895;1.08850;1.07850;1.06475";
string L2 = "1.32130;1.31030;1.29860;1.29042;1.27985;1.25605;1.24725;1.23565;1.22505;1.20815;1.20115;1.18850;1.16690;1.14465";
/********************Script program start function*******************/
void OnStart()
 {
  String_to_Array(L1, test[0].s0);
  String_to_Array(L2, test[1].s1);
  ArrayPrint(test[0].s0);
  ArrayPrint(test[1].s1);
 }/******************************************************************/

/********************************************************************/
void String_to_Array(string str, double &array[])
 {
  StringTrimRight(str);
  int index = INT_MAX;
  while(index > 0)
   {
    index = StringFind(str, ";");
    int i = ArraySize(array);
    ArrayResize(array, i+1);
    array[i] = StringToDouble(StringSubstr(str, 0, index));
    StringTrimLeft(str);
    str = StringSubstr(str, index+1);
   }
 };/*****************************************************************/
/*****************************End program****************************/
ファイル:
00.mq5  4 kb
 
Alexey Viktorov:

パラメータを文字列に書いて、それを使ってパラメータの配列を作る方が得策でもあるというオーダーに、いきなり直面したのだ。理論を実践に移さなければならなかったのです。だから、私のタスクをあなたのタスクに拡張したのです。ここでは、構造体を使った例を紹介します。この例では、値のリストの最後にある区切り文字 ";" を削除する必要があります。

struct TEST
{
   double             s0[];
   double             s1[];
} test[2];
string L1 = "1.15110;1.14105;1.13240;1.12370;1.11640;1.11170;1.10655;1.09895;1.08850;1.07850;1.06475";
string L2 = "1.32130;1.31030;1.29860;1.29042;1.27985;1.25605;1.24725;1.23565;1.22505;1.20815;1.20115;1.18850;1.16690;1.14465";
/********************Script program start function*******************/
void OnStart()
{
   String_to_Array(L1, ';', test[0].s0);
   String_to_Array(L2, ';', test[1].s1);
   ArrayPrint(test[0].s0);
   ArrayPrint(test[1].s1);
}/******************************************************************/

/********************************************************************/
void String_to_Array(const string str, const ushort separator, double &result[])
{
   string s_arr[];
   if(StringSplit(str, separator, s_arr) <= 0)
   {
      ArrayResize(result, 0);
      Print(__FUNCTION__ + " Error converting !");
      return;
   }
   ArrayResize(result, ArraySize(s_arr));
   for(int i = ArraySize(result) - 1; i >= 0; i--)
      result[i] = StringToDouble(s_arr[i]);
}
 

チェックなしで、こんなこともできます。

void String_to_Array(const string str, const ushort separator, double &result[])
{
   string s_arr[];
   StringSplit(str, separator, s_arr);
   for(int i = ArrayResize(result, ArraySize(s_arr)) - 1; i >= 0; i--)
      result[i] = StringToDouble(s_arr[i]);
}
 
Igor Makanu:

また、オプションとして私もドキュメントを全部読んでいないことが判明しました。

 
Alexey Viktorov:

また、オプションとして私もドキュメントを全部読んでいないことが判明しました。

StringSplitは クールなもので、区切り文字列のパースに非常に便利です。

 
皆さん、こんにちは。私のコードにString 変数を挿入するのを手伝ってください。ありがとうございました。
ObjectCreate("ObjName11",OBJ_LABEL,0,0,0);
   ObjectSetText("ObjName11","|Direction: ="+ <String>   +"|Spread: ="+IntegerToString(Spread,0)+"|Today: ="+DoubleToStr(ATRToday,2)+"%" ,Size,"Verdana",Red);
   ObjectSet("ObjName11",OBJPROP_CORNER,infoCorner);
   ObjectSet("ObjName11",OBJPROP_XDISTANCE,0);
   ObjectSet("ObjName11",OBJPROP_YDISTANCE,120);
 
Carcass77:
皆さん、こんにちは。String型 変数をコードに挿入するのを手伝ってください。感謝

自分の質問に答えてくれるかな?

とか、どこかのコードを切り取って使えなくなったのか? とか、最低限推測は必要です)))

ぜんしょ

string s;

で、<String>をsに置き換える。

が、このやり方ではダメだと思うんです。

 
Igor Makanu:

自分の質問に答えてくれるかな?

とか、どこかのコードを切り取って使えなくなったのか? とか、最低限推測は必要です)))

ぜんしょ

で、<String>をsに置き換える。

しかし、このやり方では解決にならないと思います。

私のインジケータは、ちょうど拡張して動作しています。

よし、自分でやってみるか。