Всем привет. Появилась проблема. Возникает не часто, но бывает. Советник открывает множество позиций, тогда как должа быть только одна.
Код:
Функция подсчета позиций:
Помогите разобраться пожалуйста. Спасибо.
Поменяйте местами!
if(CalculatePositions()==0&&!trade.Sell(Lot,_Symbol,lastBid,sl,tp,"")) -верно!
if(!trade.Sell(Lot,_Symbol,lastBid,sl,tp,"") && CalculatePositions()==0)-неверно!
Поменяйте местами!
А разве это имеет значение?
А разве это имеет значение?
вы сначала пытаетесь открыть-затем считаете позиции
вы сначала пытаетесь открыть-затем считаете позиции
Но еще нюанс.
весь торговый код еще заключен вот в это:
if(CalculatePositions()==0) { тут код который выше указан }
После открытия одной позиции следует return. Следовательно, раз позиция есть в рынке, код внутри if не должен выполняться. А тут получается, что выполяется...
@Evgeniy Zhdan, разумеется, имеет. Это типичное логическое "И", которое проходится в курсе информатики в школе. Смотрите ка, что пишут об этом операторе коллеги из Microsoft: https://msdn.microsoft.com/ru-ru/library/c6s3h5a7.asp
Ниже я выделил ключевую цитату, которая должна развеять все ваши сомнения.
Перед продолжением вычисления выражения логического И полностью вычисляется первый операнд и учитываются все побочные эффекты. Второй операнд вычисляется только в том случае, если результат вычисления первого операнда — значение true (не нуль). Такое вычисление исключает необязательное вычисление второго операнда, если выражение логического И имеет значение false.
- msdn.microsoft.com
@Evgeniy Zhdan, разумеется, имеет. Это типичное логическое "И", которое проходится в курсе информатики в школе. Смотрите ка, что пишут об этом операторе коллеги из Microsoft: https://msdn.microsoft.com/ru-ru/library/c6s3h5a7.asp
Ниже я выделил ключевую цитату, которая должна развеять все ваши сомнения.
Перед продолжением вычисления выражения логического И полностью вычисляется первый операнд и учитываются все побочные эффекты. Второй операнд вычисляется только в том случае, если результат вычисления первого операнда — значение true (не нуль). Такое вычисление исключает необязательное вычисление второго операнда, если выражение логического И имеет значение false.
А это ?
if(CalculatePositions()==0) { тут код который выше указан }
А это ?
нужно смотреть куда
return
возвращает
нужно смотреть куда
возращает
Как я понимаю, в начало OnTick()
А что в MQL5 счётчик позиций актуален? Там же вроде неттинг счета.
нужно смотреть куда
возвращает
Это оператор, завершающий выполнение метода, в котором он присутствует, и возвращающий некое типизированное значение; в данном случае return пустой, а значит возвращает только инфу о том, что метод должен прекратить работу. Так что нет разницы, куда будет возвращено значение.
@Evgeniy Zhdan, возможно, косяк только в том, что вы ошиблись с определением условий в конструкциях if. Попробуйте через Print() выводить все действия в лог, чтобы задетектить ошибку. Потом лог зальете сюда, и там посмотрим.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Всем привет. Появилась проблема. Возникает не часто, но бывает. Советник открывает множество позиций, тогда как должа быть только одна.
Код:
Функция подсчета позиций:
Скрин открытий ордеров:
Скрин вкладки Эксперты:
Помогите разобраться пожалуйста. Спасибо.