Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1207
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
почему это цикл не заканчивается когда ... (второе условие для i < 2000 я добавил когда понял что цикл бесконечный) MQL4
cv * tvp * (double)stop < ml
почему это цикл не заканчивается когда ... (второе условие для i < 2000 я добавил когда понял что цикл бесконечный)
Цикл не закончится пока
cv * tvp * (double)stop < ml
А чтобы цикл завершился при выполнении этого условия, в теле цикла можно прописать так:
или
В MQL4 только таким способом:
Результат:
Еше раз спасибо Вам за помощь. Буду Вам очень признателен, если подскажете еще как мне сделать следующее...
При помощи какой функции, или языковой конструкции можно вычислить значение индекса элемента массива , которое у этого элемента массива было ДО сортировки.
Вот у меня есть массив А[] до сортировки (верхняя строка) и тот же массив после сортировки. Элемент массива со значением 5 до сортировке находился под индексом 9
А после сортировки элемент массива со значением 5 находится уже под индексом 3.
Далее через функцию я нахожу в отсортированном массиве ячейку со значением 5 и функция сохраняет в W номер индекса этой ячейки в отсортированном массиве, который равен 3
ArraySort(А,10,0,MODE_ASCEND);
W = ArrayBsearch( А,5,WHOLE_ARRAY,0,MODE_ASCEND);
ВОПРОС. Каким образом после функции ArrayBsearch() можно сохранить в переменную значение индекса ячейки со значением 5 которое у нее было в не отсортированном массиве.
То есть сохранить значение 9.
Спасибо за помощь.
Alexey Viktorov
Mihail Matkovskij
Спасибо!
Всем привет. Кто знает как задать отрицательное значение в пользовательском индикаторе и чтоб он работал? т.е. "Сдвиг индикатора относительно ценового графика."
Пример: Если ставишь в индикаторе Moving Average значение -4 он смещается относительно графика влево - и работает.
А вот если ставишь такое значение в код индикатора - то индикатор перестает работать. и показывает значения всех ТФ красные.
Еше раз спасибо Вам за помощь. Буду Вам очень признателен, если подскажете еще как мне сделать следующее...
При помощи какой функции, или языковой конструкции можно вычислить значение индекса элемента массива , которое у этого элемента массива было ДО сортировки.
Вот у меня есть массив А[] до сортировки (верхняя строка) и тот же массив после сортировки. Элемент массива со значением 5 до сортировке находился под индексом 9
А после сортировки элемент массива со значением 5 находится уже под индексом 3.
Далее через функцию я нахожу в отсортированном массиве ячейку со значением 5 и функция сохраняет в W номер индекса этой ячейки в отсортированном массиве, который равен 3
ArraySort(А,10,0,MODE_ASCEND);
W = ArrayBsearch( А,5,WHOLE_ARRAY,0,MODE_ASCEND);
ВОПРОС. Каким образом после функции ArrayBsearch() можно сохранить в переменную значение индекса ячейки со значением 5 которое у нее было в не отсортированном массиве.
То есть сохранить значение 9.
Спасибо за помощь.
а вот не надо сортировать данные как ни попадя и просто так, без глобальной цели.
из текущего проекта: берём (короткий) массив, на выходе имеем индексы элементов в нужном порядке:
{
for(int i=0;i<5;i++)
index[i]=i;
for(int i=0;i<4;i++) {
for(int j=1;j<5;j++) {
if (data[index[i]]>data[index[j]]) {
int tmp=index[i];
index[i]=index[j];
index[j]=tmp;
}
}
}
}
на бОльшие массивы надо менять алгоритм сортировки (пузырёк для больших не катит) - поменяйте.
основной посыл - ну не трогайте вы исходные данные. Оперируйте или ссылками или ещё лучше индексами массивов. Иначе информация теряется, которая потом будет ох как нужна
Еше раз спасибо Вам за помощь. Буду Вам очень признателен, если подскажете еще как мне сделать следующее...
При помощи какой функции, или языковой конструкции можно вычислить значение индекса элемента массива , которое у этого элемента массива было ДО сортировки.
Вот у меня есть массив А[] до сортировки (верхняя строка) и тот же массив после сортировки. Элемент массива со значением 5 до сортировке находился под индексом 9
А после сортировки элемент массива со значением 5 находится уже под индексом 3.
Далее через функцию я нахожу в отсортированном массиве ячейку со значением 5 и функция сохраняет в W номер индекса этой ячейки в отсортированном массиве, который равен 3
ArraySort(А,10,0,MODE_ASCEND);
W = ArrayBsearch( А,5,WHOLE_ARRAY,0,MODE_ASCEND);
ВОПРОС. Каким образом после функции ArrayBsearch() можно сохранить в переменную значение индекса ячейки со значением 5 которое у нее было в не отсортированном массиве.
То есть сохранить значение 9.
Спасибо за помощь.
Для этого вам нужно ответить на два вопроса. Что будете делать если:
1. Значений 5 будет несколько, в разных ячейках массива.
2. Значения 5 не будет в массиве.
Потому как функция ArrayBsearch (для отсортированных данных), в первом случае даст первый попавшийся индекс, где значение ячейки равно 5, во втором даст элемент близкий к значению 5. Как бы вы хотели поступить с не отсортированным массивом мне не ясно.
Всем привет. Кто знает как задать отрицательное значение в пользовательском индикаторе и чтоб он работал? т.е. "Сдвиг индикатора относительно ценового графика."
Пример: Если ставишь в индикаторе Moving Average значение -4 он смещается относительно графика влево - и работает.
А вот если ставишь такое значение в код индикатора - то индикатор перестает работать. и показывает значения всех ТФ красные.
SetIndexShift .
Еще в iMA указывается сдвиг:
iMA
Возвращает значение технического индикатора Moving Average.
double iMA(
string symbol, // имя символа
int timeframe, // таймфрейм
int ma_period, // период
int ma_shift, // сдвиг средней
int ma_method, // метод усреднения
int applied_price, // тип цены
int shift // сдвиг
);
Параметры
symbol
[in] Символьное имя инструмента, на данных которого будет вычисляться индикатор. NULL означает текущий символ.
timeframe
[in] Период. Может быть одним из значений перечисления ENUM_TIMEFRAMES. 0 означает период текущего графика.
ma_period
[in] Период усреднения для вычисления индикатора.
ma_shift
[in] Сдвиг индикатора относительно ценового графика.
ma_method
[in] Метод усреднения. Может быть любым из значений перечисления ENUM_MA_METHOD.
applied_price
[in] Используемая цена. Может быть одним из значений перечисления ENUM_APPLIED_PRICE.
shift
[in] Индекс получаемого значения из индикаторного буфера (сдвиг относительно текущего бара на указанное количество периодов назад).
Возвращаемое значение
Значение технического индикатора Moving Average.
Пример:
AlligatorJawsBuffer[i]=iMA(NULL,0,13,8,MODE_SMMA,PRICE_MEDIAN,i);
https://docs.mql4.com/ru/indicators/ima
А вот готовый пример, но на MQL5: https://www.mql5.com/ru/docs/indicators/ima ,
который несложно перевести на MQL4.
В настройках индикатора сдвига нет. Я залез в код и в коде поставил сдвиг -4 и индикатор перестал работать - показывает все ТФ красные. Вот сижу и думаю почему.
Для этого вам нужно ответить на два вопроса. Что будете делать, если:
1. Значений 5 будет несколько, в разных ячейках массива.
2. Значения 5 не будет в массиве.
Потому как функция ArrayBsearch (для отсортированных данных), в первом случае даст первый попавшийся индекс, где значение ячейки равно 5, во втором даст элемент близкий к значению 5. Как бы вы хотели поступить с не отсортированным массивом мне не ясно.
Спасибо большое за быстрый отклик. В моем случае каждое значение элемента массива неповторимо и существует в единственном экземпляре. То есть значение 5 , как и другие значения, не повторяется.
В моем случае значения 5 в не отсортированном массиве может и не быть. То есть в не отсортированном массиве некоторые ячейки могут быть не заполненными.
Но если значения 5 в не отсортированном массиве не будет , тогда я не смогу указать значение 5 вторым параметром в функции ArrayBsearch() В эту функцию попадают только значения которые обязательно есть в не отсортированном массиве.
Спасибо за помощь