Артем! Мельком посмотрел. Может ошибка в комментарии? Шутка...
А вообще программу можно сделать существенно короче. Вместо этих 19 строк:
Достаточно 9
Alert("Открываем первый");
Alert("Открываем следующие");
Alert("Начали закрывать");
Ну а в данном случае нужно замести еще одну переменную флаг
bool НачалиЗакрывать=false;
Когда начали закрывать флаг поднимаем присваивая true
После закрытия флаг опускаем присваивая false
И когда флаг поднят - открывать ордера запрещено. После окончания закрытия еще можно сделать паузу несколько минут.
if(!НачалиЗакрывать) OrderSend(...
Это называется дребезг в системе автоматического управления. Лекарство простое - открывайте новую позицию по цене, худшей, чем закрытая с учетом возможного изменения рынка. Если будет желание - гуглите "петля гистерезиса".
Только не читай статью о дребезге на сайте mql5
Если сначала прочтёшь обсуждение статьи, то и читать её не появится желания.
Проблема осталась, но удалось сократить количество открытий лишних сделок до 1. В Переменной NumberOfTry изменил количество попыток закрытия ордера до 1 (было 5), левых сделок стало меньше но всё же есть, а как затормозить советника пока функция закрывает ордера я пока не сообразил.
void ClosePosFirstProfitSell() //Функция закрытия всех сделок на SELL { int i,k=OrdersTotal(); k=OrdersTotal(); for(i=k-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderType()==OP_SELL) ClosePosSellSelect(); } } } void ClosePosSellSelect() { bool fc; color clClose; double ll,pAsk,pBid,pp; int it; if(OrderType()==OP_SELL) { for(it=1; it<=NumberOfTry; it++) { while(!IsTradeAllowed()) Sleep(5000); RefreshRates(); pAsk=MarketInfo(OrderSymbol(), MODE_ASK); if(OrderType()==OP_SELL) { pp=pAsk; clClose=clCloseSell; } ll=OrderLots(); fc=OrderClose(OrderTicket(), ll, pp, Slippage, clClose); } } }
С помощью этой функции ClosePosSellSelect() закрываю все сделки, но понять не могу как дать понять советнику, когда эта функция начала работать а когда закончила, чтобы он в этот период не торговал?
void ClosePosSellSelect() { bool fc; color clClose; double ll,pAsk,pBid,pp; int it; if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) if(OrderType()==OP_SELL) { for(it=1; it<=5; it++) { while(!IsTradeAllowed()) Sleep(100); RefreshRates(); pAsk=MarketInfo(OrderSymbol(), MODE_ASK); if(OrderType()==OP_SELL) { pp=pAsk; clClose=clCloseSell; } ll=OrderLots(); fc=OrderClose(OrderTicket(), ll, pp, Slippage, clClose); } } }
С помощью этой функции ClosePosSellSelect() закрываю все сделки, но понять не могу как дать понять советнику, когда эта функция начала работать а когда закончила, чтобы он в этот период не торговал?
На этом уровне - никак. И на предыдущем - тоже.
Нужен флаг окончания работы программы закрытия всех ордеров на уровне программы запроса на это закрытие.
На этом уровне - никак. И на предыдущем - тоже.
Нужен флаг окончания работы программы закрытия всех ордеров на уровне программы запроса на это закрытие.
Чувствую всё правильно говоришь и теоретический, ну процентов на 80 я понимаю о чём ты говоришь, остальное нет. Я над этим уже месяц сижу, для опытного программиста наверно это как 2 пальца обосвальт, но у меня не срабатывает в голове. Может статей каких кинешь ссылок по этой теме, я толком ничего найти не могу, всё вокруг да около?
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Проблема следующая, написал советник, всё работает, но есть одна проблема, после того как закрывается ряд сделок на селл или бай то советник открывает от 2-3 сделок и тут же их закрывает, а потом всё идёт своим чередом по алгоритму и я уже голову сломал решил написать сюда может чем поможете.
Суть работы советника расскажу на примере сделок на селл.
Советник открывает 1 сделку на селл, выставляет тейк профит 20 пунктов, если цена дошла до тейка закрывает и открывает следующую сделку и так пока не смениться тренд.
Меняется тренд цена идёт против сделки на селл (вверх) и советник как только рыночная цена отходит на 50 или более пунктов от ранее открытой сделки открывает следующую сделку и выставляет новый ТР с учётом открытой сделки и так до бесконечности пока цена не развернётся вниз. Как только цена пошла вниз и цепляет первый ТР, советник закрывает все сделки на селл.
И цикл повторяется, но пред этим как повториться циклу он успевает открыть 2-3 сделки, которые тут-же закрывает, а потом работает как обычно по алгоритму.
Думаю, что как то связана функция которая закрывает все сделки как только цена дойдёт до ТР, но до конца не могу понять, что нужно сделать чтоб предотвратить это открывание и закрывание сделок.
Вот мой код: