将开放的职位分成若干组 - 页 5

 
Alexey Viktorov:

用大量的什么?阵列项目 甚至没有在每次打勾时被填满?它将如何被注意到?

这个代码刺痛了眼睛,仿佛是故意让它变得更糟。

好吧,如果没有什么区别,我们就这样做吧。

for(int i = 0; i < 10; i++)
   {
    ArrayResize(arrTest, i+1);
    arrTest[i][0] = iOpen(_Symbol, PERIOD_CURRENT, i);
    arrTest[i][1] = iClose(_Symbol, PERIOD_CURRENT, i);

    for(int j=0;j<100;j++)
    Sleep(1);
   }

为什么不呢?

ArrayResize(arrTest, 10);
for(int i = 0; i < 10; i++)
  {
    arrTest[i][0] = iOpen(_Symbol, PERIOD_CURRENT, i);
    arrTest[i][1] = iClose(_Symbol, PERIOD_CURRENT, i);
  }
 
Aliaksandr Hryshyn:

这个代码刺痛了眼睛,仿佛是故意让它变得更糟。

如果没有什么区别,我们就这样做。

为什么?

ps;啊,我明白了。嗯,这是一个例子。当工作数组被填充时,肯定会被一个索引填充。不是你必须注意这种细微差别的变体。
 
Alexey Viktorov:

为什么?

可能是为了在事先知道大小的情况下,你让数组在循环内变化的原因。

我不知道具体原因 :)。

你是自由职业者,对吗!?太可怕了 :)。

 
Aliaksandr Hryshyn:

可能是为了在事先知道大小的情况下,你让数组在循环内变化的原因。

我不知道具体原因 :)。

你是自由职业者,对吗!?太可怕了 :)。

那么它是什么呢?

 
Alexey Viktorov:

那是垃圾。我没有看手册就使用了这个功能,...

它的工作,非常感谢你!!!。我写的确实是废话,ArrayRemove 删除函数 对任何维度的数组都能正常工作

错误在其他地方。应用该函数后,我不得不重新定义它,这次是一个较小的数组,因为在下一步中,这个变量又被用于循环,数组超出了范围(我的术语可能有误,但我希望我说得很清楚)。

我将在下面和附件文件中发布工作版本。突出了微妙的要点。

//+------------------------------------------------------------------+
int Array_Caste_Positions_Creating(){
   int  n           = 0;
   long ticket      = 0;
   bool new_pos     = true;
//---Запись новых тикетов в массив позиций        
   int All_Position = PositionsTotal();
   int Array_Size   = ArrayRange(Arr_Position,0);
//---  
   for(int i = 0; i < All_Position; i++){
      if(m_position.SelectByIndex(i)){
         ticket  = PositionGetInteger(POSITION_TICKET);
         new_pos = true;}
      for(int e = 0; e < Array_Size; e++){
         if(Arr_Position[e][0]==ticket){
            new_pos = false;
            n++;
            break;}}
      if(new_pos){
         int New_Size = Array_Size+1;
         ArrayResize(Arr_Position,New_Size,0);
            Arr_Position[Array_Size][0] = (int)ticket;//Ticket
            Arr_Position[Array_Size][1] = 0;//Number_Caste (0 = начальные позиции)
            n++;}}                       
//---Удаление из массива мёртвых тикетов 
      Array_Size   = ArrayRange(Arr_Position,0);
      All_Position = PositionsTotal();
//---      
      for(int e = 0; e < Array_Size; e++){
         int  ticket_dead = Arr_Position[e][0];
         bool dead_pos    = true;
         for(int i = 0; i < All_Position; i++){
            if(m_position.SelectByIndex(i)){
                  if(ticket_dead == PositionGetInteger(POSITION_TICKET)){
                        dead_pos = false;
                        n++;
                        break;}}}
         if(dead_pos){
            ArrayRemove(Arr_Position,e,1);
            Array_Size   = ArrayRange(Arr_Position,0);}}
//---     
return(n);}
//+------------------------------------------------------------------+
附加的文件:
Sower_1_6.mq5  19 kb
 

我觉得自己就像一个不守规矩的学生,不知不觉地出现在两位老师的争论中,他们各自坚持自己教学方法的正确性。

请允许我插入我脆弱的三分钱。

尽管Alexey Viktorov 发布的例子的代码有一点不完善,但他提出的想法是正确的,它们帮助我们理解了它。如果一个自由职业者准备并愿意免费提供帮助,而不是试图勒索额外的一分钱--那么请称赞他,我真的很尊重他。谢谢你。

Aliaksandr Hryshyn- 非常感谢你,你也不是无动于衷,真诚地想帮忙,你也做到了。谁知道如果没有你的批评,事件会如何发展?

 
Sergey Voytsekhovsky:

它的工作,非常感谢你!!!。我写的东西确实是胡说八道,ArrayRemove 删除函数 在任何维度的数组上都能正常工作

错误在其他地方。应用该函数后,我不得不重新定义它,这次是一个较小的数组,因为在下一步中,这个变量又被用于循环,数组超出了范围(我的术语可能有误,但我希望我说得很清楚)。

我将在下面和附件文件中发布工作版本。突出了微妙的要点。

快速教程。

在这里,它是

      if(m_position.SelectByIndex(i)){
         ticket  = PositionGetInteger(POSITION_TICKET);

可以用

      t icket = PositionGetTicket(i);
 
Alexey Viktorov:

具备一点识字能力。

这个人

可以用以下方式代替。

很好,如果代码中的其他地方引起拒绝--请给我看,我是一个自制的程序员,我挖的东西,那是我的,知识是不系统的、零散的。我将非常感谢对正确道路的指导。

纠正了,现在是这样的。

//---Запись новых тикетов в массив позиций        
   int All_Position = PositionsTotal();
   int Array_Size   = ArrayRange(Arr_Position,0);
//---  
   for(int i = 0; i < All_Position; i++){
      ticket = (int)PositionGetTicket(i);
      new_pos = true;
      for(int e = 0; e < Array_Size; e++){
         if(Arr_Position[e][0]==ticket){
            new_pos = false;
            n++;
            break;}}
      if(new_pos){
         int New_Size = Array_Size+1;
         ArrayResize(Arr_Position,New_Size,0);
            Arr_Position[Array_Size][0] = (int)ticket;//Ticket
            Arr_Position[Array_Size][1] = 0;//Number_Caste (0 = начальные позиции)
            n++;}}                       
 
Sergey Voytsekhovsky:

很好,如果代码中还有其他导致拒绝的地方--请告诉我,我是一个自制的程序员,我发现的是我的,知识不系统,很零散。如果能在正确的道路上得到指导,我将非常感激。

只是偶尔为之。我不会记下它。事实上,我是自学成才的,也是一个自学成才的老先生。

mql5中的门票是ulong类型

那么就不会有那么多的人加入到这个行列中来了。

 
Alexey Viktorov:

只有在有机会的情况下。我不会去看。一般来说,我也是自学成才,而且是老牌的自学成才者。

mql5中的门票是ulong类型的

那么就不会有那么多的人加入到这个行列中来了。

谢谢你,我会考虑到这一点,以后我会在这里重做。