Вопросы от начинающих MQL4 MT4 MetaTrader 4 - страница 202
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
=
Кажется, так, если я правильно понял принцип подстановки.
Лишние точки с запятой после фигурных скобок. И непонятно, к чему теперь относится else.
Жаль, что нет, видимо, простого способа автоматизировать разворачивание макросов, чтобы посмотреть, что получится. Разве что замутить собственный скрипт.
Спасибо! Не зря после while в макросе нет точки с запятой.
Макросы штука хорошая, но грань между добром и злом, в их случае, еще тоньше, чем с женщиной))) Очень и очень аккуратно с ними надо. И да, в моем примере, не ';', а именно else, который стал относиться к if, который в макросе, после того как уберешь ;.
Я макросы очень хорошо умею, поэтому для случая, как у тебя, уже года 1,5 как зарекся их использовать, оптимальней:
Вот только про inline я здесь толком ничего не нашёл.
А C++ я не знаю.
Добрый день! Прошу помоши!
Есть довольно простой код открытия и модификации ордера. Функции OrderSend, OrderSelect и OrderModify вложил в цикл с небольшой задержкой между попытками. Чтобы минимизировать ошибки связи и проч.
Происходит следующая непонятка: ордер нормально открывается, затем происходит успешная модификация StopLoss, успешная модификация TakeProfit. Но при установке TP, StopLoss обнуляется. Не могу понять причину.
Вот эта часть кода:
send = 5; //максимальное количество попыток установки ордера
tick=0;
sendschet=0; //Счетчик попыток
while(!tick && sendschet<=send)
{
tick=OrderSend(Symbol(),OP_SELL,NormalizeDouble(lot,2),Bid,150,0.0,0.0,komm,MagNum,0,Yellow);
sendschet++;
Sleep(1000); //Задержка в 1 секунду перед следующей попыткой
}
select = 5; //максимальное количество попыток выбора ордера
slschet=0; //Счетчик попыток выбора ордера
while(!OrderSelect(tick,SELECT_BY_TICKET) && slschet<=select)
{
slschet++;
Sleep(500); //Задержка в 0,5 секунды перед следующей попыткой
}
if(slschet<select) //попыток было меньше, чем максимум, значит выбор ордера прошел успешно
{
modify = 5;//максимальное количество попыток модификации ордера
mdschet=0;
while(!OrderModify(tick,OrderOpenPrice(),NormalizeDouble(SL,Digits),OrderTakeProfit(),0,Yellow)
&& mdschet<=modify)
{
mdschet++;
Sleep(500); //Задержка в 0,5 секунды перед следующей попыткой
}
*Здесь все отлично - SL установлен
mdschet=0; //Обнуляем счетчик перед изменением TP
while(!OrderModify(tick,OrderOpenPrice(),OrderStopLoss(),NormalizeDouble(TP,Digits),0,Yellow)
&& mdschet<=modify)
{
mdschet++;
Sleep(500);
}
}
*Здесь TP ставится нормально, но SL уже равен 0,0. То есть получается, что OrderStopLoss() равен 0,0.
Хотя выбор ордера не менялся.
Если между установкой SL и TP добавить еще раз OrderSelect, то вроде все работает. Но противоречит логике.
Заранее спасибо за помощь в вопросе.
Добрый день!
Помогите, пожалуйста, разобраться с изменением размера динамического массива.
Допустим, задаю массив:
Далее в первой подпрограмме в цикле, возможно несколько раз (в этом вопросов нет -- пока работает, как задумывалось):
В следующей подпрограмме буду в цикле добавлять элементы в первом измерении. Заранее неизвестно сколько. Знаю, что это медленнее, чем если заранее объявлять размерность. Но думаю, что до 500 добавлений в год погоды не сделают.
Вопрос в том, как в этой подпрограмме узнать существующий размер массива? Чтобы взять его, как базовый, и к нему прибавлять по одному новому значению.
Брать ArraySize() и делить на 8? Или есть какая-то более подходящая функция?
Спасибо заранее!
Добрый день!
Помогите, пожалуйста, разобраться с изменением размера динамического массива.
Допустим, задаю массив:
Далее в первой подпрограмме в цикле, возможно несколько раз (в этом вопросов нет -- пока работает, как задумывалось):
В следующей подпрограмме буду в цикле добавлять элементы в первом измерении. Заранее неизвестно сколько. Знаю, что это медленнее, чем если заранее объявлять размерность. Но думаю, что до 500 добавлений в год погоды не сделают.
Вопрос в том, как в этой подпрограмме узнать существующий размер массива? Чтобы взять его, как базовый, и к нему прибавлять по одному новому значению.
Брать ArraySize() и делить на 8? Или есть какая-то более подходящая функция?
Спасибо заранее!
ArrayRange()
ArrayRange()
Доброго времени суток.
Очень давно не торговал на МТ4, решил снова попробовать. Ранее использовал скрипт (во вложении), но теперь он не запускается, посмотрите пожалуйста, что стало не так.
Здравствуйте!
Есть ли способ сразу узнать CopyHigh количество элементов массива в любом периоде времени?
Сам себе и отвечу, может кто-то через поисковик наткнётся на вопрос.
Сам себе и отвечу, может кто-то через поисковик наткнётся на вопрос.
Ещё Bars(), iBars()
С Bars() нельзя узнать количество элементов массива в любом периоде времени, а только на текущем графике.