Перебор полученных значений в цикле - страница 2

 
Ihor Herasko:

Ну как же Вы тогда тользуетесь функцией, если ее описание ни о чем не говорит? ))

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

!!!

 

Всё перепробовал и ArrayMaximum и ArraySort
Кручу верчу, но получить требуемое не могу

Я записываю результат в блокнот и не могу избавиться от лишних строк (прибыльные 1,2,3,4....)
Мне нужна только последняя строчка с одним параметром и потом следующий параметр и т.д. по одному параметру в строчке с максимальным значением
Может я не там сортирую??


 
forex2030:

Всё перепробовал и ArrayMaximum и ArraySort
Кручу верчу, но получить требуемое не могу

Я записываю результат в блокнот и не могу избавиться от лишних строк (прибыльные 1,2,3,4....)
Мне нужна только последняя строчка с одним параметром и потом следующий параметр и т.д. по одному параметру в строчке с максимальным значением
Может я не там сортирую??


ArraySort

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

В первом измерении у вас что? Параметр? Вот по нему и сортирует!

 

Может надо перед записью в блокнот  данные сортировать?
Создать какой-то цикл?
Есть версии, а то уже не соображаю в каком направлении думать

 
forex2030:

Может надо перед записью в блокнот  данные сортировать?
Создать какой-то цикл?
Есть версии, а то уже не соображаю в каком направлении думать

перекопировать массив так, что бы нужное для сортировки поле массива стало первым. И потом сортировать. Или изначально объявить массив с нужным для сортировки полем, что бы оно было первым, и делать записи в массив нужным образом.

 
forex2030:

А примером можно помочь?))
Если не понятна суть функции, то и описание не прояснит ситуацию.

Давайте научу Вас справку читать ))

Итак, первое, что читаем в документации:

ArraySort

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

Здесь говорится лишь то, что сортировать функция может только одномерные массивы. В Вашем случае используется одномерный массив (объявлен как []; если бы объявили как [][], то это уже двумерный массив). Значит все в порядке. Можем двигаться дальше.

ArraySort

Параметры

array[]

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

count

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

start

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

direction

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

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

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


У функции четыре аргумента. Первый - ссылка на массив, который хотим отсортировать, второй - сколько элементов сортировать, третий - с какого элемента начинаем сортировку, четвертый - в каком порядке нужно сортировать (по возрастанию или убыванию). Вызвали Вы функцию правильно, указав только ссылку на массив для сортировки, остальные аргументы опустили и они приняли значения по умолчанию.

Далее читаем, что функция возвращает:

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

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

А возвращает она только признак успешности выполнения, который Вы пытаетесь распечатать. В то же время Вы хотите получить данные о ходе выполнения. А эти данные в массиве, который Вы только что отсортировали. Поэтому достаточно организовать новый цикл и вывести значения элементов массива. Самое последнее значение будет максимальным, самое первое - минимальным.

 
Ihor Herasko:

Давайте научу Вас справку читать ))

Итак, первое, что читаем в документации:

Здесь говорится лишь то, что сортировать функция может только одномерные массивы. 

Деза! 

из справки на сайте - 

ArraySort

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

ArraySort сортирует любые массивы но только по значениям в первом измерении!!!

Объявите хоть arrr[][][][], за массив структур не поручусь, нужно проверять!

 
Ihor Herasko:

Давайте научу Вас справку читать ))

Ну теперь всё ясно и понятно))
Очень доходчиво всё разъяснили, а в справке всё как-то поверхностно))
Большое спасибо, буду пробовать!!

 
dr.mr.mom:

Деза! 

из справки на сайте - 

ArraySort

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

ArraySort сортирует любые массивы но только по значениям в первом измерении!!!

Объявите хоть arrr[][][][], за массив структур не поручусь, нужно проверять!

Сортировка одномерного массива и сортировка одного измерения многомерного массива ничем по сути не отличаются. Каким массив не объяви, он все равно будет отсортирован как одномерный - по первому измерению.

 

Всё таки я наверно не там копаю))

У меня параметры меняются на каждом тике,
а результаты не меняются и показывают только последние значения которые были получены при первом старте

Что может мешать результатам обновляться?

Весь код индикатора с которым мучаюсь

#property indicator_chart_window
//+------------------------------------------------------+
int LastTik,NewTik,MAslow,MAfast,Profit,Loss;
double PriceBuy,PriceSell,SignalPips;
datetime tPriceBuy,tPriceSell;
bool buy=true,sell=true;
//+------------------------------------------------------+
//| Expert deinitialization function                     |
//+------------------------------------------------------+
void deinit(){
   Comment("");}
//+------------------------------------------------------+
//| Custom indicator iteration function                  |
//+------------------------------------------------------+
void start(){  
//========================|
// Перебор параметров 
//  на каждом тике
   if(LastTik!=NewTik)
      {
      MAslow-=5;
      LastTik=NewTik;
      } 
      NewTik++;
   if(NewTik>=10)NewTik=0;
   if(MAslow<=0) MAslow=100;
      MAfast = MAslow+5;
//========================|
   int i,limit;
   int counted_bars=IndicatorCounted();
   if (counted_bars<0) return;
   if (counted_bars>0) counted_bars--;
       limit = MathMin(Bars-counted_bars,Bars-1);
   if (counted_bars==0) {limit--; limit-=10;} else limit++;
   for(i=limit; i>=0; i--) {
//================================================================|  
      double MAs=iMA(Symbol(),0,MAslow,0,MODE_EMA,PRICE_OPEN,i+1);
      double MAf=iMA(Symbol(),0,MAfast,2,MODE_EMA,PRICE_CLOSE,i+1);

      if(MAs>MAf && buy) {PriceBuy=Open[i]; tPriceBuy=Time[i]; sell=true; buy=false;} //При первом сигнале buy ждём противоположный сигнал sell
      if(MAs<MAf && sell) {PriceSell=Open[i]; tPriceSell=Time[i]; buy=true; sell=false;} //При первом сигнале sell ждём противоположный сигнал buy

      if(PriceBuy!=0.0 && PriceSell!=0.0 && tPriceBuy!=0 && tPriceSell!=0) //Если все данные известны
        {
         double pp=MathAbs((PriceBuy-PriceSell)/Point); //Расстояние между сигналами
        
         if(SignalPips!=pp) //Если новое расстояние между сигналами
           {
            if(tPriceSell>tPriceBuy) //Сравним время сигналов и если последний противоположный
              { 
              if(PriceSell>PriceBuy) Profit++; //Если цена сигнала для sell выше цены сигнала для бай, то сохраним в профитные
              if(PriceSell<PriceBuy) Loss++; //Если цена сигнала для sell ниже цены сигнала для бай, то сохраним в убыточные
              }
         SignalPips=pp; //Сохраним новое расстояние между сигналами
           }//SignalPips END
        }
     }//limit END
   Comment("Параметр = "+MAslow+" / Прибыльных = "+Profit+" / Убыточных = "+Loss);
   Print("Параметр = "+MAslow+" / Прибыльных = "+Profit+" / Убыточных = "+Loss);    
}//start END
Причина обращения: