Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 86

 
trader781:

переделал пост 844 чтоб не писать еще раз сюда код

ну а касаемо массива с нулевым рамером - 0 это может быть целое число, может быть эквивалент булевого фальс, может быть пустотой, а может и стартовой точкой отсчета.

Не важно что вы подразумеваете под значением ноль. Если вы задаёте размер массиву нулём - хоть нулём пряников обзовите его - он будет нулём. А значит и массив будет нулевым.
 
trader781:

переделал пост 844 чтоб не писать еще раз сюда код

ну а касаемо массива с нулевым рамером - 0 это может быть целое число, может быть эквивалент булевого фальс, может быть пустотой, а может и стартовой точкой отсчета.

И, пожалуйста, не заставляйте меня за вас вставлять в нужное сообщение нужный код:

//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#property strict
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
struct myorder
  {
   int               Ticket;
   double            orderopenprice;
   int               ordertype;
   double            profit;
   double            stoploss;
   double            lot;
  };
myorder orders[];

int    i;
int    Magic=444;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   CalcOrders();

  }
//+------------------------------------------------------------------+
void CalcOrders()
  {
   int count1=0;

   for(i=OrdersTotal()-1; i>=0; i--)
     {
      if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) && (OrderSymbol()==Symbol())
         && (OrderMagicNumber()==Magic) && (OrderType()<2))
        {
         count1++;
         ArrayResize(orders,count1);
         orders[count1-1].Ticket=OrderTicket();
         orders[count1-1].lot=OrderLots();
         orders[count1-1].orderopenprice=OrderOpenPrice();
         orders[count1-1].ordertype=OrderType();
         orders[count1-1].profit=OrderProfit();
         orders[count1-1].stoploss=OrderStopLoss();
        }
     }
   ArraySort(orders,WHOLE_ARRAY,0,MODE_ASCEND);

  }
//+------------------------------------------------------------------+

А теперь поглядите какой массив вы заполняете и по какому полю его сортируете. И, главное - зачем нужна эта сортировка? Какой в ней смысл?

 
Artyom Trishkin:

И, пожалуйста, не заставляйте меня за вас вставлять в нужное сообщение нужный код:

А теперь поглядите какой массив вы заполняете и по какому полю его сортируете. И, главное - зачем нужна эта сортировка? Какой в ней смысл?

сортировка массива ордерс, по возрастанию с нулевого значения

например если у нас 20 ордеров и 18 совершенно случайно вышел на пару пунктов в плюс и я его сразу прикрыл руками

 
trader781:

сортировка массива ордерс, по возрастанию с нулевого значения

например если у нас 20 ордеров и 18 совершенно случайно вышел на пару пунктов в плюс и я его сразу прикрыл руками

Если тебе обязательно нужна сортировка по тикету, то придётся делать 2 массива. Один массив структур и второй двухмерный, содержащий в первом измерении тикет ордера, а во втором индекс счётчика цикла, тот индекс под которым информация об ордере хранится в массиве структур. И заполнять эти массивы одновременно в одном цикле.

Ты этот вопрос так долго пытаешься решить, что я уже и не помню цель которую ты хочешь достичь. Да и все остальные наверное.

Если всё-же правильно помню, тебе надо выбрать из списка ордеров определённый по номеру в списке. Так какие в этом проблемы??? Сделай простой одномерный массив, засунь туда тикеты, отсортируй и затем OrderSelect(массив[который нужен], SELECT_BY_TICKET) и всё... дальше делай с этим ордером что душе угодно.

 
Alexey Viktorov:

Если тебе обязательно нужна сортировка по тикету, то придётся делать 2 массива. Один массив структур и второй двухмерный, содержащий в первом измерении тикет ордера, а во втором индекс счётчика цикла, тот индекс под которым информация об ордере хранится в массиве структур. И заполнять эти массивы одновременно в одном цикле.

Ты этот вопрос так долго пытаешься решить, что я уже и не помню цель которую ты хочешь достичь. Да и все остальные наверное.

Если всё-же правильно помню, тебе надо выбрать из списка ордеров определённый по номеру в списке. Так какие в этом проблемы??? Сделай простой одномерный массив, засунь туда тикеты, отсортируй и затем OrderSelect(массив[который нужен], SELECT_BY_TICKET) и всё... дальше делай с этим ордером что душе угодно.

Я уже тоже не помню чего там нужно. Но то, что делает - ему же на пользу.

Я ж специально прошу его написать сначала одно, а потом прошу внимательно поглядеть на написанное, чтобы он сам понял, что так не пойдёт - нужен ещё один массив локальный прямо в функции, который и нужно сортировать, а уже потом заполнять глобальный массив из отсортированного.

 
Alexey Viktorov:

Если тебе обязательно нужна сортировка по тикету, то придётся делать 2 массива. Один массив структур и второй двухмерный, содержащий в первом измерении тикет ордера, а во втором индекс счётчика цикла, тот индекс под которым информация об ордере хранится в массиве структур. И заполнять эти массивы одновременно в одном цикле.

Ты этот вопрос так долго пытаешься решить, что я уже и не помню цель которую ты хочешь достичь. Да и все остальные наверное.

Если всё-же правильно помню, тебе надо выбрать из списка ордеров определённый по номеру в списке. Так какие в этом проблемы??? Сделай простой одномерный массив, засунь туда тикеты, отсортируй и затем OrderSelect(массив[который нужен], SELECT_BY_TICKET) и всё... дальше делай с этим ордером что душе угодно.

Не, я понимаю что есть куча способов сделать это по другому и обойтись без массивов . Зачем 2 если есть один из стрктур?
 
trader781:
Не, я понимаю что есть куча способов сделать это по другому и обойтись без массивов . Зачем 2 если есть один из стрктур?

Потому, что простой массив сортируется по значениям в первом измерении массива, а как сортируется массив структур я не представляю.

Хотя вопрос интересный... Сейчас попробую сортировку массива структур.

 
Alexey Viktorov:

Потому, что простой массив сортируется по значениям в первом измерении массива, а как сортируется массив структур я не представляю.

Хотя вопрос интересный... Сейчас попробую сортировку массива структур.

Я вообще не представляю, зачем это в виде структуры. Программа mq пишется в одном файле, работа с массивом происходит в одной прокрутке скроллинга, и вмещается в один экран. Какой смысл в структуре в этом случае, ради спортивного интереса?
 
Alexey Viktorov:

Потому, что простой массив сортируется по значениям в первом измерении массива, а как сортируется массив структур я не представляю.

Хотя вопрос интересный... Сейчас попробую сортировку массива структур.

вот и я не представляю что это такое и с чем его едят

но раз эту тему подняли глупо забрасывать. Там еще массивы классов есть. 

 
Vitaly Muzichenko:
Я вообще не представляю, зачем это в виде структуры. Программа mq пишется в одном файле, работа с массивом происходит в одной прокрутке скроллинга, и вмещается в один экран. Какой смысл в структуре в этом случае, ради спортивного интереса?

Да мы всё пишем ради спортивного интереса. Сначала понимаем что и как работает, а уже потом начинаем осмысливать как-бы поэффективней написать.


Что касается сортировки массива структур: как я и предполагал эксперимент не удался. Уже во время компиляции компилятор сказал что "expression has no effect"

Причина обращения: