新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1169

 
Alexandr Sokolov:

它没有进入计算阶段


这里是初始化


而这里是测试条件。

谢谢你!!!!!))))),我是故意Tf=false的,......Forget。咦?

一切正常。
 
Alexey Viktorov:
首先,我们需要决定未来数组第二维中的数值数量。现在我们已经可以看到,元素的数量是不相等的。也许,我们应该取最大的1,然后用零或-1填充,例如,在剩下的额外的1的地方。而且,如果知道第一个维度,事先定义一下也无妨。然后在嵌套循环中取L1,将你需要的所有内容写入数组,然后外循环的第二次迭代将L2中的所有内容写入下一个索引,以此类推。


而且很正确的是,最好把它粘在一个结构里。

然后数组将能够在第一和第二维度上改变尺寸。也就是说,它将是一个一维数组中的一个一维数组。
谢谢你的矢量。
 
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 是一个很酷的东西,非常方便解析划线的字符串。

 
大家好。帮助我在代码中插入一个字符串 变量。谢谢你
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 s;

并用s替换<String>。

但我不认为这是这种方法的出路。

 
Igor Makanu:

你能回答你自己的问题吗?

还是你在什么地方剪掉了一段代码而不能使用它,你至少需要猜测一下发生了什么)))。

写在上面

并用s替换<String>。

但我认为这不是这种方法的解决办法。

我的指标工作了,只是扩展了。字符串 s;已经被添加

好的,我自己会去做。