- Relative Vigor Index - Осцилляторы - Индикаторы - Чарты - MetaTrader 5 для Android
- Relative Vigor Index - Осцилляторы - Индикаторы - Чарт - MetaTrader 5 для iPhone
- Relative Vigor Index - Осцилляторы - Использование технических индикаторов - Графики котировок, технический и фундаментальный анализ
void OnTick() { //--- //сортируем массив TmpPriceInaquality[] по убыванию начиная с большего, а с ним и все остальные массивы. int LockIndex=9; int TmpPriceInaquality[10]={9,8,7,6,5,4,3,2,1,0}; int TmpFirstOrderOpenPrice[10]={9,8,7,6,5,4,3,2,1,0}; int LockFirstTicket[10]={9,8,7,6,5,4,3,2,1,0}; int LockSecondTicket[10]={9,8,7,6,5,4,3,2,1,0}; int TmpMin=TmpPriceInaquality[0]; int TmpMax=TmpPriceInaquality[LockIndex]; //сдвигаемые с каждым проходом поиска максимального и минимального значения границы стартового и конечного индекса текущего прохода int StartIndex=0,EndIndex=LockIndex; Print("Control:PRE_wh:TmpPriceInaquality:"); for(int f=0;f<=LockIndex;f++) { Print(" ",TmpPriceInaquality[f]); } while(StartIndex<EndIndex) { int TmpMinIndex; int TmpMaxIndex; Print("StartIndex=",StartIndex); Print("EndIndex=",EndIndex); int tmp; //цикл нахождения максимального и минималного значений в текущем проходе и запоминания индекса for(int s=StartIndex;s<=EndIndex;s++) { if(TmpPriceInaquality[s]<TmpMin) { TmpMin=TmpPriceInaquality[s]; TmpMinIndex=s; } if(TmpPriceInaquality[s]>TmpMax) { TmpMax=TmpPriceInaquality[s]; TmpMaxIndex=s; } Print("TmpMin=",TmpMin); Print("TmpMax=",TmpMax); Print("TmpMinIndex=",TmpMinIndex); Print("TmpMaxIndex=",TmpMaxIndex); } //меняем местамии значения в найденных индексах, в текущий индекс старта данной итерации прохода пишем минимальное значение, в последний индекс перебора - максимальное, //также проделываем это с массивами: TmpFirstOrderOpenPrice[z]; LockFirstTicket[z]; LockSecondTicket[z]; //переставляем на нужные места наибольшее и наименьшее найденные в проходе перебора массива TmpPriceInaquality[] значения tmp=TmpPriceInaquality[StartIndex]; Print("Control1:TmpPriceInaquality[StartIndex]=",TmpPriceInaquality[StartIndex]); Print("Control1:tmp=",tmp); TmpPriceInaquality[StartIndex]=TmpPriceInaquality[TmpMinIndex]; Print("Control1:TmpPriceInaquality[StartIndex]=",TmpPriceInaquality[StartIndex]); TmpPriceInaquality[TmpMinIndex]=tmp; Print("Control1:TmpPriceInaquality[TmpMinIndex]=",TmpPriceInaquality[TmpMinIndex]); tmp=TmpPriceInaquality[EndIndex]; Print("Control2:TmpPriceInaquality[EndIndex]=",TmpPriceInaquality[EndIndex]); Print("Control2:tmp=",tmp); TmpPriceInaquality[EndIndex]=TmpPriceInaquality[TmpMaxIndex]; Print("Control2:TmpPriceInaquality[EndIndex]=",TmpPriceInaquality[EndIndex]); TmpPriceInaquality[TmpMaxIndex]=tmp; Print("Control2:TmpPriceInaquality[TmpMaxIndex]=",TmpPriceInaquality[TmpMaxIndex]); Print("Control00:TmpPriceInaquality:"); for(int f=0;f<=LockIndex;f++) { Print(" ",TmpPriceInaquality[f]); } //переставляем на нужные места наибольшее и наименьшее найденные в проходе перебора массива TmpFirstOrderOpenPrice[] значения tmp=TmpFirstOrderOpenPrice[StartIndex]; TmpFirstOrderOpenPrice[StartIndex]=TmpFirstOrderOpenPrice[TmpMinIndex]; TmpFirstOrderOpenPrice[TmpMinIndex]=tmp; tmp=TmpFirstOrderOpenPrice[EndIndex]; TmpFirstOrderOpenPrice[EndIndex]=TmpFirstOrderOpenPrice[TmpMaxIndex]; TmpFirstOrderOpenPrice[TmpMaxIndex]=tmp; //переставляем на нужные места наибольшее и наименьшее найденные в проходе перебора массива LockFirstTicket[] значения tmp=LockFirstTicket[StartIndex]; LockFirstTicket[StartIndex]=LockFirstTicket[TmpMinIndex]; LockFirstTicket[TmpMinIndex]=tmp; tmp=LockFirstTicket[EndIndex]; LockFirstTicket[EndIndex]=LockFirstTicket[TmpMaxIndex]; LockFirstTicket[TmpMaxIndex]=tmp; //переставляем на нужные места наибольшее и наименьшее найденные в проходе перебора массива LockSecondTicket[] значения tmp=LockSecondTicket[StartIndex]; LockSecondTicket[StartIndex]=LockSecondTicket[TmpMinIndex]; LockSecondTicket[TmpMinIndex]=tmp;
tmp=LockSecondTicket[EndIndex]; LockSecondTicket[EndIndex]=LockSecondTicket[TmpMaxIndex]; LockSecondTicket[TmpMaxIndex]=tmp; //сдвигаем границы на единицу StartIndex++; EndIndex--; TmpMin=TmpPriceInaquality[StartIndex]; TmpMax=TmpPriceInaquality[EndIndex]; } Print("TmpPriceInaquality:"); for(int f=0;f<=LockIndex;f++) { Print(" ",TmpPriceInaquality[f]); } Print("TmpFirstOrderOpenPrice:"); for(int f=0;f<=LockIndex;f++) { Print(" ",TmpFirstOrderOpenPrice[f]); } Print("LockFirstTicket:"); for(int f=0;f<=LockIndex;f++) { Print(" ",LockFirstTicket[f]); } Print("LockSecondTicket:"); for(int f=0;f<=LockIndex;f++) { Print(" ",LockSecondTicket[f]); } }
если ArraySort не поможет, то почитайте про самую простую сортировку пузырьковую)
Проще написать, чем разобраться, что де там такое...
void OnStart() { //--- double a[]={4,1,3,2,7,4,8,1,3,5,1,7,1,9,3}; srt(a); // сортировка string str=""; for(int i=0;i<ArraySize(a);i++){ str+=a[i]+" "; } Alert(str); } void srt(double & a[]){ // функция сортировки double mxv, mnv, tmp; int mxi, mni; int l=0; int r=ArraySize(a); int s=r/2; r--; for(;l<s;l++,r--){ mxv=a[l]; mxi=l; mnv=a[l]; mni=l; for(int i=l+1;i<=r;i++){ if(a[i]>mxv){ mxv=a[i]; mxi=i; } if(a[i]<mnv){ mnv=a[i]; mni=i; } } tmp=a[l]; a[l]=a[mni]; a[mni]=tmp; tmp=a[r]; a[r]=a[mxi]; a[mxi]=tmp; } }
Готово!
Убрал пустые строки.
Для простых задач достаточно "Сортировки пузырьком".

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования