Конечно он будет закрывать что попало. У вас в функции dellots переменная i откуда берется? В учебнике ведь наверное цикл был, который вы успешно потеряли.
Но ведь как написано в документации в переменную i передается, в моем случае, порядковый номер позиции в списке. Мне этот номер не нужен, потому что позиция может быть открыта только одна.
Тогда ставьте жесто ноль вместо i.
нет, не то. Я попробовал, теперь периодически закрывает по убытку и то иногда. Здесь какая то ошибка в коде, но сам я уже третий день не могу найти.
David177 писал (а) >>
нет, не то. Я попробовал, теперь периодически закрывает по убытку и то иногда. Здесь какая то ошибка в коде, но сам я уже третий день не могу найти.
нет, не то. Я попробовал, теперь периодически закрывает по убытку и то иногда. Здесь какая то ошибка в коде, но сам я уже третий день не могу найти.
int total=OrdersTotal(); for (i=total-1;i>=0;i--) { if(OrderType()>1) continue; double cenaotk = OrderOpenPrice(); int ticket=OrderTicket(); if (OrderType()==OP_BUY) if (Bid - cenaotk >= profitclose*droblot*Point) dellots(ticket); if (OrderType()==OP_SELL) if (cenaotk-Ask >= profitclose*droblot*Point) dellots(ticket); } ..... void dellots(int ticket) { ..... }
if (cenaotk-Bid <= profitclose*droblot && tip == 0)
Для ордеров на покупку это условие истинно практически всегда.
Спасибо Valmars! Вот это грамотный код и ничего лишнего! Вроде теперь мой эксперт работает! Немного не так как нужно, но уже гораздо ближе к истине! Никаких бредовых закрытий! Будем работать дальше.
Одну строчку забыл
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Здравствуйте!
Помогите подалуйста с кодом, скажите что здесь не так! Смысл в следующем: При достижении определенного профита (переменная profitclose = 100 ), закрывается часть лота, который высчитывается (часть задается переменной chastlota = 5 ). Если профит еще увеличивается на profitclose = 100, закрывается еще часть лота, которая уже высчитана. Но почемуто при тестировании он закрывает что зря и куда зря, даже в убыток. Что я сделал неправильно?
Приводится часть кода. Функция взята из учебника и модифицирована. Была трейлингстоп.
b = OrderSelect(i, SELECT_BY_POS, MODE_TRADES); //Выбираем ордер который есть cenaotk = OrderOpenPrice(); tip = OrderType(); if (cenaotk-Bid >= profitclose*droblot && tip == 1) { dellots(); } if (cenaotk-Bid <= profitclose*droblot && tip == 0) { dellots(); }