OrderProfit() предпоследнего ордера - страница 4

 
pako:
успехов
Спасибо, огромное! Будем дальше пытаться бороздить ваш не простой мир mql. )))
 
pako:

ArraySort

Сортирует многомерный числовой массив по возрастанию значений в первом измерении.

bool  ArraySort( 
   void&  array[]      // массив для сортировки 
   );

Параметры

array[]

[in][out]  Числовой массив для сортировки.

Возвращаемое значение

Возвращает true в случае успеха, иначе false.

Примечание

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

Функции ArraySort и ArrayBSearch принимают в качестве параметра массив любой размерности, при этом сортировка и поиск происходят только по первому (нулевому) измерению.


Вопрос конечно ни мне, но у меня в справочнике написано следующее


Справочник MQL4 / Операции с массивами / ArraySort


ArraySort

Сортировка числовых массивов по первому измерению. Сортировка  производится с учетом флага AS_SERIES.

bool  ArraySort(
   void&       array[]                 // массив для сортировки
   int         count=WHOLE_ARRAY,      // количество элементов
   int         start=0,                // начальный индекс
   int         direction=MODE_ASCEND   // направление сортировки
   );

Параметры

array[]

[in][out]  Числовой массив для сортировки.

count

[in]  Количество элементов.

start

[in]  Начальный индекс.

direction

[in]  Направление сортировки массива. Возможные значения:

MODE_ASCEND - сортировка в порядке возрастания

MODE_DESCEND - сортировка в порядке убывания.

Возвращаемое значение

Возвращает true в случае успеха, иначе false.

Пример:


//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- пример сортировки одномерного массива
   double num_array[5]={4,1,6,3,9};
//--- массив содержит величины 4,1,6,3,9
   ArraySort(num_array);
//--- теперь массив отсортирован 1,3,4,6,9
   ArraySort(num_array,WHOLE_ARRAY,0,MODE_DESCEND);
//--- теперь массив отсортирован 9,6,4,3,1
 
//--- пример сортировки двумерного массива по первому измерению   
//--- заполнение массива 5x2
   int  DataArray[5][2]={{7,3},{3,1},{57,14},{12,4},{11,1}};
//--- сортировка массива DataArray[][] по первому измерению (по возрастанию значений)
   ArraySort(DataArray,WHOLE_ARRAY,0,MODE_ASCEND);
//--- вывод результатов
   for(int i=0; i<5; i++)
     {
      string str="index "+IntegerToString(i)+": ";
      for(int j=0; j<2; j++)
        {
         if(j==0) str+="{"; else str+=",";
         str+=IntegerToString(DataArray[i,j]);
         if(j==1) str+="}";
        }
      Print(str);
     }
//--- результат      
//index 0: {3,1}
//index 1: {7,3}
//index 2: {11,1}
//index 0: {12,4}
//index 4: {57,14}
  }

 


 
Vladimir Deryagin:

Вопрос конечно ни мне, но у меня в справочнике написано следующее

Да это у всех написано, просто некоторые не хотят читать и понять, а ещё проще взять и проверить уже готовое.

Vladimir Deryagin, будут вопросы - задавайте.

Удачи! 

P.S. Советую сразу писать программы с учётом Magic, так будет проще эксплуатировать в дальнейшем

 
Vitaly Muzichenko:

Да это у всех написано, просто некоторые не хотят читать и понять, а ещё проще взять и проверить уже готовое.

Vladimir Deryagin, будут вопросы - задавайте.

Удачи! 

P.S. Советую сразу писать программы с учётом Magic, так будет проще эксплуатировать в дальнейшем

Спасибо и Вам Удачи!
 
Vladimir Deryagin:
Спасибо, огромное! Будем дальше пытаться бороздить ваш не простой мир mql. )))

Ну если только осваиваете, то покажу пример работы передачи параметров по ссылке, преимущество в том, что не нужно гонять несколько раз циклы, ну а через return более одного параметра передать нельзя:

void OnStart() {
// инициализируем переменные
 int Index=1; // какую позицию читать (0-самая новая)
 double Profit1=0; // получим её профит
 double Lot1=0;  // лот
 double OpenPrice1=0; // цену открытия
 datetime OpenTime1=0; // время открытия

// 1 ----------------------------------------------------------------+
   Comment("\nНомер позиции от последней: ",GetOpenPosInfo(Profit1, Lot1, OpenPrice1, OpenTime1, Index, Symbol(), OP_BUY/*только бай*/, 10/*Magic: 10*/),
           "\n Профит: ",Profit1,
           "\n Лот ",Lot1,
           "\n Время открытия: ",OpenTime1,
           "\n Цена открытия: ",OpenPrice1
          );
// 2 ----------------------------------------------------------------+
   Comment("\nНомер позиции от последней: ",GetOpenPosInfo(Profit1, Lot1, OpenPrice1, OpenTime1, Index, Symbol(), OP_SELL/*только селл*/, 0/*Magic: 0*/),
           "\n Профит: ",Profit1,
           "\n Лот ",Lot1,
           "\n Время открытия: ",OpenTime1,
           "\n Цена открытия: ",OpenPrice1
          );
// 3 ----------------------------------------------------------------+
   Comment("\nНомер позиции от последней: ",GetOpenPosInfo(Profit1, Lot1, OpenPrice1, OpenTime1, Index), // все по текущему символу с любым Magic
           "\n Профит: ",Profit1,
           "\n Лот ",Lot1,
           "\n Время открытия: ",OpenTime1,
           "\n Цена открытия: ",OpenPrice1
          );
// 4 ----------------------------------------------------------------+
   GetOpenPosInfo(Profit1, Lot1, OpenPrice1, OpenTime1, Index, Symbol(), OP_BUY/*только бай*/, -1/*Magic: все*/);
   Comment("\n Профит: ",Profit1,
           "\n Лот ",Lot1,
           "\n Время открытия: ",OpenTime1,
           "\n Цена открытия: ",OpenPrice1
          );
 }

//===============================================================================================
//------------------ Возвращает информацию об открытой позиции по индексу ----------------------+
//===============================================================================================
int GetOpenPosInfo(double &ProfPos, double &LotPos, double &OpPrice, datetime &OpTime, int index=0, string symb="0", int type=-1, int mg=-1) {
 double p[];
 int c=-1, pr=0;
  if(symb=="0") { symb=Symbol();}
   for (int i=OrdersTotal()-1; i>=0; i--) {
    if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
     if(OrderType()==OP_BUY || OrderType()==OP_SELL) {
      if((OrderSymbol()==symb||symb=="")&&(type<0||OrderType()==type)&&(mg<0||OrderMagicNumber()==mg)) {
       c++;
       ArrayResize(p, c+1);
       p[c]=OrderTicket();
  }}}}
// если есть позиции
  if(c>0) {
   ArraySort(p, WHOLE_ARRAY, 0, MODE_DESCEND);
   pr=c>=index?index:c;
   if(OrderSelect((int)p[pr], SELECT_BY_TICKET)) {
    LotPos=OrderLots();
    OpTime=OrderOpenTime();
    OpPrice=OrderOpenPrice();
    ProfPos=OrderProfit()+OrderSwap()+OrderCommission();
   }
  }
  return(index);
 }

 

 Блоки комментариев подставляйте по порядку, не все сразу. Всё, с темы ушёл.

 
Vitaly Muzichenko:

Ну если только осваиваете, то покажу пример работы передачи параметров по ссылке, преимущество в том, что не нужно гонять несколько раз циклы, ну а через return более одного параметра передать нельзя:

 

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

Интересно, но как то не привычно :) на досуге будем посмотреть! Комментарии мне пока ни к чему  но в будущем всё сгодится. Спасибо!

 
Vitaly Muzichenko:

Ну если только осваиваете, то покажу пример работы передачи параметров по ссылке, преимущество в том, что не нужно гонять несколько раз циклы, ну а через return более одного параметра передать нельзя:

 

 Блоки комментариев подставляйте по порядку, не все сразу. Всё, с темы ушёл.

Опять... Сортировка по тикету. Тикеты не всегда идут с увеличением.
 
Dmitry Fedoseev:
Опять... Сортировка по тикету. Тикеты не всегда идут с увеличением.

Ладно, сниму временный игнор на ваши сообщения в свой адрес.

Покажите мне ДЦ, где тикеты открываются в разнобой, а не по порядку в сторону увеличения.

 
Vitaly Muzichenko:

Ладно, сниму временный игнор на ваши сообщения в свой адрес.

Покажите мне ДЦ, где тикеты открываются в разнобой, а не по порядку в сторону увеличения.

Согласен с вами, тикет уменьшиться неможет и хаотично присвоиться номер, ни в тестере ни на демо, не на реале, номер только в сторону увеличения.
 

Спросите у Решетова он наступал на эти грабли.

Тикеты от отмененных отложек снова идут в ход. 

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