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

 

谁能建议一个方案,如何从这样的数组中获得

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

得到数组中3个或3个以上的数字,即 "5 "和 "9 "的值。

需要得到的类型

value1=9。

value2=5。

或数组value[]={9,5}。

我一直在思索,而做了两天,无法弄清这个计划。

 
Fast235:

谁能建议一个方案,如何从这样的一个数组中获得

得到数组中3个或3个以上的数字,即 "5 "和 "9 "的值。

需要得到的类型

value1=9。

value2=5。

或数组value[]={9,5}。

第二天,我搞不清楚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_calculat-100 大约

 
Fast235:

谢谢,行动太多

我想在循环中找到一个解决方案。 我将尝试使用continue;和break;操作符

它必须在每个新条目的prev_calculat-100左右从指标缓冲区中提取。

它并不繁琐,我不喜欢它,因为我没有寻找其他的变体--我总是这样做。

将第二个函数的循环.... 到第一个函数的主体中。身体上的努力会减少


无论有无断裂 - 这个问题将在2个循环中得到解决,反正....。但这并不准确!- 决定;)

 
Igor Makanu:

不繁琐,不喜欢,因为我没有寻找其他的选择--我总是这样做的

将第二个函数的循环引入第一个函数的主体....。身体上的努力会减少


无论有无断裂 - 这个问题将在2个循环中得到解决,反正....。但这并不准确!- 决定;)

我试着弄一下,如果我弄好了,我就写。

 
Fast235:

我给它一个机会,让你知道它是否有效。

一下子就解决了))))。
 
Igor Makanu:

不繁琐,不喜欢,因为我没有寻找其他的选择--我总是这样做的

将第二个函数的循环引入第一个函数的主体....。身体上的努力会减少


无论有无断裂 - 这个问题将在2个循环中得到解决,反正....。但这并不准确!- 决定;)

错误,如果队列中有四个 "9",而不是三个,结果将是

5 9 9 2


 
Fast235:

错误,如果队列中有四个 "9 "而不是三个,结果是

5 9 9 2


我告诉你,我不喜欢我的解决方案(())。

太懒了,不想再写了。

谷歌 "阵列查找重复"--我想你会找到一些东西的

 
Fast235:

谁能建议一个方案,如何从这样的一个数组中获得

得到数组中3个或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测试该算法。我需要Print()函数来输出小数点后5位的买入价。但它只能打印出4(四)个小数位。我使用NormalizeDouble(Bid,Digits) 函数来增加第五位数字

如果我的错误存在,请告诉我如何纠正。
以下是我的代码。

空白的OnTick()
{
Print("=======Bid ======= ",NormalizeDouble(Bid,Digits))。

}


同时,如果我打印()一个订单的开盘价和收盘价(通过SL和TP),Print()打印的价格是5(5)位,即使没有NormalizeDouble() 帮助,也没有任何其他函数的帮助
谢谢大家的帮助。

原因: